{"version":3,"file":"static/js/application.async.landing~ce6d77e1.3e6be3a5.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/date-setting/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/date-setting/src/date-picker-basic.js","../../../node_modules/@bingads-webui-campaign-react/date-setting/src/date-setting.js","../../../node_modules/@bingads-webui-campaign-react/date-setting/src/validated-date-setting.js","../../../node_modules/@bingads-webui-campaign-react/default-bid/src/default-bid.js","../../../node_modules/@bingads-webui-campaign-react/default-bid/src/validated-default-bid.js","../../../node_modules/@bingads-webui-campaign-react/default-bid/src/custom-validated-default-bid.js","../../../node_modules/@bingads-webui-campaign-react/default-bid/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/styles/status-section-styles.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/components/status-section/status-section.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/styles/action-cards-styles.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/components/action-cards/action-card.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/components/action-cards/action-cards.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/styles/diagnostic-card-styles.js","../../../node_modules/@bingads-webui-campaign-react/diagnostic-card/src/diagnostic-card.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/step-constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/step-utils.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/step-header.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/video-ads/video-ads.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/bidding-schemes.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/adsError.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/use-skip-ad-creation.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/use-ads-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/helper/format-date.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/components/bid-recommendations-data.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/video-ads/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/video-ads/use-video-ads-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/display-ads/display-ads.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/display-ads/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/display-ads/use-display-ads-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/display-ads/index.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/components/native-ad-footer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/image-experience/style.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/components/native-ad.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/helper/scale-unit.ts","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/native-ad-step-shell.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/use-native-ad-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/components/native-ads-manager/ad-thumbnail.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/components/native-ads-manager/native-ads-container.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/multi-ads-step-shell.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/use-multi-native-ads-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/use-targeting-estimation-caller.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/estimation-meter.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/styles/reach-estimate-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/helper/format-big-decimal.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/reach-estimation-breakdown.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/reach-estimate.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/utils.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/targeting-estimation.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/predictive-targeting.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/section-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/styles/collapsible-panel.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/adgroup-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/predictive-targeting-control.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/placements-function-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/ad-schedule.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/target-or-bid-selector.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/audience-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/audience-bid-adjustment.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/validated-level-switch.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/validated-audience-interests-with-bid-adjustment.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/targeting-preferences.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/error-entities.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/components/bid-with-recommendation.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/components/audience-bid-value.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/components/xandr-bid-value.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/adgroup-step-shell.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/styles/contextual-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/model/campaign-criterion.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/use-default-adgroup/default-adgroup.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/use-default-adgroup/use-default-adgroup.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/use-adgroup-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/styles/disclaimer-setting-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/xandr-budget-bid-strategy.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/info-label.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-budget-bid-strategy.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/styles/bid-strategy-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/budget-bid-strategy-details.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/campaign-goal.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/styles/bid-adjustments-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-bid-adjustment.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/call-to-action-opt-out.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/disclaimer-extension.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-date-setting/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-date-setting/date-management-selector.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-date-setting/date-management-info.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-date-setting/audience-date-setting.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/audience-date-setting/utils.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/components/website-lists.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/campaign-step-shell.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/shared/model/adgroup-criterions-with-bid-adjustment.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/use-campaign-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/campaign/use-campaign-edit-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/summary/use-summary-schema-data.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/summary/summary-step-shell.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/summary/schema.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/summary/use-summary-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/common/use-selected-ad-format.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/multi-ad-format-step-shell.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/use-multi-ad-format-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/model.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/components/display-ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/components/native-ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/components/video-ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/utils.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/ad-thumbnail.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/multi-ad-format-ads-container.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/step-config.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/native-ads/components/native-ads-manager/use-native-ads-manager-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/multi-ad-format/ads-manager/use-multi-ad-format-ads-manager-repository.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/wizard.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/footers/footer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/footers/edit-footer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/footers/adgroup-creation-footer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/step-list.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/step-list-config.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/display-plus-campaign-wizard.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/display-plus-edit-wizard.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/wizard-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/display-plus-edit-campaign-wizard.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/display-plus-edit-adgroup-wizard.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/wizards/display-plus-create-adgroup-wizard.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/company-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/styles/company-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/content-targeting-groups.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/check-oo-inventory-blocklists.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/content-targeting-placements.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/industry-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/styles/industry-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/job-function-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/styles/job-function-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/styles/bid-adjustment-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/styles/placements-function-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/with-bid-adjustment.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/collapsible-panel.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/native-ads-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/image-experience.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/configs.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/validated-call-to-action.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/impressions-tracking.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/disclaimer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/validated-anchor-ad.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/advanced-settings.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/text-asset-collection-with-recommendation-prefill/headlines-with-recommendation-prefill.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/text-asset-collection-with-recommendation-prefill/long-headlines-with-recommendation-prefill.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/text-asset-collection-with-recommendation-prefill/descriptions-with-recommendation-prefill.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/text-asset-collection-with-recommendation-prefill/index.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/text-asset-collection-with-copilot/index.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/validated-hotspot.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/multi-ad-video-preview-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/multi-ad-video-preview.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/display-plus-native-ads.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/model/common.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/model/native-ad.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/model/native-ad-bulk.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/multi-ad-format/ad-format-option.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/audience-budget-bid-strategy.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/bid-strategy-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/components/section-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/company-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/company-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/job-function-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/job-function-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/industry-target.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/styles/industry-target-styles.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/predictive-targeting-control.js","../../../node_modules/@bingads-webui-campaign-react/display-plus-native-ads/src/predictive-targeting.js","../../../node_modules/@bingads-webui-campaign-react/dynamic-search-ad-preview-uapl/src/ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/dynamic-search-ad-preview-uapl/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/dynamic-search-ad-editor/src/ad-text.js","../../../node_modules/@bingads-webui-campaign-react/dynamic-search-ad-editor/src/use-ad-customizer.js","../../../node_modules/@bingads-webui-campaign-react/dynamic-search-ad-editor/src/style.js","../../../node_modules/@bingads-webui-campaign-react/dynamic-search-ad-editor/src/index.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/meta-data-editor/index.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/video-settings-editor/style.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/video-settings-editor/index.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/scene-picker/styles.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/scene-picker/view.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/preview/styles.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/preview/state.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/util.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/preview/view.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/state.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/view.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/video-editor-with-add-image-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/edit-video-ads-view/src/copilot-video-editor.js","../../../node_modules/@bingads-webui-campaign-react/editorial-appeal/src/params.js","../../../node_modules/@bingads-webui-campaign-react/editorial-appeal/src/editorial-appeal-aggregator.js","../../../node_modules/@bingads-webui-campaign-react/editorial-appeal/src/editorial-appeal-request-panel.js","../../../node_modules/@bingads-webui-campaign-react/event-delegator/src/index.js","../../../node_modules/@bingads-webui-campaign-react/extension-images-control/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/extension-images-control/src/get-unified-ad-preview-config.js","../../../node_modules/@bingads-webui-campaign-react/extension-images-control/src/extension-images-control.js","../../../node_modules/@bingads-webui-campaign-react/debug-assert/src/assert.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/side-navigatioin.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/color-picker/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/call-to-action/constants.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/call-to-action/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/text-formatting-button/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/text-formatting-dialogue/styles.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/text-formatting-dialogue/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/styles.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/configs/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/components/text-assets-placeholder/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/components/long-headline-asset-collection/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/components/short-headline-asset-collection/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/components/description-asset-collection/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/constants.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/components/text-asset-collection-with-copilot.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/asset-text-collection-with-recommendations/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/action-pane/background-asset/style.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/action-pane/background-asset/index.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/action-pane/upload-image.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/utils.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/action-pane/index.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/recommendations-banner/style.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/recommendations-banner/final-url.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/reducer.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/context.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/components/recommendations-banner/index.js","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/adjust-view.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/sizes-view.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/ad-previews/filter-bar.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/ad-previews/styles.ts","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/ad-previews/zoom-control.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/ad-previews/index.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/display-template-summary-bar-control.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/display-ads-editor.tsx","../../../node_modules/@bingads-webui-campaign-react/display-ads-editor/src/display-ads-editor-drawer.tsx","../../../node_modules/@bingads-webui-campaign-react/display-recommended-image/src/asset-images/index.ts","../../../node_modules/@bingads-webui-campaign-react/display-recommended-image/src/style.ts","../../../node_modules/@bingads-webui-campaign-react/display-recommended-image/src/ImagePreview.tsx","../../../node_modules/@bingads-webui-campaign-react/display-recommended-image/src/index.tsx","../../../node_modules/@bingads-webui-campaign-react/dropdown-tree-select/src/utils.ts","../../../node_modules/@bingads-webui-campaign-react/dropdown-tree-select/src/styles.ts","../../../node_modules/@bingads-webui-campaign-react/dropdown-tree-select/src/index.tsx"],"sourcesContent":["import _ from 'underscore';\r\n\r\nexport const getDateSettingDetails = (i18n, startDate, endDate) => {\r\n const start = startDate ? i18n.getString(_TL_('Starting from {{startDate}}'), { startDate: i18n.dateFormatter({ skeleton: 'yMd' })(startDate) }) : '';\r\n\r\n const end = endDate ? i18n.getString(_TL_('to {{endDate}}'), { endDate: i18n.dateFormatter({ skeleton: 'yMd' })(endDate) }) : '';\r\n\r\n return i18n.getString(_TL_('{{startFromDate}} {{endToDate}}'), { startFromDate: start, endToDate: end });\r\n};\r\n\r\nexport const getDayPickerStrings = i18n => ({\r\n months: _.range(1, 13).map(num => i18n.getMonth(num, { style: 'wide' })),\r\n shortMonths: _.range(1, 13).map(num => i18n.getMonth(num, { style: 'abbreviated' })),\r\n days: _.map(\r\n ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],\r\n day => i18n.getDayOfWeek(day, { style: 'wide' })\r\n ),\r\n shortDays: _.map(\r\n ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],\r\n day => i18n.getDayOfWeek(day, { style: 'narrow' })\r\n ),\r\n goToToday: i18n.getString(_TL_('Go to today')),\r\n prevMonthAriaLabel: i18n.getString(_TL_('Go to previous month')),\r\n nextMonthAriaLabel: i18n.getString(_TL_('Go to next month')),\r\n prevYearAriaLabel: i18n.getString(_TL_('Go to previous year')),\r\n nextYearAriaLabel: i18n.getString(_TL_('Go to next year')),\r\n closeButtonAriaLabel: i18n.getString(_TL_('Close date picker')),\r\n isRequiredErrorMessage: i18n.getString(_TL_('Start date is required.')),\r\n invalidInputErrorMessage: i18n.getString(_TL_('Invalid date format.')),\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport {\r\n DatePicker,\r\n} from '@fluentui/react';\r\nimport PropTypes from 'prop-types';\r\nimport { getDayPickerStrings } from './utils';\r\n\r\nexport const DatePickerBasic = (props) => {\r\n const {\r\n label, maxDate, minDate, dateValue, placeholder, ariaLabel, onDateChange, disabled, onFormatDate, className, i18n,\r\n } = props;\r\n const handleDateSelection = (d) => {\r\n onDateChange(d);\r\n };\r\n\r\n return (\r\n
\r\n handleDateSelection(d)}\r\n ariaLabel={ariaLabel}\r\n disabled={disabled}\r\n label={label}\r\n strings={getDayPickerStrings(i18n)}\r\n />\r\n
\r\n );\r\n};\r\n\r\nDatePickerBasic.propTypes = {\r\n maxDate: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n ]),\r\n minDate: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n ]),\r\n dateValue: PropTypes.shape({}),\r\n placeholder: PropTypes.string,\r\n ariaLabel: PropTypes.string,\r\n onDateChange: PropTypes.func.isRequired,\r\n disabled: PropTypes.bool,\r\n onFormatDate: PropTypes.func.isRequired,\r\n label: PropTypes.string,\r\n className: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nDatePickerBasic.defaultProps = {\r\n className: '',\r\n maxDate: '',\r\n minDate: '',\r\n dateValue: undefined,\r\n placeholder: 'Select a date...',\r\n ariaLabel: 'Select a date',\r\n disabled: false,\r\n label: '',\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { datePickerStyle, advancedSettingsSectionStyle, toggleButtonStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ChoiceGroup, Label } from '@fluentui/react';\r\nimport { toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\nimport { DatePickerBasic } from './date-picker-basic';\r\n\r\nconst getStyles = (__, core) =>\r\n ({\r\n '@global': {\r\n ...datePickerStyle(core),\r\n },\r\n dateSettingContainer: {\r\n ...creationCommonStyle(core),\r\n ...advancedSettingsSectionStyle(core),\r\n ...toggleButtonStyle(core),\r\n '& .date-settings-intro': {\r\n paddingLeft: 0,\r\n },\r\n '& .date-settings': {\r\n '& .ms-ChoiceField': {\r\n '& .ms-ChoiceField-input': {\r\n position: 'absolute',\r\n opacity: 0,\r\n top: 0,\r\n right: 0,\r\n width: '100%',\r\n height: '100%',\r\n margin: 0,\r\n },\r\n '& .ms-ChoiceField-field': {\r\n padding: 0,\r\n marginRight: 8,\r\n '& .ms-ChoiceFieldLabel': {\r\n verticalAlign: 'baseline',\r\n fontWeight: 400,\r\n },\r\n },\r\n },\r\n '& .date-content': {\r\n width: 140,\r\n },\r\n '& .end-by-container': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: 220,\r\n },\r\n },\r\n '& .alert-danger': {\r\n backgroundColor: 'unset',\r\n color: '#A80000',\r\n },\r\n },\r\n });\r\n\r\nexport const DateSetting = (props) => {\r\n const {\r\n label,\r\n data,\r\n i18n,\r\n adGroupStatus,\r\n onChange,\r\n activityLogger,\r\n } = props;\r\n const classes = useDefaultStyles(getStyles);\r\n const currentDate = useMemo(() => {\r\n const localDate = new Date(new Date().toLocaleString('en-US', { timeZone: toIANATimeZone(data.TimeZone) }));\r\n return new Date(localDate.getFullYear(), localDate.getMonth(), localDate.getDate(), 0, 0, 0, 0);\r\n }, [data.TimeZone]);\r\n const [savedStartDate, setSavedStartDate] = useState();\r\n const rawStartDate = useMemo(() => data.StartDate || currentDate, [currentDate, data.StartDate]);\r\n const rawEndDate = useMemo(() => {\r\n const localDate = new Date(new Date().toLocaleString('en-US', { timeZone: toIANATimeZone(data.TimeZone) }));\r\n const nextYearDateWithTimeZone = new Date(localDate.getFullYear() + 1, localDate.getMonth(), localDate.getDate(), 0, 0, 0, 0);\r\n return data.EndDate || nextYearDateWithTimeZone;\r\n }, [data.EndDate, data.TimeZone]);\r\n const hasFixedStartDate = useMemo(() => !((savedStartDate > currentDate) || adGroupStatus === 'Draft'), [adGroupStatus, currentDate, savedStartDate]);\r\n const [hasEndDate, setHasEndDate] = useState(() => (!!data.EndDate));\r\n const onFormatDate = useCallback(date => (!date ? '' : i18n.formatDate(date)), [i18n]);\r\n const onStartDateChange = useCallback((date) => {\r\n if (activityLogger) {\r\n activityLogger.signal('start date changed', 'ad schedule');\r\n }\r\n onChange({\r\n StartDate: date,\r\n EndDate: hasEndDate ? rawEndDate : null,\r\n hasFixedStartDate,\r\n });\r\n }, [activityLogger, hasEndDate, hasFixedStartDate, onChange, rawEndDate]);\r\n\r\n const onEndDateChange = useCallback((date) => {\r\n if (activityLogger) {\r\n activityLogger.signal('end date changed', 'ad schedule');\r\n }\r\n onChange({\r\n StartDate: rawStartDate,\r\n // eslint-disable-next-line no-nested-ternary\r\n EndDate: hasEndDate ? date : null,\r\n hasFixedStartDate,\r\n });\r\n }, [activityLogger, hasEndDate, hasFixedStartDate, onChange, rawStartDate]);\r\n\r\n const options = useMemo(() => [\r\n {\r\n key: 'false',\r\n text: i18n.getString(_TL_('No end date')),\r\n ariaLabel: i18n.getString(_TL_('No end date')),\r\n },\r\n {\r\n key: 'true',\r\n text: i18n.getString(_TL_('End by')),\r\n ariaLabel: i18n.getString(_TL_('End by')),\r\n onRenderField: (fieldProps, render) => (\r\n
\r\n
\r\n {render(fieldProps)}\r\n
\r\n
\r\n \r\n
\r\n
\r\n ),\r\n },\r\n ], [hasEndDate, onEndDateChange, onFormatDate, rawEndDate, i18n]);\r\n\r\n const onEndDateChoiceChange = useCallback((ev, option) => {\r\n const newChoiceValue = option.key;\r\n setHasEndDate(newChoiceValue === 'true');\r\n\r\n if (activityLogger) {\r\n activityLogger.signal(`has end date change: ${newChoiceValue}`, 'ad schedule');\r\n }\r\n onChange({\r\n StartDate: rawStartDate,\r\n EndDate: newChoiceValue === 'true' ? rawEndDate : null,\r\n hasFixedStartDate,\r\n });\r\n }, [activityLogger, hasFixedStartDate, onChange, rawEndDate, rawStartDate]);\r\n\r\n useEffect(() => {\r\n if (!!data.EndDate !== hasEndDate) {\r\n setHasEndDate(data.EndDate);\r\n }\r\n }, [data.EndDate, hasEndDate]);\r\n\r\n useEffect(() => {\r\n if (data.StartDate && !savedStartDate) {\r\n setSavedStartDate(data.StartDate);\r\n }\r\n }, [data.StartDate, savedStartDate]);\r\n\r\n return (\r\n \r\n
\r\n {label || i18n.getString(_TL_('How long do you want your ads to run?'))}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nDateSetting.propTypes = {\r\n label: PropTypes.string,\r\n data: PropTypes.shape({\r\n StartDate: PropTypes.string,\r\n EndDate: PropTypes.string,\r\n TimeZone: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n formatDate: PropTypes.func.isRequired,\r\n }).isRequired,\r\n adGroupStatus: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n activityLogger: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n};\r\n\r\nDateSetting.defaultProps = {\r\n label: '',\r\n activityLogger: null,\r\n adGroupStatus: undefined,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useState, useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\nimport { DateSetting } from './date-setting';\r\n\r\nconst DateSettingWithCustomValidation = ({\r\n validationProps, updateValidation, validateOnLoad, ...restProps\r\n}) => {\r\n const { data: dataSettings } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const currentDate = useMemo(() => {\r\n const localDate = new Date(new Date().toLocaleString('en-US', { timeZone: toIANATimeZone(dataSettings.TimeZone) }));\r\n return new Date(localDate.getFullYear(), localDate.getMonth(), localDate.getDate(), 0, 0, 0, 0);\r\n }, [dataSettings.TimeZone]);\r\n const [isInvalidState, setIsInvalidState] = useState(false);\r\n const [updatedDateSettings, setUpdatedDateSettings] = useState(dataSettings);\r\n const validateDate = useCallback(({\r\n StartDate,\r\n EndDate,\r\n hasFixedStartDate = false,\r\n }) => {\r\n const validationErrors = [];\r\n // check wether date is valid\r\n if (_.isNull(StartDate) && !hasFixedStartDate) {\r\n validationErrors.push(i18n.getString(_TL_('Invalid start date')));\r\n } else if (StartDate < currentDate && !hasFixedStartDate) {\r\n validationErrors.push(i18n.getString(_TL_(\"Your start date must be after today. Today's date is calculated using your campaign time zone setting, not your actual local time.\")));\r\n } else if (!_.isNull(EndDate) && StartDate > EndDate) {\r\n validationErrors.push(i18n.getString(_TL_('End date must be later than start date')));\r\n }\r\n return validationErrors;\r\n }, [currentDate, i18n]);\r\n\r\n const onChange = useCallback((newData, shouldDirty = true) => {\r\n const validationError = validateDate(newData);\r\n updateValidation(validationError, newData, shouldDirty);\r\n\r\n setIsInvalidState(validationError.length > 0);\r\n\r\n if (activity) {\r\n activity.signal(`onDateSettingChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [validateDate, updateValidation, activity]);\r\n\r\n useEffect(() => {\r\n setUpdatedDateSettings(_.clone(dataSettings));\r\n }, [dataSettings, isInvalidState]);\r\n\r\n useEffect(() => {\r\n // trigger validation on initial load\r\n if (validateOnLoad) {\r\n onChange(dataSettings, false);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nDateSettingWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n validateOnLoad: PropTypes.bool,\r\n updateValidation: PropTypes.func.isRequired,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n};\r\n\r\nDateSettingWithCustomValidation.defaultProps = {\r\n activity: null,\r\n validateOnLoad: false,\r\n};\r\n\r\nconst ValidatedDateSettingInternal = withError(withCustomValidation(DateSettingWithCustomValidation));\r\n\r\nexport const ValidatedDateSetting = props => (\r\n
\r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { TextField } from '@bingads-webui-react/fabric-with-signal';\r\n\r\nconst getStyles = () => ({\r\n container: {\r\n display: 'flex',\r\n },\r\n bid: {\r\n width: '150px',\r\n marginRight: '12px',\r\n },\r\n currency: {\r\n marginTop: '5px',\r\n },\r\n messageBar: {\r\n marginTop: '5px',\r\n },\r\n});\r\n\r\nexport const DefaultBid = ({\r\n // eslint-disable-next-line\r\n i18n, currencyCode, id, getRangeWaring, disabled, value,...rest\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {currencyCode}\r\n
);\r\n};\r\n\r\nDefaultBid.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n id: PropTypes.string,\r\n classes: PropTypes.shape({\r\n container: PropTypes.string.isRequired,\r\n bid: PropTypes.string.isRequired,\r\n currency: PropTypes.string.isRequired,\r\n }).isRequired,\r\n validationProps: PropTypes.shape({}).isRequired,\r\n getRangeWaring: PropTypes.func,\r\n disabled: PropTypes.bool,\r\n};\r\n\r\nDefaultBid.defaultProps = {\r\n id: '',\r\n getRangeWaring: () => null,\r\n disabled: false,\r\n};\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { withControlErrorHandling, withControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { Label } from '@fluentui/react';\r\nimport { DefaultBid } from './default-bid';\r\n\r\nconst PriceModelToRange = {\r\n EnhancedCpc: 'KeywordBidRange',\r\n ManualCpc: 'KeywordBidRange',\r\n ManualCpv: 'KeywordCPVBidRange',\r\n ManualCpm: 'KeywordCPMBidRange',\r\n};\r\n\r\nconst DefaultBidWithValidation = withControlErrorHandling(withControlErrors(DefaultBid));\r\n\r\nconst DefaultBidWithWaring = (props) => {\r\n const {\r\n onValidate, value, field, Type, label, ...rest\r\n } = props;\r\n\r\n const serverContext = useContext(ServerContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((result) => {\r\n onValidate(result);\r\n\r\n if (activity) {\r\n activity.signal(`onDefaultBidChanged - ${field}: ${result && result.data && result.data[field]}`);\r\n }\r\n }, [activity, field, onValidate]);\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 { bidCeil, bidFloor } = getBidRange(Type);\r\n\r\n return (\r\n <>\r\n {label &&\r\n \r\n }\r\n \r\n \r\n );\r\n};\r\n\r\n\r\nDefaultBidWithWaring.propTypes = {\r\n Type: PropTypes.string,\r\n field: PropTypes.string.isRequired,\r\n onValidate: PropTypes.func,\r\n value: PropTypes.number,\r\n label: PropTypes.string,\r\n};\r\n\r\nDefaultBidWithWaring.defaultProps = {\r\n Type: 'EnhancedCpc',\r\n onValidate: _.noop,\r\n value: null,\r\n label: null,\r\n};\r\n\r\nexport const ValidatedDefaultBid = withCustomValidation(DefaultBidWithWaring);\r\n\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withControlErrorHandling, withControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { withCustomValidation, } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { DefaultBid } from './default-bid';\r\n\r\nconst DefaultBidWithValidation = withControlErrorHandling(withControlErrors(DefaultBid));\r\n\r\nconst DefaultBidWithWaring = (props) => {\r\n const {\r\n updateValidation, validationProps, onBidChange,\r\n ...rest\r\n } = props;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onCountValidate = useCallback((result) => {\r\n const { messages = [], data } = result;\r\n const fieldValue = data[validationProps.field];\r\n if (fieldValue !== validationProps.data[validationProps.field]) {\r\n updateValidation(messages, data);\r\n }\r\n\r\n if (onBidChange) {\r\n onBidChange(fieldValue, result);\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`onDefaultBidChanged - ${validationProps.field}: ${data[validationProps.field]}`);\r\n }\r\n }, [activity, updateValidation, validationProps.data, validationProps.field]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nDefaultBidWithWaring.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n field: PropTypes.string.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n onBidChange: PropTypes.func,\r\n};\r\nDefaultBidWithWaring.defaultProps = {\r\n onBidChange: null,\r\n};\r\n\r\nexport const CustomValidatedDefaultBid = withCustomValidation(DefaultBidWithWaring);\r\n","import _ from 'underscore';\r\nimport { bidStratetyTypeValue } from '@bingads-webui-campaign-react/constants';\r\n\r\nexport const isAutoBidding = (bidStrategyType) => {\r\n const autoBidding = [bidStratetyTypeValue.maximizeConversions, bidStratetyTypeValue.maximizeClicks, bidStratetyTypeValue.maxConversionValue, bidStratetyTypeValue.targetRoas, bidStratetyTypeValue.targetCpa, bidStratetyTypeValue.targetImpressionShare, bidStratetyTypeValue.costPerSale];\r\n const result = _.contains(autoBidding, bidStrategyType);\r\n\r\n return result;\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n statusList: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n ...shorthands.gap('60px', '8px'),\r\n marginTop: '12px',\r\n flexWrap: 'wrap',\r\n alignContent: 'flex-start',\r\n },\r\n progressBar: {\r\n marginTop: '16px',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n ProgressBar,\r\n} from '@fluentui/react-components';\r\n\r\nimport { StatusPopoverItem, Status } from '@bingads-webui-campaign-react/status-popover';\r\nimport { useStyles } from '../../styles/status-section-styles';\r\n\r\nexport function StatusSection({\r\n details,\r\n i18n,\r\n}) {\r\n const classes = useStyles();\r\n\r\n const denominator = details.length;\r\n const numerator = details.filter(item => item.status === Status.Active).length;\r\n const value = Math.max(0.05, numerator / denominator);\r\n\r\n const items = details.map(item => );\r\n\r\n return (\r\n
\r\n \r\n
\r\n {items}\r\n
\r\n
\r\n );\r\n}\r\n\r\nStatusSection.propTypes = {\r\n details: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string.isRequired,\r\n status: PropTypes.oneOf(Object.values(Status)).isRequired,\r\n statusLabelMsg: PropTypes.string.isRequired,\r\n })).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n actionCardsList: {\r\n marginTop: '16px',\r\n },\r\n card: {\r\n height: '165px',\r\n width: '360px',\r\n minWidth: '360px',\r\n ...shorthands.border('1px', 'solid', '#d1d1d1'),\r\n ...shorthands.padding('12px'),\r\n ...shorthands.borderRadius('4px'),\r\n // we are using carousel component to wrap cards, so we cannot use flex to set gap\r\n marginRight: '12px',\r\n },\r\n iconArea: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n ...shorthands.gap('4px'),\r\n },\r\n divider: {\r\n marginTop: '16px',\r\n },\r\n cardsMessage: {\r\n marginTop: '16px',\r\n },\r\n cardTitle: {\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n fontWeight: 'bold',\r\n marginTop: '10px',\r\n textWrap: 'nowrap',\r\n },\r\n cardMessage: {\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n '-webkit-line-clamp': '2',\r\n '-webkit-box-orient': 'vertical',\r\n height: '40px',\r\n },\r\n cardButton: {\r\n },\r\n nameText: {\r\n color: '#605E5C',\r\n },\r\n footer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginTop: '16px',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Body1, Body2, Button, Tooltip, Link } from '@fluentui/react-components';\r\nimport { Status, StatusIcon } from '@bingads-webui-campaign-react/status-popover';\r\n\r\nimport { useStyles } from '../../styles/action-cards-styles';\r\n\r\nexport function ActionCard({\r\n name,\r\n status,\r\n cardTitle,\r\n cardMsg,\r\n onCardButtonClicked,\r\n cardButtonText,\r\n learnMoreLink,\r\n i18n,\r\n}) {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n
\r\n \r\n {name}\r\n
\r\n \r\n {cardTitle}\r\n \r\n \r\n {cardMsg}\r\n \r\n \r\n { onCardButtonClicked && cardButtonText &&\r\n \r\n {cardButtonText}\r\n \r\n }\r\n {learnMoreLink &&\r\n {i18n.getString(_TL_('Learn more'))}\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nActionCard.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n status: PropTypes.oneOf(Object.values(Status)).isRequired,\r\n cardTitle: PropTypes.string.isRequired,\r\n cardMsg: PropTypes.string.isRequired,\r\n onCardButtonClicked: PropTypes.func,\r\n cardButtonText: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n learnMoreLink: PropTypes.string,\r\n};\r\n\r\nActionCard.defaultProps = {\r\n learnMoreLink: undefined,\r\n onCardButtonClicked: undefined,\r\n cardButtonText: undefined,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Divider, Caption1 } from '@fluentui/react-components';\r\nimport { Carousel, SimpleCarousel } from '@bingads-webui-campaign-react/carousel';\r\n\r\nimport { Status } from '@bingads-webui-campaign-react/status-popover';\r\nimport { ActionCard } from './action-card';\r\nimport { useStyles } from '../../styles/action-cards-styles';\r\n\r\nexport function ActionCards({\r\n details,\r\n i18n,\r\n isSmallScreen,\r\n}) {\r\n const classes = useStyles();\r\n\r\n const contents = details.map(item => );\r\n\r\n return (\r\n
\r\n \r\n \r\n {i18n.getString(_TL_('Improve your campaign setup ({{count}})'), { count: details.length })}\r\n \r\n
\r\n {/* contentWidth is cardWidth + margin */}\r\n {isSmallScreen ? : }\r\n
\r\n
\r\n );\r\n}\r\n\r\nActionCards.propTypes = {\r\n details: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string.isRequired,\r\n status: PropTypes.oneOf(Object.values(Status)).isRequired,\r\n cardTitle: PropTypes.string,\r\n cardMsg: PropTypes.string,\r\n onCardButtonClicked: PropTypes.func,\r\n cardButtonText: PropTypes.string,\r\n })).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isSmallScreen: PropTypes.bool,\r\n};\r\n\r\nActionCards.defaultProps = {\r\n isSmallScreen: false,\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n campaignTitle: {\r\n color: '#242424',\r\n },\r\n campaignMsg: {\r\n color: '#323130',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n Title2,\r\n Caption1,\r\n} from '@fluentui/react-components';\r\nimport { Status } from '@bingads-webui-campaign-react/status-popover';\r\n\r\nimport { ActionCards, StatusSection } from './components/index';\r\nimport { useStyles } from './styles/diagnostic-card-styles';\r\n\r\nexport function DiagnosticCard({\r\n campaignStatusTitle,\r\n campaignStatusMsg,\r\n details,\r\n i18n,\r\n responsiveSize,\r\n}) {\r\n const detailsToFix = details.filter(item => item.status !== Status.Active && item.cardTitle && (item.onCardButtonClicked || item.learnMoreLink));\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n {campaignStatusTitle}\r\n {campaignStatusMsg}\r\n \r\n {detailsToFix.length > 0 && }\r\n
\r\n );\r\n}\r\n\r\nDiagnosticCard.propTypes = {\r\n campaignStatusTitle: PropTypes.string.isRequired,\r\n campaignStatusMsg: PropTypes.string.isRequired,\r\n details: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string.isRequired,\r\n status: PropTypes.oneOf(Object.values(Status)).isRequired,\r\n statusLabelMsg: PropTypes.string.isRequired,\r\n cardTitle: PropTypes.string,\r\n cardMsg: PropTypes.string,\r\n onCardButtonClicked: PropTypes.func,\r\n cardButtonText: PropTypes.string,\r\n })).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n responsiveSize: PropTypes.string.isRequired,\r\n};\r\n","import { AdTypes } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\n\r\nexport const STEP_PATHS = {\r\n DISPLAY_AD: 'DISPLAY_AD',\r\n VIDEO_AD: 'VIDEO_AD',\r\n NATIVE_AD: 'NATIVE_AD',\r\n MULTI_NATIVE_AD: 'MULTI_NATIVE_AD',\r\n MULTI_AD_MANAGER: 'MULTI_AD_MANAGER',\r\n AD_GROUP: 'AD_GROUP',\r\n AD_GROUP_CREATION: 'AD_GROUP_CREATION',\r\n CAMPAIGN_CREATION: 'CAMPAIGN_CREATION',\r\n CAMPAIGN_EDIT: 'CAMPAIGN_EDIT',\r\n SUMMARY: 'SUMMARY',\r\n};\r\n\r\nexport const FLOWS = {\r\n DISPLAY_CAMPAIGNS: 'DISPLAY_CAMPAIGNS',\r\n VIDEO_CAMPAIGNS: 'VIDEO_CAMPAIGNS',\r\n AUDIENCE_CAMPAIGNS: 'AUDIENCE_CAMPAIGNS',\r\n CTV_CAMPAIGNS: 'CTV_CAMPAIGNS',\r\n DEAL_CAMPAIGNS: 'DEAL_CAMPAIGNS',\r\n MULTI_AUDIENCE_CAMPAIGNS: 'MULTI_AUDIENCE_CAMPAIGNS',\r\n AUDIENCE_CAMPAIGN_EDIT: 'AUDIENCE_CAMPAIGN_EDIT',\r\n AUDIENCE_AD_GROUP_EDIT: 'AUDIENCE_AD_GROUP_EDIT',\r\n AUDIENCE_AD_GROUP_CREATION: 'AUDIENCE_AD_GROUP_CREATION',\r\n\r\n AUDIENCE_CAMPAIGN_CTV_EDIT: 'AUDIENCE_CAMPAIGN_CTV_EDIT',\r\n AUDIENCE_AD_GROUP_CTV_EDIT: 'AUDIENCE_AD_GROUP_CTV_EDIT',\r\n AUDIENCE_AD_GROUP_CTV_CREATION: 'AUDIENCE_AD_GROUP_CTV_CREATION',\r\n\r\n AUDIENCE_CAMPAIGN_DEAL_EDIT: 'AUDIENCE_CAMPAIGN_DEAL_EDIT',\r\n AUDIENCE_AD_GROUP_DEAL_CREATION: 'AUDIENCE_AD_GROUP_DEAL_CREATION',\r\n AUDIENCE_AD_GROUP_DEAL_EDIT: 'AUDIENCE_AD_GROUP_DEAL_EDIT',\r\n\r\n AUDIENCE_AD_GROUP_MULTI_AD_CREATION: 'AUDIENCE_AD_GROUP_MULTI_AD_CREATION',\r\n};\r\n\r\nexport const AD_TYPES_TO_FLOWS = {\r\n [AdTypes.Display]: FLOWS.DISPLAY_CAMPAIGNS,\r\n [AdTypes.Video]: FLOWS.VIDEO_CAMPAIGNS,\r\n [AdTypes.Native]: FLOWS.AUDIENCE_CAMPAIGNS,\r\n [AdTypes.AudienceVideo]: FLOWS.CTV_CAMPAIGNS,\r\n [AdTypes.Netflix]: FLOWS.DEAL_CAMPAIGNS,\r\n};\r\n\r\nexport const WIZARD_TYPES = {\r\n AUDIENCE_CAMPAIGN_EDIT: 'AUDIENCE_CAMPAIGN_EDIT',\r\n AUDIENCE_AD_GROUP_EDIT: 'AUDIENCE_AD_GROUP_EDIT',\r\n AUDIENCE_AD_GROUP_CREATION: 'AUDIENCE_AD_GROUP_CREATION',\r\n\r\n AUDIENCE_CAMPAIGN_CTV_EDIT: 'AUDIENCE_CAMPAIGN_CTV_EDIT',\r\n AUDIENCE_AD_GROUP_CTV_EDIT: 'AUDIENCE_AD_GROUP_CTV_EDIT',\r\n AUDIENCE_AD_GROUP_CTV_CREATION: 'AUDIENCE_AD_GROUP_CTV_CREATION',\r\n\r\n AUDIENCE_CAMPAIGN_DEAL_EDIT: 'AUDIENCE_CAMPAIGN_DEAL_EDIT',\r\n AUDIENCE_AD_GROUP_DEAL_EDIT: 'AUDIENCE_AD_GROUP_DEAL_EDIT',\r\n AUDIENCE_AD_GROUP_DEAL_CREATION: 'AUDIENCE_AD_GROUP_DEAL_CREATION',\r\n};\r\n\r\nexport const WIZARD_TYPE_TO_FLOW = {\r\n [WIZARD_TYPES.AUDIENCE_CAMPAIGN_EDIT]: FLOWS.AUDIENCE_CAMPAIGN_EDIT,\r\n [WIZARD_TYPES.AUDIENCE_AD_GROUP_EDIT]: FLOWS.AUDIENCE_AD_GROUP_EDIT,\r\n [WIZARD_TYPES.AUDIENCE_AD_GROUP_CREATION]: FLOWS.AUDIENCE_AD_GROUP_CREATION,\r\n\r\n [WIZARD_TYPES.AUDIENCE_CAMPAIGN_CTV_EDIT]: FLOWS.AUDIENCE_CAMPAIGN_CTV_EDIT,\r\n [WIZARD_TYPES.AUDIENCE_AD_GROUP_CTV_EDIT]: FLOWS.AUDIENCE_AD_GROUP_CTV_EDIT,\r\n [WIZARD_TYPES.AUDIENCE_AD_GROUP_CTV_CREATION]: FLOWS.AUDIENCE_AD_GROUP_CTV_CREATION,\r\n\r\n [WIZARD_TYPES.AUDIENCE_CAMPAIGN_DEAL_EDIT]: FLOWS.AUDIENCE_CAMPAIGN_DEAL_EDIT,\r\n [WIZARD_TYPES.AUDIENCE_AD_GROUP_DEAL_EDIT]: FLOWS.AUDIENCE_AD_GROUP_DEAL_EDIT,\r\n [WIZARD_TYPES.AUDIENCE_AD_GROUP_DEAL_CREATION]: FLOWS.AUDIENCE_AD_GROUP_DEAL_CREATION,\r\n};\r\n\r\nexport const FLOWS_TO_FIRST_STEP = {\r\n [FLOWS.DISPLAY_CAMPAIGNS]: STEP_PATHS.DISPLAY_AD,\r\n [FLOWS.VIDEO_CAMPAIGNS]: STEP_PATHS.VIDEO_AD,\r\n [FLOWS.CTV_CAMPAIGNS]: STEP_PATHS.VIDEO_AD,\r\n [FLOWS.DEAL_CAMPAIGNS]: STEP_PATHS.VIDEO_AD,\r\n [FLOWS.AUDIENCE_CAMPAIGNS]: STEP_PATHS.NATIVE_AD,\r\n [FLOWS.MULTI_AUDIENCE_CAMPAIGNS]: STEP_PATHS.MULTI_AD_MANAGER,\r\n [FLOWS.AUDIENCE_CAMPAIGN_EDIT]: STEP_PATHS.CAMPAIGN_EDIT,\r\n};\r\n\r\nexport const isAudienceCampaign = flow => flow === FLOWS.AUDIENCE_CAMPAIGNS || flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS;\r\n\r\nexport const isAudienceCampaignEdit = flow => flow === FLOWS.AUDIENCE_CAMPAIGN_EDIT;\r\nexport const isCTVCampaignEdit = flow => flow === FLOWS.AUDIENCE_CAMPAIGN_CTV_EDIT;\r\nexport const isDealCampaignEdit = flow => flow === FLOWS.AUDIENCE_CAMPAIGN_DEAL_EDIT;\r\n\r\nexport const isAudienceAdGroupEdit = flow => flow === FLOWS.AUDIENCE_AD_GROUP_EDIT;\r\nexport const isDealAdGroupEdit = flow => flow === FLOWS.AUDIENCE_AD_GROUP_DEAL_EDIT;\r\nexport const isCTVAdGroupEdit = flow => flow === FLOWS.AUDIENCE_AD_GROUP_CTV_EDIT;\r\n\r\nexport const isAudienceAdGroupCreation = flow => flow === FLOWS.AUDIENCE_AD_GROUP_CREATION;\r\nexport const isCTVAdGroupCreation = flow => flow === FLOWS.AUDIENCE_AD_GROUP_CTV_CREATION;\r\nexport const isDealAdGroupCreation = flow => flow === FLOWS.AUDIENCE_AD_GROUP_DEAL_CREATION;\r\n\r\nexport const isAudienceAdGroupMultiAdCreation = flow => flow === FLOWS.AUDIENCE_AD_GROUP_MULTI_AD_CREATION;\r\n\r\nexport const isAudience = flow => isAudienceCampaign(flow) ||\r\n isAudienceCampaignEdit(flow) ||\r\n isAudienceAdGroupCreation(flow) ||\r\n isAudienceAdGroupMultiAdCreation(flow) ||\r\n isAudienceAdGroupEdit(flow);\r\n\r\n// Note: Update these functions when adding ad group creation and editing to display and video.\r\nexport const isAdGroupCreation = flow => isAudienceAdGroupCreation(flow);\r\nexport const isEdit = flow => isAudienceCampaignEdit(flow) || isAudienceAdGroupEdit(flow) || isCTVCampaignEdit(flow) || isCTVAdGroupEdit(flow) || isDealCampaignEdit(flow) || isDealAdGroupEdit(flow);\r\n\r\nexport const isMultiAdsAudienceCampaign = flow => flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS || flow === FLOWS.AUDIENCE_AD_GROUP_CREATION;\r\n\r\nexport const isDisplayAdsCampaign = flow => flow === FLOWS.DISPLAY_CAMPAIGNS;\r\n\r\nexport const isVideoAdsCampaign = flow => flow === FLOWS.VIDEO_CAMPAIGNS;\r\n\r\nexport const isCTVCampaign = flow => flow === FLOWS.CTV_CAMPAIGNS || isCTVCampaignEdit(flow) || isCTVAdGroupEdit(flow) || isCTVAdGroupCreation(flow);\r\nexport const isDealCampaign = flow => flow === FLOWS.DEAL_CAMPAIGNS || isDealCampaignEdit(flow) || isDealAdGroupEdit(flow) || isDealAdGroupCreation(flow);\r\nexport const isCTVOrDeal = flow => isCTVCampaign(flow) || isDealCampaign(flow);\r\n\r\nexport const shouldEnableBidAdjustment = (flow, serverContext) => {\r\n const {\r\n DynamicPermissions: {\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n },\r\n } = serverContext;\r\n\r\n const isMSANDisplay = EnableMSANDisplayCampaigns && flow === FLOWS.DISPLAY_CAMPAIGNS;\r\n const isMSANVideo = EnableMSANVideoCampaigns && flow === FLOWS.VIDEO_CAMPAIGNS;\r\n\r\n if (isAudienceCampaign(flow) || isMSANDisplay || isMSANVideo) {\r\n if (serverContext.Permissions.IsAmplifyEnabled) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n};\r\n","import _ from 'underscore';\r\nimport { STEP_PATHS, FLOWS, isAudienceCampaign, isAudienceCampaignEdit, isAudienceAdGroupEdit, isAudienceAdGroupCreation, shouldEnableBidAdjustment, isCTVCampaign, isDealCampaign } from './step-constants';\r\n\r\nconst addSummaryStep = ({ steps, permissions }) => {\r\n if (permissions.dynamic.DisplayPlusSummaryPage) {\r\n steps.push(STEP_PATHS.SUMMARY);\r\n return steps;\r\n }\r\n\r\n return steps;\r\n};\r\n\r\nexport const getFlow = ({ flow, permissions }) => {\r\n if (flow === FLOWS.VIDEO_CAMPAIGNS || flow === FLOWS.CTV_CAMPAIGNS || flow === FLOWS.DEAL_CAMPAIGNS) {\r\n const steps = [\r\n STEP_PATHS.VIDEO_AD,\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.CAMPAIGN_CREATION,\r\n ];\r\n\r\n return addSummaryStep({ steps, permissions });\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_CAMPAIGNS) {\r\n const steps = [\r\n STEP_PATHS.NATIVE_AD,\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.CAMPAIGN_CREATION,\r\n ];\r\n\r\n return addSummaryStep({ steps, permissions });\r\n }\r\n\r\n if (flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS) {\r\n const steps = [\r\n STEP_PATHS.MULTI_AD_MANAGER,\r\n STEP_PATHS.MULTI_NATIVE_AD,\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.CAMPAIGN_CREATION,\r\n ];\r\n\r\n return addSummaryStep({ steps, permissions });\r\n }\r\n\r\n if (flow === FLOWS.DISPLAY_CAMPAIGNS) {\r\n const steps = [\r\n STEP_PATHS.DISPLAY_AD,\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.CAMPAIGN_CREATION,\r\n ];\r\n\r\n return addSummaryStep({ steps, permissions });\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_CAMPAIGN_EDIT || flow === FLOWS.AUDIENCE_CAMPAIGN_CTV_EDIT || flow === FLOWS.AUDIENCE_CAMPAIGN_DEAL_EDIT) {\r\n return [\r\n STEP_PATHS.CAMPAIGN_EDIT,\r\n ];\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_EDIT || flow === FLOWS.AUDIENCE_AD_GROUP_CTV_EDIT || flow === FLOWS.AUDIENCE_AD_GROUP_DEAL_EDIT) {\r\n return [\r\n STEP_PATHS.AD_GROUP,\r\n ];\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_CREATION) {\r\n return [\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.NATIVE_AD,\r\n ];\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_CTV_CREATION || flow === FLOWS.AUDIENCE_AD_GROUP_DEAL_CREATION) {\r\n return [\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.VIDEO_AD,\r\n ];\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_MULTI_AD_CREATION) {\r\n return [\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.MULTI_NATIVE_AD,\r\n STEP_PATHS.MULTI_AD_MANAGER,\r\n ];\r\n }\r\n\r\n // return video by default\r\n return [\r\n STEP_PATHS.VIDEO_AD,\r\n STEP_PATHS.AD_GROUP,\r\n STEP_PATHS.CAMPAIGN_CREATION,\r\n ];\r\n};\r\n\r\nexport const getAdGroupPanels = (flow, serverContext = {}) => {\r\n const {\r\n DynamicPermissions: {\r\n XandrDeviceTarget,\r\n DisplayPlusAmplify,\r\n Enable1PPlacementTargeting,\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n DeviceTargetingForDisplay,\r\n EnableKeywordCustomSegments,\r\n MultiAdFormat,\r\n InMarketAudienceRedesign,\r\n ContentTargeting,\r\n PremiumStreaming,\r\n GenreTargets,\r\n },\r\n Permissions,\r\n } = serverContext;\r\n\r\n if (isCTVCampaign(flow) || isDealCampaign(flow)) {\r\n const options = {\r\n basicOptions: [\r\n 'ad-group-name',\r\n 'bid-value',\r\n 'location-target',\r\n 'ad-schedule',\r\n ],\r\n advancedOptions: [],\r\n };\r\n\r\n if (GenreTargets) {\r\n options.basicOptions.push('genre-targets');\r\n }\r\n\r\n if (isCTVCampaign(flow)) {\r\n options.basicOptions.push('netflix-tc', 'gender-target', 'age-target');\r\n options.advancedOptions.push('audience-target');\r\n\r\n if (InMarketAudienceRedesign) {\r\n options.advancedOptions.push('interests-target');\r\n }\r\n\r\n if (PremiumStreaming) {\r\n options.advancedOptions.push('device-target');\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n if (isAudienceCampaign(flow) || isAudienceAdGroupCreation(flow)) {\r\n const is1PPlacementEnabled = Enable1PPlacementTargeting && !Permissions.IsAmplifyEnabled;\r\n const options = {\r\n basicOptions: [\r\n 'ad-group-name',\r\n isAudienceAdGroupCreation(flow) && 'bid-value',\r\n isAudienceAdGroupCreation(flow) && 'start-end-date',\r\n 'location-target',\r\n 'gender-target',\r\n 'age-target',\r\n 'predictive-targeting',\r\n ],\r\n advancedOptions: Permissions.IsDomesticSimplifiedChineseEnabled ?\r\n [\r\n 'audience-target',\r\n 'predictive-targeting-control',\r\n ] :\r\n _.compact([\r\n 'audience-target',\r\n MultiAdFormat && 'device-target',\r\n 'company-target',\r\n 'industry-target',\r\n 'job-target',\r\n is1PPlacementEnabled && !ContentTargeting && 'placements-1P-target',\r\n 'placements-target',\r\n isAudienceAdGroupCreation(flow) && 'ad-schedule',\r\n 'predictive-targeting-control',\r\n ]),\r\n };\r\n\r\n if (Permissions.IsAmplifyEnabled && DisplayPlusAmplify) {\r\n options.basicOptions.push('placement-target');\r\n options.basicOptions.push('contextual-target');\r\n }\r\n\r\n if (EnableKeywordCustomSegments) {\r\n options.advancedOptions.push('custom-segments');\r\n }\r\n\r\n if (InMarketAudienceRedesign) {\r\n options.advancedOptions.push('interests-target');\r\n }\r\n\r\n if (ContentTargeting) {\r\n options.advancedOptions.push('content-targeting-placements');\r\n }\r\n\r\n return options;\r\n } else if (isAudienceAdGroupEdit(flow)) {\r\n const is1PPlacementEnabled = Enable1PPlacementTargeting && !Permissions.IsAmplifyEnabled && !Permissions.IsDomesticSimplifiedChineseEnabled;\r\n const options = {\r\n basicOptions: [\r\n 'ad-group-name',\r\n 'start-end-date',\r\n 'bid-value',\r\n 'location-target',\r\n 'gender-target',\r\n 'age-target',\r\n 'predictive-targeting',\r\n ],\r\n advancedOptions: [\r\n 'audience-target',\r\n 'device-target',\r\n 'company-target',\r\n 'industry-target',\r\n 'job-target',\r\n 'advanced-url-options',\r\n 'ad-rotation',\r\n 'ad-schedule',\r\n 'web-exclusions',\r\n 'predictive-targeting-control',\r\n ],\r\n };\r\n\r\n if (EnableKeywordCustomSegments) {\r\n options.advancedOptions.push('custom-segments');\r\n }\r\n if (Permissions.IsAmplifyEnabled && DisplayPlusAmplify) {\r\n options.basicOptions.push('placement-target');\r\n options.basicOptions.push('contextual-target');\r\n }\r\n\r\n if (InMarketAudienceRedesign) {\r\n options.advancedOptions.push('interests-target');\r\n }\r\n\r\n if (ContentTargeting) {\r\n options.advancedOptions.push('content-targeting-placements');\r\n } else if (is1PPlacementEnabled) {\r\n options.advancedOptions.push('placements-1P-target');\r\n }\r\n\r\n return options;\r\n } else if (flow === FLOWS.DISPLAY_CAMPAIGNS) {\r\n const options = {\r\n basicOptions: [\r\n 'ad-group-name',\r\n 'location-target',\r\n 'gender-target',\r\n 'age-target',\r\n ],\r\n advancedOptions: [\r\n 'audience-target',\r\n DeviceTargetingForDisplay && 'device-target',\r\n 'ad-schedule',\r\n ],\r\n };\r\n\r\n if (EnableMSANDisplayCampaigns) {\r\n options.basicOptions.push('predictive-targeting');\r\n options.advancedOptions.push('company-target');\r\n options.advancedOptions.push('industry-target');\r\n options.advancedOptions.push('job-target');\r\n options.advancedOptions.push('predictive-targeting-control');\r\n }\r\n\r\n if (EnableKeywordCustomSegments) {\r\n options.advancedOptions.push('custom-segments');\r\n }\r\n\r\n if (InMarketAudienceRedesign) {\r\n options.advancedOptions.push('interests-target');\r\n }\r\n\r\n if (ContentTargeting) {\r\n options.advancedOptions.push('content-targeting-placements');\r\n }\r\n\r\n return options;\r\n }\r\n\r\n const options = {\r\n basicOptions: [\r\n 'ad-group-name',\r\n 'location-target',\r\n 'gender-target',\r\n 'age-target',\r\n ],\r\n advancedOptions: [\r\n 'audience-target',\r\n XandrDeviceTarget && 'device-target',\r\n 'ad-schedule',\r\n ],\r\n };\r\n\r\n if (EnableMSANVideoCampaigns) {\r\n options.basicOptions.push('predictive-targeting');\r\n options.advancedOptions.push('company-target');\r\n options.advancedOptions.push('industry-target');\r\n options.advancedOptions.push('job-target');\r\n options.advancedOptions.push('predictive-targeting-control');\r\n }\r\n\r\n if (EnableKeywordCustomSegments) {\r\n options.advancedOptions.push('custom-segments');\r\n }\r\n\r\n if (InMarketAudienceRedesign) {\r\n options.advancedOptions.push('interests-target');\r\n }\r\n\r\n if (ContentTargeting) {\r\n options.advancedOptions.push('content-targeting-placements');\r\n }\r\n\r\n return options;\r\n};\r\n\r\nexport const getCampaignPanels = (flow, serverContext) => {\r\n const {\r\n DynamicPermissions: {\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n AudienceMMACTAOptOut,\r\n EnableDoubleVerify,\r\n CampaignLifetimeBudget,\r\n },\r\n Permissions: {\r\n IsMSANDisclaimerEnabled,\r\n IsMSANISPOTEnabled,\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsAmplifyEnabled,\r\n },\r\n } = serverContext;\r\n\r\n const isMSANDisplay = EnableMSANDisplayCampaigns && flow === FLOWS.DISPLAY_CAMPAIGNS;\r\n const isMSANVideo = EnableMSANVideoCampaigns && flow === FLOWS.VIDEO_CAMPAIGNS;\r\n\r\n if (isCTVCampaign(flow) || isDealCampaign(flow)) {\r\n const options = {\r\n basicOptions: [\r\n 'campaign-name',\r\n 'bid-and-budget',\r\n ],\r\n advancedOptions: [],\r\n };\r\n\r\n if (IsMSANISPOTEnabled) {\r\n options.advancedOptions.push('third-party-measurement-settings');\r\n }\r\n\r\n return options;\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_CAMPAIGN_EDIT) {\r\n const options = {\r\n basicOptions: [\r\n 'campaign-name',\r\n 'bid-and-budget',\r\n CampaignLifetimeBudget && 'start-end-dates',\r\n 'conversions',\r\n 'location-target',\r\n ],\r\n advancedOptions: [\r\n 'ad-schedule',\r\n 'device-target',\r\n 'advanced-url-options',\r\n 'web-exclusions',\r\n ],\r\n };\r\n\r\n // We do not allow disclaimer for domestic simplified chinese since they do not support pop up disclaimer\r\n if (!IsDomesticSimplifiedChineseEnabled && IsMSANDisclaimerEnabled) {\r\n options.basicOptions.push('disclaimer');\r\n }\r\n\r\n if (AudienceMMACTAOptOut && !serverContext.Permissions.IsAmplifyEnabled) {\r\n options.basicOptions.push('call-to-action-opt-out');\r\n }\r\n\r\n if (IsMSANISPOTEnabled || EnableDoubleVerify) {\r\n options.advancedOptions.push('third-party-measurement-settings');\r\n }\r\n\r\n if (IsAmplifyEnabled) {\r\n options.basicOptions.push('campaign-goal');\r\n }\r\n\r\n return options;\r\n }\r\n\r\n if (isAudienceCampaign(flow)) {\r\n const options = {\r\n basicOptions: [\r\n 'campaign-name',\r\n 'budget-date-settings',\r\n 'bid-and-budget',\r\n 'bid-value',\r\n 'conversions',\r\n 'start-end-dates',\r\n ],\r\n advancedOptions: [\r\n 'ad-schedule',\r\n ],\r\n };\r\n\r\n if (shouldEnableBidAdjustment(flow, serverContext)) {\r\n options.advancedOptions.push('bid-adjustment');\r\n }\r\n\r\n if (!IsDomesticSimplifiedChineseEnabled && IsMSANDisclaimerEnabled) {\r\n options.basicOptions.push('disclaimer');\r\n }\r\n\r\n if (IsMSANISPOTEnabled || EnableDoubleVerify) {\r\n options.advancedOptions.push('third-party-measurement-settings');\r\n }\r\n\r\n return options;\r\n } else if (flow === FLOWS.VIDEO_CAMPAIGNS || flow === FLOWS.DISPLAY_CAMPAIGNS) {\r\n const options = {\r\n basicOptions: [\r\n 'campaign-name',\r\n 'bid-and-budget',\r\n 'bid-value',\r\n 'conversions',\r\n (isMSANDisplay || isMSANVideo) && 'start-end-dates',\r\n ],\r\n advancedOptions: _.compact([\r\n (shouldEnableBidAdjustment(flow, serverContext) &&\r\n (isMSANDisplay || isMSANVideo)) && 'bid-adjustment',\r\n ]),\r\n };\r\n\r\n if (IsMSANISPOTEnabled || EnableDoubleVerify) {\r\n options.advancedOptions.push('third-party-measurement-settings');\r\n }\r\n\r\n return options;\r\n }\r\n\r\n return {\r\n basicOptions: [\r\n 'campaign-name',\r\n 'bid-and-budget',\r\n 'bid-value',\r\n 'start-end-dates',\r\n ],\r\n advancedOptions: [],\r\n };\r\n};\r\n\r\nexport const getNativeAdPanels = (serverContext) => {\r\n const panels = {\r\n basicPanels: [\r\n 'images',\r\n 'business-name',\r\n 'text',\r\n ],\r\n advancedPanels: [\r\n 'mobile-final-url',\r\n 'advanced-url-options',\r\n 'impression-tracking-URLs',\r\n 'third-party-measurement',\r\n ],\r\n };\r\n\r\n if (serverContext.Permissions.IsAmplifyEnabled && serverContext.DynamicPermissions.DisplayPlusAmplify) {\r\n panels.basicPanels.push('logos');\r\n panels.basicPanels.push('hotspot-panel');\r\n panels.basicPanels.push('portrait-images');\r\n\r\n panels.advancedPanels.push('anchor-ad');\r\n panels.advancedPanels.push('call-to-action');\r\n } else if (serverContext.Permissions.IsMSANLogoAndCTAForMMAEnabled) {\r\n panels.basicPanels.push('logos', 'call-to-action');\r\n }\r\n\r\n return panels;\r\n};\r\n\r\nexport const getIsEditScenario = flow => isAudienceCampaignEdit(flow) || isAudienceAdGroupEdit(flow);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const 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","import PropTypes from 'prop-types';\r\nimport React, { useMemo, useState, useContext, useCallback, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { Stack, mergeStyles } from '@fluentui/react';\r\nimport { VideoAdsContainer, AdPreview } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\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 { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { StepHeader } from '../../shared/step-header';\r\nimport { isCTVCampaign } from '../../step-constants';\r\n\r\nconst headerStyles = mergeStyles({\r\n width: 450,\r\n});\r\n\r\nconst adPreviewStyles = mergeStyles({\r\n marginTop: 59,\r\n});\r\n\r\nexport const VideoAds = ({\r\n data: ads,\r\n onDataChange,\r\n error,\r\n hideFooter,\r\n loadClipchampPlayer,\r\n}) => {\r\n const {\r\n errors = [],\r\n } = error || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const permissions = useContext(PermissionsContext);\r\n\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n\r\n const [currentVideoIndex, setCurrentVideoIndex] = useState(0);\r\n\r\n const removeEmptyAds = newAdsData => newAdsData.filter(ad => !_.isEmpty(ad.data));\r\n\r\n const { state: { context: { saveFailed } } } = useFormService();\r\n\r\n const { state } = useWizardService();\r\n\r\n const {\r\n campaign = {}, editingAdId, flow, deal,\r\n } = 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 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(`onVideoAdsStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onVideoAdsStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n const getBasicSettingsSection = useCallback(() => (\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 ), [editingAdId, aid, cid, i18n, campaignId, legacyI18n, perfMarker, ads, currentVideoIndex, onAdsValidation, permissions, flow, hideFooter, deal]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {ads.data && getBasicSettingsSection()}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nVideoAds.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 hideFooter: PropTypes.bool,\r\n};\r\n\r\nVideoAds.defaultProps = {\r\n data: {},\r\n error: {},\r\n hideFooter: false,\r\n};\r\n","import { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { DeviceKeys } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nexport const BiddingSchemes = {\r\n EnhancedCpc: 'EnhancedCpc',\r\n MaxConversions: 'MaxConversions',\r\n ManualCpm: 'ManualCpm',\r\n ManualCpV: 'ManualCpv',\r\n};\r\n\r\nexport const BidTypes = {\r\n SearchBid: 'SearchBid',\r\n CpmBid: 'CpmBid',\r\n CpvBid: 'CpvBid',\r\n};\r\n\r\nexport const BiddingSchemeToBidType = {\r\n EnhancedCpc: BidTypes.SearchBid,\r\n ManualCpc: BidTypes.SearchBid,\r\n ManualCpm: BidTypes.CpmBid,\r\n};\r\n\r\nexport const BudgetTypes = {\r\n DailyStandard: 'DailyStandard',\r\n LifetimeBudgetStandard: 'LifetimeBudgetStandard',\r\n};\r\n\r\n\r\nexport const PriceModelToRange = {\r\n EnhancedCpc: 'KeywordBidRange',\r\n ManualCpc: 'KeywordBidRange',\r\n ManualCpv: 'KeywordCPVBidRange',\r\n ManualCpm: 'KeywordCPMBidRange',\r\n};\r\n\r\nexport const AgeRanges = {\r\n EighteenToTwentyFive: 'EighteenToTwentyFive',\r\n TwentyFiveToThirtyFive: 'TwentyFiveToThirtyFive',\r\n ThirtyFiveToFifty: 'ThirtyFiveToFifty',\r\n FiftyToSixtyFive: 'FiftyToSixtyFive',\r\n SixtyFiveAndAbove: 'SixtyFiveAndAbove',\r\n Unknown: 'Unknown',\r\n};\r\n\r\nexport const GenderTypes = {\r\n Female: 'Female',\r\n Male: 'Male',\r\n Unknown: 'Unknown',\r\n};\r\n\r\nexport const DeviceTypes = {\r\n Computers: DeviceKeys.Computers,\r\n Tablets: DeviceKeys.Tablets,\r\n Smartphones: DeviceKeys.Smartphones,\r\n};\r\n\r\nexport const getInitialAdGroupData = ({ i18n }) => ({\r\n Status: 'Active',\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});\r\n\r\nexport const getInitialAdData = ({ i18n }) => ({\r\n Status: 'Active',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Ad'))),\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 images: {\r\n\r\n },\r\n});\r\n\r\nexport const AdGroupCriterions = {\r\n 0: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Sunday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n 1: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Monday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n 2: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Tuesday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n 3: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Wednesday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n 4: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Thursday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n 5: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Friday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n 6: {\r\n Criterion: {\r\n BidAdjustment: 0,\r\n DayTimeCriterion: {\r\n Id: '',\r\n Day: 'Saturday',\r\n FromHour: 0,\r\n FromMinute: 0,\r\n ToHour: 24,\r\n ToMinute: 0,\r\n },\r\n Type: 'DayTime',\r\n },\r\n CriterionType: 'DayTime',\r\n Id: '',\r\n },\r\n};\r\n\r\nexport const BundleLocationCriterions = [\r\n {\r\n Status: 'Active',\r\n SelectionStatus: 'Included',\r\n Campaign: null,\r\n CriterionType: 'Location',\r\n Criterion: {\r\n Type: 'Location',\r\n BidAdjustment: 0,\r\n OriginalBidAdjustment: 0,\r\n LocationCriterion: {\r\n LocationId: 32,\r\n Name: 'Canada',\r\n NameTypeCombo: 'Canada (country/region)',\r\n Latitude: 62.5724,\r\n Longitude: -96.5672,\r\n CountryCode: 'CA',\r\n LocationType: 'Country',\r\n EnclosingLocationIds: [],\r\n Type: 'Location',\r\n LesLocationType: 'Country',\r\n },\r\n },\r\n },\r\n {\r\n Status: 'Active',\r\n SelectionStatus: 'Included',\r\n Campaign: null,\r\n CriterionType: 'Location',\r\n Criterion: {\r\n Type: 'Location',\r\n BidAdjustment: 0,\r\n OriginalBidAdjustment: 0,\r\n LocationCriterion: {\r\n LocationId: 190,\r\n Name: 'United States',\r\n NameTypeCombo: 'United States (country/region)',\r\n Latitude: 39.5036,\r\n Longitude: -99.0183,\r\n CountryCode: 'US',\r\n LocationType: 'Country',\r\n EnclosingLocationIds: [],\r\n Type: 'Location',\r\n LesLocationType: 'Country',\r\n },\r\n },\r\n },\r\n];\r\n\r\nexport const BundleCountries = [\r\n {\r\n Country: 'Canada',\r\n LocationId: 32,\r\n },\r\n {\r\n Country: 'US',\r\n LocationId: 190,\r\n },\r\n];\r\n\r\nexport const AdPreviewOverideStylesByKey = {\r\n mma_191x100: { imagePreviewHeight: 153, imagePreviewWidth: 292 },\r\n edge_178x100: { imagePreviewHeight: 220, imagePreviewWidth: 390 },\r\n msan_191x100: { imagePreviewHeight: 200, imagePreviewWidth: 382 },\r\n msan_150x100: { imagePreviewHeight: 200, imagePreviewWidth: 300 },\r\n};\r\n\r\nconst CampaignGoal = {\r\n ConvertCustomers: 'ConvertCustomers',\r\n Consideration: 'Consideration',\r\n BrandAwareness: 'BrandAwareness',\r\n SellProducts: 'SellProducts',\r\n PromoteApp: 'PromoteMyApp',\r\n SkipGoals: 'SkipGoals',\r\n NoneSelected: 'None',\r\n};\r\n\r\nexport const CampaignObjectiveType = {\r\n Unknown: 'Unknown',\r\n Acquisition: 'Acquisition',\r\n Engagement: 'Engagement',\r\n Awareness: 'Awareness',\r\n};\r\n\r\nexport const getActualGoalFromCampaignGoal = (goal) => {\r\n switch (goal) {\r\n case CampaignGoal.ConvertCustomers:\r\n return CampaignObjectiveType.Acquisition;\r\n case CampaignGoal.Consideration:\r\n return CampaignObjectiveType.Engagement;\r\n case CampaignGoal.BrandAwareness:\r\n return CampaignObjectiveType.Awareness;\r\n case CampaignGoal.SellProducts:\r\n return CampaignObjectiveType.Acquisition;\r\n case CampaignGoal.PromoteApp:\r\n return CampaignObjectiveType.Acquisition;\r\n default:\r\n return CampaignObjectiveType.Unknown;\r\n }\r\n};\r\n","import { pick, get } from 'underscore';\r\nimport { useEffect, useState, useContext } from 'react';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\nimport { ObjectiveIDs } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { BiddingSchemes } from './constants';\r\n\r\nconst getDisplayPlusCampaignObjective = () => {\r\n let displayPlusCampaignObjective = appConfig.get('CampaignObjective');\r\n if (!displayPlusCampaignObjective) {\r\n if (localStorage && localStorage.supportsStorage()) {\r\n displayPlusCampaignObjective = localStorage.get('CampaignObjective');\r\n displayPlusCampaignObjective = displayPlusCampaignObjective && displayPlusCampaignObjective.type;\r\n appConfig.set('CampaignObjective', displayPlusCampaignObjective);\r\n }\r\n }\r\n\r\n return displayPlusCampaignObjective;\r\n};\r\n\r\nconst readConversionGoalDetails = (cid, aid) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)['Default.ConversionGoalDetails']\r\n .$makeCall()\r\n .toPromise();\r\n\r\nconst whitelistedSchemaPropertyKeys = [\r\n 'IsActiveConversionGoalPresent', 'IsActiveConversionGoalPresentWithValidRevenueValue',\r\n];\r\n\r\nconst getConversionGoalsDetails = (cid, aid) => readConversionGoalDetails(cid, aid)\r\n .then(model => pick(model, whitelistedSchemaPropertyKeys));\r\n\r\nconst getBiddingSchemeForConversions = (cid, aid) =>\r\n getConversionGoalsDetails(cid, aid).then((goalDetails) => {\r\n if (goalDetails.IsActiveConversionGoalPresent) {\r\n return BiddingSchemes.MaxConversions;\r\n }\r\n\r\n return BiddingSchemes.EnhancedCpc;\r\n });\r\n\r\nexport const getBiddingScheme = (cid, aid) => {\r\n const objective = getDisplayPlusCampaignObjective();\r\n\r\n switch (objective) {\r\n case ObjectiveIDs.Conversions:\r\n return getBiddingSchemeForConversions(cid, aid);\r\n case ObjectiveIDs.Consideration:\r\n return new Promise((resolve) => {\r\n resolve(BiddingSchemes.EnhancedCpc);\r\n });\r\n case ObjectiveIDs.Awareness:\r\n return new Promise((resolve) => {\r\n resolve(BiddingSchemes.ManualCpm);\r\n });\r\n default:\r\n return new Promise((resolve) => {\r\n resolve(undefined);\r\n });\r\n }\r\n};\r\n\r\nexport const useBiddingScheme = ({\r\n cid, aid, getDefaultCampaign, i18n,\r\n}) => {\r\n const [biddingScheme, setBiddingScheme] = useState(null);\r\n const { state } = useWizardService();\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n useEffect(() => {\r\n const biddingSchemeContext = get(state, ['context', 'wizardData', 'campaign', 'BiddingScheme', 'Type']);\r\n if (biddingSchemeContext) {\r\n setBiddingScheme(biddingSchemeContext);\r\n return;\r\n }\r\n\r\n getBiddingScheme(cid, aid).then((biddingSchemeRes) => {\r\n if (biddingSchemeRes) {\r\n setBiddingScheme(biddingSchemeRes);\r\n } else {\r\n setBiddingScheme(getDefaultCampaign(i18n, serverContext).data.BiddingScheme.Type);\r\n }\r\n });\r\n }, [cid, aid, state, getDefaultCampaign, i18n, serverContext]);\r\n\r\n return biddingScheme;\r\n};\r\n\r\n","export class AdsError {\r\n constructor(message, property, code) {\r\n this.message = message;\r\n this.property = property;\r\n this.code = code;\r\n }\r\n\r\n toString() {\r\n return this.message;\r\n }\r\n}\r\n","import { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\n\r\nexport const useSkipAdCreationState = () => {\r\n const { state: wizardState, send: wizardSend } = useWizardService();\r\n\r\n return [\r\n wizardState.context.wizardData.isSkipAdCreation,\r\n value => wizardSend(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isSkipAdCreation: value }),\r\n ];\r\n};\r\n","import { useContext, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\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 { saveCampaign, saveAdGroup } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { logCopilotRecommendations } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { getGlobalSelectedCampaignObjective } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport { getVideoDeal, modelConstraints, getODataConfig } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getBiddingScheme } from './bidding-schemes';\r\nimport { BundleLocationCriterions, BundleCountries, getActualGoalFromCampaignGoal } from './constants';\r\nimport { AdsError } from './adsError';\r\nimport { useSkipAdCreationState } from './use-skip-ad-creation';\r\nimport { isAudience as isAudienceFlow, isDisplayAdsCampaign, isDealCampaign } from '../step-constants';\r\n\r\nexport const useAdsRepository = ({\r\n saveAds: saveAsParam, defaultCampaign, defaultAdGroup,\r\n}) => {\r\n const { send, state } = useWizardService();\r\n const [isSkipAdCreation, setSkipAdCreation] = useSkipAdCreationState();\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const permissions = useContext(PermissionsContext);\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activityContext = useContext(ActivityContext);\r\n\r\n const oDataConfig = getODataConfig(serverContext);\r\n\r\n const imageOdata = new ImageOData(scope.values.cid, scope.values.aid, oDataConfig);\r\n\r\n const { logSuggestionsApplied } = useCopilotLoggers();\r\n\r\n const { flow } = state.context.wizardData;\r\n\r\n const isImageFittingEnabled = _.result(permissions.dynamic, 'ImageFittingMVP', false)\r\n && !_.result(permissions.dynamic, 'ImageFittingExlcudeMAE', true)\r\n && _.result(permissions.dynamic, 'ImageFittingUnifiedImageROI', false);\r\n\r\n const saveAds = useCallback((...args) => saveAsParam(...args, { isImageFittingEnabled }), [isImageFittingEnabled, saveAsParam]);\r\n\r\n const load = useCallback(() => new Promise((resolve) => {\r\n if (state.context.wizardData.ads) {\r\n const isAudience = isAudienceFlow(flow);\r\n\r\n if (!isAudience || (isAudience && !permissions.dynamic.DisplayPlusMultipleAds)) {\r\n resolve(state.context.wizardData.ads.ads);\r\n } else {\r\n const { editingAdId } = state.context.wizardData;\r\n\r\n if (!editingAdId) {\r\n const ids = _.keys(state.context.wizardData.ads.ads);\r\n\r\n if (ids.length > 0) {\r\n resolve(state.context.wizardData.ads.ads[ids[0]]);\r\n } else {\r\n resolve({\r\n data: [],\r\n isValid: false,\r\n isDirty: false,\r\n currentPageIndex: 1,\r\n });\r\n }\r\n } else {\r\n resolve(state.context.wizardData.ads.ads[editingAdId] || {});\r\n }\r\n }\r\n } else {\r\n const isDealFlow = isDealCampaign(flow);\r\n if (isDealFlow) {\r\n const deal = getVideoDeal();\r\n if (deal) {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { deal });\r\n }\r\n }\r\n\r\n resolve({\r\n data: [],\r\n isValid: false,\r\n isDirty: false,\r\n currentPageIndex: 1,\r\n });\r\n }\r\n }), [flow, permissions.dynamic.DisplayPlusMultipleAds, send, state.context.wizardData]);\r\n\r\n const createSaveCampaignPromise = useCallback(() => {\r\n if (state.context.wizardData.campaign) {\r\n return new Promise((resolve) => {\r\n resolve({ campaign: { data: state.context.wizardData.campaign } });\r\n });\r\n }\r\n\r\n return getBiddingScheme(scope.values.cid, scope.values.aid).then((biddingScheme) => {\r\n if (biddingScheme) {\r\n // eslint-disable-next-line no-param-reassign\r\n defaultCampaign.data.BiddingScheme.Type = biddingScheme;\r\n }\r\n\r\n if (permissions.IsAmplifyEnabled && permissions.IsBoostPassCampaignGoalEnabled && getGlobalSelectedCampaignObjective()) {\r\n const objectiveType = getActualGoalFromCampaignGoal(getGlobalSelectedCampaignObjective());\r\n // eslint-disable-next-line no-param-reassign\r\n defaultCampaign.data.CampaignObjectiveSetting = {\r\n CampaignObjectiveSettingType: objectiveType,\r\n };\r\n }\r\n\r\n return saveCampaign({\r\n campaign: defaultCampaign,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n });\r\n }, [defaultCampaign, i18n, scenarioContext, state.context.wizardData.campaign, scope.values.cid, scope.values.aid, permissions.IsAmplifyEnabled, permissions.IsBoostPassCampaignGoalEnabled]);\r\n\r\n const createSaveAdGroupPromise = useCallback(saveCampaignPromise => saveCampaignPromise.then((campaignData) => {\r\n if (state.context.wizardData.adGroup) {\r\n return new Promise((resolve) => {\r\n resolve({ adGroup: { data: state.context.wizardData.adGroup } });\r\n });\r\n }\r\n\r\n const campaignMtModel = campaignData.campaign.data;\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: campaignMtModel, isDefaultCampaignStepModel: true });\r\n\r\n let adGroupModelWithConstraintsPromise = Promise.resolve(defaultAdGroup.data);\r\n\r\n if (isDealCampaign(flow) && defaultAdGroup.data.deal) {\r\n adGroupModelWithConstraintsPromise = modelConstraints(defaultAdGroup.data.deal, defaultAdGroup.data, serverContext);\r\n }\r\n\r\n return adGroupModelWithConstraintsPromise\r\n .then(constraintAdGroupModel => saveAdGroup({\r\n adGroup: { data: constraintAdGroupModel },\r\n campaign: campaignMtModel,\r\n BundleLocationCriterions,\r\n BundleCountries,\r\n isDisplayPlus: true,\r\n flow: state.context.wizardData.flow,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultAdGroup'),\r\n i18n,\r\n serverContext,\r\n }));\r\n }), [defaultAdGroup, flow, i18n, scenarioContext, send, serverContext, state.context.wizardData.adGroup, state.context.wizardData.flow]);\r\n\r\n const createAds = useCallback(\r\n (saveCampaignPromise, saveAdGroupPromise, adsData) => Promise.all([saveCampaignPromise, saveAdGroupPromise])\r\n .then(([campaignData, adGroupData]) => {\r\n const campaignMtModel = campaignData.campaign.data;\r\n const adGroupMtModel = adGroupData.adGroup.data;\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { adGroup: adGroupMtModel, isDefaultAdGroupStepModel: true });\r\n\r\n if (isSkipAdCreation) {\r\n return Promise.resolve().then(() => {\r\n if (activityContext) {\r\n activityContext.signal('onAdsSaved - skip ad save}');\r\n activityContext.signal(`campaignId - ${campaignMtModel.Id}`);\r\n }\r\n\r\n setSkipAdCreation(false);\r\n });\r\n }\r\n\r\n return saveAds({\r\n ads: adsData,\r\n campaign: campaignMtModel,\r\n adGroup: adGroupMtModel,\r\n oldAdsModel: adsData,\r\n activity: activityContext,\r\n imageOdata,\r\n permissions,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveAds'),\r\n i18n,\r\n serverContext,\r\n }).then((adData) => {\r\n const isAudience = isAudienceFlow(state.context.wizardData.flow);\r\n const isDisplayAdsCampaignFlow = isDisplayAdsCampaign(state.context.wizardData.flow);\r\n const isMultiAdFormatEnabled = permissions.dynamic.MultiAdFormat;\r\n\r\n if (isAudience && permissions.dynamic.DisplayPlusMultipleAds) {\r\n const { ads: createdAd } = adData;\r\n\r\n const savedAds = state.context.wizardData.ads && state.context.wizardData.ads.ads;\r\n const updatedAds = {\r\n serverErrors: [],\r\n systemErrors: [],\r\n ads: { ...savedAds },\r\n };\r\n\r\n if (!isMultiAdFormatEnabled) {\r\n updatedAds.ads[createdAd.data.Id] = { ...createdAd };\r\n } else if (adsData.adSubType === AdFormat.Native) {\r\n updatedAds.ads[createdAd.data.Id] = { ...createdAd, adSubType: adsData.adSubType };\r\n } else {\r\n _.forEach(createdAd.data, (ad) => {\r\n updatedAds.ads[ad.Id] = { ...createdAd, adSubType: adsData.adSubType, data: [ad] };\r\n });\r\n }\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { ads: updatedAds });\r\n } else {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { ads: adData });\r\n }\r\n\r\n if (isAudience && permissions.dynamic.DisplayPlusCopilotRecommendations\r\n && (!isMultiAdFormatEnabled || (isMultiAdFormatEnabled && adsData.adSubType === AdFormat.Native))\r\n ) {\r\n logCopilotRecommendations({\r\n recommendationContext,\r\n assetGroup: adData.ads.data,\r\n campaignId: campaignMtModel.Id,\r\n });\r\n }\r\n\r\n if ((isDisplayAdsCampaignFlow && permissions.dynamic.DisplayPlusCopilotAssetGeneration) ||\r\n (isMultiAdFormatEnabled && adsData.adSubType === AdFormat.Display)\r\n ) {\r\n // get total copilot ads\r\n const totalCopilotAds = _.filter(adsData.data, adD => adD.data.creativeData);\r\n const suggestionIds = totalCopilotAds.map(ad => ad.data.creativeData.creativeMeta.recommendationId);\r\n\r\n logSuggestionsApplied(\r\n campaignMtModel.Id,\r\n adGroupMtModel.Id,\r\n undefined /* textSuggestions */,\r\n suggestionIds\r\n );\r\n\r\n if (activityContext) {\r\n activityContext.signal(`[DisplayAdsCopilot] - Saved copilot ads: ${totalCopilotAds.length}`);\r\n }\r\n }\r\n if (activityContext) {\r\n activityContext.signal(`onAdsSaved - ${JSON.stringify(adData)}`);\r\n activityContext.signal(`campaignId - ${campaignMtModel.Id}`);\r\n }\r\n return adData;\r\n });\r\n })\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n .catch(error => Promise.reject({ error: { errors: error.serverErrors } })),\r\n [send, isSkipAdCreation, saveAds, activityContext, scenarioContext, i18n, setSkipAdCreation, state.context.wizardData.flow, state.context.wizardData.ads, permissions.dynamic.DisplayPlusMultipleAds, permissions.dynamic.DisplayPlusCopilotRecommendations, permissions.dynamic.MultiAdFormat, permissions.dynamic.DisplayPlusCopilotAssetGeneration, recommendationContext, logSuggestionsApplied]\r\n );\r\n\r\n const save = useCallback(({ data }) => {\r\n if (_.isEmpty(data.data) && !isSkipAdCreation) {\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n errors: [new AdsError(i18n.getString(_TL_('Please create an ad')), 'Ad', 'AdCreationMustCreateAtLeastOneAd')],\r\n },\r\n });\r\n }\r\n\r\n const saveCampaignPromise = createSaveCampaignPromise();\r\n\r\n const saveAdGroupPromise = createSaveAdGroupPromise(saveCampaignPromise);\r\n\r\n return createAds(saveCampaignPromise, saveAdGroupPromise, data);\r\n }, [createAds, createSaveAdGroupPromise, createSaveCampaignPromise, i18n, isSkipAdCreation]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","export const getDaysInTheFuture = (numDaysInTheFuture) => {\r\n const futureDate = new Date();\r\n futureDate.setDate(futureDate.getDate() + numDaysInTheFuture);\r\n return futureDate;\r\n};\r\n\r\nexport const getTomorrow = () => getDaysInTheFuture(1);\r\n","import { CampaignTypes, CampaignSubTypes, CampaignSubTypeTextMapping } from '@bingads-webui-campaign-react/constants';\r\nimport { PriceModelToRange } from '../../common/constants';\r\n\r\n/**\r\n * Default values for bid recommendations by ([CampaignType][CampaignSubType][BiddingScheme][Currency]).\r\n * Keys to arrays of [ bidRecommendation, bidFloor, bidCeil ] (array for code compression vs. objects)\r\n *\r\n * Source: https://microsoft.sharepoint.com/:x:/r/teams/MAPPMteamFTE/Shared%20Documents/Area%20Documents/MSAN/AWF/Audience%20Demand%20Analysis/DNV%20Recommended%20Bids.xlsx?d=w8a013bcda74d4804ad645dacf03f2c73&csf=1&web=1&e=AIpi0t\r\n * Snapshot as of 2024-10-10\r\n */\r\nexport const DNVBidRecommendations = {\r\n [CampaignTypes.Audience]: {\r\n [CampaignSubTypes.AudienceStatic]: {\r\n CPC: {\r\n USD: [1.2, 1, 3], ALL: [106.2, 88.5, 265.5], DZD: [158.7, 132.3, 396.8], XCD: [3.2, 2.7, 8.1], ARS: [1163.7, 969.8, 2909.3], AUD: [1.7, 1.4, 4.3], EUR: [1.1, 0.9, 2.7], BDT: [143.9, 119.9, 359.7], BWP: [15.6, 13.0, 39.1], BRL: [6.5, 5.4, 16.3], BZD: [2.4, 2.0, 6.0], BND: [1.5, 1.3, 3.8], BGN: [2.1, 1.8, 5.3], BYN: [3.9, 3.3, 9.8], XAF: [716.3, 596.9, 1790.7], CAD: [1.6, 1.4, 4.1], LKR: [355.4, 296.2, 888.6], CLP: [1077.5, 897.9, 2693.7], TWD: [38.0, 31.6, 94.9], COP: [5008.8, 4174.0, 12522.1], CRC: [622.4, 518.7, 1556.0], HRK: [8.1, 6.8, 20.3], CZK: [27.1, 22.6, 67.8], XOF: [703.5, 586.2, 1758.7], DKK: [8.0, 6.7, 20.0], DOP: [72.4, 60.3, 181.0], ETB: [142.8, 119.0, 357.0], GHS: [19.0, 15.8, 47.4], GTQ: [9.3, 7.7, 23.2], HUF: [427.0, 355.9, 1067.6], ISK: [162.0, 135.0, 405.1], INR: [100.6, 83.8, 251.4], IDR: [18168.0, 15140.0, 45420.0], JMD: [188.7, 157.2, 471.7], JPY: [171.6, 143.0, 429.1], KZT: [577.0, 480.8, 1442.4], KES: [154.8, 129.0, 387.0], KRW: [1569.2, 1307.7, 3923.1], KGS: [101.0, 84.2, 252.6], CHF: [1.0, 0.8, 2.5], MWK: [2080.8, 1734.0, 5202.0], MYR: [4.9, 4.1, 12.4], MVR: [18.5, 15.4, 46.1], MUR: [55.1, 45.9, 137.7], MXN: [23.5, 19.6, 58.8], MNT: [4081.2, 3401.0, 10203.0], MAD: [11.7, 9.7, 29.1], NZD: [1.9, 1.6, 4.7], NGN: [2004.0, 1670.0, 5010.0], NOK: [12.6, 10.5, 31.6], PKR: [333.5, 277.9, 833.6], PEN: [4.5, 3.7, 11.2], PHP: [67.2, 56.0, 168.1], PLN: [4.6, 3.8, 11.5], RUB: [111.8, 93.1, 279.4], RWF: [1605.0, 1337.5, 4012.5], SGD: [1.5, 1.3, 3.8], VND: [29478.0, 24565.0, 73695.0], ZAR: [20.7, 17.2, 51.7], SEK: [12.2, 10.1, 30.4], THB: [38.6, 32.2, 96.5], TOP: [2.8, 2.3, 7.0], TTD: [8.1, 6.7, 20.2], TRY: [41.0, 34.2, 102.6], UGX: [4424.4, 3687.0, 11061.0], MKD: [66.3, 55.2, 165.7], EGP: [58.0, 48.3, 144.9], GBP: [0.9, 0.7, 2.2], TZS: [3255.0, 2712.5, 8137.5], UYU: [50.0, 41.7, 125.0], UZS: [15258.5, 12715.4, 38146.2], ZMW: [31.7, 26.4, 79.3], FJD: [2.7, 2.2, 6.6], HKD: [9.3, 7.8, 23.3], MOP: [9.6, 8.0, 24.0], AZN: [2.0, 1.7, 5.1], BHD: [0.5, 0.4, 1.1], AMD: [464.7, 387.3, 1161.9], GEL: [3.3, 2.7, 8.2], ILS: [4.5, 3.7, 11.2], JOD: [0.9, 0.7, 2.1], KWD: [0.4, 0.3, 0.9], LBP: [107411.4, 89509.5, 268528.5], OMR: [0.5, 0.4, 1.2], QAR: [4.4, 3.6, 10.9], SAR: [4.5, 3.8, 11.3], TND: [3.6, 3.0, 9.1],\r\n },\r\n CPM: {\r\n USD: [0.4, 0.3, 1], ALL: [35.4, 26.6, 88.5], DZD: [52.9, 39.7, 132.3], XCD: [1.1, 0.8, 2.7], ARS: [387.9, 290.9, 969.8], AUD: [0.6, 0.4, 1.4], EUR: [0.4, 0.3, 0.9], BDT: [48.0, 36.0, 119.9], BWP: [5.2, 3.9, 13.0], BRL: [2.2, 1.6, 5.4], BZD: [0.8, 0.6, 2.0], BND: [0.5, 0.4, 1.3], BGN: [0.7, 0.5, 1.8], BYN: [1.3, 1.0, 3.3], XAF: [238.8, 179.1, 596.9], CAD: [0.5, 0.4, 1.4], LKR: [118.5, 88.9, 296.2], CLP: [359.2, 269.4, 897.9], TWD: [12.7, 9.5, 31.6], COP: [1669.6, 1252.2, 4174.0], CRC: [207.5, 155.6, 518.7], HRK: [2.7, 2.0, 6.8], CZK: [9.0, 6.8, 22.6], XOF: [234.5, 175.9, 586.2], DKK: [2.7, 2.0, 6.7], DOP: [24.1, 18.1, 60.3], ETB: [47.6, 35.7, 119.0], GHS: [6.3, 4.7, 15.8], GTQ: [3.1, 2.3, 7.7], HUF: [142.3, 106.8, 355.9], ISK: [54.0, 40.5, 135.0], INR: [33.5, 25.1, 83.8], IDR: [6056.0, 4542.0, 15140.0], JMD: [62.9, 47.2, 157.2], JPY: [57.2, 42.9, 143.0], KZT: [192.3, 144.2, 480.8], KES: [51.6, 38.7, 129.0], KRW: [523.1, 392.3, 1307.7], KGS: [33.7, 25.3, 84.2], CHF: [0.3, 0.3, 0.8], MWK: [693.6, 520.2, 1734.0], MYR: [1.6, 1.2, 4.1], MVR: [6.2, 4.6, 15.4], MUR: [18.4, 13.8, 45.9], MXN: [7.8, 5.9, 19.6], MNT: [1360.4, 1020.3, 3401.0], MAD: [3.9, 2.9, 9.7], NZD: [0.6, 0.5, 1.6], NGN: [668.0, 501.0, 1670.0], NOK: [4.2, 3.2, 10.5], PKR: [111.2, 83.4, 277.9], PEN: [1.5, 1.1, 3.7], PHP: [22.4, 16.8, 56.0], PLN: [1.5, 1.2, 3.8], RUB: [37.3, 27.9, 93.1], RWF: [535.0, 401.2, 1337.5], SGD: [0.5, 0.4, 1.3], VND: [9826.0, 7369.5, 24565.0], ZAR: [6.9, 5.2, 17.2], SEK: [4.1, 3.0, 10.1], THB: [12.9, 9.7, 32.2], TOP: [0.9, 0.7, 2.3], TTD: [2.7, 2.0, 6.7], TRY: [13.7, 10.3, 34.2], UGX: [1474.8, 1106.1, 3687.0], MKD: [22.1, 16.6, 55.2], EGP: [19.3, 14.5, 48.3], GBP: [0.3, 0.2, 0.7], TZS: [1085.0, 813.7, 2712.5], UYU: [16.7, 12.5, 41.7], UZS: [5086.2, 3814.6, 12715.4], ZMW: [10.6, 7.9, 26.4], FJD: [0.9, 0.7, 2.2], HKD: [3.1, 2.3, 7.8], MOP: [3.2, 2.4, 8.0], AZN: [0.7, 0.5, 1.7], BHD: [0.2, 0.1, 0.4], AMD: [154.9, 116.2, 387.3], GEL: [1.1, 0.8, 2.7], ILS: [1.5, 1.1, 3.7], JOD: [0.3, 0.2, 0.7], KWD: [0.1, 0.1, 0.3], LBP: [35803.8, 26852.8, 89509.5], OMR: [0.2, 0.1, 0.4], QAR: [1.5, 1.1, 3.6], SAR: [1.5, 1.1, 3.8], TND: [1.2, 0.9, 3.0],\r\n },\r\n },\r\n [CampaignSubTypes.DisplayAds]: {\r\n CPC: {\r\n USD: [0.6, 0.3, 1.2], ALL: [49.6, 26.6, 106.2], DZD: [74.1, 39.7, 158.7], XCD: [1.5, 0.8, 3.2], ARS: [543.1, 290.9, 1163.7], AUD: [0.8, 0.4, 1.7], EUR: [0.5, 0.3, 1.1], BDT: [67.1, 36.0, 143.9], BWP: [7.3, 3.9, 15.6], BRL: [3.0, 1.6, 6.5], BZD: [1.1, 0.6, 2.4], BND: [0.7, 0.4, 1.5], BGN: [1.0, 0.5, 2.1], BYN: [1.8, 1.0, 3.9], XAF: [334.3, 179.1, 716.3], CAD: [0.8, 0.4, 1.6], LKR: [165.9, 88.9, 355.4], CLP: [502.8, 269.4, 1077.5], TWD: [17.7, 9.5, 38.0], COP: [2337.5, 1252.2, 5008.8], CRC: [290.5, 155.6, 622.4], HRK: [3.8, 2.0, 8.1], CZK: [12.7, 6.8, 27.1], XOF: [328.3, 175.9, 703.5], DKK: [3.7, 2.0, 8.0], DOP: [33.8, 18.1, 72.4], ETB: [66.6, 35.7, 142.8], GHS: [8.8, 4.7, 19.0], GTQ: [4.3, 2.3, 9.3], HUF: [199.3, 106.8, 427.0], ISK: [75.6, 40.5, 162.0], INR: [46.9, 25.1, 100.6], IDR: [8478.4, 4542.0, 18168.0], JMD: [88.1, 47.2, 188.7], JPY: [80.1, 42.9, 171.6], KZT: [269.3, 144.2, 577.0], KES: [72.2, 38.7, 154.8], KRW: [732.3, 392.3, 1569.2], KGS: [47.2, 25.3, 101.0], CHF: [0.5, 0.3, 1.0], MWK: [971.0, 520.2, 2080.8], MYR: [2.3, 1.2, 4.9], MVR: [8.6, 4.6, 18.5], MUR: [25.7, 13.8, 55.1], MXN: [11.0, 5.9, 23.5], MNT: [1904.6, 1020.3, 4081.2], MAD: [5.4, 2.9, 11.7], NZD: [0.9, 0.5, 1.9], NGN: [935.2, 501.0, 2004.0], NOK: [5.9, 3.2, 12.6], PKR: [155.6, 83.4, 333.5], PEN: [2.1, 1.1, 4.5], PHP: [31.4, 16.8, 67.2], PLN: [2.1, 1.2, 4.6], RUB: [52.2, 27.9, 111.8], RWF: [749.0, 401.2, 1605.0], SGD: [0.7, 0.4, 1.5], VND: [13756.4, 7369.5, 29478.0], ZAR: [9.7, 5.2, 20.7], SEK: [5.7, 3.0, 12.2], THB: [18.0, 9.7, 38.6], TOP: [1.3, 0.7, 2.8], TTD: [3.8, 2.0, 8.1], TRY: [19.1, 10.3, 41.0], UGX: [2064.7, 1106.1, 4424.4], MKD: [30.9, 16.6, 66.3], EGP: [27.0, 14.5, 58.0], GBP: [0.4, 0.2, 0.9], TZS: [1519.0, 813.7, 3255.0], UYU: [23.3, 12.5, 50.0], UZS: [7120.6, 3814.6, 15258.5], ZMW: [14.8, 7.9, 31.7], FJD: [1.2, 0.7, 2.7], HKD: [4.3, 2.3, 9.3], MOP: [4.5, 2.4, 9.6], AZN: [1.0, 0.5, 2.0], BHD: [0.2, 0.1, 0.5], AMD: [216.9, 116.2, 464.7], GEL: [1.5, 0.8, 3.3], ILS: [2.1, 1.1, 4.5], JOD: [0.4, 0.2, 0.9], KWD: [0.2, 0.1, 0.4], LBP: [50125.3, 26852.8, 107411.4], OMR: [0.2, 0.1, 0.5], QAR: [2.0, 1.1, 4.4], SAR: [2.1, 1.1, 4.5], TND: [1.7, 0.9, 3.6],\r\n },\r\n CPM: {\r\n USD: [1.3, 1, 2], ALL: [115.1, 88.5, 177.0], DZD: [172.0, 132.3, 264.5], XCD: [3.5, 2.7, 5.4], ARS: [1260.7, 969.8, 1939.5], AUD: [1.9, 1.4, 2.9], EUR: [1.2, 0.9, 1.8], BDT: [155.9, 119.9, 239.8], BWP: [16.9, 13.0, 26.1], BRL: [7.1, 5.4, 10.9], BZD: [2.6, 2.0, 4.0], BND: [1.7, 1.3, 2.6], BGN: [2.3, 1.8, 3.5], BYN: [4.3, 3.3, 6.5], XAF: [776.0, 596.9, 1193.8], CAD: [1.8, 1.4, 2.7], LKR: [385.1, 296.2, 592.4], CLP: [1167.3, 897.9, 1795.8], TWD: [41.1, 31.6, 63.3], COP: [5426.3, 4174.0, 8348.1], CRC: [674.3, 518.7, 1037.4], HRK: [8.8, 6.8, 13.5], CZK: [29.4, 22.6, 45.2], XOF: [762.1, 586.2, 1172.5], DKK: [8.7, 6.7, 13.4], DOP: [78.4, 60.3, 120.7], ETB: [154.7, 119.0, 238.0], GHS: [20.5, 15.8, 31.6], GTQ: [10.0, 7.7, 15.4], HUF: [462.6, 355.9, 711.7], ISK: [175.5, 135.0, 270.1], INR: [108.9, 83.8, 167.6], IDR: [19682.0, 15140.0, 30280.0], JMD: [204.4, 157.2, 314.5], JPY: [186.0, 143.0, 286.1], KZT: [625.1, 480.8, 961.6], KES: [167.7, 129.0, 258.0], KRW: [1700.0, 1307.7, 2615.4], KGS: [109.5, 84.2, 168.4], CHF: [1.1, 0.8, 1.7], MWK: [2254.2, 1734.0, 3468.0], MYR: [5.4, 4.1, 8.2], MVR: [20.0, 15.4, 30.8], MUR: [59.7, 45.9, 91.8], MXN: [25.5, 19.6, 39.2], MNT: [4421.3, 3401.0, 6802.0], MAD: [12.6, 9.7, 19.4], NZD: [2.0, 1.6, 3.1], NGN: [2171.0, 1670.0, 3340.0], NOK: [13.7, 10.5, 21.1], PKR: [361.2, 277.9, 555.8], PEN: [4.8, 3.7, 7.4], PHP: [72.8, 56.0, 112.1], PLN: [5.0, 3.8, 7.7], RUB: [121.1, 93.1, 186.3], RWF: [1738.7, 1337.5, 2675.0], SGD: [1.7, 1.3, 2.6], VND: [31934.5, 24565.0, 49130.0], ZAR: [22.4, 17.2, 34.5], SEK: [13.2, 10.1, 20.3], THB: [41.8, 32.2, 64.4], TOP: [3.0, 2.3, 4.7], TTD: [8.8, 6.7, 13.5], TRY: [44.4, 34.2, 68.4], UGX: [4793.1, 3687.0, 7374.0], MKD: [71.8, 55.2, 110.5], EGP: [62.8, 48.3, 96.6], GBP: [1.0, 0.7, 1.5], TZS: [3526.2, 2712.5, 5425.0], UYU: [54.2, 41.7, 83.4], UZS: [16530.0, 12715.4, 25430.8], ZMW: [34.4, 26.4, 52.8], FJD: [2.9, 2.2, 4.4], HKD: [10.1, 7.8, 15.5], MOP: [10.4, 8.0, 16.0], AZN: [2.2, 1.7, 3.4], BHD: [0.5, 0.4, 0.8], AMD: [503.5, 387.3, 774.6], GEL: [3.5, 2.7, 5.5], ILS: [4.8, 3.7, 7.4], JOD: [0.9, 0.7, 1.4], KWD: [0.4, 0.3, 0.6], LBP: [116362.3, 89509.5, 179019.0], OMR: [0.5, 0.4, 0.8], QAR: [4.7, 3.6, 7.3], SAR: [4.9, 3.8, 7.5], TND: [3.9, 3.0, 6.1],\r\n },\r\n },\r\n [CampaignSubTypes.BrandAwarenessVideoAds]: {\r\n CPC: {\r\n USD: [3.9, 1, 4], ALL: [340.7, 88.5, 354.0], DZD: [509.2, 132.3, 529.1], XCD: [10.4, 2.7, 10.8], ARS: [3733.6, 969.8, 3879.1], AUD: [5.5, 1.4, 5.8], EUR: [3.4, 0.9, 3.6], BDT: [461.6, 119.9, 479.6], BWP: [50.2, 13.0, 52.1], BRL: [21.0, 5.4, 21.8], BZD: [7.7, 2.0, 8.0], BND: [4.9, 1.3, 5.1], BGN: [6.7, 1.8, 7.0], BYN: [12.6, 3.3, 13.1], XAF: [2298.1, 596.9, 2387.6], CAD: [5.2, 1.4, 5.4], LKR: [1140.4, 296.2, 1184.8], CLP: [3456.9, 897.9, 3591.6], TWD: [121.8, 31.6, 126.6], COP: [16070.1, 4174.0, 16696.2], CRC: [1996.9, 518.7, 2074.7], HRK: [26.0, 6.8, 27.0], CZK: [87.0, 22.6, 90.4], XOF: [2257.1, 586.2, 2345.0], DKK: [25.7, 6.7, 26.7], DOP: [232.3, 60.3, 241.3], ETB: [458.1, 119.0, 476.0], GHS: [60.8, 15.8, 63.2], GTQ: [29.7, 7.7, 30.9], HUF: [1370.0, 355.9, 1423.4], ISK: [519.9, 135.0, 540.1], INR: [322.6, 83.8, 335.2], IDR: [58289.0, 15140.0, 60560.0], JMD: [605.4, 157.2, 629.0], JPY: [550.7, 143.0, 572.2], KZT: [1851.1, 480.8, 1923.2], KES: [496.6, 129.0, 516.0], KRW: [5034.6, 1307.7, 5230.8], KGS: [324.2, 84.2, 336.8], CHF: [3.2, 0.8, 3.4], MWK: [6675.9, 1734.0, 6936.0], MYR: [15.9, 4.1, 16.5], MVR: [59.2, 15.4, 61.5], MUR: [176.7, 45.9, 183.6], MXN: [75.5, 19.6, 78.4], MNT: [13093.9, 3401.0, 13604.0], MAD: [37.4, 9.7, 38.8], NZD: [6.1, 1.6, 6.3], NGN: [6429.5, 1670.0, 6680.0], NOK: [40.6, 10.5, 42.1], PKR: [1069.8, 277.9, 1111.5], PEN: [14.3, 3.7, 14.9], PHP: [215.7, 56.0, 224.1], PLN: [14.8, 3.8, 15.3], RUB: [358.5, 93.1, 372.5], RWF: [5149.4, 1337.5, 5350.0], SGD: [4.9, 1.3, 5.1], VND: [94575.3, 24565.0, 98260.1], ZAR: [66.3, 17.2, 68.9], SEK: [39.0, 10.1, 40.5], THB: [123.9, 32.2, 128.7], TOP: [9.0, 2.3, 9.3], TTD: [26.0, 6.7, 27.0], TRY: [131.6, 34.2, 136.7], UGX: [14195.0, 3687.0, 14748.0], MKD: [212.7, 55.2, 220.9], EGP: [186.0, 48.3, 193.2], GBP: [2.9, 0.7, 3.0], TZS: [10443.1, 2712.5, 10850.0], UYU: [160.5, 41.7, 166.7], UZS: [48954.3, 12715.4, 50861.7], ZMW: [101.7, 26.4, 105.7], FJD: [8.5, 2.2, 8.8], HKD: [29.9, 7.8, 31.1], MOP: [30.8, 8.0, 32.0], AZN: [6.5, 1.7, 6.8], BHD: [1.5, 0.4, 1.5], AMD: [1491.1, 387.3, 1549.2], GEL: [10.5, 2.7, 10.9], ILS: [14.3, 3.7, 14.9], JOD: [2.7, 0.7, 2.8], KWD: [1.2, 0.3, 1.2], LBP: [344611.5, 89509.5, 358038.0], OMR: [1.5, 0.4, 1.5], QAR: [14.0, 3.6, 14.6], SAR: [14.4, 3.8, 15.0], TND: [11.7, 3.0, 12.1],\r\n },\r\n CPM: {\r\n USD: [5.5, 4, 6], ALL: [486.8, 354.0, 531.0], DZD: [727.5, 529.1, 793.6], XCD: [14.9, 10.8, 16.2], ARS: [5333.7, 3879.1, 5818.6], AUD: [7.9, 5.8, 8.6], EUR: [4.9, 3.6, 5.4], BDT: [659.4, 479.6, 719.4], BWP: [71.7, 52.1, 78.2], BRL: [30.0, 21.8, 32.7], BZD: [11.0, 8.0, 12.0], BND: [7.1, 5.1, 7.7], BGN: [9.6, 7.0, 10.5], BYN: [18.0, 13.1, 19.6], XAF: [3282.9, 2387.6, 3581.4], CAD: [7.4, 5.4, 8.1], LKR: [1629.1, 1184.8, 1777.2], CLP: [4938.4, 3591.6, 5387.4], TWD: [174.1, 126.6, 189.9], COP: [22957.2, 16696.2, 25044.2], CRC: [2852.7, 2074.7, 3112.1], HRK: [37.1, 27.0, 40.5], CZK: [124.3, 90.4, 135.6], XOF: [3224.4, 2345.0, 3517.5], DKK: [36.7, 26.7, 40.1], DOP: [331.8, 241.3, 362.0], ETB: [654.4, 476.0, 713.9], GHS: [86.9, 63.2, 94.8], GTQ: [42.5, 30.9, 46.3], HUF: [1957.2, 1423.4, 2135.1], ISK: [742.7, 540.1, 810.2], INR: [460.9, 335.2, 502.8], IDR: [83270.0, 60560.0, 90840.0], JMD: [864.8, 629.0, 943.4], JPY: [786.7, 572.2, 858.2], KZT: [2644.5, 1923.2, 2884.9], KES: [709.5, 516.0, 774.0], KRW: [7192.4, 5230.8, 7846.2], KGS: [463.1, 336.8, 505.2], CHF: [4.6, 3.4, 5.1], MWK: [9537.1, 6936.0, 10404.1], MYR: [22.7, 16.5, 24.7], MVR: [84.6, 61.5, 92.3], MUR: [252.5, 183.6, 275.4], MXN: [107.8, 78.4, 117.6], MNT: [18705.5, 13604.0, 20406.0], MAD: [53.4, 38.8, 58.3], NZD: [8.6, 6.3, 9.4], NGN: [9185.0, 6680.0, 10020.0], NOK: [57.9, 42.1, 63.2], PKR: [1528.3, 1111.5, 1667.3], PEN: [20.5, 14.9, 22.3], PHP: [308.2, 224.1, 336.2], PLN: [21.1, 15.3, 23.0], RUB: [512.2, 372.5, 558.8], RWF: [7356.2, 5350.0, 8025.0], SGD: [7.1, 5.1, 7.7], VND: [135107.6, 98260.1, 147390.1], ZAR: [94.8, 68.9, 103.4], SEK: [55.8, 40.5, 60.8], THB: [177.0, 128.7, 193.1], TOP: [12.8, 9.3, 14.0], TTD: [37.1, 27.0, 40.4], TRY: [188.0, 136.7, 205.1], UGX: [20278.5, 14748.0, 22122.0], MKD: [303.8, 220.9, 331.4], EGP: [265.6, 193.2, 289.8], GBP: [4.1, 3.0, 4.5], TZS: [14918.7, 10850.0, 16275.0], UYU: [229.2, 166.7, 250.1], UZS: [69934.8, 50861.7, 76292.5], ZMW: [145.3, 105.7, 158.5], FJD: [12.1, 8.8, 13.3], HKD: [42.7, 31.1, 46.6], MOP: [44.0, 32.0, 48.0], AZN: [9.4, 6.8, 10.2], BHD: [2.1, 1.5, 2.3], AMD: [2130.1, 1549.2, 2323.7], GEL: [15.0, 10.9, 16.4], ILS: [20.5, 14.9, 22.3], JOD: [3.9, 2.8, 4.3], KWD: [1.7, 1.2, 1.8], LBP: [492302.2, 358038.0, 537056.9], OMR: [2.1, 1.5, 2.3], QAR: [20.0, 14.6, 21.8], SAR: [20.6, 15.0, 22.5], TND: [16.6, 12.1, 18.2],\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport const getBidRecommendationsRange = (campaignBidTypeInfo) => {\r\n if (!campaignBidTypeInfo) {\r\n return null;\r\n }\r\n\r\n const { campaignType, campaignSubType, biddingSchemeType, currencyCode } = campaignBidTypeInfo;\r\n\r\n const campaignTypeRecommendations = campaignType ? DNVBidRecommendations[campaignType] : null;\r\n if (!campaignTypeRecommendations) {\r\n return null;\r\n }\r\n\r\n // Convert between CampaignSubType Id & String Key\r\n const campaignSubTypeKey = campaignSubType in campaignTypeRecommendations ? campaignSubType : CampaignSubTypeTextMapping[campaignSubType];\r\n const campaignSubTypeRecommendations = campaignSubTypeKey ? campaignTypeRecommendations[campaignSubTypeKey] : null;\r\n if (!campaignSubTypeRecommendations) {\r\n return null;\r\n }\r\n\r\n // Normalize: EnhancedCPC, ManualCpc, ManualCpm\r\n const biddingSchemeKey = ['CPC', 'CPM'].find(key => (biddingSchemeType ? biddingSchemeType.toUpperCase().includes(key) : false));\r\n const biddingSchemeRecommendations = biddingSchemeKey ? campaignSubTypeRecommendations[biddingSchemeKey] : null;\r\n if (!biddingSchemeRecommendations) {\r\n return null;\r\n }\r\n\r\n // const data = DNVBidRecommendations?.[campaignType]?.[campaignSubType]?.[biddingSchemeKey]?.[currencyCode];\r\n const bidRecommendationsData = biddingSchemeRecommendations[currencyCode];\r\n if (!bidRecommendationsData) {\r\n return null;\r\n }\r\n\r\n // convert array to keys-object\r\n const bidRecommendationRange = {\r\n bidFloor: bidRecommendationsData[1],\r\n bidRecommendation: bidRecommendationsData[0],\r\n bidCeil: bidRecommendationsData[2],\r\n currencyCode,\r\n };\r\n return bidRecommendationRange;\r\n};\r\n\r\nexport const getBidRecommendations = (serverContext, campaignSubType, _cpmBidRange = null, campaignType = CampaignTypes.Audience) => {\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n\r\n const cpmRange = !_cpmBidRange && serverContext ? serverContext[PriceModelToRange.ManualCpm] : _cpmBidRange;\r\n const cpmRecommendation = getBidRecommendationsRange({\r\n campaignType, campaignSubType, biddingSchemeType: 'CPM', currencyCode,\r\n });\r\n const CpmBid = (cpmRecommendation ? cpmRecommendation.bidRecommendation : null) || (cpmRange ? cpmRange.FloorValue : null);\r\n\r\n const cpcRange = serverContext ? serverContext[PriceModelToRange.EnhancedCpc] : null;\r\n const cpcRecommendation = getBidRecommendationsRange({\r\n campaignType, campaignSubType, biddingSchemeType: 'CPC', currencyCode,\r\n });\r\n const SearchBid = (cpcRecommendation ? cpcRecommendation.bidRecommendation : null) || (cpcRange ? cpcRange.FloorValue : null);\r\n\r\n // Return both CpmBid and SearchBid to the bidRecommendations, the appropriate field is chosen during AdGroup creation\r\n return { SearchBid, CpmBid };\r\n};\r\n","import { Devices, DeviceKeys } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { MinXandrDailyBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getTomorrow } from '../../shared/helper/format-date';\r\nimport { AdGroupCriterions, AgeRanges, GenderTypes } from '../../common/constants';\r\nimport { isCTVCampaign, isDealCampaign } from '../../step-constants';\r\nimport { getBidRecommendations } from '../../shared/components/bid-recommendations-data';\r\n\r\nconst getInitDeviceTypes = (permissions, isCTVFlow) => {\r\n if (isCTVFlow && permissions.PremiumStreaming) {\r\n return Object.keys(Devices);\r\n }\r\n\r\n if (permissions.XandrDeviceTarget) {\r\n return [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones];\r\n }\r\n\r\n return Object.keys(Devices);\r\n};\r\n\r\nconst getDealMiniumBid = (deal, serverContext) => {\r\n const exchangeRateMapping = getAccountExchangeRateFromLocalStorage(serverContext);\r\n return getConvertedCurrencyDealMinimumBid(deal.MinimumBid, deal.Currency, serverContext.CurrentAccount.CurrencyCode, exchangeRateMapping.val);\r\n};\r\n\r\nexport const getDefaultCampaign = (i18n, serverContext, flow, deal) => {\r\n const defaultCampaign = {\r\n data: {\r\n Status: 'Paused',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Video views campaign'))),\r\n Budget: {\r\n Amount: MinXandrDailyBudgetRangePerCurrency[serverContext.CurrentAccount.CurrencyCode],\r\n Type: 'DailyStandard',\r\n },\r\n Languages: [\r\n 'All',\r\n ],\r\n BiddingScheme: {\r\n Type: isCTVCampaign(flow) ? 'ManualCpv' : 'ManualCpm',\r\n },\r\n Target: null,\r\n CampaignSubType: 4,\r\n CampaignType: 'Audience',\r\n conversionGoals: {\r\n originalConversionGoals: [],\r\n goalSelection: [],\r\n goalScopeSelection: Scopes.ACCOUNT,\r\n },\r\n },\r\n isValid: true,\r\n isDirty: false,\r\n messages: [],\r\n };\r\n\r\n if (isDealCampaign(flow) && deal) {\r\n defaultCampaign.data.Budget.Amount = Math.ceil(getDealMiniumBid(deal, serverContext) * 10);\r\n defaultCampaign.data.Target = deal.Id;\r\n defaultCampaign.data.deal = deal;\r\n }\r\n\r\n return defaultCampaign;\r\n};\r\n\r\nexport const getDefaultAdGroup = (i18n, serverContext, flow, deal) => {\r\n const bidRecommendations = getBidRecommendations(serverContext, CampaignSubTypes.BrandAwarenessVideoAds, serverContext.VideoViewsCPMBidRange);\r\n const CpmBid = (isDealCampaign(flow) && deal) ? getDealMiniumBid(deal, serverContext) : bidRecommendations.CpmBid;\r\n const isCTVFlow = isCTVCampaign(flow);\r\n\r\n return {\r\n data: {\r\n ...AdGroupCriterions,\r\n Status: 'Paused',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Ad group'))),\r\n StartDate: getTomorrow(),\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 dayTimeRanges: [],\r\n },\r\n deviceTypes: getInitDeviceTypes(serverContext.DynamicPermissions, isCTVFlow),\r\n initialDeviceTypes: getInitDeviceTypes(serverContext.DynamicPermissions).map(device => ({\r\n criterion: device,\r\n bidAdjustment: -100,\r\n })),\r\n ageRanges: [\r\n AgeRanges.EighteenToTwentyFive,\r\n AgeRanges.TwentyFiveToThirtyFive,\r\n AgeRanges.ThirtyFiveToFifty,\r\n AgeRanges.FiftyToSixtyFive,\r\n AgeRanges.SixtyFiveAndAbove,\r\n AgeRanges.Unknown,\r\n ],\r\n initialAgeRanges: [],\r\n genderTypes: [\r\n GenderTypes.Female,\r\n GenderTypes.Male,\r\n GenderTypes.Unknown,\r\n ],\r\n initialGenderTypes: [],\r\n audiences: [],\r\n initialAudiences: [],\r\n interests: [],\r\n initialInterests: [],\r\n FrequencyCapSettings: [\r\n {},\r\n ],\r\n genreTargets: [],\r\n initialGenreTargets: [],\r\n\r\n CpmBid,\r\n SearchBid: bidRecommendations.SearchBid,\r\n\r\n reachEstimation: null,\r\n ...isDealCampaign(flow) && deal ? { deal } : {},\r\n },\r\n isValid: true,\r\n isDirty: true,\r\n messages: [],\r\n };\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { saveAds, getODataConfig } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\n\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\n\r\nimport { useAdsRepository } from '../../common/use-ads-repository';\r\nimport { getDefaultCampaign, getDefaultAdGroup } from './constants';\r\n\r\nexport const useVideoAdsRepository = (defaultCampaign, defaultAdGroup) => {\r\n const i18n = useContext(I18nContext);\r\n const { state } = useWizardService();\r\n const instrumentation = useContext(InstrumentationContext);\r\n const permissions = useContext(PermissionsContext);\r\n const { logSuggestionsApplied } = useCopilotLoggers();\r\n\r\n const scenario = instrumentation.createScenario('XandrVideoAdsAdStep');\r\n const activity = scenario.createActivity('Ad');\r\n const versionForLog = getLogVersion(permissions);\r\n const logger = getLoggerWithoutPageInfo(activity, versionForLog, 'XandrVideoAdsAdStep');\r\n const serverContext = useContext(ServerContext);\r\n const cid = serverContext.CurrentCustomer.Id;\r\n const aid = serverContext.CurrentAccount.Id;\r\n const oDataConfig = getODataConfig(serverContext);\r\n const { flow, deal } = state.context.wizardData;\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 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(uploadVideoMetadata({\r\n videoMetadata: ad.data.video,\r\n newVideoFromMTObject,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n }).then((video) => {\r\n _.extend(ad.data.video, video);\r\n }));\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\n const saveAdsWithMetadata = (data, context) => uploadVideoIfNeeded(data)\r\n .then(() => saveAds(data, context))\r\n .then((adData) => {\r\n const suggestionIds = _.chain(data.ads.data)\r\n .map(ad => ad.data.video.recommendationId).compact().value();\r\n const appliedVideoAssetIds = _.chain(data.ads.data)\r\n .map(ad => ad.data.video.idString).compact().value();\r\n\r\n logSuggestionsApplied(\r\n data.campaign.Id,\r\n data.adGroup.Id,\r\n undefined /* textSuggestions */,\r\n undefined /* imageSuggestionIds */,\r\n suggestionIds,\r\n appliedVideoAssetIds\r\n );\r\n return adData;\r\n });\r\n\r\n const { load, save } = useAdsRepository({\r\n saveAds: saveAdsWithMetadata,\r\n defaultCampaign: defaultCampaign || getDefaultCampaign(i18n, serverContext, flow, deal),\r\n defaultAdGroup: defaultAdGroup || getDefaultAdGroup(i18n, serverContext, flow, deal),\r\n });\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useState, useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Stack, mergeStyles } from '@fluentui/react';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { AdPreview, DisplayAdsContainer, PopulateImages, imagePlacementsToImage, getODataConfig } from '@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components';\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 { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { useFormService } from '@bingads-webui-react/form';\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 { StepHeader } from '../../shared/step-header';\r\n\r\nconst adCreatorStyles = mergeStyles({\r\n width: 500,\r\n});\r\n\r\nconst headerStyles = mergeStyles({\r\n width: 450,\r\n});\r\n\r\nexport const DisplayAds = ({\r\n data,\r\n onDataChange,\r\n error,\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 { campaign = {} } = 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 const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const removeEmptyAds = newAdsData => newAdsData.filter(ad => !_.isEmpty(ad.data));\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 onDataChange({ data: result, isValid: result.isValid });\r\n setDisplayImagePicker(false);\r\n }, [onDataChange, setDisplayImagePicker]);\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 {data && _.isEmpty(data.data) &&\r\n \r\n }\r\n {data && !_.isEmpty(data.data) &&\r\n \r\n }\r\n
\r\n {!_.isEmpty(data.data) &&\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\nDisplayAds.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};\r\n\r\nDisplayAds.defaultProps = {\r\n data: {},\r\n error: {},\r\n};\r\n","import { DeviceKeys, Devices } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\nimport { MinXandrDailyBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { getTomorrow } from '../../shared/helper/format-date';\r\nimport { AdGroupCriterions, AgeRanges, GenderTypes } from '../../common/constants';\r\nimport { getBidRecommendations } from '../../shared/components/bid-recommendations-data';\r\n\r\n\r\nexport const getDefaultCampaign = (i18n, serverContext) => ({\r\n data: {\r\n Status: 'Paused',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Display ads'))),\r\n Budget: {\r\n Amount: MinXandrDailyBudgetRangePerCurrency[serverContext.CurrentAccount.CurrencyCode],\r\n Type: 'DailyStandard',\r\n },\r\n Languages: [\r\n 'All',\r\n ],\r\n BiddingScheme: {\r\n Type: 'ManualCpm',\r\n },\r\n CampaignSubType: 5,\r\n CampaignType: 'Audience',\r\n conversionGoals: {\r\n originalConversionGoals: [],\r\n goalSelection: [],\r\n goalScopeSelection: Scopes.ACCOUNT,\r\n },\r\n },\r\n isValid: true,\r\n isDirty: false,\r\n messages: [],\r\n});\r\n\r\nexport const getDefaultAdGroup = (i18n, serverContext) => {\r\n const { CpmBid, SearchBid } = getBidRecommendations(serverContext, CampaignSubTypes.DisplayAds);\r\n\r\n return {\r\n data: {\r\n ...AdGroupCriterions,\r\n Status: 'Paused',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Ad group'))),\r\n StartDate: getTomorrow(),\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 dayTimeRanges: [],\r\n },\r\n deviceTypes: [\r\n DeviceKeys.Computers,\r\n DeviceKeys.Tablets,\r\n DeviceKeys.Smartphones,\r\n ],\r\n initialDeviceTypes: Object.keys(Devices).map(device => ({\r\n criterion: device,\r\n bidAdjustment: -100,\r\n })),\r\n ageRanges: [\r\n AgeRanges.EighteenToTwentyFive,\r\n AgeRanges.TwentyFiveToThirtyFive,\r\n AgeRanges.ThirtyFiveToFifty,\r\n AgeRanges.FiftyToSixtyFive,\r\n AgeRanges.SixtyFiveAndAbove,\r\n AgeRanges.Unknown,\r\n ],\r\n initialAgeRanges: [],\r\n genderTypes: [\r\n GenderTypes.Female,\r\n GenderTypes.Male,\r\n GenderTypes.Unknown,\r\n ],\r\n initialGenderTypes: [],\r\n audiences: [],\r\n initialAudiences: [],\r\n interests: [],\r\n initialInterests: [],\r\n FrequencyCapSettings: [\r\n {},\r\n ],\r\n genreTargets: [],\r\n initialGenreTargets: [],\r\n\r\n CpmBid,\r\n SearchBid,\r\n\r\n reachEstimation: null,\r\n },\r\n isValid: true,\r\n isDirty: true,\r\n messages: [],\r\n };\r\n};\r\n","import { useContext } from 'react';\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 { useAdsRepository } from '../../common/use-ads-repository';\r\nimport { getDefaultCampaign, getDefaultAdGroup } from './constants';\r\n\r\nexport const useDisplayAdsRepository = (defaultCampaign, defaultAdGroup) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { load, save } = useAdsRepository({\r\n saveAds,\r\n defaultCampaign: defaultCampaign || getDefaultCampaign(i18n, serverContext),\r\n defaultAdGroup: defaultAdGroup || getDefaultAdGroup(i18n, serverContext),\r\n });\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { DisplayAdsWithCopilot } from '@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { DisplayAds as DisplayAdsWithoutCopilot } from './display-ads';\r\n\r\nexport const DisplayAds = (props) => {\r\n const permissions = useContext(PermissionsContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const [isCopilotEnabled, setIsCopilotEnabled] = useState(false);\r\n useEffect(() => {\r\n // check if copilot is restricted in this region\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(isRegionRestricted => setIsCopilotEnabled(!isRegionRestricted));\r\n }, [permissions, serverContext]);\r\n\r\n if (permissions.dynamic.DisplayPlusCopilotAssetGeneration && isCopilotEnabled) {\r\n return ;\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport { useDisplayAdsRepository } from './use-display-ads-repository';\r\n\r\n","import React, { useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\n\r\nimport { isAudienceAdGroupCreation, isAudienceAdGroupMultiAdCreation, FLOWS, STEP_PATHS } from '../../../step-constants';\r\n\r\nconst getStyles = () => ({\r\n footerContainer: {\r\n display: 'flex',\r\n columnGap: '10px',\r\n marginTop: '20px',\r\n },\r\n});\r\n\r\nexport const NativeAdFooter = () => {\r\n const classes = useDefaultStyles(getStyles);\r\n const i18n = useContext(I18nContext);\r\n const { state, send } = useWizardService();\r\n\r\n const { flow } = state.context.wizardData;\r\n\r\n const onSaveAndCreateAnotherAd = () => {\r\n if (flow === FLOWS.AUDIENCE_CAMPAIGNS) {\r\n send({\r\n type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n flowFactors: { flow: FLOWS.MULTI_AUDIENCE_CAMPAIGNS },\r\n stepId: STEP_PATHS.MULTI_AD_MANAGER,\r\n wizardData: {\r\n flow: FLOWS.MULTI_AUDIENCE_CAMPAIGNS,\r\n },\r\n });\r\n } else if (isAudienceAdGroupCreation(flow)) {\r\n send({\r\n type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n flowFactors: { flow: FLOWS.AUDIENCE_AD_GROUP_MULTI_AD_CREATION },\r\n stepId: STEP_PATHS.MULTI_AD_MANAGER,\r\n wizardData: {\r\n flow: FLOWS.AUDIENCE_AD_GROUP_MULTI_AD_CREATION,\r\n },\r\n });\r\n } else {\r\n send({\r\n type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n stepId: STEP_PATHS.MULTI_AD_MANAGER,\r\n });\r\n }\r\n };\r\n\r\n const onCancel = () => {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.MULTI_AD_MANAGER,\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n {\r\n // only show cancel button in multi ads workflow.\r\n (flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS || isAudienceAdGroupMultiAdCreation(flow)) && (\r\n \r\n )\r\n }\r\n
\r\n );\r\n};\r\n","import _ from 'underscore';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\nimport { DeviceKeys, Devices } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { getBudgetRange } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { UAPPlacementTypeAlias as EPT } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { ROTATION_OPTIONS } from '@bingads-webui-react/ad-rotation';\r\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { getDaysInTheFuture } from '../../shared/helper/format-date';\r\nimport { AdGroupCriterions, AgeRanges, GenderTypes } from '../../common/constants';\r\nimport { getBidRecommendations } from '../../shared/components/bid-recommendations-data';\r\n\r\n\r\nexport const AdPreviewSurfacePlacementKeys = {\r\n Msn: ['msan_191x100', 'edge_178x100', 'msan_150x100', 'msan_1x1', 'msan_133x100'],\r\n};\r\n\r\nconst getDefaultBidForCPCBiddingScheme = (i18n, serverContext) => {\r\n const bid = _.isUndefined(serverContext.RecommendCPCBid) || _.isNull(serverContext.RecommendCPCBid) ? 3.3 : serverContext.RecommendCPCBid;\r\n return i18n.formatDecimal(bid, {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n });\r\n};\r\n\r\nexport const getDefaultCampaign = (i18n, serverContext) => {\r\n const { DynamicPermissions = {} } = serverContext || {};\r\n const {\r\n CampaignLifetimeBudget: IsCampaignLifetimeBudgetEnabled,\r\n } = DynamicPermissions;\r\n\r\n let lifetimeBudgetProperties = {};\r\n if (IsCampaignLifetimeBudgetEnabled) {\r\n lifetimeBudgetProperties = {\r\n StartDate: getDaysInTheFuture(2),\r\n UseCampaignLevelDates: true,\r\n };\r\n }\r\n\r\n return ({\r\n data: {\r\n Status: 'Paused',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Audience Static'))),\r\n Budget: {\r\n Amount: getBudgetRange(serverContext.CurrentAccount.CurrencyCode).Daily.Default,\r\n Type: 'DailyStandard',\r\n },\r\n Languages: [\r\n 'All',\r\n ],\r\n BiddingScheme: {\r\n Type: 'EnhancedCpc',\r\n },\r\n CampaignSubType: 0,\r\n CampaignType: 'Audience',\r\n conversionGoals: {\r\n originalConversionGoals: [],\r\n goalSelection: [],\r\n goalScopeSelection: Scopes.ACCOUNT,\r\n },\r\n ...lifetimeBudgetProperties,\r\n },\r\n isValid: true,\r\n isDirty: false,\r\n messages: [],\r\n });\r\n};\r\n\r\nexport const getDefaultAdGroup = (i18n, serverContext) => {\r\n const bidRecommendations = getBidRecommendations(serverContext, CampaignSubTypes.AudienceStatic);\r\n\r\n return {\r\n data: {\r\n ...AdGroupCriterions,\r\n Status: 'Paused',\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Ad group'))),\r\n StartDate: getDaysInTheFuture(2),\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 dayTimeRanges: [],\r\n },\r\n deviceTypes: [\r\n DeviceKeys.Computers,\r\n DeviceKeys.Tablets,\r\n DeviceKeys.Smartphones,\r\n ],\r\n initialDeviceTypes: Object.keys(Devices).map(device => ({\r\n criterion: device,\r\n bidAdjustment: -100,\r\n })),\r\n ageRanges: [\r\n AgeRanges.EighteenToTwentyFive,\r\n AgeRanges.TwentyFiveToThirtyFive,\r\n AgeRanges.ThirtyFiveToFifty,\r\n AgeRanges.FiftyToSixtyFive,\r\n AgeRanges.SixtyFiveAndAbove,\r\n AgeRanges.Unknown,\r\n ],\r\n initialAgeRanges: [],\r\n genderTypes: [\r\n GenderTypes.Female,\r\n GenderTypes.Male,\r\n GenderTypes.Unknown,\r\n ],\r\n TargetSetting: 'Age;Gender',\r\n initialGenderTypes: [],\r\n audiences: [],\r\n initialAudiences: [],\r\n interests: [],\r\n initialInterests: [],\r\n FrequencyCapSettings: [\r\n {},\r\n ],\r\n genreTargets: [],\r\n initialIndustryTargets: [],\r\n initialNegativeIndustryTargets: [],\r\n initialGenreTargets: [],\r\n initialJobTargets: [],\r\n initialNegativeJobTargets: [],\r\n initialCompanyNameTargets: [],\r\n initialNegativeCompanyNameTargets: [],\r\n companyNameTargets: [],\r\n negativeCompanyNameTargets: [],\r\n\r\n CpmBid: bidRecommendations.CpmBid,\r\n SearchBid: bidRecommendations.SearchBid || getDefaultBidForCPCBiddingScheme(i18n, serverContext),\r\n\r\n reachEstimation: null,\r\n UseOptimizedTargeting: true,\r\n AdRotation: ROTATION_OPTIONS.OPTIMIZED_FOR_CLICKS,\r\n },\r\n isValid: true,\r\n isDirty: true,\r\n messages: [],\r\n };\r\n};\r\n\r\n\r\nexport const AdModes = {\r\n SINGLE_AD: 'SINGLE_AD',\r\n MULTI_AD: 'MULTI_AD',\r\n};\r\n\r\n//\r\n// Ad Preview Constants\r\nexport const extraPlacementInfo = {\r\n [EPT.Responsive.MSAN.WideImage]: {\r\n previewTitle: _TL_('MSN feed'),\r\n previewHeaderTitle: _TL_('Ad preview (1.91 : 1 aspect ratio)'),\r\n customClassName: 'msan_191x100',\r\n imagePreviewHeight: 200,\r\n disclaimerMessage: _TL_('This is an example of how your ad could appear on other websites on the Microsoft Advertising Network. The final ad format is likely to change to match the look and feel of the website.'),\r\n editingPlacementType: EPT.MSAN.WideImage,\r\n },\r\n [EPT.Responsive.MSAN.MSEdgeSingleCarousel]: {\r\n previewTitle: _TL_('Microsoft Edge single carousel'),\r\n previewHeaderTitle: _TL_('Ad preview (1.78 : 1 aspect ratio)'),\r\n customClassName: 'edge_178x100',\r\n imagePreviewHeight: 220,\r\n editingPlacementType: EPT.MSAN.MSEdgeSingleCarousel,\r\n },\r\n [EPT.Responsive.MSAN.MSNInArticle]: {\r\n previewTitle: _TL_('MSN in-article ad'),\r\n previewHeaderTitle: _TL_('Ad preview (1.5 : 1 aspect ratio)'),\r\n customClassName: 'msan_150x100',\r\n imagePreviewHeight: 200,\r\n editingPlacementType: EPT.MSAN.MSNInArticle,\r\n },\r\n [EPT.Responsive.MSAN.MSNSmallHeadline]: {\r\n previewTitle: _TL_('MSN small headline'),\r\n previewHeaderTitle: _TL_('Ad preview (1.33 : 1 aspect ratio)'),\r\n customClassName: 'msan_133x100',\r\n imagePreviewHeight: 75,\r\n editingPlacementType: EPT.MSAN.MSNSmallHeadline,\r\n },\r\n [EPT.Responsive.MSAN.SquareImage]: {\r\n previewTitle: _TL_('MSN square image'),\r\n previewHeaderTitle: _TL_('Ad preview (1 : 1 aspect ratio)'),\r\n customClassName: 'msan_1x1',\r\n imagePreviewHeight: 75,\r\n disclaimerMessage: _TL_('This is an example of how your ad could appear on other websites on the Microsoft Advertising Network. The final ad format is likely to change to match the look and feel of the website.'),\r\n editingPlacementType: EPT.MSAN.SquareImage,\r\n },\r\n [EPT.Responsive.Outlook.Mobile]: {\r\n previewTitle: _TL_('Microsoft Outlook web (mobile)'),\r\n customClassName: 'outlook_text_mobile',\r\n editingPlacementType: EPT.Outlook.Mobile,\r\n },\r\n [EPT.Responsive.Outlook.Web]: {\r\n previewTitle: _TL_('Microsoft Outlook web (computer)'),\r\n customClassName: 'outlook_text_web',\r\n editingPlacementType: EPT.Outlook.Web,\r\n },\r\n [EPT.Responsive.Boost.WindowsSpotlight]: {\r\n previewTitle: _TL_('Windows Spotlight'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.WindowsSpotlight,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.DiscoverCard]: {\r\n previewTitle: _TL_('Discover card'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.DiscoverCard,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.StartMenu]: {\r\n previewTitle: _TL_('Start Menu'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.StartMenu,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.ActionCenter]: {\r\n previewTitle: _TL_('Action Center'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.ActionCenter,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.Banner]: {\r\n previewTitle: _TL_('Banner'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.Banner,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.Prong1Prong2Feed]: {\r\n previewTitle: _TL_('Prong 1 / Prong 2 / Feed'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.Prong1Prong2Feed,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.Coachmark]: {\r\n previewTitle: _TL_('CoachMark'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.Coachmark,\r\n hideHeaderButtons: true,\r\n },\r\n};\r\n\r\nexport const responsiveMsanMMAConfig = [{\r\n placementSetName: 'responsiveMsanMMAConfig',\r\n placementTypes: [\r\n EPT.Responsive.MSAN.WideImage,\r\n EPT.Responsive.MSAN.MSEdgeSingleCarousel,\r\n EPT.Responsive.MSAN.MSNInArticle,\r\n EPT.Responsive.MSAN.MSNSmallHeadline,\r\n EPT.Responsive.MSAN.SquareImage,\r\n EPT.Responsive.Outlook.Web,\r\n EPT.Responsive.Outlook.Mobile,\r\n ],\r\n}];\r\n\r\nexport const msanMMAConfig = [{\r\n placementSetName: 'msanMMAConfig',\r\n placementTypes: [\r\n EPT.MSAN.WideImage,\r\n EPT.MSAN.MSEdgeSingleCarousel,\r\n EPT.MSAN.MSNInArticle,\r\n EPT.MSAN.MSNSmallHeadline,\r\n EPT.MSAN.SquareImage,\r\n EPT.Outlook.Web,\r\n EPT.Outlook.Mobile,\r\n ],\r\n}];\r\n\r\nexport const responsiveMsanMMABoostConfig = [{\r\n placementSetName: 'responsiveMsanMMABoostConfig',\r\n placementTypes: [\r\n EPT.Responsive.MSAN.WideImage,\r\n EPT.Responsive.MSAN.MSEdgeSingleCarousel,\r\n EPT.Responsive.MSAN.MSNInArticle,\r\n EPT.Responsive.MSAN.MSNSmallHeadline,\r\n EPT.Responsive.MSAN.SquareImage,\r\n EPT.Responsive.Boost.WindowsSpotlight,\r\n EPT.Responsive.Boost.DiscoverCard,\r\n EPT.Responsive.Boost.StartMenu,\r\n EPT.Responsive.Boost.ActionCenter,\r\n EPT.Responsive.Boost.Banner,\r\n EPT.Responsive.Boost.Prong1Prong2Feed,\r\n EPT.Responsive.Boost.Coachmark,\r\n ],\r\n}];\r\n\r\nexport const msanMMABoostConfig = [{\r\n placementSetName: 'msanMMABoostConfig',\r\n placementTypes: [\r\n EPT.MSAN.WideImage,\r\n EPT.MSAN.MSEdgeSingleCarousel,\r\n EPT.MSAN.MSNInArticle,\r\n EPT.MSAN.MSNSmallHeadline,\r\n EPT.MSAN.SquareImage,\r\n EPT.Boost.WindowsSpotlight,\r\n EPT.Boost.DiscoverCard,\r\n EPT.Boost.StartMenu,\r\n EPT.Boost.ActionCenter,\r\n EPT.Boost.Banner,\r\n EPT.Boost.Prong1Prong2Feed,\r\n EPT.Boost.Coachmark,\r\n ],\r\n}];\r\n","import { extensionEditorStyles } from '@bingads-webui-campaign-react/common-styles';\r\nimport { AdPreviewOverideStylesByKey } from '../../common/constants';\r\n\r\nconst IndicatorWidth = 10;\r\nconst IndicatorsGap = 8;\r\n\r\nconst getIndicatorsWidth = placements => (placements * IndicatorWidth) + ((placements - 1) * IndicatorsGap);\r\n\r\nexport const getStyles = (_, { palette = {} }) => ({\r\n '@global': {\r\n ...extensionEditorStyles({ palette }),\r\n },\r\n nativeAdStepShell: {\r\n width: '100%',\r\n },\r\n 'nativeAdStepShell-l': {\r\n width: 'calc(100% - 64px)',\r\n },\r\n nativeAdImagePreviewCarousel: {\r\n position: 'sticky',\r\n width: 420,\r\n top: '0px',\r\n '& .carousel-inner .ad-placement-preview': {\r\n height: 450,\r\n },\r\n '& .new-preview-carousel-container-adprelib': {\r\n // backgroundColor: '#ffffff',\r\n border: '1px solid #C8C8C8 !important',\r\n // borderRadius: '4px',\r\n // boxShadow: '0px 2px 4px 0px rgba(0, 0, 0, 0.10)',\r\n // maxWidth: '420px',\r\n minWidth: 'unset !important',\r\n\r\n '& .preview-string': {\r\n bottom: 'unset !important',\r\n },\r\n\r\n '& .ad-preview-actions': {\r\n display: 'flex',\r\n },\r\n '& .carousel-inner': {\r\n height: 450,\r\n },\r\n\r\n '& .carousel-indicators': {\r\n display: 'flex',\r\n gap: '8px',\r\n left: '50% !important',\r\n margin: '48px 0 !important',\r\n transform: 'translateX(-50%)',\r\n\r\n '& li': {\r\n margin: '0',\r\n },\r\n },\r\n\r\n '& .carousel-control': {\r\n display: 'flex',\r\n width: '12px',\r\n margin: '12px 0 !important',\r\n left: '50% !important',\r\n },\r\n\r\n '& .carousel-wrapper .carousel-control.left': {\r\n transform: ({ placements }) => {\r\n const transformations = [];\r\n\r\n // Move left arrow to the center\r\n transformations.push('translateX(-50%)');\r\n\r\n // Move left arrow to the left of the indicators\r\n const indicatorsWidth = getIndicatorsWidth(placements);\r\n transformations.push(`translateX(-${indicatorsWidth / 2}px)`);\r\n\r\n // Add extra space between the left arrow and the indicators\r\n transformations.push('translateX(-16px)');\r\n\r\n return transformations.join(' ');\r\n },\r\n bottom: 16,\r\n },\r\n\r\n '& .carousel-wrapper .carousel-control.right': {\r\n transform: ({ placements }) => {\r\n const transformations = [];\r\n\r\n // Move right arrow to the center\r\n transformations.push('translateX(-50%)');\r\n\r\n // Move right arrow to the right of the indicators\r\n const indicatorsWidth = getIndicatorsWidth(placements);\r\n transformations.push(`translateX(${indicatorsWidth / 2}px)`);\r\n\r\n // Add extra space between the right arrow and the indicators\r\n transformations.push('translateX(14px)');\r\n\r\n return transformations.join(' ');\r\n },\r\n bottom: 16,\r\n },\r\n\r\n '& .ad-preview-title': {\r\n height: '24px',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n\r\n '& .preview-title-string-key': {\r\n color: '#323130',\r\n fontSize: '14px',\r\n fontWeight: 700,\r\n marginRight: '8px',\r\n },\r\n\r\n '& .preview-title-preview-type': {\r\n fontSize: '14px',\r\n },\r\n },\r\n\r\n '& .carousel-inner .ad-placement-preview, & .carousel-inner .ad-placement-card-preview': {\r\n overflow: 'hidden',\r\n\r\n '& .card-parent': {\r\n width: '100%',\r\n },\r\n\r\n '& .responsive-ad-preview-content': {\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.boost-windows, & .ad-placement-card-preview.boost-windows': {\r\n '& .card-parent': {\r\n '& .responsive-ad-preview-content': {\r\n height: 'fit-content',\r\n width: 'fit-content',\r\n maxWidth: '100%',\r\n '& .text-container-apl': {\r\n maxWidth: 'calc(100% - 25px)',\r\n },\r\n },\r\n },\r\n },\r\n '& .ad-placement-preview.boost-start-menu, & .ad-placement-card-preview.boost-start-menu': {\r\n '& .new-responsive-ad-preview-container': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.boost-actionCenter, & .ad-placement-card-preview.boost-actionCenter': {\r\n '& .new-responsive-ad-preview-container': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.boost-banner, & .ad-placement-card-preview.boost-banner': {\r\n '& .new-responsive-ad-preview-container': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.mma_191x100, & .ad-placement-card-preview.mma_191x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.mma_191x100.imagePreviewWidth,\r\n '& .text-container-apl': {\r\n padding: '5px 12px 12px 12px',\r\n '& .short-headline': {\r\n wordWrap: 'break-word',\r\n },\r\n '& .final-url': {\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.edge_178x100, & .ad-placement-card-preview.edge_178x100': {\r\n '& .card-parent': {\r\n '& .responsive-ad-preview-content': {\r\n height: 'fit-content',\r\n width: 'fit-content',\r\n maxWidth: '100%',\r\n '& .text-container-apl': {\r\n maxWidth: 'calc(100% - 25px)',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.msan_191x100, & .ad-placement-card-preview.msan_191x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.msan_191x100.imagePreviewWidth,\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.msan_150x100, & .ad-placement-card-preview.msan_150x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.msan_150x100.imagePreviewWidth,\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.msan_1x1, & .ad-placement-card-preview.msan_1x1': {\r\n padding: 20,\r\n },\r\n\r\n '& .ad-placement-preview.msan_133x100, & .ad-placement-card-preview.msan_133x100': {\r\n padding: 20,\r\n },\r\n\r\n '& .ad-placement-preview.bing_text, & .ad-placement-card-preview.bing_text': {\r\n '& .responsive-ad-preview-content': {\r\n '& .text-container-apl': {\r\n '& .final-url > .multi-line-processed-text': {\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.outlook_text_mobile, & .ad-placement-card-preview.outlook_text_mobile': {\r\n '& .responsive-ad-preview-content': {\r\n boxSizing: 'content-box',\r\n maxWidth: 'calc(100% - 50px)',\r\n '& .description': {\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n width: '100%',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.outlook_text_web, & .ad-placement-card-preview.outlook_text_web': {\r\n padding: '0px 8px',\r\n\r\n '& .responsive-ad-preview-content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n minWidth: 0,\r\n '& .text-container-apl': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n whiteSpace: 'nowrap',\r\n minWidth: 0,\r\n '& .pre-headline-divider': {\r\n height: 2,\r\n },\r\n '& .description-parent': {\r\n flex: '1 1 0px',\r\n minWidth: 0,\r\n '& .description': {\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n width: '100%',\r\n },\r\n },\r\n },\r\n\r\n '& .business-name-with-ads': {\r\n marginRight: 10,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n 'nativeAdImagePreviewCarousel-xxl': {\r\n '@media (min-width: 1400px)': {\r\n width: 530,\r\n },\r\n width: 420,\r\n },\r\n 'nativeAdImagePreviewCarousel-xl': {\r\n width: 420,\r\n },\r\n rightStyles: {\r\n // '@media (min-width: 1750px)': {\r\n // width: '50%',\r\n // },\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n width: '100%',\r\n gap: '32px',\r\n '& .text-input-container': {\r\n width: '100% !important',\r\n },\r\n '& .title-item': {\r\n width: 'auto',\r\n maxWidth: '100%',\r\n },\r\n },\r\n leftStyles: {\r\n width: '100%',\r\n maxWidth: '530px',\r\n },\r\n 'leftStyles-xxl': {\r\n width: '530px',\r\n },\r\n 'leftStyles-xl': {\r\n width: '430px',\r\n },\r\n headerStackStyles: {\r\n width: 'unset',\r\n },\r\n 'headerStackStyles-l': {\r\n width: '430px',\r\n },\r\n 'headerStackStyles-xl': {\r\n width: '430px',\r\n },\r\n 'headerStackStyles-xxl': {\r\n width: '530px',\r\n },\r\n imageExperienceStyle: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n '& .image-list-choice-group .ms-ChoiceFieldGroup-flexContainer': {\r\n width: 'unset !important',\r\n },\r\n },\r\n textAssetStyle: {\r\n '& .text-assets-collection-container': {\r\n width: '100%',\r\n // '@media (max-width: 1750px)': {\r\n // width: 'unset !important',\r\n // },\r\n },\r\n },\r\n businessNameStyle: {\r\n '& .business-name-container': {\r\n width: '100%',\r\n // '@media (max-width: 1750px)': {\r\n // width: 'unset !important',\r\n // },\r\n },\r\n },\r\n imageListLoadingContainer: {\r\n minHeight: 84,\r\n '& .loading': {\r\n paddingTop: 30,\r\n },\r\n },\r\n imageListErrorContainer: {\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 },\r\n adPreviewPlacementHeader: {\r\n '& > .ad-preview-title': {\r\n margin: '20px 24px 16px 24px',\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n lineHeight: '24px',\r\n },\r\n },\r\n adPreviewPlacementContainer: {\r\n height: 450,\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n flexDirection: 'column',\r\n\r\n '&:hover .card-parent .placement-card-content': {\r\n borderColor: '#004578',\r\n },\r\n\r\n '& .ad-placement-card-preview': {\r\n overflow: 'visible !important', // to show the shadow\r\n margin: 'unset !important',\r\n\r\n },\r\n\r\n '& .ad-placement-card-preview.edge_178x100': {\r\n '& .card-parent': {\r\n maxWidth: 220 * 1.78,\r\n },\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_133x100': {\r\n marginTop: '150px !important',\r\n paddingBottom: '0 !important',\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_1x1': {\r\n marginTop: '150px !important',\r\n paddingBottom: '0 !important',\r\n },\r\n\r\n '& .ad-placement-card-preview.outlook_text_web': {\r\n marginTop: '150px !important',\r\n },\r\n\r\n '& .ad-placement-card-preview.outlook_text_mobile': {\r\n margin: '150px 11.5px 0 11.5px !important',\r\n },\r\n\r\n '& .preview-string': {\r\n width: '100%',\r\n fontSize: 14,\r\n textAlign: 'center',\r\n lineHeight: '20px',\r\n paddingTop: 12,\r\n },\r\n\r\n '& .additional-disclaimer-message': {\r\n position: 'absolute',\r\n left: 0,\r\n width: '100%',\r\n bottom: 0,\r\n padding: '0 24px',\r\n fontSize: 12,\r\n textAlign: 'left',\r\n lineHeight: '20px',\r\n },\r\n\r\n '& .placement-validation-message': {\r\n display: 'inline-block',\r\n width: '100%',\r\n fontSize: 14,\r\n textAlign: 'center',\r\n lineHeight: 2,\r\n marginRight: 16,\r\n },\r\n\r\n '& .responsive-boost-ad-placement-container': {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n '& > .ad-placement-card-preview': {\r\n boxShadow: '0px 0.511px 1.533px rgb(0 0 0 / 10%), 0px 2.72533px 6.132px rgb(0 0 0 / 13%) !important',\r\n borderRadius: '5.11px !important',\r\n },\r\n },\r\n '& .responsive-boost-ad-placement-container.responsive-boost-start-menu': {\r\n marginTop: '30%',\r\n },\r\n '& .responsive-boost-ad-placement-container.responsive-boost-action-center': {\r\n marginTop: '20%',\r\n },\r\n '& .responsive-boost-ad-placement-container.responsive-boost-banner': {\r\n marginTop: '35%',\r\n marginLeft: 15,\r\n marginRight: 15,\r\n },\r\n },\r\n});\r\n","import classNames from 'classnames';\r\nimport React, { useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { DisplayPlusNativeAds } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\n\r\nimport { NativeAdFooter } from './native-ad-footer';\r\nimport { getDefaultCampaign } from '../constants';\r\nimport { useBiddingScheme } from '../../../common/bidding-schemes';\r\nimport { getStyles } from '../../../shared/image-experience/style';\r\nimport { StepHeader } from '../../../shared/step-header';\r\n\r\nconst NativeAdInternal = ({\r\n data: ads,\r\n error,\r\n onDataChange,\r\n scope,\r\n hideFooter,\r\n supportImageFitting,\r\n loadClipchampPlayer = null,\r\n}) => {\r\n const {\r\n errors = [],\r\n } = error || {};\r\n const { data } = ads;\r\n\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const finalHideFooter = hideFooter || !permissions.dynamic.DisplayPlusMultipleAds;\r\n\r\n const { state } = useWizardService();\r\n const { editingAdId } = state.context.wizardData;\r\n\r\n const { state: { context: { saveFailed } } } = useFormService();\r\n\r\n const { cid, aid } = scope.values || {};\r\n const biddingScheme = useBiddingScheme({\r\n cid, aid, getDefaultCampaign, i18n,\r\n });\r\n\r\n const currentStates = state.toStrings()[1];\r\n\r\n const { IsAmplifyEnabled } = Permissions;\r\n const { DisplayPlusAmplify } = DynamicPermissions;\r\n\r\n const stylingProps = useMemo(() =>\r\n ({ component: { placements: (IsAmplifyEnabled && DisplayPlusAmplify) ? 11 : 7 } }), [DisplayPlusAmplify, IsAmplifyEnabled]);\r\n\r\n const getClasses = useResponsiveStyles(getStyles, stylingProps);\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onNativeAdsStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onNativeAdsStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n const onValidate = useCallback((result) => {\r\n onDataChange({\r\n data: {\r\n data: {\r\n ...data,\r\n ...result.data,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }, [data, onDataChange]);\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 {!finalHideFooter && }\r\n
\r\n );\r\n};\r\n\r\nNativeAdInternal.propTypes = {\r\n data: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.string,\r\n MobileFinalUrls: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.arrayOf(PropTypes.string),\r\n LongHeadlines: PropTypes.arrayOf(PropTypes.string),\r\n Descriptions: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({}),\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n ImpressionTrackingUrls: PropTypes.string,\r\n VerifiedTrackingSettings: PropTypes.shape({}),\r\n FinalUrlForRecommendation: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n language: PropTypes.string,\r\n }),\r\n hotspots: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.string,\r\n aid: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n hideFooter: PropTypes.bool,\r\n supportImageFitting: PropTypes.bool,\r\n};\r\n\r\nNativeAdInternal.defaultProps = {\r\n hideFooter: false,\r\n supportImageFitting: false,\r\n};\r\n\r\nexport const NativeAd = withScope(NativeAdInternal);\r\n","import { isNumber, has } from 'underscore';\r\n\r\nenum ScaleUnit\r\n{\r\n Billion=1e9,\r\n Million=1e6,\r\n Thousand=1e3,\r\n None=1,\r\n}\r\n\r\nconst getValueWithUnit = (value: number, unit: string) => {\r\n if (isNumber(value) && has(ScaleUnit, unit)) {\r\n return value * ScaleUnit[unit];\r\n }\r\n return 0;\r\n};\r\n\r\nconst 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, getValueWithUnit };\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { NativeAd } from './components/native-ad';\r\n\r\nexport const SingleNativeAdStepShell = ({\r\n data,\r\n error,\r\n onDataChange,\r\n}) => {\r\n const stepData = useMemo(() => (data || {}), [data]);\r\n\r\n const nativeAd = useMemo(() => (\r\n \r\n ), [error, onDataChange, stepData]);\r\n\r\n return (\r\n <>\r\n {nativeAd}\r\n \r\n );\r\n};\r\n\r\n\r\nSingleNativeAdStepShell.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({}).isRequired,\r\n};\r\n","import { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { saveAds, saveAdsWithMetadata } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { getDefaultCampaign, getDefaultAdGroup } from './constants';\r\nimport { useAdsRepository } from '../../common/use-ads-repository';\r\n\r\nexport const useNativeAdRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const isVideoAsAnAssetEnabled = serverContext.Permissions && serverContext.DynamicPermissions.VideoAsAnAsset && !serverContext.Permissions.IsAmplifyEnabled;\r\n\r\n const { load, save } = useAdsRepository({\r\n saveAds: isVideoAsAnAssetEnabled ? saveAdsWithMetadata : saveAds,\r\n defaultCampaign: getDefaultCampaign(i18n, serverContext),\r\n defaultAdGroup: getDefaultAdGroup(i18n, serverContext),\r\n });\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useMemo, useCallback, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n Text,\r\n Button,\r\n Card,\r\n CardPreview,\r\n CardHeader,\r\n CardFooter,\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogBody,\r\n DialogActions,\r\n DialogContent,\r\n} from '@fluentui/react-components';\r\nimport {\r\n EditRegular, DeleteRegular,\r\n} from '@fluentui/react-icons';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { STEP_PATHS } from '../../../../step-constants';\r\n\r\nconst getStyles = () => ({\r\n adThumbailRoot: {\r\n height: '236px',\r\n width: '212px',\r\n borderRadius: '6px',\r\n boxShadow: '0px 2px 4px 0px #00000024',\r\n '&:hover': {\r\n '& .hover-buttons': {\r\n display: 'flex',\r\n background: 'linear-gradient(180deg, rgba(49, 34, 34, 0.6) 0%, rgba(49, 34, 34, 0.9) 52%, #312222 100%)',\r\n },\r\n },\r\n '&:focus': {\r\n '& .hover-buttons': {\r\n display: 'flex',\r\n background: 'linear-gradient(180deg, rgba(49, 34, 34, 0.6) 0%, rgba(49, 34, 34, 0.9) 52%, #312222 100%)',\r\n },\r\n },\r\n },\r\n cardPreview: {\r\n height: '118px',\r\n width: '212px',\r\n },\r\n adLabel: {\r\n borderRadius: '4px',\r\n border: '0.5px solid black',\r\n textAlign: 'center',\r\n fontSize: '10px',\r\n height: 16,\r\n width: 21,\r\n\r\n },\r\n description: {\r\n overflow: 'hidden !important',\r\n textOverflow: 'ellipsis !important',\r\n height: '40px',\r\n width: '180px',\r\n display: '-webkit-box !important',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n },\r\n header: {\r\n width: '180px',\r\n overflow: 'hidden !important',\r\n textOverflow: 'ellipsis !important',\r\n textWrap: 'nowrap !important',\r\n },\r\n hoverButtons: {\r\n display: 'none',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n width: '100%',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n rowGap: '5px',\r\n flexDirection: 'column',\r\n zIndex: 10,\r\n },\r\n hoverButton: {\r\n border: 'none !important',\r\n backgroundColor: 'rgba(255, 255, 255, 0.09) !important',\r\n color: 'white !important',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 120, 212, 1) !important',\r\n },\r\n '&:focus': {\r\n backgroundColor: 'rgba(0, 120, 212, 1) !important',\r\n },\r\n },\r\n footer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n columnGap: '5px',\r\n },\r\n});\r\n\r\nexport const AdThumbnail = ({\r\n item,\r\n onDeleteAdClicked,\r\n idx,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const { send } = useWizardService();\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const adTitle = useMemo(() => item && item.Headlines && item.Headlines.Headline0, [item]);\r\n\r\n const adId = useMemo(() => item && item.Id, [item]);\r\n\r\n const adDescription = useMemo(() => item && item.Descriptions && item.Descriptions.Description0, [item]);\r\n\r\n const businessName = useMemo(() => item && item.BusinessName, [item]);\r\n\r\n const adImageUrl = useMemo(() => item && item.Images && item.Images.ImageList && item.Images.ImageList[0] && item.Images.ImageList[0][0].src, [item]);\r\n\r\n const onEditAdClick = useCallback((editingAdId) => {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n editingAdId,\r\n });\r\n\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.MULTI_NATIVE_AD,\r\n });\r\n }, [send]);\r\n\r\n const onDeleteAd = useCallback((deletingAdId) => {\r\n onDeleteAdClicked(deletingAdId);\r\n }, [onDeleteAdClicked]);\r\n\r\n return (\r\n \r\n \r\n \r\n \"\"\r\n \r\n {adTitle}}\r\n description={{adDescription}}\r\n />\r\n \r\n
Ad { businessName }
\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_('Delete this Ad?'))} \r\n \r\n {i18n.getString(_TL_('This ad will be removed from this campaign. There is no way to undo this action.'))}\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\nAdThumbnail.propTypes = {\r\n item: PropTypes.shape({\r\n Id: PropTypes.string,\r\n Headlines: PropTypes.shape({\r\n Headline0: PropTypes.string,\r\n }),\r\n Descriptions: PropTypes.shape({\r\n Description0: PropTypes.string,\r\n }),\r\n BusinessName: PropTypes.string,\r\n Images: PropTypes.shape({\r\n ImageList: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({\r\n src: PropTypes.string,\r\n }))),\r\n }),\r\n }).isRequired,\r\n onDeleteAdClicked: PropTypes.func.isRequired,\r\n idx: PropTypes.number.isRequired,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Button, makeStyles } from '@fluentui/react-components';\r\nimport { Stack } from '@fluentui/react';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { deleteAd } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { StepHeader } from '../../../../shared/step-header';\r\nimport { AdThumbnail } from './ad-thumbnail';\r\nimport { STEP_PATHS, FLOWS, isAudienceAdGroupMultiAdCreation } from '../../../../step-constants';\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: '52px',\r\n },\r\n});\r\n\r\nconst getStyles = () => ({\r\n addNewAdButtonRoot: {\r\n height: 236,\r\n width: 212,\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});\r\n\r\nexport const NativeAdsContainer = ({\r\n data,\r\n onDataChange,\r\n // error,\r\n // adMode,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const i18n = useContext(I18nContext);\r\n const { state, send } = useWizardService();\r\n\r\n const { ads } = (data && data.ads) || {};\r\n\r\n const {\r\n flow, campaign, adGroup, ads: adsData,\r\n } = state.context.wizardData;\r\n\r\n const fluentV2Styles = useFluentV2Styles();\r\n\r\n const onClickCreateNewAd = () => {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n editingAdId: null,\r\n });\r\n\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.MULTI_NATIVE_AD,\r\n });\r\n };\r\n\r\n const updateData = (adsToUpdate) => {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n ads: {\r\n ...adsData,\r\n ads: {\r\n ...adsToUpdate,\r\n },\r\n },\r\n },\r\n });\r\n };\r\n\r\n const onDeleteAdClicked = (adId) => {\r\n deleteAd({\r\n ad: [ads[adId].data],\r\n campaign,\r\n adGroup,\r\n }).then(() => {\r\n const adsWithoutDeletedAd = _.omit(ads, adId);\r\n\r\n if (_.isEmpty(adsWithoutDeletedAd)) {\r\n updateData(adsWithoutDeletedAd);\r\n\r\n const updatedFlow = isAudienceAdGroupMultiAdCreation(flow) ? FLOWS.AUDIENCE_AD_GROUP_CREATION : FLOWS.AUDIENCE_CAMPAIGNS;\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n ads: {\r\n ...adsWithoutDeletedAd,\r\n },\r\n editingAdId: null,\r\n flow: updatedFlow,\r\n });\r\n\r\n send(WIZARD_EVENTS.SAVE_AND_GOTO, {\r\n stepId: STEP_PATHS.NATIVE_AD,\r\n flowFactors: { flow: updatedFlow },\r\n });\r\n } else {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n ads: {\r\n ...adsData,\r\n ads: {\r\n ...adsWithoutDeletedAd,\r\n },\r\n },\r\n });\r\n updateData(adsWithoutDeletedAd);\r\n }\r\n });\r\n };\r\n\r\n const adIds = useMemo(() => _.keys(ads), [ads]);\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 data && adIds.map((adId, idx) => (\r\n \r\n ))\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nNativeAdsContainer.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n // onDataChange: PropTypes.func.isRequired,\r\n // error: PropTypes.shape({}).isRequired,\r\n // adMode: PropTypes.string.isRequired,\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { NativeAd } from './components/native-ad';\r\n\r\nexport const MultiAdsStepShell = ({\r\n data,\r\n error,\r\n onDataChange,\r\n}) => {\r\n const stepData = useMemo(() => (data || {}), [data]);\r\n\r\n const nativeAd = useMemo(() => (\r\n \r\n ), [error, onDataChange, stepData]);\r\n\r\n return (\r\n <>\r\n {nativeAd}\r\n \r\n );\r\n};\r\n\r\nMultiAdsStepShell.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({}).isRequired,\r\n};\r\n","import { useContext, useCallback } 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 { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { saveAds, saveAdsWithMetadata } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { getDefaultCampaign, getDefaultAdGroup } from './constants';\r\nimport { useAdsRepository } from '../../common/use-ads-repository';\r\n\r\nexport const useMultipleNativeAdsRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const isVideoAsAnAssetEnabled = serverContext.Permissions && serverContext.DynamicPermissions.VideoAsAnAsset && !serverContext.Permissions.IsAmplifyEnabled;\r\n const { state } = useWizardService();\r\n\r\n const { save } = useAdsRepository({\r\n saveAds: isVideoAsAnAssetEnabled ? saveAdsWithMetadata : saveAds,\r\n defaultCampaign: getDefaultCampaign(i18n, serverContext),\r\n defaultAdGroup: getDefaultAdGroup(i18n, serverContext),\r\n });\r\n\r\n\r\n const load = useCallback(() => new Promise((resolve) => {\r\n if (state.context.wizardData.editingAdId) {\r\n const { editingAdId } = state.context.wizardData;\r\n\r\n if (!editingAdId) {\r\n const ids = _.keys(state.context.wizardData.ads.ads);\r\n\r\n if (ids.length > 0) {\r\n resolve(state.context.wizardData.ads.ads[ids[0]]);\r\n }\r\n } else {\r\n resolve(state.context.wizardData.ads.ads[editingAdId] || {});\r\n }\r\n } else {\r\n resolve({\r\n data: [],\r\n isValid: false,\r\n isDirty: false,\r\n currentPageIndex: 1,\r\n });\r\n }\r\n }), [state.context.wizardData]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useState, useCallback, useEffect, useContext } from 'react';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\n\r\nconst odata = DependencyResolver.get('component/http/channel/odata');\r\n\r\nconst odataCallerFormatter = targets => (\r\n {\r\n host: 'adinsight.odata.url',\r\n path: 'AdInsight/V2/',\r\n data: { request: targets },\r\n customHeader: {\r\n name: 'x-ms-scenarioname',\r\n value: 'DisplayPlusCampaign',\r\n },\r\n }\r\n);\r\n\r\nconst GenderTypeCount = 3;\r\nconst AgeTypeCount = 6;\r\n\r\nconst getEstimation = _.memoize((url, payload) => odata.post(url, payload), (url, payload) => `${url} - ${JSON.stringify(payload)}`);\r\n\r\nexport const useTargetingEstimationCaller = ({\r\n // campaignSubTypes being plumbed in for when API supports multiple types\r\n targetsForAudienceSizeEstimation, targetsForAudienceKPIEstimation, showBreakdown, interestOnlyTargets, otherAudienceOnlyTargets, audienceUsePrivacyCheck, campaignSubTypes, // eslint-disable-line @typescript-eslint/no-unused-vars\r\n}) => {\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const urlBase = `Customers(${cid})/Accounts(${aid})/`;\r\n const audienceEstimationUrl = `${urlBase}Default.AudienceKPIEstimationV2`;\r\n const audienceSizeEstimationUrl = `${urlBase}Default.AudienceEstimationV2`;\r\n const privacyCheckUrl = `${urlBase}Default.PrivacyCheckV3`;\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [data, setData] = useState(null);\r\n const [isImpressionTooSpecific, setIsImpressionTooSpecific] = useState(false);\r\n const [privacyResult, setPrivacyResult] = useState(false);\r\n const [audienceSize, setAudienceSize] = useState({ Unit: '', Value: 0 });\r\n const [ageOnlyEstimation, setAgeOnlyEstimation] = useState(null);\r\n const [genderOnlyEstimation, setGenderOnlyEstimation] = useState(null);\r\n const [locationOnlyEstimation, setLocationOnlyEstimation] = useState(null);\r\n const [audienceOnlyEstimation, setAudienceOnlyEstimation] = useState(null);\r\n const [interestOnlyEstimation, setInterestOnlyEstimation] = useState(null);\r\n\r\n const defaultPrivacyCheckResult = { CheckResult: '' };\r\n\r\n const getAudienceReachEstimation = useCallback(() => {\r\n if (_.isEmpty(targetsForAudienceSizeEstimation)) {\r\n return setData({\r\n EstAudienceSize: {\r\n Value: 0,\r\n },\r\n });\r\n }\r\n\r\n setIsLoading(true);\r\n const getAgeOnlyEstimation = showBreakdown && !_.isEmpty(targetsForAudienceSizeEstimation.Age.Includes) && (targetsForAudienceSizeEstimation.Age.Includes.length !== AgeTypeCount);\r\n const getGenderOnlyEstimation = showBreakdown && !_.isEmpty(targetsForAudienceKPIEstimation.Gender.Includes) && (targetsForAudienceKPIEstimation.Gender.Includes.length !== GenderTypeCount);\r\n const getLocationOnlyEstimation = showBreakdown && (!_.isEmpty(targetsForAudienceSizeEstimation.Location.Includes)\r\n || !_.isEmpty(targetsForAudienceSizeEstimation.Location.Excludes)\r\n || !_.isEmpty(targetsForAudienceKPIEstimation.RadiusTargets)\r\n );\r\n const getAudienceOnlyEstimation = showBreakdown && (!_.isEmpty(otherAudienceOnlyTargets.Audience.Includes) || !_.isEmpty(otherAudienceOnlyTargets.Audience.Excludes));\r\n const getInterestOnlyEstimation = showBreakdown && (!_.isEmpty(interestOnlyTargets.Audience.Includes) || !_.isEmpty(interestOnlyTargets.Audience.Excludes));\r\n\r\n return Promise.props({\r\n audienceEstimation: getEstimation(audienceEstimationUrl, odataCallerFormatter(targetsForAudienceKPIEstimation)),\r\n audienceSizeEstimation: getEstimation(audienceSizeEstimationUrl, odataCallerFormatter(targetsForAudienceSizeEstimation)),\r\n audiencePrivacyCheck: audienceUsePrivacyCheck ? getEstimation(privacyCheckUrl, odataCallerFormatter(targetsForAudienceSizeEstimation)) : defaultPrivacyCheckResult,\r\n ageOnly: getAgeOnlyEstimation ? getEstimation(audienceSizeEstimationUrl, odataCallerFormatter(_.pick(targetsForAudienceSizeEstimation, ['Age', 'AutoTargeting', 'CampaignBiddingStrategy', 'CampaignSubType']))) : Promise.resolve(null),\r\n genderOnly: getGenderOnlyEstimation ? getEstimation(audienceSizeEstimationUrl, odataCallerFormatter((_.pick(targetsForAudienceSizeEstimation, ['Gender', 'AutoTargeting', 'CampaignBiddingStrategy', 'CampaignSubType'])))) : Promise.resolve(null),\r\n locationOnly: getLocationOnlyEstimation ? getEstimation(audienceSizeEstimationUrl, odataCallerFormatter((_.pick(targetsForAudienceSizeEstimation, ['Location', 'RadiusTargets', 'AutoTargeting', 'CampaignBiddingStrategy', 'CampaignSubType'])))) : Promise.resolve(null),\r\n audienceOnly: getAudienceOnlyEstimation ? getEstimation(audienceSizeEstimationUrl, odataCallerFormatter((_.pick(otherAudienceOnlyTargets, ['Audience', 'AutoTargeting', 'CampaignBiddingStrategy', 'CampaignSubType'])))) : Promise.resolve(null),\r\n interestOnly: getInterestOnlyEstimation ? getEstimation(audienceSizeEstimationUrl, odataCallerFormatter((_.pick(interestOnlyTargets, ['Audience', 'AutoTargeting', 'CampaignBiddingStrategy', 'CampaignSubType'])))) : Promise.resolve(null),\r\n })\r\n .then(({\r\n audienceEstimation, audienceSizeEstimation, audiencePrivacyCheck, ageOnly, genderOnly, locationOnly, audienceOnly, interestOnly,\r\n }) => {\r\n setData(audienceEstimation);\r\n setIsImpressionTooSpecific(audienceSizeEstimation && audienceSizeEstimation.IsImpressionTooSpecific);\r\n setPrivacyResult(_.result(audiencePrivacyCheck, 'CheckResult'));\r\n setAudienceSize(audienceSizeEstimation);\r\n setAgeOnlyEstimation(ageOnly);\r\n setGenderOnlyEstimation(genderOnly);\r\n setLocationOnlyEstimation(locationOnly);\r\n setAudienceOnlyEstimation(audienceOnly);\r\n setInterestOnlyEstimation(interestOnly);\r\n })\r\n .catch(err => Promise.reject(err))\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [\r\n targetsForAudienceSizeEstimation,\r\n audienceEstimationUrl,\r\n targetsForAudienceKPIEstimation,\r\n audienceSizeEstimationUrl,\r\n privacyCheckUrl,\r\n showBreakdown,\r\n otherAudienceOnlyTargets,\r\n interestOnlyTargets,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (targetsForAudienceSizeEstimation) {\r\n getAudienceReachEstimation();\r\n }\r\n }, [getAudienceReachEstimation, targetsForAudienceSizeEstimation]);\r\n\r\n return [\r\n isLoading,\r\n data,\r\n isImpressionTooSpecific,\r\n privacyResult,\r\n audienceSize,\r\n ageOnlyEstimation,\r\n genderOnlyEstimation,\r\n locationOnlyEstimation,\r\n audienceOnlyEstimation,\r\n interestOnlyEstimation,\r\n ];\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HorizontalBarChart } from '@fluentui/react-charting';\r\n\r\n/**\r\n * Estimation Meter implements a singular HorizontalBarChart component from fluent-ui/react-charting for the campaign creation ad group audience & targets view\r\n */\r\n\r\nexport const EstimationMeter = (props) => {\r\n const { low, high } = props;\r\n\r\n const [estimationLow, setEstimationLow] = useState(0);\r\n const [estimationHigh, setEstimationHigh] = useState(0);\r\n\r\n const getData = (valLow, valHigh) => [\r\n {\r\n chartData: [\r\n {\r\n horizontalBarChartdata: { x: valLow, y: valHigh },\r\n color: '#D13438',\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n useEffect(() => {\r\n setEstimationLow(low);\r\n\r\n if (!props.high) { // if no high value provided, set high val equal to low (will render a solid horizontal bar chart)\r\n setEstimationHigh(low);\r\n } else {\r\n setEstimationHigh(high);\r\n }\r\n }, [high, low, props.high]);\r\n\r\n const getHorizontalChartStyles = () => ({\r\n chart: { height: 24, margin: 'none' },\r\n items: { margin: 'none', height: 24 },\r\n chartTitle: { display: 'none' },\r\n root: { width: 302 },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nEstimationMeter.propTypes = {\r\n low: PropTypes.number.isRequired,\r\n high: PropTypes.number,\r\n};\r\n\r\nEstimationMeter.defaultProps = {\r\n high: null,\r\n};\r\n","import {\r\n convertToLocalStyle,\r\n helpbuttonStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getReachEstimateStyles = (_, { palette }) => ({\r\n reachEstimateControl: {\r\n width: 350,\r\n marginBottom: 10,\r\n },\r\n\r\n estimateHelpContent: {\r\n fontWeight: 600,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n color: '#292827',\r\n },\r\n\r\n estimateNote: {\r\n color: '#323130',\r\n fontSize: 12,\r\n width: 302,\r\n fontWeight: 400,\r\n lineHeight: '16px',\r\n marginTop: 10,\r\n height: 50,\r\n },\r\n\r\n panel: {\r\n minHeight: 161,\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: `${palette && palette.white}`,\r\n },\r\n\r\n panelBody: {\r\n padding: 16,\r\n },\r\n\r\n reachEstimateTitle: {\r\n /* Potential available reach */\r\n width: 302,\r\n fontWeight: 600,\r\n fontSize: 18,\r\n lineHeight: '24px',\r\n /* identical to box height */\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: '#323130',\r\n },\r\n\r\n impressionsCountMessage: {\r\n fontSize: 18,\r\n fontWeight: 'bold',\r\n '& a': {\r\n alignContent: 'center',\r\n },\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n },\r\n\r\n impressionsCount: {\r\n fontWeight: 700,\r\n fontSize: 24,\r\n lineHeight: '36px',\r\n color: '#323130',\r\n },\r\n\r\n meterContainer: {\r\n margin: '0px 0 13px 0',\r\n position: 'relative',\r\n fontSize: 12,\r\n top: -24,\r\n '& .specificMeter': {\r\n zIndex: 1,\r\n width: '10%',\r\n height: 24,\r\n backgroundColor: '#D13438',\r\n position: 'absolute',\r\n top: 17,\r\n },\r\n '& .broadMeter': {\r\n width: '90%',\r\n backgroundColor: '#C4C4C4',\r\n height: 24,\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 backgroundColor: '#D13438',\r\n height: 24,\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: 'white',\r\n top: 17,\r\n width: 1,\r\n height: 24,\r\n position: 'absolute',\r\n border: `4px solid ${palette.white} !important`,\r\n zIndex: 1,\r\n },\r\n});\r\n","/**\r\n * For impressions and clicks, 0-2 decimal places\r\n */\r\nexport const impreAndClicksOptions = {\r\n compact: 'short',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n};\r\n\r\n/**\r\n * For no decimals, 0 decimal places\r\n */\r\nexport const noDecimalOptions = {\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n};\r\n\r\nexport const formatBigDecimal = (value, i18n) => {\r\n if (value > 999999) {\r\n return i18n.formatDecimal(value, impreAndClicksOptions);\r\n }\r\n return i18n.formatDecimal(value, noDecimalOptions);\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 _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Accordion,\r\n AccordionHeader,\r\n AccordionItem,\r\n AccordionPanel,\r\n makeStyles,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { HorizontalBarChart } from '@fluentui/react-charting';\r\n\r\nimport { unitValueMap } from '../../../shared/helper/scale-unit';\r\nimport { formatBigDecimal } from '../../../shared/helper/format-big-decimal';\r\n\r\nconst formatBigNumber = (value, i18n) => {\r\n if (value === 0) {\r\n return i18n.getString(_TL_('Very narrow'));\r\n }\r\n return formatBigDecimal(value, i18n);\r\n};\r\n\r\nconst KEY = 'reach-formatEstimation-breakdown';\r\n\r\nconst formatEstimation = (data) => {\r\n const estimationAudienceUnit = _.get(data, ['EstAudienceSize', 'Unit']) || 'None';\r\n return unitValueMap[estimationAudienceUnit].value * (_.get(data, ['EstAudienceSize', 'Value']) || 0);\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n chartContainer: {\r\n paddingBottom: tokens.spacingVerticalMNudge,\r\n },\r\n});\r\n\r\nexport const ReachEstimationBreakdown = React.memo(({\r\n ageOnlyEstimation,\r\n genderOnlyEstimation,\r\n locationOnlyEstimation,\r\n audienceOnlyEstimation,\r\n interestOnlyEstimation,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useStyles();\r\n const [openItems, setOpenItems] = React.useState([KEY]);\r\n const handleToggle = (_event, data) => {\r\n setOpenItems(data.openItems);\r\n };\r\n const estimations = [];\r\n const ageEstimation = formatEstimation(ageOnlyEstimation);\r\n const genderEstimation = formatEstimation(genderOnlyEstimation);\r\n const locationEstimation = formatEstimation(locationOnlyEstimation);\r\n const audienceEstimation = formatEstimation(audienceOnlyEstimation);\r\n const interestEstimation = formatEstimation(interestOnlyEstimation);\r\n\r\n if (ageOnlyEstimation !== null) {\r\n estimations.push({\r\n label: i18n.getString(_TL_('Age')),\r\n value: ageEstimation,\r\n yAxisCalloutData: formatBigNumber(ageEstimation, i18n),\r\n });\r\n }\r\n if (genderOnlyEstimation !== null) {\r\n estimations.push({\r\n label: i18n.getString(_TL_('Gender')),\r\n value: genderEstimation,\r\n yAxisCalloutData: formatBigNumber(genderEstimation, i18n),\r\n });\r\n }\r\n if (locationOnlyEstimation !== null) {\r\n estimations.push({\r\n label: i18n.getString(_TL_('Location')),\r\n value: locationEstimation,\r\n yAxisCalloutData: formatBigNumber(locationEstimation, i18n),\r\n });\r\n }\r\n if (audienceOnlyEstimation !== null) {\r\n estimations.push({\r\n label: i18n.getString(_TL_('Audience lists')),\r\n value: audienceEstimation,\r\n yAxisCalloutData: formatBigNumber(audienceEstimation, i18n),\r\n });\r\n }\r\n if (interestOnlyEstimation !== null) {\r\n estimations.push({\r\n label: i18n.getString(_TL_('Interest')),\r\n value: interestEstimation,\r\n yAxisCalloutData: formatBigNumber(interestEstimation, i18n),\r\n });\r\n }\r\n\r\n estimations.sort((a, b) => b.value - a.value);\r\n\r\n const data = estimations.map(estimation => ({\r\n chartTitle: estimation.label,\r\n chartData: [\r\n {\r\n legend: estimation.label,\r\n horizontalBarChartdata: { x: estimation.value, y: estimations[0].value },\r\n yAxisCalloutData: estimation.yAxisCalloutData,\r\n color: '#C1423F',\r\n },\r\n ],\r\n }));\r\n\r\n if (!data.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('Included audiences'))}\r\n \r\n {\r\n const dataPoint = chartData && chartData[0];\r\n const yAxisCalloutData = dataPoint && dataPoint.yAxisCalloutData;\r\n return (\r\n
\r\n {yAxisCalloutData}\r\n
\r\n );\r\n }}\r\n />\r\n
\r\n
\r\n \r\n );\r\n});\r\n\r\nReachEstimationBreakdown.displayName = 'ReachEstimationBreakdown';\r\nReachEstimationBreakdown.propTypes = {\r\n ageOnlyEstimation: PropTypes.shape({\r\n EstAudienceSize: PropTypes.shape({\r\n Value: PropTypes.number,\r\n Unit: PropTypes.string,\r\n }),\r\n }),\r\n genderOnlyEstimation: PropTypes.shape({\r\n EstAudienceSize: PropTypes.shape({\r\n Value: PropTypes.number,\r\n Unit: PropTypes.string,\r\n }),\r\n }),\r\n locationOnlyEstimation: PropTypes.shape({\r\n EstAudienceSize: PropTypes.shape({\r\n Value: PropTypes.number,\r\n Unit: PropTypes.string,\r\n }),\r\n }),\r\n audienceOnlyEstimation: PropTypes.shape({\r\n EstAudienceSize: PropTypes.shape({\r\n Value: PropTypes.number,\r\n Unit: PropTypes.string,\r\n }),\r\n }),\r\n interestOnlyEstimation: PropTypes.shape({\r\n EstAudienceSize: PropTypes.shape({\r\n Value: PropTypes.number,\r\n Unit: PropTypes.string,\r\n }),\r\n }),\r\n};\r\n\r\nReachEstimationBreakdown.defaultProps = {\r\n ageOnlyEstimation: null,\r\n genderOnlyEstimation: null,\r\n locationOnlyEstimation: null,\r\n audienceOnlyEstimation: null,\r\n interestOnlyEstimation: null,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useState, useEffect, useCallback, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\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 { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nimport { EstimationMeter } from './estimation-meter';\r\nimport { getReachEstimateStyles } from './styles/reach-estimate-styles';\r\nimport { unitValueMap } from '../../../shared/helper/scale-unit';\r\nimport { ReachEstimationBreakdown } from './reach-estimation-breakdown';\r\nimport { formatBigDecimal } from '../../../shared/helper/format-big-decimal';\r\n\r\nconst titleReach = _TL_('Potential available reach');\r\nconst titleImpression = _TL_('Potential available impression');\r\nconst tooNarrowFlag = 'ToNarrow';\r\n\r\nconst getEstValsAndText = (est) => {\r\n if (!est) {\r\n return ['-', 0];\r\n }\r\n const estImpressionsHighVal = est.High.Value;\r\n const estImpressionsHighUnit = unitValueMap[est.High.Unit].unit;\r\n const estImpressionsHighUnitVal = unitValueMap[est.High.Unit].value;\r\n const estImpressionsHigh = estImpressionsHighVal * estImpressionsHighUnitVal;\r\n\r\n const estImpressionsLowVal = est.Low.Value;\r\n const estImpressionsLowUnit = unitValueMap[est.Low.Unit].unit;\r\n const estImpressionsLowUnitVal = unitValueMap[est.Low.Unit].value;\r\n const estImpressionsLow = estImpressionsLowVal * estImpressionsLowUnitVal;\r\n\r\n const estImpressionsText = `${estImpressionsLowVal}${estImpressionsLowUnit} - ${estImpressionsHighVal}${estImpressionsHighUnit}`;\r\n\r\n return [estImpressionsText, estImpressionsLow, estImpressionsHigh];\r\n};\r\n\r\nconst ReachEstimate = (props) => {\r\n const {\r\n i18n,\r\n estimationData,\r\n isLoading,\r\n pricingModel,\r\n isImpressionTooSpecific,\r\n privacyResult,\r\n isCampaignCreationPlannerIntegrationEnabled,\r\n showImpressions,\r\n hasAudienceRemarketingList,\r\n updateValidation,\r\n validationProps,\r\n showBreakdown,\r\n isAudienceAdGroupEdit,\r\n audienceSize,\r\n ageOnlyEstimation,\r\n genderOnlyEstimation,\r\n locationOnlyEstimation,\r\n audienceOnlyEstimation,\r\n interestOnlyEstimation,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getReachEstimateStyles);\r\n const activity = useContext(ActivityContext);\r\n\r\n const [showPanel] = useState(true);\r\n\r\n const [estimatedReach, setEstimatedReach] = useState();\r\n const [estimatedReachLow, setEstimatedReachLow] = useState();\r\n const [estimatedReachText, setEstimatedReachText] = useState();\r\n const [estimatedImpression, setEstimatedImpression] = useState();\r\n const [estimatedImpressionLow, setEstimatedImpressionLow] = useState();\r\n const [estimatedImpressionText, setEstimatedImpressionText] = useState();\r\n\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n\r\n const updateEstimatesOnMeter = useCallback(() => {\r\n const [estImpressionText, estImpressionLow, estImpressionHigh] = getEstValsAndText(estimationData && estimationData.EstImpression);\r\n\r\n if (showBreakdown && !isAudienceAdGroupEdit) {\r\n const estimationAudienceUnit = _.get(audienceSize, ['EstAudienceSize', 'Unit']) || 'None';\r\n const estimation = unitValueMap[estimationAudienceUnit].value * (_.get(audienceSize, ['EstAudienceSize', 'Value']) || 0);\r\n const estimationText = formatBigDecimal(estimation, i18n);\r\n setEstimatedReach(estimation);\r\n setEstimatedReachText(estimationText);\r\n setEstimatedReachLow(estimation);\r\n } else {\r\n const [estReachText, estReachLow, estReachHigh] = getEstValsAndText(estimationData && estimationData.EstAudienceSize);\r\n setEstimatedReach(estReachHigh);\r\n setEstimatedReachText(estReachText);\r\n setEstimatedReachLow(estReachLow);\r\n }\r\n setEstimatedImpression(estImpressionHigh);\r\n setEstimatedImpressionText(estImpressionText);\r\n setEstimatedImpressionLow(estImpressionLow);\r\n }, [estimationData, showBreakdown, isAudienceAdGroupEdit, audienceSize, i18n]);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n updateEstimatesOnMeter(estimationData);\r\n\r\n let errMessage;\r\n if (privacyResult === 'Pending') {\r\n errMessage = i18n.getString(_TL_('No estimates available'));\r\n } else if (privacyResult === 'TooNarrow' && hasAudienceRemarketingList) {\r\n errMessage = i18n.getString(_TL_('Based on your current remarketing list(s), your targeting is too narrow. Your ads will not run until you expand your remarketing list(s) and increase estimated unique users.'));\r\n } else if (privacyResult === 'TooNarrow' && hasAudienceRemarketingList) {\r\n errMessage = i18n.getString(_TL_('The ad group cannot be saved until the targeted audience is more broad.'));\r\n } else if (isImpressionTooSpecific) {\r\n errMessage = i18n.getString(_TL_('Very narrow.'));\r\n }\r\n\r\n if (errMessage) {\r\n setErrorMessage(errMessage);\r\n updateValidation([errMessage], { [validationProps.field]: tooNarrowFlag }, false);\r\n } else {\r\n setErrorMessage('');\r\n updateValidation([], { [validationProps.field]: null }, false);\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`onReachEstimationChange - ${JSON.stringify({ estimation: estimationData })}`);\r\n }\r\n }\r\n }, [activity, isLoading, estimationData, updateEstimatesOnMeter, i18n, isImpressionTooSpecific, privacyResult, hasAudienceRemarketingList, updateValidation, validationProps]);\r\n\r\n // Allow Updating Estimates no more than once every 2000 ms\r\n // to-do\r\n\r\n return (\r\n
\r\n
\r\n {showPanel &&\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n
{i18n.getString(titleReach)}
\r\n \r\n \r\n \r\n \r\n )\r\n : (\r\n <>\r\n \r\n
{i18n.getString(`${titleReach}`)}
\r\n \r\n
\r\n \r\n
\r\n {i18n.getString(_TL_('These estimates are based on your targeting settings and audiences.'))}\r\n
\r\n
\r\n \r\n
\r\n {i18n.getString(_TL_('Potential reach'))}\r\n \r\n
\r\n \r\n
{estimatedReachText}
\r\n {errorMessage &&\r\n \r\n {errorMessage}\r\n \r\n }\r\n
\r\n {showBreakdown && !errorMessage && }\r\n \r\n )\r\n }\r\n
\r\n
\r\n }\r\n
\r\n {isCampaignCreationPlannerIntegrationEnabled && showImpressions &&\r\n
\r\n {showPanel &&\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n
{i18n.getString(titleImpression)}
\r\n \r\n \r\n \r\n \r\n )\r\n : (\r\n <>\r\n \r\n
{i18n.getString(`${titleImpression}`)}
\r\n
\r\n \r\n
\r\n {i18n.getString(_TL_('These are estimated based on targeting preferences and audience.'))}\r\n
\r\n
\r\n \r\n
\r\n {i18n.getString(_TL_('Potential impression'))}\r\n \r\n
\r\n \r\n
{estimatedImpressionText}
\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\n};\r\n\r\nReachEstimate.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n estimationData: PropTypes.shape({\r\n EstAudienceSize: PropTypes.number.isRequired,\r\n EstImpression: PropTypes.number.isRequired,\r\n }).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n pricingModel: PropTypes.string.isRequired,\r\n isImpressionTooSpecific: PropTypes.bool.isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n field: PropTypes.string.isRequired,\r\n }).isRequired,\r\n isCampaignCreationPlannerIntegrationEnabled: PropTypes.bool,\r\n showImpressions: PropTypes.bool,\r\n privacyResult: PropTypes.string.isRequired,\r\n hasAudienceRemarketingList: PropTypes.bool.isRequired,\r\n showBreakdown: PropTypes.bool,\r\n isAudienceAdGroupEdit: PropTypes.bool.isRequired,\r\n audienceSize: PropTypes.shape({\r\n EstAudienceSize: PropTypes.shape({\r\n Value: PropTypes.number,\r\n Unit: PropTypes.string,\r\n }),\r\n }),\r\n ageOnlyEstimation: PropTypes.shape({}),\r\n genderOnlyEstimation: PropTypes.shape({}),\r\n locationOnlyEstimation: PropTypes.shape({}),\r\n audienceOnlyEstimation: PropTypes.shape({}),\r\n interestOnlyEstimation: PropTypes.shape({}),\r\n};\r\n\r\nReachEstimate.defaultProps = {\r\n isCampaignCreationPlannerIntegrationEnabled: false,\r\n showImpressions: true,\r\n audienceSize: null,\r\n ageOnlyEstimation: null,\r\n genderOnlyEstimation: null,\r\n locationOnlyEstimation: null,\r\n audienceOnlyEstimation: null,\r\n interestOnlyEstimation: null,\r\n showBreakdown: false,\r\n};\r\n\r\nconst validatedReachEstimate = withCustomValidation(ReachEstimate);\r\n\r\nexport { validatedReachEstimate as ReachEstimate };\r\n","import { CampaignSubTypeMapping, isXandrDisplayAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport {\r\n BidStrategyToDevices,\r\n AgeRangesCampaignToAdInsight,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\n\r\nconst getLocationIds = ({ adGroup, bundleCountries }) => {\r\n const { locationTargets } = adGroup || {};\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.CriterionType !== 'Radius') {\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};\r\n\r\nconst getRadiusCriterions = ({ adGroup }) => {\r\n const { locationTargets } = adGroup || {};\r\n if (locationTargets && locationTargets.currentLevelSettings) {\r\n const { currentLocations } = locationTargets.currentLevelSettings;\r\n\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\r\n return [];\r\n }\r\n\r\n return [];\r\n};\r\n\r\nconst getExcludedLocationIds = ({ adGroup }) => {\r\n const { locationTargets } = adGroup || {};\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.CriterionType !== 'Radius') {\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};\r\n\r\nconst getAudienceCriterionIds = ({ adGroup, key, status }) => {\r\n if (adGroup && Array.isArray(adGroup[key])) {\r\n return adGroup[key].reduce((audienceIds, audience) => {\r\n if (audience.Status === status) {\r\n audienceIds.push(audience.Criterion.AudienceId);\r\n }\r\n return audienceIds;\r\n }, []);\r\n }\r\n return [];\r\n};\r\n\r\nexport const getInterestIds = ({ adGroup }) => getAudienceCriterionIds({ adGroup, key: 'interests', status: 'Active' });\r\n\r\nexport const getExcludedInterestIds = ({ adGroup }) => getAudienceCriterionIds({ adGroup, key: 'interests', status: 'Excluded' });\r\n\r\nexport const getOtherAudienceIds = ({ adGroup }) => getAudienceCriterionIds({ adGroup, key: 'audiences', status: 'Active' });\r\n\r\nexport const getExcludedOtherAudienceIds = ({ adGroup }) => getAudienceCriterionIds({ adGroup, key: 'audiences', status: 'Excluded' });\r\n\r\nexport const getAudienceIds = ({ adGroup }) => [...getInterestIds({ adGroup }), ...getOtherAudienceIds({ adGroup })];\r\n\r\nexport const getExcludedAudienceIds = ({ adGroup }) => [...getExcludedInterestIds({ adGroup }), ...getExcludedOtherAudienceIds({ adGroup })];\r\n\r\nconst getAgeRanges = ({ adGroup }) => adGroup.ageRanges && adGroup.ageRanges.map(ar => AgeRangesCampaignToAdInsight[ar]);\r\n\r\nconst getDevices = ({ adGroup, campaignBiddingScheme }) => {\r\n if (adGroup.dealDetails) {\r\n return adGroup.deviceTypes;\r\n }\r\n\r\n return BidStrategyToDevices[campaignBiddingScheme.Type];\r\n};\r\n\r\nconst getAdSchedule = ({ adGroup }) => {\r\n if (adGroup && adGroup.adSchedulesBulkUpsert && adGroup.adSchedulesBulkUpsert.length > 0) {\r\n return adGroup.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};\r\n\r\nexport const formatReachEstimateData = ({\r\n adGroup,\r\n campaignSubtype,\r\n campaignBiddingScheme,\r\n bundleCountries,\r\n}) => {\r\n const reachEstimationTargets = {\r\n Age: {\r\n Includes: getAgeRanges({ adGroup }),\r\n },\r\n Gender: {\r\n Includes: adGroup.genderTypes,\r\n },\r\n Device: {\r\n Includes: getDevices({ adGroup, campaignBiddingScheme }),\r\n },\r\n Location: {\r\n Includes: getLocationIds({ adGroup, bundleCountries }),\r\n Excludes: getExcludedLocationIds({ adGroup }),\r\n },\r\n RadiusTargets: getRadiusCriterions({ adGroup }),\r\n Audience: {\r\n Includes: getAudienceIds({ adGroup }),\r\n Excludes: getExcludedAudienceIds({ adGroup }),\r\n },\r\n Day: getAdSchedule({ adGroup }),\r\n TimeZone: timeZoneMapper.getAccountIANATimeZone(),\r\n CampaignSubType: isXandrDisplayAdsCampaign(campaignSubtype) ? CampaignSubTypeMapping.DisplayAds : CampaignSubTypeMapping.BrandAwarenessVideoAds,\r\n };\r\n\r\n return reachEstimationTargets;\r\n};\r\n\r\nexport const areCriterionTargetsSet = (targets, negativeTargets) => (targets && targets.length > 0) || (negativeTargets && negativeTargets.length > 0);\r\n\r\nconst isTargetSet = (targetSetting, isEditFlow) => !isEditFlow || targetSetting;\r\n\r\nexport const getTargetSettingsFromCriterions = (adGroupData, isEditFlow) => {\r\n // target settings are the non empty criterions\r\n const targetSettings = [];\r\n\r\n if (isTargetSet(adGroupData.isTargetSetCompanyName, isEditFlow) && areCriterionTargetsSet(adGroupData.companyNameTargets, adGroupData.negativeCompanyNameTargets)) {\r\n targetSettings.push('CompanyName');\r\n }\r\n\r\n if (isTargetSet(adGroupData.isTargetSetJobFunction, isEditFlow) && areCriterionTargetsSet(adGroupData.jobTargets, adGroupData.negativeJobTargets)) {\r\n targetSettings.push('JobFunction');\r\n }\r\n\r\n if (isTargetSet(adGroupData.isTargetSetIndustry, isEditFlow) && areCriterionTargetsSet(adGroupData.industry, adGroupData.negativeIndustry)) {\r\n targetSettings.push('Industry');\r\n }\r\n\r\n if (isTargetSet(adGroupData.isTargetSetAudience, isEditFlow) && (areCriterionTargetsSet(adGroupData.audiences, null) || areCriterionTargetsSet(adGroupData.interests, null))) {\r\n targetSettings.push('Audience');\r\n }\r\n\r\n // we always add age and gender, the user can either select all age/gender or select only some, it cannot be empty.\r\n targetSettings.push('Age');\r\n targetSettings.push('Gender');\r\n\r\n return targetSettings.length > 0 ? targetSettings.join(';') : 'delete_value';\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PerformanceTile } from '@bingads-webui-campaign-react/performance-tile';\r\nimport { BidStrategy, CampaignSubTypeMapping } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { AgeRangesCampaignToAdInsight } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { useTargetingEstimationCaller } from './use-targeting-estimation-caller';\r\n// import { formatBigDecimal } from '../../../shared/helper/format-big-decimal';\r\nimport { getValueWithUnit } from '../../../shared/helper/scale-unit';\r\nimport { ReachEstimate } from './reach-estimate';\r\nimport { BiddingSchemeToBidType, BidTypes } from '../../../common/constants';\r\nimport { getAudienceIds, getExcludedAudienceIds, getInterestIds, getExcludedInterestIds, getOtherAudienceIds, getExcludedOtherAudienceIds } from '../utils';\r\n\r\nconst hasRemartketingList = audience => _.any(audience || [], audienceCriterion =>\r\n audienceCriterion.Criterion.AudienceType === 'Remessaging'\r\n || audienceCriterion.Criterion.AudienceType === 'Product'\r\n || audienceCriterion.Criterion.AudienceType === 'Custom'\r\n || audienceCriterion.Criterion.AudienceType === 'RemarketingSimilar');\r\n\r\nconst getTargetsFromAdgroupModel = (adGroup) => {\r\n const ageRage = _.map(adGroup.ageRanges || [], (age) => {\r\n if (_.isObject(age) && _.get(age, ['Criterion', 'AgeCriterion', 'Target'])) {\r\n return AgeRangesCampaignToAdInsight[_.get(age, ['Criterion', 'AgeCriterion', 'Target'])];\r\n }\r\n return AgeRangesCampaignToAdInsight[age];\r\n });\r\n\r\n const genderTypes = _.map(adGroup.genderTypes || [], (gender) => {\r\n if (_.isObject(gender) && _.get(gender, ['Criterion', 'GenderCriterion', 'Target'])) {\r\n return _.get(gender, ['Criterion', 'GenderCriterion', 'Target']);\r\n }\r\n return gender;\r\n });\r\n\r\n return {\r\n Age: {\r\n Includes: ageRage,\r\n Excludes: [],\r\n },\r\n Gender: {\r\n Includes: genderTypes,\r\n Excludes: [],\r\n },\r\n Location: {\r\n Includes: _.map(\r\n _.filter(_.get(adGroup, 'locationTargets.currentLevelSettings.currentLocations', []), location => location.SelectionStatus === 'Included' && location.CriterionType !== 'Radius'),\r\n location => (location.Criterion.LocationCriterion.LocationId)\r\n ),\r\n Excludes: _.map(\r\n _.filter(_.get(adGroup, 'locationTargets.currentLevelSettings.currentLocations', []), location => location.SelectionStatus === 'Excluded' && location.CriterionType !== 'Radius'),\r\n location => (location.Criterion.LocationCriterion.LocationId)\r\n ),\r\n },\r\n RadiusTargets: _.map(\r\n _.filter(_.get(adGroup, 'locationTargets.currentLevelSettings.currentLocations', []), location => location.CriterionType === 'Radius'),\r\n location => ({\r\n CenterLatitude: location.Criterion.RadiusCriterion.Latitude,\r\n CenterLongitude: location.Criterion.RadiusCriterion.Longitude,\r\n Radius: location.Criterion.RadiusCriterion.Radius,\r\n })\r\n ),\r\n Audience: {\r\n Includes: getAudienceIds({ adGroup }),\r\n Excludes: getExcludedAudienceIds({ adGroup }),\r\n },\r\n Company: {\r\n Includes: _.map(_.get(adGroup, 'companyNameTargets', []), company => company.Target),\r\n Excludes: _.map(_.get(adGroup, 'negativeCompanyNameTargets', []), company => company.Target),\r\n },\r\n Industry: {\r\n Includes: _.get(adGroup, 'industry', []),\r\n Excludes: _.get(adGroup, 'negativeIndustry', []),\r\n },\r\n JobFunction: {\r\n Includes: _.get(adGroup, 'jobTargets', []),\r\n Excludes: _.get(adGroup, 'negativeJobTargets', []),\r\n },\r\n };\r\n};\r\n\r\nconst getOtherParams = (adGroup, campaign) => ({\r\n AutoTargeting: adGroup.UseOptimizedTargeting,\r\n CampaignBiddingStrategy: (campaign && BidStrategy[campaign.BiddingScheme.Type]),\r\n CampaignSubType: adGroup ? CampaignSubTypeMapping[adGroup.CampaignSubType] : campaign.CampaignSubType,\r\n});\r\n\r\nexport const TargetingEstimation = ({\r\n data,\r\n isCampaignCreationPlannerIntegrationEnabled,\r\n isMultiAdFormatEnabled,\r\n showBreakdown,\r\n isAudienceAdGroupEdit,\r\n audienceUsePrivacyCheck,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { adGroup = {}, campaign = {} } = data || {};\r\n\r\n const hasAudienceRemarketingList = hasRemartketingList(adGroup.audiences || []);\r\n const otherParams = useMemo(() => getOtherParams(adGroup, campaign), [adGroup, campaign]);\r\n\r\n const [targetsForAudienceSizeEstimation, targetsForAudienceKPIEstimation] =\r\n useMemo(() => {\r\n const targetsForAudienceSize = { ...getTargetsFromAdgroupModel(adGroup), ...otherParams };\r\n\r\n const bidKeyToSend = BiddingSchemeToBidType[campaign.BiddingScheme.Type] || BidTypes.SearchBid;\r\n\r\n const bidValue = adGroup && adGroup[bidKeyToSend];\r\n\r\n const targetsForAudienceKPI =\r\n {\r\n ...getTargetsFromAdgroupModel(adGroup),\r\n Bid: Number(bidValue),\r\n DailyBudget: campaign && campaign.Budget && campaign.Budget.Amount,\r\n };\r\n\r\n return [targetsForAudienceSize, targetsForAudienceKPI];\r\n }, [adGroup, campaign, otherParams]);\r\n\r\n const interestOnlyTargets = useMemo(() => ({\r\n Audience: {\r\n Includes: getInterestIds({ adGroup }),\r\n Excludes: getExcludedInterestIds({ adGroup }),\r\n },\r\n ...otherParams,\r\n }), [adGroup, otherParams]);\r\n\r\n const otherAudienceOnlyTargets = useMemo(() => ({\r\n Audience: {\r\n Includes: getOtherAudienceIds({ adGroup }),\r\n Excludes: getExcludedOtherAudienceIds({ adGroup }),\r\n },\r\n ...otherParams,\r\n }), [adGroup, otherParams]);\r\n\r\n // AudienceStatic = 0,\r\n // AudienceVideoAds = 3,\r\n // DisplayAds = 5,\r\n const getCampaingSubTypes = types => _.map(types, (type) => {\r\n if (type === 'Display') return 5;\r\n if (type === 'Video') return 3;\r\n return 0;\r\n });\r\n\r\n const subTypes = _.map(data.adGroup.ads, ad => ad.adSubType);\r\n const campaignSubTypes = isMultiAdFormatEnabled ?\r\n getCampaingSubTypes(subTypes)\r\n : undefined;\r\n\r\n const [\r\n isRecommendationDataLoading,\r\n estimationData,\r\n isImpressionTooSpecific,\r\n privacyResult,\r\n audienceSize,\r\n ageOnlyEstimation,\r\n genderOnlyEstimation,\r\n locationOnlyEstimation,\r\n audienceOnlyEstimation,\r\n interestOnlyEstimation,\r\n ] = useTargetingEstimationCaller({\r\n targetsForAudienceSizeEstimation,\r\n targetsForAudienceKPIEstimation,\r\n showBreakdown,\r\n interestOnlyTargets,\r\n otherAudienceOnlyTargets,\r\n campaignSubTypes,\r\n audienceUsePrivacyCheck,\r\n });\r\n\r\n // Log estimationData and adGroup.id only once\r\n useEffect(() => {\r\n if (activity && estimationData) {\r\n activity.signal(`PlannerValidation AdGroup ID: ${adGroup.Id} - ${JSON.stringify(estimationData)}`);\r\n }\r\n }, [estimationData, adGroup.id]);\r\n\r\n const estimations = useMemo(() => {\r\n const estClick = (estimationData && estimationData.EstClick && estimationData.EstClick.High &&\r\n getValueWithUnit(estimationData.EstClick.High.Value, estimationData.EstClick.High.Unit)) || 0;\r\n const estCTR = (estimationData && estimationData.EstCTR && estimationData.EstCTR.High && estimationData.EstCTR.Low) ?\r\n [`${estimationData.EstCTR.Low}%`, `${estimationData.EstCTR.High}%`]\r\n : 0;\r\n const estSpend = (estimationData && estimationData.EstSpend && estimationData.EstSpend.High &&\r\n getValueWithUnit(estimationData.EstSpend.High.Value, estimationData.EstSpend.High.Unit)) || 0;\r\n const estAvgCPC = (estimationData && estimationData.EstAvgCPC && estimationData.EstAvgCPC.High &&\r\n getValueWithUnit(estimationData.EstAvgCPC.High.Value, estimationData.EstAvgCPC.High.Unit)) || 0;\r\n\r\n return _.compact([\r\n {\r\n className: 'audience-clicks',\r\n title: i18n.getString(_TL_('Clicks')),\r\n dashColor: '#0078D7',\r\n estimation: estClick,\r\n },\r\n {\r\n className: 'audience-CTR',\r\n title: i18n.getString(_TL_('CTR')),\r\n dashColor: '#00A5B0',\r\n estimation: estCTR,\r\n },\r\n isCampaignCreationPlannerIntegrationEnabled && {\r\n className: 'audience-Spend',\r\n title: i18n.getString(_TL_('Spend')),\r\n dashColor: '#00A5B0',\r\n estimation: estSpend,\r\n },\r\n isCampaignCreationPlannerIntegrationEnabled && {\r\n className: 'audience-AvgCPC',\r\n title: i18n.getString(_TL_('Avg.CPC')),\r\n dashColor: '#00A5B0',\r\n estimation: estAvgCPC,\r\n },\r\n ]);\r\n }, [estimationData, i18n, isCampaignCreationPlannerIntegrationEnabled]);\r\n\r\n // disable per https://msasg.visualstudio.com/Bing_Ads/_workitems/edit/8822650\r\n const showImpressions = false;\r\n const showPerformanceTile = false;\r\n\r\n return (\r\n
\r\n \r\n {showPerformanceTile &&\r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nTargetingEstimation.propTypes = {\r\n data: PropTypes.shape({}),\r\n isCampaignCreationPlannerIntegrationEnabled: PropTypes.bool,\r\n showBreakdown: PropTypes.bool,\r\n isAudienceAdGroupEdit: PropTypes.bool.isRequired,\r\n};\r\n\r\nTargetingEstimation.defaultProps = {\r\n data: {},\r\n isCampaignCreationPlannerIntegrationEnabled: false,\r\n showBreakdown: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport DataTrending from '../../../media/data-trending.svg';\r\n\r\n\r\nconst PredictiveTargetingDescription = ({ i18n }) => (\r\n
\r\n {i18n.getString(_TL_('Predictive targeting allows us to optimize your ad reach based on your targeting preferences. You can customize predictive targeting by setting up targeting preferences below.'))}\r\n  {i18n.getString(_TL_('Learn more'))}\r\n
\r\n);\r\n\r\nPredictiveTargetingDescription.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const PredictiveTargetingHeader = ({ data }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { UseOptimizedTargeting } = data;\r\n\r\n return (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('Predictive\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\nPredictiveTargetingHeader.propTypes = {\r\n data: PropTypes.shape({\r\n UseOptimizedTargeting: PropTypes.bool,\r\n }).isRequired,\r\n};\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Stack, Shimmer } from '@fluentui/react';\r\n\r\nexport const SectionShimmer = ({ count }) => (\r\n \r\n {_.range(count).map(index => ())}\r\n \r\n);\r\n\r\nSectionShimmer.propTypes = {\r\n count: PropTypes.number,\r\n};\r\n\r\nSectionShimmer.defaultProps = {\r\n count: 3,\r\n};\r\n","export const getCollapsiblePanelStyles = (components, theme) => ({\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n color: theme.palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: theme.palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\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","import { getCollapsiblePanelStyles } from '../../shared/styles';\r\n\r\nexport const getAdGroupStyles = (components, theme) => ({\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n toggle: {\r\n marginBottom: '0px',\r\n alignSelf: 'center',\r\n },\r\n adgroupShell: {\r\n display: 'flex',\r\n '& .base-options-stack': {\r\n width: '100%',\r\n },\r\n '& .collapse-container': {\r\n width: 'inherit',\r\n },\r\n '& .contextual-target': {\r\n maxWidth: '1000px',\r\n },\r\n },\r\n adgroupOptions: {\r\n maxWidth: '968px',\r\n },\r\n estimationPart: {\r\n flexGrow: '1',\r\n marginTop: '58px',\r\n marginLeft: '30px',\r\n '& > div': {\r\n position: 'sticky',\r\n top: '0px',\r\n },\r\n },\r\n estimationPartEditFlow: {\r\n flexGrow: '1',\r\n marginLeft: '30px',\r\n '& > div': {\r\n position: 'sticky',\r\n top: '0px',\r\n },\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack, Toggle } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\n\r\nconst Title = ({ titleKey }) => {\r\n const i18n = useContext(I18nContext);\r\n const titleText = i18n.getString(titleKey);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTitle.propTypes = {\r\n titleKey: PropTypes.string.isRequired,\r\n};\r\n\r\nconst PredictiveTargetingControlHeaderInternal = ({\r\n validationProps,\r\n updateValidation,\r\n onToggleEnabledChanged,\r\n alwaysDisabled,\r\n campaignSubType,\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n let { UseOptimizedTargeting } = data;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = (e, checked) => {\r\n updateValidation([], { UseOptimizedTargeting: checked });\r\n\r\n if (activity) {\r\n activity.signal(`onPredectiveTargetingChanged - isPredTargetingEnabled: ${UseOptimizedTargeting}`);\r\n }\r\n };\r\n\r\n const isEnabled = useMemo(() => {\r\n const doesAdGroupHaveAudienceTargeted = data.audiences && data.audiences.length > 0;\r\n const doesAdGroupHaveInterestTargeted = data.interests && data.interests.length > 0;\r\n const doesAdGroupHaveCompanyNameTarget = (data.companyNameTargets && data.companyNameTargets.length > 0) || (data.negativeCompanyNameTargets && data.negativeCompanyNameTargets.length > 0);\r\n const doesAdGroupHaveJobFunctionTarget = (data.jobTargets && data.jobTargets.length > 0) || (data.negativeJobTargets && data.negativeJobTargets.length > 0);\r\n const doesAdGroupHaveIndustryTarget = (data.industry && data.industry.length > 0) || (data.negativeIndustry && data.negativeIndustry.length > 0);\r\n const doesAdGroupHaveAgeTarget = data.ageRanges && data.ageRanges.length < 6;\r\n const doesAdGroupHaveGenderTarget = data.genderTypes && data.genderTypes.length < 3;\r\n const doesAdGroupHaveDeviceTarget = data.deviceTypes && data.deviceTypes.length < 3;\r\n\r\n const isVideoCampaign = campaignSubType === CampaignSubTypes.BrandAwarenessVideoAds;\r\n\r\n return doesAdGroupHaveAudienceTargeted || doesAdGroupHaveCompanyNameTarget || doesAdGroupHaveInterestTargeted ||\r\n doesAdGroupHaveJobFunctionTarget || doesAdGroupHaveIndustryTarget ||\r\n doesAdGroupHaveAgeTarget || doesAdGroupHaveGenderTarget ||\r\n (isVideoCampaign && EnableMSANVideoCampaigns && doesAdGroupHaveDeviceTarget);\r\n }, [data, EnableMSANVideoCampaigns, campaignSubType]);\r\n\r\n // if no targets and use optimized targeting is disabled it, enable it.\r\n if (!_.isEmpty(data) && !isEnabled && !UseOptimizedTargeting) {\r\n if (EnableMSANDisplayCampaigns || EnableMSANVideoCampaigns) {\r\n UseOptimizedTargeting = true;\r\n }\r\n updateValidation([], { UseOptimizedTargeting: true });\r\n }\r\n\r\n useEffect(() => {\r\n onToggleEnabledChanged(isEnabled);\r\n }, [isEnabled, onToggleEnabledChanged]);\r\n\r\n return (\r\n \r\n \r\n \r\n </Stack>\r\n );\r\n};\r\n\r\nPredictiveTargetingControlHeaderInternal.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n UseOptimizedTargeting: PropTypes.bool,\r\n audiences: PropTypes.shape([]).isRequired,\r\n interests: PropTypes.shape([]).isRequired,\r\n companyNameTargets: PropTypes.shape([]).isRequired,\r\n negativeCompanyNameTargets: PropTypes.shape([]).isRequired,\r\n jobTargets: PropTypes.shape([]).isRequired,\r\n negativeJobTargets: PropTypes.shape([]).isRequired,\r\n industry: PropTypes.shape([]).isRequired,\r\n negativeIndustry: PropTypes.shape([]).isRequired,\r\n ageRanges: PropTypes.shape([]).isRequired,\r\n genderTypes: PropTypes.shape([]).isRequired,\r\n deviceTypes: PropTypes.shape([]).isRequired,\r\n }),\r\n }).isRequired,\r\n onToggleEnabledChanged: PropTypes.func.isRequired,\r\n campaignSubType: PropTypes.string.isRequired,\r\n alwaysDisabled: PropTypes.bool,\r\n EnableMSANDisplayCampaigns: PropTypes.bool.isRequired,\r\n EnableMSANVideoCampaigns: PropTypes.bool.isRequired,\r\n};\r\n\r\nPredictiveTargetingControlHeaderInternal.defaultProps = {\r\n alwaysDisabled: false,\r\n};\r\n\r\nexport const PredictiveTargetingControlHeader = withCustomValidation(PredictiveTargetingControlHeaderInternal);\r\n","import _ from 'underscore';\r\nimport React, { useContext, useEffect, useState, useMemo, useCallback } from 'react';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack, ChoiceGroup, Checkbox } from '@bingads-webui-react/fabric-control';\r\nimport { CampaignOData } from '@bingads-webui-react/campaign-odata';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PlacementDataMapping } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport productivityIcon from '../../../media/productivity-placement.svg';\r\nimport homePagesIcon from '../../../media/home-pages-placement.svg';\r\nimport thematicBundleIcon from '../../../media/thematic-bundle-placement.svg';\r\nimport { placementsOptionStyle,\r\n placementsAllSpecificChoiceGroup,\r\n placementsCheckboxes,\r\n itemStyle,\r\n itemStyleChecked,\r\n itemStyleDisabled,\r\n placementCard,\r\n iconSection,\r\n iconSectionChecked,\r\n iconSectionDisabled,\r\n titleStyle,\r\n subheaderStyle } from './styles/placements-function-target-styles';\r\n\r\n\r\nexport const formatPlacements = ({ BoostAdunitIds, i18n }) => {\r\n if (!BoostAdunitIds || !_.isArray(BoostAdunitIds) || (_.isArray(BoostAdunitIds) && BoostAdunitIds.length === 0)) {\r\n return i18n.getString(_TL_('The entire Microsoft Advertising Network.'));\r\n }\r\n\r\n return i18n.getString(_TL_('Microsoft owned and operated placements.'));\r\n};\r\n\r\nconst placements = {\r\n Productivity: {\r\n id: 1,\r\n label: _TL_('Productivity'),\r\n description: _TL_('Outlook and more.'),\r\n adUnitIds: PlacementDataMapping.Productivity.adUnitIds,\r\n icon: productivityIcon,\r\n },\r\n HomePages: {\r\n id: 2,\r\n label: _TL_('Home pages'),\r\n description: _TL_('New tab pages and more.'),\r\n adUnitIds: PlacementDataMapping.HomePages.adUnitIds,\r\n icon: homePagesIcon,\r\n },\r\n Games: {\r\n id: 3,\r\n label: _TL_('Games'),\r\n description: _TL_('Microsoft Casual Games and more.'),\r\n adUnitIds: PlacementDataMapping.Games.adUnitIds,\r\n icon: thematicBundleIcon,\r\n },\r\n};\r\n\r\nconst placementsIdMap = {\r\n 1: 'Productivity',\r\n 2: 'HomePages',\r\n 3: 'Games',\r\n};\r\n\r\nconst options = [\r\n {\r\n key: 'all',\r\n text: _TL_('The entire Microsoft Advertising Network (recommended)'),\r\n onRenderField: (props, render) => (\r\n <div>\r\n {render(props)}\r\n <div className={placementsOptionStyle}>\r\n {_TL_('This option includes Microsoft sites and additional partner traffic.')}\r\n </div>\r\n </div>\r\n ),\r\n styles: { root: { fontWeight: '100' } },\r\n },\r\n {\r\n key: 'specific',\r\n text: _TL_('Microsoft owned and operated placements'),\r\n onRenderField: (props, render) => (\r\n <div>\r\n {render(props)}\r\n <div className={placementsOptionStyle}>\r\n {_TL_('Show your ads on specific Microsoft owned and operated placements.')}\r\n </div>\r\n </div>\r\n ),\r\n styles: { root: { fontWeight: '100' } },\r\n },\r\n];\r\n\r\nconst renderPlacements = (props) => {\r\n const { checked, disabled } = props;\r\n let iconSectionStyle;\r\n if (checked) {\r\n iconSectionStyle = disabled ? iconSectionDisabled : iconSectionChecked;\r\n } else {\r\n iconSectionStyle = iconSection;\r\n }\r\n\r\n return (\r\n <div className={placementCard}>\r\n <img\r\n className={iconSectionStyle}\r\n src={props.icon}\r\n alt={props.label}\r\n />\r\n <span id=\"placements-1p-target-placement-label\" className={titleStyle}>\r\n {props.label}\r\n </span><br />\r\n <span className={subheaderStyle}>\r\n {props.value}\r\n </span>\r\n </div>\r\n );\r\n};\r\n\r\nrenderPlacements.propTypes = {\r\n props: PropTypes.shape({\r\n checked: PropTypes.bool.isRequired,\r\n disabled: PropTypes.bool.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n }),\r\n};\r\n\r\nconst ValidatedPlacementsFunctionPickerInternal = ({\r\n updateValidation,\r\n validationProps,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const { data: { BoostAdunitIds } } = validationProps;\r\n const initialSelectedKey = 'all';\r\n const initialSelectedPlacements = useMemo(() => _.map(placements, (placement => placement.id)), []);\r\n const initialSelectedAdUnitIds = useMemo(() =>\r\n _.flatten(_.map(\r\n initialSelectedPlacements,\r\n i => placements[placementsIdMap[i]].adUnitIds\r\n )), [initialSelectedPlacements]);\r\n\r\n const [selectedKey, setSelectedKey] = useState(initialSelectedKey);\r\n const [selectedPlacements, setSelectedPlacements] = useState(initialSelectedPlacements);\r\n const [selectedAdUnitIds, setSelectedAdUnitIds] = useState(initialSelectedAdUnitIds);\r\n const [placementsDisabledStates, setPlacementsDisabledStates] = useState([false, false, false]);\r\n\r\n useEffect(() => {\r\n if (BoostAdunitIds && _.isArray(BoostAdunitIds) && BoostAdunitIds.length > 0) {\r\n const savedSelectedKey = 'specific';\r\n setSelectedKey(savedSelectedKey);\r\n\r\n let savedSelectedPlacements = [];\r\n let savedSelectedAdUnitIds = [];\r\n _.forEach(placements, (placement) => {\r\n const overlap = _.intersection(BoostAdunitIds, placement.adUnitIds);\r\n if (overlap.length > 0) {\r\n savedSelectedPlacements = savedSelectedPlacements.concat(placement.id);\r\n savedSelectedAdUnitIds = savedSelectedAdUnitIds.concat(placement.adUnitIds);\r\n }\r\n });\r\n\r\n const newPlacementsDisabledStates = [false, false, false];\r\n if (savedSelectedPlacements.length === 1) {\r\n const idToDisable = savedSelectedPlacements[0];\r\n newPlacementsDisabledStates[idToDisable - 1] = true;\r\n }\r\n\r\n setPlacementsDisabledStates(newPlacementsDisabledStates);\r\n setSelectedPlacements(savedSelectedPlacements);\r\n setSelectedAdUnitIds(savedSelectedAdUnitIds);\r\n }\r\n }, [BoostAdunitIds, updateValidation]);\r\n\r\n const onChangeAllSpecific = useCallback((e, option) => {\r\n setSelectedKey(option.key);\r\n\r\n const result = {\r\n BoostAdunitIds: option.key === 'all' ? 'delete_value' : selectedAdUnitIds,\r\n };\r\n\r\n updateValidation([], result);\r\n }, [selectedAdUnitIds, updateValidation]);\r\n\r\n const handlePlacementOnChange = useCallback((e, isChecked, currentId, currentAdUnitIds) => {\r\n let newSelectedPlacements = [];\r\n let newSelectedAdUnitIds = [];\r\n\r\n // get the new selected placements and adUnitIds\r\n if (isChecked) {\r\n newSelectedPlacements = selectedPlacements.concat(currentId);\r\n newSelectedAdUnitIds = selectedAdUnitIds.concat(currentAdUnitIds);\r\n } else {\r\n newSelectedPlacements = _.filter(selectedPlacements, (placement => !_.isEqual(placement, currentId)));\r\n newSelectedAdUnitIds = _.flatten(_.filter(selectedAdUnitIds, (id => !_.contains(currentAdUnitIds, id))));\r\n }\r\n\r\n const newPlacementsDisabledStates = [false, false, false];\r\n if (newSelectedPlacements.length === 1) {\r\n const idToDisable = newSelectedPlacements[0];\r\n newPlacementsDisabledStates[idToDisable - 1] = true;\r\n }\r\n setPlacementsDisabledStates(newPlacementsDisabledStates);\r\n setSelectedPlacements(newSelectedPlacements);\r\n setSelectedAdUnitIds(newSelectedAdUnitIds);\r\n\r\n const result = {\r\n BoostAdunitIds: '',\r\n };\r\n result.BoostAdunitIds = newSelectedAdUnitIds;\r\n updateValidation([], result);\r\n }, [selectedPlacements, selectedAdUnitIds, updateValidation]);\r\n\r\n return (\r\n <div id=\"placements-1p-target-view\">\r\n <div className={placementsAllSpecificChoiceGroup} >\r\n <ChoiceGroup\r\n id=\"placements-1p-all-specific-options\"\r\n label={i18n.getString(_TL_('Where do you want to show your ads?'))}\r\n options={options}\r\n onChange={onChangeAllSpecific}\r\n selectedKey={selectedKey}\r\n />\r\n </div>\r\n <CampaignOData\r\n call={({ currentAccount }) => currentAccount.PlacementExclusionLists['Default.GetOwnedOperatedExclusions'].get()}\r\n >\r\n {oolist => (\r\n selectedKey === 'specific' && oolist.value.length > 0 &&\r\n <MessageBar\r\n id=\"placements-1p-target-message-bar\"\r\n messageBarType={MessageBarType.severeWarning}\r\n isMultiline\r\n styles={itemStyle}\r\n className=\"targets-message-bar\"\r\n >\r\n {i18n.getString(_TL_('You may be excluding the following websites which will prevent your campaign from serving'))}: { oolist.value.map(item => item.Url).join(', ')}\r\n </MessageBar>\r\n )\r\n }\r\n </CampaignOData>\r\n {selectedKey === 'specific' && (\r\n <div id=\"placements-1p-target-checkboxes\" className={placementsCheckboxes}>\r\n <Label>{i18n.getString(_TL_('Which bundles do you want your ads to serve in?'))}</Label>\r\n <Stack verticalAlign=\"center\" horizontal wrap tokens={{ childrenGap: 8 }}>\r\n {\r\n _.map(placements, (placement) => {\r\n let currentItemStyle;\r\n if (placement.checked) {\r\n currentItemStyle = placement.disabled ? itemStyleDisabled : itemStyleChecked;\r\n } else {\r\n currentItemStyle = itemStyle;\r\n }\r\n const checkedState = _.contains(selectedPlacements, placement.id);\r\n const disabledState = placementsDisabledStates[placement.id - 1];\r\n\r\n return (\r\n <div className={currentItemStyle}>\r\n <Checkbox\r\n id={placement.id}\r\n i18n={i18n}\r\n label={placement.label}\r\n value={placement.description}\r\n icon={placement.icon}\r\n boxSide=\"end\"\r\n onRenderLabel={renderPlacements}\r\n checked={checkedState}\r\n disabled={disabledState}\r\n onChange={(e, isChecked) => handlePlacementOnChange(e, isChecked, placement.id, placement.adUnitIds)}\r\n />\r\n </div>\r\n );\r\n })\r\n }\r\n </Stack>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nValidatedPlacementsFunctionPickerInternal.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n BoostAdunitIds: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport const ValidatedPlacementsFunctionPicker = withCustomValidation(ValidatedPlacementsFunctionPickerInternal);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ValidatedLegacyDateSetting } from '@bingads-webui-campaign/date-setting';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const AdSchedule = ({\r\n adGroup,\r\n campaign,\r\n isCreate,\r\n hideUseCampaignSetting,\r\n showBidAdjustmentColumn,\r\n setAdScheduleViewCallback,\r\n isDateSettingsDisplayed,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n adSchedules,\r\n StartDate,\r\n EndDate,\r\n deal,\r\n } = adGroup || {};\r\n\r\n const {\r\n adSchedules: campaignAdSchedules = {},\r\n TimeZone,\r\n } = campaign || {};\r\n\r\n return (\r\n <>\r\n {\r\n isDateSettingsDisplayed &&\r\n <ValidatedLegacyDateSetting\r\n i18n={i18n}\r\n validationProps={{\r\n data: {\r\n StartDate,\r\n EndDate,\r\n TimeZone,\r\n isCreate,\r\n },\r\n }}\r\n />\r\n }\r\n {\r\n !deal &&\r\n <ValidatedLegacyAdSchedule\r\n isCreation\r\n hideMinuteOptions\r\n level=\"adgroup\"\r\n entity={{ data: adGroup }}\r\n validationProps={{\r\n data: adSchedules,\r\n }}\r\n setAdScheduleView={setAdScheduleViewCallback}\r\n showBidAdjustmentColumn={showBidAdjustmentColumn}\r\n campaignDayTimeRanges={campaignAdSchedules.dayTimeRanges}\r\n hideUseCampaignSetting={hideUseCampaignSetting}\r\n />\r\n }\r\n </>\r\n );\r\n};\r\n\r\nAdSchedule.propTypes = {\r\n adGroup: PropTypes.shape({}),\r\n campaign: PropTypes.shape({}),\r\n isCreate: PropTypes.bool,\r\n hideUseCampaignSetting: PropTypes.bool,\r\n showBidAdjustmentColumn: PropTypes.bool,\r\n setAdScheduleViewCallback: PropTypes.func,\r\n isDateSettingsDisplayed: PropTypes.bool,\r\n};\r\n\r\nAdSchedule.defaultProps = {\r\n adGroup: {},\r\n campaign: {},\r\n isCreate: undefined,\r\n hideUseCampaignSetting: false,\r\n showBidAdjustmentColumn: false,\r\n setAdScheduleViewCallback: () => { },\r\n isDateSettingsDisplayed: true,\r\n};\r\n","import React, { useContext, useEffect, useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Text, mergeStyles } from '@bingads-webui-react/fabric-control';\r\nimport { Field, Radio, RadioGroup } from '@fluentui/react-components';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { areCriterionTargetsSet } from '../utils';\r\n\r\nexport const TARGET_OPTIONS = Object.freeze({\r\n BID_ONLY: 'BidOnly',\r\n TARGET_AND_BID: 'TargetAndBid',\r\n});\r\n\r\nexport const TARGET_OPTIONS_TO_TEXT = Object.freeze({\r\n [TARGET_OPTIONS.BID_ONLY]: _TL_('Bid only'),\r\n [TARGET_OPTIONS.TARGET_AND_BID]: _TL_('Target and bid'),\r\n});\r\n\r\nexport const TARGET_OPTIONS_TO_DESCRIPTION = Object.freeze({\r\n [TARGET_OPTIONS.BID_ONLY]: _TL_('Make bid adjustments for selected audiences without limiting ad reach.'),\r\n [TARGET_OPTIONS.TARGET_AND_BID]: _TL_('Limit the reach of your ads to the selected audiences only, with the option to adjust bids for your selections.'),\r\n});\r\n\r\nexport const TargetItems = [\r\n {\r\n id: TARGET_OPTIONS.BID_ONLY,\r\n text: TARGET_OPTIONS_TO_TEXT[TARGET_OPTIONS.BID_ONLY],\r\n description: TARGET_OPTIONS_TO_DESCRIPTION[TARGET_OPTIONS.BID_ONLY],\r\n },\r\n {\r\n id: TARGET_OPTIONS.TARGET_AND_BID,\r\n text: TARGET_OPTIONS_TO_TEXT[TARGET_OPTIONS.TARGET_AND_BID],\r\n description: TARGET_OPTIONS_TO_DESCRIPTION[TARGET_OPTIONS.TARGET_AND_BID],\r\n },\r\n];\r\n\r\nexport const TargetOrBidSelector = ({\r\n field, value, targets, negativeTargets, updateValidation, styles,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const styleClass = mergeStyles(styles);\r\n\r\n const [isInitialized, setIsInitialized] = useState(false);\r\n\r\n const areTargetsLoaded = useMemo(\r\n () => targets || negativeTargets,\r\n [targets, negativeTargets]\r\n );\r\n\r\n const areTargetsSet = useMemo(\r\n () => areCriterionTargetsSet(targets, negativeTargets),\r\n [targets, negativeTargets]\r\n );\r\n\r\n useEffect(() => {\r\n if (!areTargetsLoaded) { return; }\r\n setIsInitialized(true);\r\n }, [areTargetsLoaded]);\r\n\r\n useEffect(() => {\r\n if (areTargetsLoaded && !areTargetsSet && !isInitialized) {\r\n updateValidation([], { [field]: true });\r\n }\r\n }, [areTargetsLoaded, areTargetsSet, isInitialized, field, updateValidation, value]);\r\n\r\n const onChange = useCallback((_, data) => {\r\n updateValidation([], { [field]: data.value === TARGET_OPTIONS.TARGET_AND_BID });\r\n }, [field, updateValidation]);\r\n\r\n return (\r\n <div className={styleClass}>\r\n { areTargetsSet &&\r\n <Field label={i18n.getString(_TL_('Targeting setting'))}>\r\n <RadioGroup value={value ? TARGET_OPTIONS.TARGET_AND_BID : TARGET_OPTIONS.BID_ONLY} onChange={onChange}>\r\n {TargetItems.map(option => (\r\n <>\r\n <Radio key={option.id} value={option.id} label={i18n.getString(option.text)} />\r\n <Text>{i18n.getString(option.description)}</Text>\r\n </>\r\n ))}\r\n </RadioGroup>\r\n </Field>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nTargetOrBidSelector.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n targets: PropTypes.arrayOf(PropTypes.shape({})),\r\n negativeTargets: PropTypes.arrayOf(PropTypes.shape({})),\r\n styles: PropTypes.shape({}),\r\n};\r\n\r\nTargetOrBidSelector.defaultProps = {\r\n targets: null,\r\n negativeTargets: null,\r\n styles: {},\r\n};\r\n\r\nexport const ValidatedTargetOrBidSelector = withCustomValidation(TargetOrBidSelector);\r\n","import _, { size, chain, every, noop, get, isEmpty, sortBy } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { ValidatedAudiencePicker } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { withBidAdjustment } from './with-bid-adjustment';\r\nimport { CampaignObjectiveType } from '../../../common/constants';\r\n\r\nconst ValidatedAudiencePickerWithAudienceInfo = (props) => {\r\n const {\r\n shouldHide, onAudienceTargetInfoChange, updateValidation, validationProps, isAudienceCreationWorkflow, campaignGoal, boostConversionBasedSegmentEnabled, hideCustomSegmentsOption, ...rest\r\n } = props;\r\n const { data: { audiences } } = validationProps;\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const getAudienceTargetErrors = (audienceList) => {\r\n const errors = [];\r\n const customerMatchList = chain(audienceList)\r\n .filter(i => _.result(_.result(i, 'Criterion'), 'AudienceType') === 'CustomerList')\r\n .value();\r\n const excludeCustomerMatchList = _.filter(customerMatchList, i => i.Status === 'Excluded');\r\n const includeCustomerMatchList = _.filter(customerMatchList, i => i.Status === 'Active');\r\n\r\n if (campaignGoal === CampaignObjectiveType.Acquisition && boostConversionBasedSegmentEnabled &&\r\n size(excludeCustomerMatchList) === 0) {\r\n errors.push(_TL_('Need at least one exclusion customer match list when your campaign goal is Acquisition.'));\r\n }\r\n\r\n if (campaignGoal === CampaignObjectiveType.Engagement && boostConversionBasedSegmentEnabled &&\r\n size(includeCustomerMatchList) === 0) {\r\n errors.push(_TL_('Need at least one inclusion customer match list when your campaign goal is Engagement.'));\r\n }\r\n return errors;\r\n };\r\n\r\n const onChange = () => {\r\n const updatedItems = currentLevelTargetInfo.getSnapshot(false);\r\n const errors = getAudienceTargetErrors(updatedItems);\r\n updateValidation(errors, { audiences: [...updatedItems] });\r\n };\r\n\r\n const getPreExistingBids = (audience, currentTargets) => {\r\n const { Criterion = {} } = audience;\r\n\r\n if (Criterion.BidMultiplier > 0) {\r\n return Criterion.BidMultiplier;\r\n }\r\n\r\n const existingAudience = currentTargets.find(({ Criterion: criterion }) => (criterion.AudienceId === get(audience, 'Criterion.AudienceId')));\r\n\r\n if (existingAudience) {\r\n return {\r\n Id: existingAudience.Id,\r\n BidMultiplier: existingAudience.Criterion.BidMultiplier,\r\n };\r\n }\r\n\r\n return {\r\n BidMultiplier: Criterion.BidMultiplier,\r\n };\r\n };\r\n\r\n const onValidate = (result) => {\r\n const { data } = result;\r\n if (!isEmpty(data)) {\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false);\r\n // add the existing bids and Ids to audiences because ValidatedAudiencePicker removes it\r\n const hydratedAudiences = data.audiences.map((audience) => {\r\n const { Criterion = {} } = audience;\r\n const { Id, BidMultiplier } = getPreExistingBids(audience, currentTargets);\r\n\r\n const newAudience = {\r\n ...audience,\r\n Id,\r\n Criterion: {\r\n ...Criterion,\r\n BidMultiplier,\r\n },\r\n\r\n };\r\n\r\n return newAudience;\r\n });\r\n\r\n updateValidation(getAudienceTargetErrors(hydratedAudiences), { audiences: hydratedAudiences });\r\n }\r\n\r\n if (isAudienceCreationWorkflow && isEmpty(data)) {\r\n updateValidation(getAudienceTargetErrors([]), { audiences: [] });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (onAudienceTargetInfoChange) {\r\n onAudienceTargetInfoChange(currentLevelTargetInfo);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentLevelTargetInfo]);\r\n\r\n useEffect(() => {\r\n if (currentLevelTargetInfo && audiences) {\r\n currentLevelTargetInfo.off('AdGroupCriterionAudienceChanged', onChange);\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const isSame = every(audiences, audience => currentTargets.find(({ Criterion }) => (Criterion.AudienceId === get(audience, 'Criterion.AudienceId'))));\r\n\r\n if ((audiences.length !== currentTargets.length) || !isSame) {\r\n currentLevelTargetInfo.destroyTargetTypeAsync('Audience').then(() => {\r\n const sortedAudiences = sortBy(audiences, 'Status');\r\n sortedAudiences.forEach((audience) => {\r\n const { Criterion = {} } = audience;\r\n const newCriterion = {\r\n ...audience,\r\n Criterion: {\r\n ...Criterion,\r\n },\r\n };\r\n\r\n currentLevelTargetInfo.createAsync(newCriterion);\r\n });\r\n }).then(() => {\r\n currentLevelTargetInfo.on('AdGroupCriterionAudienceChanged', onChange);\r\n });\r\n } else {\r\n currentLevelTargetInfo.on('AdGroupCriterionAudienceChanged', onChange);\r\n }\r\n }\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionAudienceChanged', onChange);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [audiences]);\r\n\r\n if (shouldHide) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <ValidationGroup\r\n validationProps={{\r\n data: audiences,\r\n onValidate,\r\n stopPropagation: true,\r\n }}\r\n >\r\n <ValidatedAudiencePicker {...rest} validationProps={{ data: { audiences } }} hideCustomSegmentsOption={hideCustomSegmentsOption} />\r\n </ValidationGroup>\r\n </>\r\n );\r\n};\r\n\r\nValidatedAudiencePickerWithAudienceInfo.propTypes = {\r\n ...ValidatedAudiencePicker.propTypes,\r\n shouldHide: PropTypes.bool,\r\n onAudienceTargetInfoChange: PropTypes.func,\r\n isAudienceCreationWorkflow: PropTypes.bool,\r\n hideCustomSegmentsOption: PropTypes.bool,\r\n};\r\n\r\nValidatedAudiencePickerWithAudienceInfo.defaultProps = {\r\n shouldHide: false,\r\n onAudienceTargetInfoChange: noop,\r\n isAudienceCreationWorkflow: false,\r\n hideCustomSegmentsOption: false,\r\n};\r\n\r\nexport const ValidatedAudiencePickerWithBidAdjustment = withBidAdjustment(withError(withCustomValidation(ValidatedAudiencePickerWithAudienceInfo)), 'Audience', ['audiences']);\r\n\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { every, chain } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { BidAdjustment } from '@bingads-webui-campaign/target-bid-adjustment';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getTargetCriterion, RemovedDeviceBidAdjustment, AddedDeviceBidAdjustment } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { AgeRanges, DeviceTypes, GenderTypes } from '../../../common/constants';\r\nimport { getBidAdjustmentStyles } from './styles/bid-adjustment-styles';\r\n\r\nconst typeToValidationKey = {\r\n Age: {\r\n allAvailableSelection: AgeRanges,\r\n initialSelection: 'initialAgeRanges',\r\n selection: 'ageRanges',\r\n selectionWithBidAdjustment: 'ageRangesWithBidAdjustment',\r\n },\r\n Gender: {\r\n allAvailableSelection: GenderTypes,\r\n initialSelection: 'initialGenderTypes',\r\n selection: 'genderTypes',\r\n selectionWithBidAdjustment: 'genderTypesWithBidAdjustment',\r\n },\r\n Device: {\r\n allAvailableSelection: DeviceTypes,\r\n initialSelection: 'initialDeviceTypes',\r\n selection: 'deviceTypes',\r\n selectionWithBidAdjustment: 'deviceTypesWithBidAdjustment',\r\n },\r\n DeviceCampaign: {\r\n allAvailableSelection: DeviceTypes,\r\n initialSelection: 'initialCampaignLevelDeviceTargets',\r\n selection: 'campaignLevelDeviceTargets',\r\n selectionWithBidAdjustment: 'campaignDeviceTypesWithBidAdjustment',\r\n },\r\n};\r\n\r\nconst BidAdjustmentInternal = (props) => {\r\n const [bidAdjustmentRef, setBidAdjustmentRef] = useState();\r\n const [hasBidValueChanged, setHasBidValueChanged] = useState(false);\r\n\r\n const classes = useDefaultStyles(getBidAdjustmentStyles);\r\n\r\n const {\r\n data: { adGroup, campaign },\r\n updateValidation,\r\n criterionType,\r\n readOnly = false,\r\n criterionLevel = 'AdGroupCriterion',\r\n isAudienceEdit = false,\r\n } = props;\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: criterionLevel,\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), [criterionLevel]);\r\n\r\n const view = useMemo(() => {\r\n const bidAdjustmentGridview = new BidAdjustment({\r\n currentLevelTargetInfo,\r\n isForVNext: true,\r\n criterionTypes: [criterionType],\r\n supportCashbackSettings: false,\r\n showExclusion: false,\r\n readonly: readOnly,\r\n });\r\n\r\n bidAdjustmentGridview.render();\r\n\r\n return bidAdjustmentGridview;\r\n }, [criterionType, currentLevelTargetInfo, readOnly]);\r\n\r\n const onChange = useCallback(() => {\r\n const updatedItems = currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const targets = updatedItems.filter(({ CriterionType }) => (CriterionType === criterionType));\r\n\r\n let validationKey = typeToValidationKey[criterionType];\r\n\r\n if (criterionType === 'Device' && criterionLevel === 'CampaignCriterion') {\r\n validationKey = typeToValidationKey.DeviceCampaign;\r\n }\r\n\r\n updateValidation([], { [validationKey.selectionWithBidAdjustment]: targets });\r\n }, [criterionType, currentLevelTargetInfo, updateValidation, criterionLevel]);\r\n\r\n\r\n useEffect(() => {\r\n if (bidAdjustmentRef && bidAdjustmentRef.childElementCount === 0 && view) {\r\n bidAdjustmentRef.innerHTML = '';\r\n bidAdjustmentRef.append(view.el);\r\n }\r\n }, [bidAdjustmentRef, view]);\r\n\r\n useEffect(() => {\r\n if (criterionLevel && bidAdjustmentRef && view) {\r\n bidAdjustmentRef.innerHTML = '';\r\n\r\n view.render();\r\n bidAdjustmentRef.append(view.el);\r\n }\r\n }, [criterionLevel, bidAdjustmentRef, view]);\r\n\r\n useEffect(() => {\r\n if (bidAdjustmentRef) {\r\n currentLevelTargetInfo.off(`${criterionLevel}${criterionType}Changed`, () => onChange());\r\n\r\n let validationKey = typeToValidationKey[criterionType];\r\n\r\n if (criterionType === 'Device' && criterionLevel === 'CampaignCriterion') {\r\n validationKey = typeToValidationKey.DeviceCampaign;\r\n }\r\n\r\n const {\r\n [validationKey.selection]: selection,\r\n [validationKey.initialSelection]: initialSelection,\r\n } = adGroup || campaign;\r\n\r\n const negativeSelection = chain(validationKey.allAvailableSelection).values().difference(selection).value();\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === criterionType));\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === `Negative${criterionType}`));\r\n\r\n const targetKey = criterionType === 'Device' ? 'DeviceName' : 'Target';\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isTargetSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n const { [`${criterionType}Criterion`]: TypeCriterion } = Criterion;\r\n\r\n return selection.includes(TypeCriterion[targetKey]);\r\n }));\r\n\r\n const isNegativeTargetSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n const { [`${criterionType}Criterion`]: TypeCriterion } = Criterion;\r\n\r\n return negativeSelection.includes(TypeCriterion[targetKey]);\r\n }));\r\n\r\n const updatedCriterion = [];\r\n\r\n if ((selection && (currentTargets.length !== selection.length || !isTargetSame)) ||\r\n (negativeSelection && (currentNegativeTargets.length !== negativeSelection.length || !isNegativeTargetSame))) {\r\n const initialSelectionBidAdjustment = initialSelection.reduce((accumulator, currentValue) => {\r\n const { criterion, bidAdjustment } = currentValue;\r\n const updatedValue = accumulator;\r\n updatedValue[criterion] = bidAdjustment;\r\n return updatedValue;\r\n }, {});\r\n\r\n const currentBidAdjustment = currentTargets.reduce((accumulator, currentValue) => {\r\n const { Criterion: criterion } = currentValue;\r\n const { BidAdjustment: bidAdjustment } = criterion;\r\n const key = criterion[`${criterionType}Criterion`][targetKey];\r\n const updatedValue = accumulator;\r\n updatedValue[key] = bidAdjustment;\r\n return updatedValue;\r\n }, {});\r\n\r\n const criterionList = selection.map((criterion) => {\r\n let finalizedBid = currentBidAdjustment[criterion] || initialSelectionBidAdjustment[criterion];\r\n if (criterionType === 'Device' && isAudienceEdit === true) {\r\n const criterionBid = currentBidAdjustment[criterion] || initialSelectionBidAdjustment[criterion];\r\n const bid = criterionBid === RemovedDeviceBidAdjustment && hasBidValueChanged === true ? AddedDeviceBidAdjustment : criterionBid;\r\n finalizedBid = bid === undefined ? AddedDeviceBidAdjustment : bid;\r\n }\r\n return getTargetCriterion({\r\n targets: [{ criterion }],\r\n type: criterionType,\r\n propKey: targetKey,\r\n adGroupViewModel: { data: adGroup },\r\n campaignViewModel: { data: campaign },\r\n level: criterionLevel === 'CampaignCriterion' ? 'campaign' : 'adGroup',\r\n bidAdjustment: finalizedBid,\r\n })[0];\r\n });\r\n\r\n updatedCriterion.push(...criterionList);\r\n\r\n const negativeCriterionList = negativeSelection\r\n .filter(negSelection => !selection.includes(negSelection.criterion))\r\n .map(criterion => getTargetCriterion({\r\n targets: [{ criterion }],\r\n type: `Negative${criterionType}`,\r\n overrideType: criterionType,\r\n propKey: targetKey,\r\n adGroupViewModel: { data: adGroup },\r\n level: criterionLevel === 'CampaignCriterion' ? 'campaign' : 'adGroup',\r\n campaignViewModel: { data: campaign },\r\n })[0]);\r\n\r\n updatedCriterion.push(...negativeCriterionList);\r\n }\r\n\r\n if (updatedCriterion.length > 0) {\r\n currentLevelTargetInfo.destroyAllAsync();\r\n currentLevelTargetInfo.createMultipleAsync(updatedCriterion);\r\n }\r\n\r\n currentLevelTargetInfo.on(`${criterionLevel}${criterionType}Changed`, () => onChange());\r\n setHasBidValueChanged(true);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [campaign, adGroup, view, bidAdjustmentRef]);\r\n\r\n return (\r\n <div className={classNames(classes.pickerContainer)}>\r\n <div className=\"criterion-setting-container\">\r\n <div className=\"target-edit-container\">\r\n <div ref={newRef => setBidAdjustmentRef(newRef)} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nBidAdjustmentInternal.propTypes = {\r\n data: PropTypes.shape({\r\n adGroup: PropTypes.shape({\r\n ageRanges: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n initialAgeRanges: PropTypes.arrayOf(PropTypes.shape({\r\n criterion: PropTypes.string.isRequired,\r\n bidAdjustment: PropTypes.number.isRequired,\r\n })).isRequired,\r\n deviceTargetingCampaignLevel: PropTypes.bool.isRequired,\r\n }).isRequired,\r\n campaign: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n criterionType: PropTypes.string.isRequired,\r\n isAudienceEdit: PropTypes.bool,\r\n};\r\n\r\nexport const ValidatedBidAdjustment = withCustomValidation(BidAdjustmentInternal);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Switch } from '@fluentui/react-components';\r\nimport { withValidation, AdapterFactory } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst CustomAdapter = AdapterFactory({\r\n defaultValue: false,\r\n valueToInject: 'checked',\r\n functionToInject: 'onChange',\r\n convertEventToValue: event => event.target.checked,\r\n});\r\n\r\nconst SwitchInternal = ({\r\n checked,\r\n onChange,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n <Switch\r\n checked={checked}\r\n onChange={onChange}\r\n label={i18n.getString(_TL_('Use my campaign settings'))}\r\n />\r\n );\r\n};\r\n\r\nSwitchInternal.propTypes = {\r\n checked: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedLevelSwitch = withValidation(SwitchInternal, CustomAdapter);\r\n","import { every, noop, get, isEmpty, sortBy } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport { ValidationGroup, withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { ValidatedAudienceInterests } from '@bingads-webui-campaign-react/audience-interests';\r\n\r\nimport { withBidAdjustment } from './with-bid-adjustment';\r\n\r\nconst ValidatedAudienceInterestsWithAudienceInfo = (props) => {\r\n const {\r\n shouldHide, onAudienceTargetInfoChange, updateValidation, validationProps, ...rest\r\n } = props;\r\n const { data: { interests } } = validationProps;\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const onChange = () => {\r\n const updatedItems = currentLevelTargetInfo.getSnapshot(false);\r\n\r\n updateValidation([], { interests: [...updatedItems] });\r\n };\r\n\r\n const onValidate = (result) => {\r\n const { data } = result;\r\n if (!isEmpty(data)) {\r\n updateValidation([], { interests: data.interests });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (onAudienceTargetInfoChange) {\r\n onAudienceTargetInfoChange(currentLevelTargetInfo);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentLevelTargetInfo]);\r\n\r\n useEffect(() => {\r\n if (currentLevelTargetInfo && interests) {\r\n currentLevelTargetInfo.off('AdGroupCriterionAudienceChanged', onChange);\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const isSame = every(interests, interest => currentTargets.find(({ Criterion }) => (Criterion.AudienceId === get(interest, 'Criterion.AudienceId'))));\r\n\r\n if ((interests.length !== currentTargets.length) || !isSame) {\r\n currentLevelTargetInfo.destroyTargetTypeAsync('Audience').then(() => {\r\n const sortedAudiences = sortBy(interests, 'Status');\r\n sortedAudiences.forEach((audience) => {\r\n const { Criterion = {} } = audience;\r\n const newCriterion = {\r\n ...audience,\r\n Criterion: {\r\n ...Criterion,\r\n },\r\n };\r\n\r\n currentLevelTargetInfo.createAsync(newCriterion);\r\n });\r\n }).then(() => {\r\n currentLevelTargetInfo.on('AdGroupCriterionAudienceChanged', onChange);\r\n });\r\n } else {\r\n currentLevelTargetInfo.on('AdGroupCriterionAudienceChanged', onChange);\r\n }\r\n }\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionAudienceChanged', onChange);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [interests]);\r\n\r\n if (shouldHide) {\r\n return null;\r\n }\r\n\r\n return (\r\n <ValidationGroup\r\n validationProps={{\r\n data: interests,\r\n onValidate,\r\n stopPropagation: true,\r\n }}\r\n >\r\n <ValidatedAudienceInterests {...rest} validationProps={{ data: { interests } }} />\r\n </ValidationGroup>\r\n );\r\n};\r\n\r\nValidatedAudienceInterestsWithAudienceInfo.propTypes = {\r\n ...ValidatedAudienceInterests.propTypes,\r\n shouldHide: PropTypes.bool,\r\n onAudienceTargetInfoChange: PropTypes.func,\r\n isAudienceCreationWorkflow: PropTypes.bool,\r\n};\r\n\r\nValidatedAudienceInterestsWithAudienceInfo.defaultProps = {\r\n shouldHide: false,\r\n onAudienceTargetInfoChange: noop,\r\n isAudienceCreationWorkflow: false,\r\n};\r\n\r\nexport const ValidatedAudienceInterestsWithBidAdjustment = withBidAdjustment(withCustomValidation(ValidatedAudienceInterestsWithAudienceInfo), 'Audience', ['interests']);\r\n","import React, { useContext, useState, useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n ValidatedPanel,\r\n ValidatedFixedPanel,\r\n TextTitle,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { CampaignSubTypes, ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { formatAudience, Device, formatDevices } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { getAdScheduleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ValidatedCustomSegmentsPicker, formatCustomSegment } from '@bingads-webui-campaign-react/custom-segments-edit-create';\r\nimport { BidStrategy } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { formatInterests } from '@bingads-webui-campaign-react/audience-interests';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { ValidatedUrlOptionsParameter } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { ValidatedAdRotation, ROTATION_OPTION_TO_TEXT } from '@bingads-webui-react/ad-rotation';\r\nimport { ServerValidatedWebExclusions, webExclusionPropertyVal } from '@bingads-webui-react/web-exclusions';\r\n\r\nimport { SectionShimmer } from '../../../shared/section-shimmer';\r\nimport { getAdGroupStyles } from '../adgroup-styles';\r\nimport { ValidatedCompanyPicker, formatCompany } from './company-target';\r\nimport { ValidatedIndustryPicker, formatIndustry } from './industry-target';\r\nimport { ValidatedJobFunctionPicker, formatJobFunction } from './job-function-target';\r\nimport { PredictiveTargetingControlHeader } from './predictive-targeting-control';\r\nimport { ValidatedPlacementsFunctionPicker, formatPlacements } from './placements-function-target';\r\nimport { ContentTargetingPlacements, getContentTargetingPlacementsSummaryText } from './content-targeting-placements';\r\nimport { getAdGroupPanels } from '../../../step-utils';\r\nimport { AdSchedule } from './ad-schedule';\r\nimport { ValidatedTargetOrBidSelector } from './target-or-bid-selector';\r\nimport { ValidatedAudiencePickerWithBidAdjustment } from './audience-target';\r\nimport { ValidatedBidAdjustment } from '../components/audience-bid-adjustment';\r\nimport { ValidatedLevelSwitch } from './validated-level-switch';\r\nimport { ValidatedAudienceInterestsWithBidAdjustment } from './validated-audience-interests-with-bid-adjustment';\r\nimport { isAudience, isAudienceAdGroupEdit, isAdGroupCreation, isDisplayAdsCampaign, isCTVCampaign } from '../../../step-constants';\r\nimport { CampaignObjectiveType, DeviceTypes } from '../../../common/constants';\r\n\r\nconst getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n\r\nconst TargetingPreferencesInternal = ({\r\n data,\r\n error,\r\n onDataChange,\r\n isDateSettingsDisplayed,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\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 [optimizedTargetingEnabled, setOptimizedTargetingEnabled] = useState(false);\r\n const [isDeviceCampaignToggleVisible, setIsDeviceCampaignToggleVisible] = useState(false);\r\n\r\n const { state } = useWizardService();\r\n\r\n const { flow, isDefaultAdGroupStepModel, adGroup: initialAdGroup } = state.context.wizardData;\r\n\r\n const { adGroup, campaign = {}, audienceList } = data || {};\r\n\r\n const { advancedOptions } = useMemo(() => getAdGroupPanels(flow, serverContext), [flow, serverContext]);\r\n const isCTVFlow = useMemo(() => isCTVCampaign(flow), [flow]);\r\n const isAdGroupEditFlow = useMemo(() => isAudienceAdGroupEdit(flow), [flow]);\r\n\r\n const currentDate = useMemo(() => new Date(), []);\r\n\r\n const {\r\n DynamicPermissions: {\r\n XandrNegativeTarget,\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n EnableKeywordCustomSegments,\r\n InMarketAudienceRedesign,\r\n BoostConversionBasedSegment,\r\n ContentTargetingMSNSubcategories,\r\n },\r\n Permissions: {\r\n IsAmplifyEnabled,\r\n IsAIMCampaignEnabled,\r\n },\r\n } = serverContext;\r\n\r\n const boostConversionBasedSegmentEnabled = IsAmplifyEnabled && BoostConversionBasedSegment;\r\n const {\r\n // custom segments will be a part of audience criteria\r\n audiences,\r\n interests,\r\n locationTargets,\r\n isTargetSetAudience,\r\n initialIndustryTargets,\r\n industry,\r\n negativeIndustry,\r\n isTargetSetIndustry,\r\n initialJobTargets,\r\n jobTargets,\r\n negativeJobTargets,\r\n isTargetSetJobFunction,\r\n companyNameTargets,\r\n negativeCompanyNameTargets,\r\n isTargetSetCompanyName,\r\n deviceTypes,\r\n BoostAdunitIds,\r\n customSegments,\r\n deviceTargetingCampaignLevel,\r\n campaignLevelDeviceTargets,\r\n placements,\r\n } = adGroup || {};\r\n\r\n const classes = useDefaultStyles(getAdGroupStyles);\r\n const [\r\n allAdGroupTargetingSections,\r\n adgroupTargetingExpandedSections,\r\n setAdGroupTargetingExpandedSections,\r\n ] = useCollapseState(\r\n advancedOptions /* all sections */,\r\n boostConversionBasedSegmentEnabled ? ['audience-target'] : [] /* initially expanded sections */\r\n );\r\n\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: (adGroup && adGroup.TrackingUrlTemplate) || null,\r\n FinalUrlSuffix: (adGroup && adGroup.FinalUrlSuffix) || null,\r\n UrlCustomParameters: (adGroup && adGroup.UrlCustomParameters) || null,\r\n }), [adGroup]);\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n const webExclusionsError = _.filter(error, err => err.property === 'webExclusions');\r\n\r\n const setExclusionsCallback = useCallback((exclusionsData, type) => {\r\n if (data) {\r\n const patchedData = {\r\n data: {\r\n ...data,\r\n exclusions: {\r\n ...(data.exclusions || {}),\r\n adgroupExclusions: {\r\n ...(data.exclusions && data.exclusions.adgroupExclusions ? data.exclusions.adgroupExclusions : {}),\r\n [type]: exclusionsData,\r\n },\r\n },\r\n },\r\n };\r\n\r\n onDataChange(patchedData);\r\n }\r\n }, [data, onDataChange]);\r\n\r\n const currentLocationTargets = useMemo(\r\n () => {\r\n if (!locationTargets) {\r\n return {};\r\n }\r\n return (locationTargets.useParentLevel ? locationTargets.parentLevelSettings : locationTargets.currentLevelSettings);\r\n },\r\n [locationTargets]\r\n );\r\n\r\n const getCampaignSubType = useMemo(() => {\r\n if (isDisplayAdsCampaign(flow)) {\r\n return CampaignSubTypes.DisplayAds;\r\n } else if (isAudience(flow)) {\r\n return CampaignSubTypes.AudienceStatic;\r\n }\r\n return CampaignSubTypes.BrandAwarenessVideoAds;\r\n }, [flow]);\r\n\r\n const isAdScheduleCampaignToggleVisible = useMemo(() => {\r\n if (isAdGroupCreation(flow) || isAudienceAdGroupEdit(flow)) {\r\n return false;\r\n }\r\n return true;\r\n }, [flow]);\r\n\r\n const shouldSelectAllDevices = useMemo(() => {\r\n if (campaign != null && adGroup != null) {\r\n if (campaign.CampaignType === 'Audience'\r\n && adGroup.initialDeviceTypes\r\n && adGroup.initialDeviceTypes.length === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }, [campaign, adGroup]);\r\n\r\n const campaignGoal = useMemo(() => {\r\n const goal = _.result(\r\n _.find(campaign.CampaignSettings, i => _.has(i, 'CampaignObjectiveSettingType')),\r\n 'CampaignObjectiveSettingType'\r\n );\r\n return goal;\r\n }, [campaign]);\r\n\r\n const adScheduleDetails = useMemo(() => {\r\n const adScheduleDetailsMessage = getAdScheduleDetails(i18n, adScheduleView && adScheduleView.current, true);\r\n\r\n if (isDateSettingsDisplayed && adGroup) {\r\n return `${getDateSettingDetails(i18n, adGroup.StartDate, adGroup.EndDate)}: ${adScheduleDetailsMessage}`;\r\n }\r\n\r\n return adScheduleDetailsMessage;\r\n }, [adGroup, adScheduleView, i18n, isDateSettingsDisplayed]);\r\n\r\n const supportExclusion = isAudience(flow) ? true : XandrNegativeTarget;\r\n\r\n useEffect(() => {\r\n if (deviceTargetingCampaignLevel || !_.isEmpty(campaignLevelDeviceTargets)) {\r\n setIsDeviceCampaignToggleVisible(true);\r\n }\r\n }, [deviceTargetingCampaignLevel, campaignLevelDeviceTargets]);\r\n\r\n const adGroupTargetingSections = () => (\r\n <Collapse allPanelItems={allAdGroupTargetingSections} checkItems skipItemsTypeCheck activeKeys={adgroupTargetingExpandedSections} setActiveKeys={setAdGroupTargetingExpandedSections}>\r\n {InMarketAudienceRedesign && (\r\n <ValidatedPanel\r\n key=\"interests-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('In-market audiences')}\r\n key=\"interests-target\"\r\n topicKey=\"pop_BA_Audiences_IMA\"\r\n panelKey=\"interests-target\"\r\n details={formatInterests({ interests, i18n })}\r\n />}\r\n >\r\n { interests ? (\r\n <ValidatedAudienceInterestsWithBidAdjustment\r\n showBidAdjustments={isAudienceAdGroupEdit(flow)}\r\n supportExclusion={supportExclusion}\r\n validationProps={{\r\n data: {\r\n interests,\r\n },\r\n }}\r\n isAIMCampaignEnabled={IsAIMCampaignEnabled}\r\n campaignType={campaign.CampaignType}\r\n audienceList={audienceList}\r\n locationTargets={currentLocationTargets}\r\n autoTargeting={adGroup.UseOptimizedTargeting}\r\n campaignBiddingStrategy={(campaign && BidStrategy[campaign.BiddingScheme.Type])}\r\n campaignSubType={getCampaignSubType}\r\n />) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n )}\r\n <ValidatedPanel\r\n key=\"audience-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Audience')}\r\n key=\"audience-target\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Audience\"\r\n panelKey=\"audience-target\"\r\n details={formatAudience({ audiences, i18n, InMarketAudienceRedesign })}\r\n />}\r\n >\r\n {\r\n audiences ? (\r\n <ValidatedAudiencePickerWithBidAdjustment\r\n i18n={i18n}\r\n campaignSubType={getCampaignSubType}\r\n campaignGoal={campaignGoal}\r\n supportExclusion={supportExclusion}\r\n isAudienceCreationWorkflow={!isCTVFlow && (initialAdGroup === null || (initialAdGroup && initialAdGroup.StartDate > currentDate) || isDefaultAdGroupStepModel)}\r\n hideCustomSegmentsOption={initialAdGroup === null || (initialAdGroup && initialAdGroup.StartDate > currentDate) || isDefaultAdGroupStepModel || isAdGroupEditFlow}\r\n validationProps={{\r\n data: {\r\n audiences,\r\n },\r\n }}\r\n showBidAdjustments={isAudienceAdGroupEdit(flow)}\r\n isIMARedesignEnabled={InMarketAudienceRedesign}\r\n boostConversionBasedSegmentEnabled={boostConversionBasedSegmentEnabled}\r\n />\r\n ) : (<SectionShimmer />)\r\n }\r\n {isAudienceAdGroupEdit(flow) &&\r\n <ValidatedTargetOrBidSelector\r\n styles={{ marginTop: 32 }}\r\n field=\"isTargetSetAudience\"\r\n value={isTargetSetAudience}\r\n targets={audiences}\r\n />\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"device-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Device')}\r\n key=\"device-target\"\r\n panelKey=\"device-target\"\r\n topicKey={isCTVFlow ? 'pop_BA_PremiumStreaming_DeviceTargeting' : 'pop_BA_CampaignCreate_AudTargets_Device'}\r\n details={formatDevices({ devices: deviceTargetingCampaignLevel ? campaignLevelDeviceTargets : deviceTypes, i18n, isCTVSupported: isCTVFlow })}\r\n />}\r\n >\r\n {\r\n (deviceTypes && campaignLevelDeviceTargets) ? (\r\n <>\r\n {\r\n isDeviceCampaignToggleVisible && <ValidatedLevelSwitch\r\n validationProps={{\r\n schema: {\r\n type: 'object',\r\n properties: {\r\n deviceTargetingCampaignLevel: {\r\n type: 'boolean',\r\n },\r\n },\r\n },\r\n field: 'deviceTargetingCampaignLevel',\r\n }}\r\n />\r\n }\r\n <div className={classNames(classes.pickerContainer, !deviceTargetingCampaignLevel && classes.hide)}>\r\n <Device\r\n i18n={i18n}\r\n devices={campaignLevelDeviceTargets}\r\n deviceRestrictions={[DeviceTypes.Computers, DeviceTypes.Smartphones, DeviceTypes.Tablets]}\r\n isCTVSupported={false}\r\n validationPropsField=\"campaignLevelDeviceTargets\"\r\n key=\"campaignLevelDeviceTargets\"\r\n />\r\n {isAudienceAdGroupEdit(flow) && (\r\n <ValidatedBidAdjustment\r\n data={data}\r\n validationProps={{\r\n data: data.adGroup,\r\n stopPropagation: true,\r\n }}\r\n criterionType=\"Device\"\r\n criterionLevel=\"CampaignCriterion\"\r\n readOnly\r\n isAudienceEdit={isAudienceAdGroupEdit(flow)}\r\n />\r\n )\r\n }\r\n </div>\r\n <div className={classNames(classes.pickerContainer, deviceTargetingCampaignLevel && classes.hide)}>\r\n <Device\r\n i18n={i18n}\r\n devices={deviceTypes}\r\n isCTVSupported={isCTVFlow}\r\n validationPropsField=\"deviceTypes\"\r\n defaultSelectAll={shouldSelectAllDevices}\r\n key=\"deviceTypes\"\r\n />\r\n {\r\n isAudienceAdGroupEdit(flow) && (\r\n <ValidatedBidAdjustment\r\n data={data}\r\n validationProps={{\r\n data: data.adGroup,\r\n stopPropagation: true,\r\n }}\r\n criterionType=\"Device\"\r\n isAudienceEdit={isAudienceAdGroupEdit(flow)}\r\n />\r\n )\r\n }\r\n </div>\r\n </>\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"company-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Company')}\r\n key=\"company-target\"\r\n panelKey=\"company-target\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Company\"\r\n details={formatCompany({ companyNameTargets, i18n })}\r\n />}\r\n >\r\n <ValidatedCompanyPicker\r\n classes={classes}\r\n campaignSubType={getCampaignSubType}\r\n showBidAdjustments={isAudienceAdGroupEdit(flow)}\r\n validationProps={{\r\n data: {\r\n companyNameTargets,\r\n negativeCompanyNameTargets,\r\n },\r\n }}\r\n />\r\n {isAudienceAdGroupEdit(flow) &&\r\n <ValidatedTargetOrBidSelector\r\n field=\"isTargetSetCompanyName\"\r\n value={isTargetSetCompanyName}\r\n targets={companyNameTargets}\r\n negativeTargets={negativeCompanyNameTargets}\r\n styles={{ marginTop: 8 }}\r\n />\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"industry-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Industry')}\r\n key=\"industry-target\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Industry\"\r\n panelKey=\"industry-target\"\r\n validationProps={{\r\n data: {\r\n industry,\r\n negativeIndustry,\r\n },\r\n }}\r\n details={formatIndustry({ industry, i18n })}\r\n />}\r\n >\r\n <ValidatedIndustryPicker\r\n classes={classes}\r\n campaignSubType={getCampaignSubType}\r\n showBidAdjustments={isAudienceAdGroupEdit(flow)}\r\n initialIndustryTargets={initialIndustryTargets}\r\n />\r\n {isAudienceAdGroupEdit(flow) &&\r\n <ValidatedTargetOrBidSelector\r\n field=\"isTargetSetIndustry\"\r\n value={isTargetSetIndustry}\r\n targets={industry}\r\n negativeTargets={negativeIndustry}\r\n styles={{ marginTop: 8 }}\r\n />\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"job-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Job function')}\r\n key=\"job-target\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_JobFunction\"\r\n panelKey=\"job-target\"\r\n details={formatJobFunction({ jobTargets, i18n })}\r\n />}\r\n >\r\n <ValidatedJobFunctionPicker\r\n classes={classes}\r\n campaignSubType={getCampaignSubType}\r\n validationProps={{\r\n data: {\r\n jobTargets,\r\n negativeJobTargets,\r\n },\r\n }}\r\n showBidAdjustments={isAudienceAdGroupEdit(flow)}\r\n initialJobTargets={initialJobTargets}\r\n />\r\n {isAudienceAdGroupEdit(flow) &&\r\n <ValidatedTargetOrBidSelector\r\n field=\"isTargetSetJobFunction\"\r\n value={isTargetSetJobFunction}\r\n targets={jobTargets}\r\n negativeTargets={negativeJobTargets}\r\n />\r\n }\r\n </ValidatedPanel>\r\n {EnableKeywordCustomSegments && customSegments &&\r\n <ValidatedPanel\r\n key=\"custom-segments\"\r\n title={<TextTitle\r\n titleKey={_TL_('Custom segments')}\r\n key=\"custom-segments\"\r\n topicKey=\"pop_BA_Audiences_CustomSegments\"\r\n panelKey=\"custom-segments\"\r\n details={formatCustomSegment({ customSegments, i18n })}\r\n headingRole=\"heading\"\r\n headingLevel=\"2\"\r\n />}\r\n noOverflowHidden\r\n >\r\n <ValidatedCustomSegmentsPicker\r\n i18n={i18n}\r\n validationProps={{\r\n data: customSegments,\r\n }}\r\n />\r\n </ValidatedPanel>\r\n }\r\n <ValidatedPanel\r\n key=\"content-targeting-placements\"\r\n title={<TextTitle\r\n titleKey={_TL_('Placements')}\r\n key=\"content-targeting-placements\"\r\n topicKey=\"pop_BA_ContentTargeting_Placements\"\r\n panelKey=\"content-targeting-placements\"\r\n details={getContentTargetingPlacementsSummaryText({ i18n, placements })}\r\n noOverflowHidden\r\n />}\r\n >\r\n <ContentTargetingPlacements\r\n msnSubcategoriesEnabled={ContentTargetingMSNSubcategories}\r\n validationProps={{\r\n data: {\r\n placements: placements || [],\r\n },\r\n }}\r\n />\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"placements-1P-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Placements')}\r\n key=\"placements-1P-target\"\r\n topicKey=\"pop_BA_AdPlacements\"\r\n panelKey=\"placements-1P-target\"\r\n details={formatPlacements({ BoostAdunitIds, i18n })}\r\n />}\r\n >\r\n <ValidatedPlacementsFunctionPicker\r\n validationProps={{\r\n data: {\r\n BoostAdunitIds,\r\n },\r\n }}\r\n />\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"advanced-url-options\"\r\n title={<TextTitle titleKey={_TL_('Advanced URL options')} details={urlOptionsDetails} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <span className=\"url-options-descriptions\">\r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n </span>\r\n {\r\n adGroup &&\r\n <ValidatedUrlOptionsParameter\r\n i18n={i18n}\r\n validationProps={{\r\n data: {\r\n TrackingUrlTemplate: adGroup.TrackingUrlTemplate,\r\n FinalUrlSuffix: adGroup.FinalUrlSuffix,\r\n UrlCustomParameters: adGroup.UrlCustomParameters,\r\n },\r\n }}\r\n />\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"ad-rotation\"\r\n title={\r\n <TextTitle\r\n titleKey={_TL_('Ad rotation')}\r\n details={adGroup && ROTATION_OPTION_TO_TEXT[adGroup.AdRotation]}\r\n />\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <span className=\"ad-rotation-descriptions\">\r\n {i18n.getString(_TL_('Which ads do you want to show?'))}\r\n </span>\r\n {\r\n adGroup &&\r\n <ValidatedAdRotation\r\n field=\"AdRotation\"\r\n value={adGroup.AdRotation}\r\n />\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"ad-schedule\"\r\n title={adGroup ? <TextTitle\r\n titleKey={_TL_('Ad schedule')}\r\n key=\"ad-schedule\"\r\n topicKey=\"pop_BA_Targeting_DayTime\"\r\n panelKey=\"ad-schedule\"\r\n details={adScheduleDetails}\r\n /> : <SectionShimmer count={1} />}\r\n >\r\n {\r\n adGroup ?\r\n <AdSchedule\r\n adGroup={adGroup}\r\n campaign={campaign}\r\n isCreate={initialAdGroup === null || (initialAdGroup && initialAdGroup.StartDate > currentDate) || isDefaultAdGroupStepModel}\r\n hideUseCampaignSetting={isAdScheduleCampaignToggleVisible}\r\n setAdScheduleViewCallback={setAdScheduleViewCallback}\r\n isDateSettingsDisplayed={isDateSettingsDisplayed}\r\n />\r\n : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"web-exclusions\"\r\n title={<TextTitle titleKey={_TL_('Web exclusions')} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <span className=\"web-exclusions-description\">\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 </span>\r\n <ServerValidatedWebExclusions\r\n showSiteExclusion\r\n level={ScopeLevel.AdGroup}\r\n exclusionData={data && data.exclusions ? data.exclusions : {}}\r\n setExclusionsCallback={setExclusionsCallback}\r\n errors={webExclusionsError}\r\n formErrorProps={{ filter: webExclusionPropertyVal }}\r\n />\r\n </ValidatedPanel>\r\n <ValidatedFixedPanel\r\n key=\"predictive-targeting-control\"\r\n title={data ? (\r\n <PredictiveTargetingControlHeader\r\n validationProps={{\r\n data: adGroup,\r\n }}\r\n onToggleEnabledChanged={setOptimizedTargetingEnabled}\r\n campaignSubType={getCampaignSubType}\r\n alwaysDisabled={IsAmplifyEnabled && BoostConversionBasedSegment && campaignGoal === CampaignObjectiveType.Acquisition}\r\n EnableMSANDisplayCampaigns={EnableMSANDisplayCampaigns}\r\n EnableMSANVideoCampaigns={EnableMSANVideoCampaigns}\r\n />)\r\n : <SectionShimmer count={1} />\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <MessageBar intent=\"info\" layout=\"auto\">\r\n <MessageBarBody>\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 </MessageBarBody>\r\n </MessageBar>\r\n </ValidatedFixedPanel>\r\n </Collapse>\r\n );\r\n\r\n return (\r\n <>\r\n <ValidatedBootstrapPanel\r\n defaultExpanded={boostConversionBasedSegmentEnabled} // expand for the boost scenario\r\n className={classNames(classes.collapsiblePanel, 'targeting-preferences-panel')}\r\n render={() => (\r\n <>\r\n <BootstrapPanel.Heading>\r\n <BootstrapPanel.Title toggle>\r\n {i18n.getString(_TL_('Targeting preferences (optional)'))}\r\n </BootstrapPanel.Title>\r\n </BootstrapPanel.Heading>\r\n <BootstrapPanel.Collapse>\r\n <BootstrapPanel.Body>\r\n <div className={classNames('targeting-preferences-section')}>\r\n {adGroupTargetingSections()}\r\n </div>\r\n </BootstrapPanel.Body>\r\n </BootstrapPanel.Collapse>\r\n </>\r\n )}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nTargetingPreferencesInternal.propTypes = {\r\n data: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n adGroup: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n deviceTypes: PropTypes.shape({}),\r\n }),\r\n errors: PropTypes.arrayOf(PropTypes.shape({\r\n message: PropTypes.string,\r\n property: PropTypes.string,\r\n code: PropTypes.string,\r\n })),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.arrayOf(PropTypes.shape({\r\n message: PropTypes.string,\r\n property: PropTypes.string,\r\n code: PropTypes.string,\r\n })).isRequired,\r\n isDateSettingsDisplayed: PropTypes.bool,\r\n};\r\n\r\nTargetingPreferencesInternal.defaultProps = {\r\n isDateSettingsDisplayed: true,\r\n};\r\n\r\nexport const TargetingPreferences = TargetingPreferencesInternal;\r\n","export 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 AdGroupLocation: 'adGroupLocation',\r\n AdGroupRadius: 'adGroupRadius',\r\n AdGroupNegativeLocation: 'adGroupNegativeLocation',\r\n AdGroupLocationIntent: 'adGroupLocationIntent',\r\n AdGroupDayTimeCriterion: 'adGroupDayTimeCriterion',\r\n AdGroupNegativeWebpage: 'adGroupNegativeWebpage',\r\n AdGroupLocationTargetError: 'AdGroup Location Criterion Error',\r\n};\r\n","import { CustomValidatedDefaultBid } from '@bingads-webui-campaign-react/default-bid';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport { getBidRecommendationsRange } from './bid-recommendations-data';\r\n\r\n// Component to display bid recommendation message\r\nconst BidRecommendationInfo = ({ bidRecommendationRange, validationResult, i18n, isEdit }) => {\r\n const { isValidated, isValid } = validationResult;\r\n if (!isValidated || isValid || !bidRecommendationRange) {\r\n return null;\r\n }\r\n\r\n const { currencyCode } = bidRecommendationRange;\r\n const messageData = {\r\n bidFloor: i18n.formatCurrency(bidRecommendationRange.bidFloor, currencyCode),\r\n bidRecommendation: i18n.formatCurrency(bidRecommendationRange.bidRecommendation, currencyCode),\r\n bidCeil: i18n.formatCurrency(bidRecommendationRange.bidCeil, currencyCode),\r\n };\r\n\r\n const message = isEdit ?\r\n i18n.getString(_TL_('Use the recommended bid of {{bidRecommendation}} to improve ad delivery. A typical range for similar campaigns is between {{bidFloor}} and {{bidCeil}}'), messageData) :\r\n i18n.getString(_TL_('A typical range for similar campaigns is between {{bidFloor}} and {{bidCeil}}'), messageData);\r\n\r\n return (\r\n <div style={{ marginTop: '0.5em' }} data-test-id=\"bidRecommendationInfoMessage\">\r\n <Alert level=\"Info\" message={message} />\r\n </div>);\r\n};\r\n\r\nBidRecommendationInfo.propTypes = {\r\n bidRecommendationRange: PropTypes.shape({\r\n bidFloor: PropTypes.number,\r\n bidRecommendation: PropTypes.number,\r\n bidCeil: PropTypes.number,\r\n currencyCode: PropTypes.string,\r\n }),\r\n validationResult: PropTypes.shape({\r\n isValidated: PropTypes.bool,\r\n isValid: PropTypes.bool,\r\n }).isRequired,\r\n isEdit: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n formatCurrency: PropTypes.func,\r\n }).isRequired,\r\n};\r\nBidRecommendationInfo.defaultProps = {\r\n bidRecommendationRange: null,\r\n};\r\n\r\nexport const useCampaignBidTypeInfo = (campaign, currencyCode) => {\r\n const campaignType = campaign && campaign.CampaignType;\r\n const campaignSubType = campaign && campaign.CampaignSubType;\r\n const biddingSchemeType = campaign && campaign.BiddingScheme && campaign.BiddingScheme.Type;\r\n\r\n return useMemo(() => ({\r\n campaignType,\r\n campaignSubType,\r\n biddingSchemeType,\r\n currencyCode,\r\n }), [campaignType, campaignSubType, biddingSchemeType, currencyCode]);\r\n};\r\n\r\n// Hook to get the BidRecommendationRange data & a validator function\r\nexport const useBidRecommendation = (campaignBidTypeInfo) => {\r\n const bidRecommendationRange = useMemo(() => getBidRecommendationsRange(campaignBidTypeInfo), [campaignBidTypeInfo]);\r\n const checkIsBidInRecommendedRange = useCallback((bidValue) => {\r\n if (!bidRecommendationRange || !bidValue) { // Unknown range should show no message\r\n return { isValidated: false, isValid: false };\r\n }\r\n\r\n const isValid = bidValue >= bidRecommendationRange.bidFloor;\r\n return {\r\n isValidated: true,\r\n isValid,\r\n };\r\n }, [bidRecommendationRange]);\r\n\r\n return [bidRecommendationRange, checkIsBidInRecommendedRange];\r\n};\r\n\r\n/*\r\n * HOC to wrap a component with BidRecommendation data & message banner\r\n */\r\nexport const withBidRecommendation = (Component) => {\r\n const BidRecommendationWrappedComponent = (props) => {\r\n const { campaignBidTypeInfo, i18n, isEdit, ...rest } = props;\r\n\r\n /**\r\n * Lookup the bidRecommendationRange\r\n */\r\n const [bidRecommendationRange, checkIsBidInRecommendedRange] = useBidRecommendation(campaignBidTypeInfo);\r\n const [validationResult, setValidationResult] = useState({ isValidated: false, isValid: false });\r\n\r\n /**\r\n * Callback to listen to bid value changes\r\n */\r\n const onBidChange = useCallback((nextValue) => {\r\n const nextValidationResult = checkIsBidInRecommendedRange(nextValue);\r\n setValidationResult(nextValidationResult);\r\n }, [checkIsBidInRecommendedRange]);\r\n\r\n // NOTE: do NOT set `validationProps.data` here - it gets out of sync with the actual viewModel being used to save.\r\n\r\n return (\r\n <>\r\n <Component {...rest} i18n={i18n} onBidChange={onBidChange} />\r\n <BidRecommendationInfo\r\n bidRecommendationRange={bidRecommendationRange}\r\n validationResult={validationResult}\r\n i18n={i18n}\r\n isEdit={isEdit}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n BidRecommendationWrappedComponent.propTypes = {\r\n campaignBidTypeInfo: PropTypes.shape({\r\n campaignType: PropTypes.string.isRequired,\r\n campaignSubType: PropTypes.string.isRequired,\r\n biddingSchemeType: PropTypes.string.isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n formatCurrency: PropTypes.func,\r\n }).isRequired,\r\n isEdit: PropTypes.bool.isRequired,\r\n\r\n // Props for <CustomValidatedDefaultBid />\r\n validationProps: PropTypes.shape({\r\n field: PropTypes.string.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n };\r\n\r\n return BidRecommendationWrappedComponent;\r\n};\r\n\r\nexport const DefaultBidWithRecommendation = withBidRecommendation(CustomValidatedDefaultBid);\r\n","import React, { useContext, useCallback, useMemo } 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 { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ValidatedFrequencyCapping, adGroupBidProp } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { Label } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { getBidTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { PriceModelToRange } from '../../common/constants';\r\nimport { DefaultBidWithRecommendation, useCampaignBidTypeInfo } from './bid-with-recommendation';\r\n\r\nexport const AudienceBidValue = ({\r\n data,\r\n legacyI18n,\r\n onDataChange,\r\n ceilingValue,\r\n floorValue,\r\n stopPropagation = true,\r\n isEdit = false,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { adGroup, campaign } = data || {};\r\n\r\n const { BiddingScheme } = campaign;\r\n\r\n const onAdGroupValidate = (result) => {\r\n if (adGroup && result.isValid) {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n adGroup: {\r\n ...data.adGroup,\r\n ...result.data,\r\n CampaignBidStrategyName: BiddingScheme.Type,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const isFCapEnabled = useMemo(() => {\r\n const isCPM = BiddingScheme && BiddingScheme.Type === 'ManualCpm';\r\n return isCPM;\r\n }, [BiddingScheme]);\r\n\r\n const getBidRange = useCallback((type) => {\r\n if (!_.isUndefined(ceilingValue) && !_.isUndefined(floorValue)) {\r\n return {\r\n bidCeil: ceilingValue,\r\n bidFloor: floorValue,\r\n };\r\n }\r\n\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, ceilingValue, floorValue]);\r\n\r\n const campaignBidTypeInfo = useCampaignBidTypeInfo(campaign, serverContext.CurrentAccount.CurrencyCode);\r\n\r\n const CpmBid = useCallback(() => {\r\n const { bidCeil, bidFloor } = getBidRange(BiddingScheme.Type);\r\n\r\n return (\r\n <DefaultBidWithRecommendation\r\n placeholderText=\"25.00\"\r\n id=\"input-ad-group-bid\"\r\n currencyCode={serverContext.CurrentAccount.CurrencyCode}\r\n i18n={i18n}\r\n validationProps={{\r\n field: 'CpmBid',\r\n schema: {\r\n properties: {\r\n CpmBid: {\r\n type: 'number',\r\n minimum: bidFloor,\r\n maximum: bidCeil,\r\n required: true,\r\n },\r\n },\r\n },\r\n }}\r\n formErrorProps={{ filter: adGroupBidProp }}\r\n campaignBidTypeInfo={campaignBidTypeInfo}\r\n isEdit={isEdit}\r\n />\r\n );\r\n }, [BiddingScheme.Type, getBidRange, i18n, serverContext.CurrentAccount.CurrencyCode, campaignBidTypeInfo, isEdit]);\r\n\r\n const SearchBid = useCallback(() => {\r\n const { bidCeil, bidFloor } = getBidRange(BiddingScheme.Type);\r\n\r\n return (\r\n <DefaultBidWithRecommendation\r\n placeholderText=\"25.00\"\r\n id=\"input-ad-group-bid\"\r\n currencyCode={serverContext.CurrentAccount.CurrencyCode}\r\n i18n={i18n}\r\n validationProps={{\r\n field: 'SearchBid',\r\n schema: {\r\n properties: {\r\n SearchBid: {\r\n type: 'number',\r\n minimum: bidFloor,\r\n maximum: bidCeil,\r\n required: true,\r\n },\r\n },\r\n },\r\n }}\r\n formErrorProps={{ filter: adGroupBidProp }}\r\n campaignBidTypeInfo={campaignBidTypeInfo}\r\n isEdit={isEdit}\r\n />\r\n );\r\n }, [BiddingScheme.Type, getBidRange, i18n, serverContext.CurrentAccount.CurrencyCode, campaignBidTypeInfo, isEdit]);\r\n\r\n return (\r\n <div>\r\n <ValidationGroup\r\n validationProps={{\r\n schema: AdGroup,\r\n onValidate: onAdGroupValidate,\r\n data: adGroup || {},\r\n i18n: legacyI18n,\r\n stopPropagation,\r\n }}\r\n >\r\n <Label htmlFor=\"input-ad-group-bid\">\r\n {i18n.getString(_TL_('Default bid for bid strategy: {{bidStrategy}}'), { bidStrategy: getBidTitleDetails(i18n, BiddingScheme) })}\r\n <HelpPopup\r\n topic=\"pop_BA_BidTypeAwareness\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about bid strategy'))}\r\n />\r\n </Label>\r\n {\r\n (BiddingScheme.Type !== 'ManualCpm') ?\r\n <SearchBid /> : <CpmBid />\r\n }\r\n {\r\n isFCapEnabled &&\r\n <ValidatedFrequencyCapping\r\n i18n={i18n}\r\n validationProps={{\r\n data: adGroup.FrequencyCapSettings || [],\r\n }}\r\n />\r\n }\r\n </ValidationGroup>\r\n </div>\r\n );\r\n};\r\n","import React, { 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 { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ValidatedFrequencyCapping, adGroupBidProp, getNetflixFrequencyCapping } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { isXandrDisplayAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { Label } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { getBidTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { CustomValidatedDefaultBid } from '@bingads-webui-campaign-react/default-bid';\r\n\r\nexport const XandrBidValue = ({\r\n data,\r\n onDataChange,\r\n legacyI18n,\r\n isPremiumStreaming,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { campaign, adGroup } = data || {};\r\n const { deal } = adGroup || {};\r\n const isDealTypeRestricted = deal && _.isEqual('Restricted', deal.Type);\r\n const shouldUsePredefinedFrequencyLimit = isDealTypeRestricted;\r\n\r\n const { CampaignSubType, BiddingScheme } = campaign || {};\r\n\r\n const bidType = (BiddingScheme && BiddingScheme.Type === 'ManualCpm') ? 'CpmBid' : 'CpvBid';\r\n\r\n let bidRange = bidType === 'CpmBid' ? serverContext.VideoViewsCPMBidRange : serverContext.VideoViewsCPVBidRange;\r\n\r\n let dealMinimumBid = 0;\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 if (isXandrDisplayAdsCampaign(CampaignSubType)) {\r\n bidRange = serverContext.KeywordCPMBidRange;\r\n }\r\n\r\n const onAdGroupValidate = (result) => {\r\n if (adGroup) {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n adGroup: {\r\n ...data.adGroup,\r\n ...result.data,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\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: deal ? Math.max(dealMinimumBid, bidRange.FloorValue) : bidRange.FloorValue,\r\n maximum: deal ? null : bidRange.CeilingValue,\r\n required: true,\r\n },\r\n },\r\n },\r\n };\r\n\r\n return (\r\n <div>\r\n <ValidationGroup\r\n validationProps={{\r\n schema: AdGroup,\r\n onValidate: onAdGroupValidate,\r\n data: adGroup || {},\r\n i18n: legacyI18n,\r\n stopPropagation: true,\r\n }}\r\n >\r\n <Label htmlFor=\"input-ad-group-bid\">\r\n {i18n.getString(_TL_('Default bid for bid strategy: {{bidStrategy}}'), { bidStrategy: getBidTitleDetails(i18n, BiddingScheme) })}\r\n <HelpPopup\r\n topic={isPremiumStreaming ? 'pop_BA_PremiumStreaming_Bid' : 'pop_BA_BidTypeAwareness'}\r\n aria-label={i18n.getString(_TL_('Click to learn more about bid strategy'))}\r\n />\r\n </Label>\r\n <CustomValidatedDefaultBid\r\n placeholderText=\"25.00\"\r\n id=\"input-ad-group-bid\"\r\n currencyCode={serverContext.CurrentAccount.CurrencyCode}\r\n i18n={i18n}\r\n validationProps={bidValidationProps}\r\n formErrorProps={{ filter: adGroupBidProp }}\r\n />\r\n {\r\n shouldUsePredefinedFrequencyLimit ?\r\n getNetflixFrequencyCapping(i18n)\r\n :\r\n <ValidatedFrequencyCapping\r\n i18n={i18n}\r\n validationProps={{\r\n data: adGroup.FrequencyCapSettings,\r\n }}\r\n />\r\n }\r\n </ValidationGroup>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { Stack } from '@fluentui/react';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { getLocationTargetTitleDetails, getAdScheduleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { collapseExpander, Collapse, TextTitle, useCollapseState, ValidatedFixedPanel, ValidatedPanel } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport {\r\n FormErrorGroup,\r\n entityIs,\r\n anyComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { SEARCH_TYPE } from '@bingads-webui-react/bing-maps';\r\nimport { ValidatedLocationTargetSetting, useIsMounted } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport {\r\n AgeRange,\r\n Gender,\r\n formatAgeRanges,\r\n formatGenders,\r\n adGroupNameProp,\r\n ReachEstimate,\r\n NetflixTCAgreement,\r\n ValidatedGenreTargets,\r\n formatGenreTargets,\r\n getGenreOptions,\r\n getDealGenreOptions,\r\n DealImpressionPanel,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { useDefaultStyles, withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport {\r\n withControlErrorHandling,\r\n withUnvalidatedControlErrors,\r\n} from '@bingads-webui-campaign-react/error-handling';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { ValidatedBoostPlacementTarget, placementTargetingDetails, contextualTargetDetails } from '@bingads-webui-campaign-react/boost-placement-target';\r\nimport { ValidatedContextualTarget } from '@bingads-webui-campaign-react/boost-contextual-target';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { isXandrCampaign, campaignShouldServeOnMSAN } from '@bingads-webui-campaign-react/constants';\r\nimport { ValidatedLegacyDateSetting, getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\nimport { TargetingEstimation } from './components/targeting-estimation';\r\nimport { StepHeader } from '../../shared/step-header';\r\nimport { PredictiveTargetingHeader } from './components/predictive-targeting';\r\nimport { TargetingPreferences } from './components/targeting-preferences';\r\nimport { ValidatedBidAdjustment } from './components/audience-bid-adjustment';\r\nimport { SectionShimmer } from '../../shared/section-shimmer';\r\nimport { getAdGroupPanels } from '../../step-utils';\r\nimport { ERROR_ENTITY } from '../../common/error-entities';\r\nimport locationTargetIcon from '../../media/location-target.svg';\r\nimport genderTarget from '../../media/gender-target.svg';\r\nimport ageTarget from '../../media/age-target.svg';\r\nimport bidValueIcon from '../../media/bid-value.svg';\r\nimport placementTargetIcon from '../../media/placement-target.svg';\r\nimport contextualTargetIcon from '../../media/contextual-target.svg';\r\nimport adScheduleIcon from '../../media/ad-schedule.svg';\r\nimport startDateEndDateIcon from '../../media/start-date-end-date.svg';\r\nimport { getAdGroupStyles } from './adgroup-styles';\r\nimport {\r\n FLOWS,\r\n isAudienceAdGroupCreation,\r\n isAudienceAdGroupEdit as isAudienceAdGroupEditFlow,\r\n isAudience as isAudienceFlow,\r\n isEdit as isEditFlow,\r\n isCTVCampaign,\r\n isDealCampaign,\r\n} from '../../step-constants';\r\nimport { getContextualTargetStyles } from '../../shared/styles/contextual-target-styles';\r\nimport { formatReachEstimateData, getTargetSettingsFromCriterions } from './utils';\r\nimport { XandrBidValue, AudienceBidValue } from '../../shared/components';\r\nimport { AdSchedule } from './components';\r\n\r\nconst adGroupLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.AdGroupLocation),\r\n entityIs(ERROR_ENTITY.AdGroupRadius),\r\n entityIs(ERROR_ENTITY.AdGroupNegativeLocation),\r\n entityIs(ERROR_ENTITY.AdGroupLocationIntent),\r\n entityIs(ERROR_ENTITY.AdGroupLocationTargetError)\r\n);\r\n\r\nconst getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLocationTargetSetting,\r\n { filter: adGroupLocationCriterions }\r\n));\r\n\r\nconst ContextualTargetWithStyle = withDefaultStyles(ValidatedContextualTarget, getContextualTargetStyles);\r\nexport const AdGroupStepShellInternal = ({\r\n data,\r\n onDataChange: onDataChangeProp,\r\n scope,\r\n error,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const isMounted = useIsMounted();\r\n\r\n const onDataChange = useCallback((...args) => {\r\n if (!isMounted.current) return;\r\n onDataChangeProp(...args);\r\n }, [isMounted, onDataChangeProp]);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const classes = useDefaultStyles(getAdGroupStyles);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state } = useWizardService();\r\n\r\n const currentStates = state.toStrings()[1];\r\n\r\n const { flow, isDefaultAdGroupStepModel, adGroup: initialAdGroup } = state.context.wizardData;\r\n\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n\r\n const {\r\n adGroup, bundleCountries, bundleLocationCriterions, campaign,\r\n } = data || {};\r\n\r\n const {\r\n CampaignSubType,\r\n CampaignSettings,\r\n } = campaign || {};\r\n\r\n const {\r\n locationTargets,\r\n ageRanges,\r\n genderTypes,\r\n BoostAdunitIds,\r\n BoostPublisherIds,\r\n BoostAccountIds,\r\n BoostTriggerIds,\r\n contextualTargets,\r\n genreTargets,\r\n deal,\r\n locationRestricted,\r\n } = adGroup || {};\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 legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const { basicOptions } = useMemo(() => getAdGroupPanels(flow, serverContext), [flow, serverContext]);\r\n\r\n const [\r\n allAdGroupSettingsSections,\r\n adGroupSettingsExpandedSections,\r\n setAdGroupSettingsExpandedSections,\r\n ] = useCollapseState(\r\n basicOptions /* all sections */,\r\n ['ad-group-name', 'predictive-targeting'] /* initially expanded sections */\r\n );\r\n const {\r\n DynamicPermissions: {\r\n XandrNegativeTarget,\r\n AgeGenderDisclaimer,\r\n PTPerfEstimationUIUpdate,\r\n CampaignCreationPlannerIntegration,\r\n CampaignCreationPlannerIntegrationMultiAd,\r\n InMarketAudienceRedesign,\r\n CampaignLifetimeBudget,\r\n AudienceUsePrivacyCheckV2,\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 useCampaignLevelDates = data?.campaign?.UseCampaignLevelDates;\r\n const startDate = useCampaignLevelDates ? data?.campaign?.StartDate : data?.adGroup?.StartDate;\r\n const endDate = useCampaignLevelDates ? data?.campaign?.EndDate : data?.adGroup?.EndDate;\r\n\r\n const allBasicExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdGroupSettingsExpandedSections }),\r\n [setAdGroupSettingsExpandedSections]\r\n );\r\n\r\n const shouldServeOnMSAN = campaignShouldServeOnMSAN(CampaignSettings);\r\n const isXandrServing = isXandrCampaign(CampaignSubType) && !shouldServeOnMSAN;\r\n\r\n const isAudienceAdGroupCreate = useMemo(() => isAudienceAdGroupCreation(flow), [flow]);\r\n const isAudienceAdGroupEdit = useMemo(() => isAudienceAdGroupEditFlow(flow), [flow]);\r\n const isAudience = useMemo(() => isAudienceFlow(flow), [flow]);\r\n const isEdit = useMemo(() => isEditFlow(flow), [flow]);\r\n const isCTVFlow = useMemo(() => isCTVCampaign(flow), [flow]);\r\n const isDealFlow = useMemo(() => isDealCampaign(flow), [flow]);\r\n const isCTVOrDeal = isCTVFlow || isDealFlow;\r\n\r\n const isDealTypeRestricted = deal && _.isEqual('Restricted', deal.Type);\r\n const shouldShowDealLocationTarget = (deal && !locationRestricted) || !isDealTypeRestricted;\r\n const hideLocationTarget = isDealFlow ? !shouldShowDealLocationTarget : false;\r\n const hideGenreTarget = isDealFlow ? !(deal && deal.Genre) : false;\r\n const genreOptions = useMemo(() => _.sortBy(isDealFlow ? getDealGenreOptions(i18n) : getGenreOptions(i18n), 'name'), [i18n, isDealFlow]);\r\n const dealCountryCode = deal && deal.TwoLetterCountryCode;\r\n const dealSupportedLocationType = deal && deal.SupportedLocationType;\r\n\r\n const errors = useMemo(() => {\r\n if (error && _.isArray(error)) {\r\n return error;\r\n } else if (data && data.errors && data.errors.length > 0) {\r\n return data.errors;\r\n }\r\n return [];\r\n }, [data, error]);\r\n\r\n const showAllValidationErrorsMemo = useMemo(() => showAllValidationErrors || (data && data.errors && data.errors.length > 0), [showAllValidationErrors, data]);\r\n\r\n const BidValue = isXandrServing ? XandrBidValue : AudienceBidValue;\r\n\r\n const onValidate = (result) => {\r\n if (data && data.adGroup) {\r\n const updatedData = {\r\n data: {\r\n ...data,\r\n adGroup: {\r\n ...data.adGroup,\r\n ...result.data,\r\n },\r\n },\r\n isValid: result.isValid,\r\n };\r\n\r\n let targetSetting = null;\r\n\r\n if (isAudience) {\r\n targetSetting = getTargetSettingsFromCriterions(updatedData.data.adGroup, isAudienceAdGroupEdit);\r\n updatedData.data.adGroup.TargetSetting = targetSetting;\r\n }\r\n onDataChange(updatedData);\r\n }\r\n };\r\n\r\n const isValidTargets = useMemo(() => {\r\n if (data && data.adGroup) {\r\n if (PTPerfEstimationUIUpdate ||\r\n data.adGroup.UseOptimizedTargeting === false\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }, [PTPerfEstimationUIUpdate, data]);\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 expiredAdGroupError = _.filter(error, err => err.code === 'CampaignServiceCannotUpdateAdGroupInExpiredState');\r\n const bidAmountsLessThanFloorPriceAdGroupError = _.filter(error, err => err.code === 'CampaignServiceBidAmountsLessThanFloorPrice');\r\n\r\n const shouldShowNetflixTC = useMemo(() =>\r\n isCTVFlow &&\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 ), [isCTVFlow, locationTargets, NetflixEnabledCountryCodesArr, BundleCountriesCodesArr]);\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onAdGroupStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onAdGroupStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n return (\r\n <div className={classNames(classes.adgroupShell, 'adgroup-shell', 'ad-group-step')}>\r\n <ActuationGroup actuationProps={{ isActive: false }}>\r\n <AttentionBeaconGroup>\r\n <FormErrorGroup formErrorProps={{ errors, showAllValidationErrors: showAllValidationErrorsMemo }}>\r\n <ValidationGroup\r\n validationProps={{\r\n schema: AdGroup,\r\n onValidate,\r\n data: (data && data.adGroup) || {},\r\n i18n: legacyI18n,\r\n }}\r\n >\r\n <Stack className={classes.adgroupOptions} horizontal tokens={{ childrenGap: 30 }}>\r\n <div className={classNames('adgroup-step')}>\r\n {!isEdit &&\r\n <StepHeader\r\n title={_TL_('Ad group, audiences, & targets')}\r\n />\r\n }\r\n <div className=\"base-options-stack\">\r\n <Collapse allPanelItems={allAdGroupSettingsSections} checkItems skipItemsTypeCheck activeKeys={adGroupSettingsExpandedSections} setActiveKeys={setAdGroupSettingsExpandedSections}>\r\n <ValidatedFixedPanel\r\n key=\"ad-group-name\"\r\n title={<TextTitle titleKey={_TL_('Ad group name')} topicKey=\"pop_BA_CampaignCreate_AudTargets_AdGroupName\" />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <RemainingCharsValidatedTextField\r\n placeholder={_TL_('Enter a name for your ad group')}\r\n id=\"input-ad-group-name\"\r\n validationProps={{\r\n field: 'Name',\r\n schema: AdGroup,\r\n }}\r\n i18n={i18n}\r\n formErrorProps={{ filter: adGroupNameProp }}\r\n />\r\n </ValidatedFixedPanel>\r\n {(isCTVOrDeal || isEdit) && campaign && campaign.BiddingScheme && campaign.BiddingScheme.Type !== 'MaxConversions' &&\r\n <ValidatedFixedPanel\r\n key=\"bid-value\"\r\n title={<TextTitle titleKey={_TL_('Default bid')} icon={bidValueIcon} topicKey=\"pop_BA_CampaignCreate_Budget_DefaultBid\" />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n data && data.adGroup && data.campaign ? (\r\n <BidValue\r\n data={data}\r\n onDataChange={onDataChange}\r\n legacyI18n={legacyI18n}\r\n isEdit={isEdit}\r\n isPremiumStreaming={isCTVFlow}\r\n />\r\n ) : (<SectionShimmer count={3} />)\r\n }\r\n </ValidatedFixedPanel>\r\n }\r\n <ValidatedPanel\r\n key=\"start-end-date\"\r\n noOverflowHidden\r\n title={<TextTitle\r\n icon={startDateEndDateIcon}\r\n titleKey={_TL_('Start and end dates')}\r\n details={`${getDateSettingDetails(i18n, startDate, endDate, useCampaignLevelDates, CampaignLifetimeBudget)}`}\r\n panelKey=\"start-end-date\"\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <ValidatedLegacyDateSetting\r\n i18n={i18n}\r\n validationProps={{\r\n stopPropagation: true,\r\n data: {\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n TimeZone: data && data.campaign && data.campaign.TimeZone,\r\n isCreate: initialAdGroup === null || (initialAdGroup && new Date(initialAdGroup.StartDate) > new Date()) || isDefaultAdGroupStepModel,\r\n },\r\n }}\r\n allowStartDateSelection={!useCampaignLevelDates}\r\n allowNoEndDateSelection={!useCampaignLevelDates}\r\n allowEndDateSelection={!useCampaignLevelDates}\r\n />\r\n {useCampaignLevelDates && (\r\n <div style={{ marginTop: '10px' }}>\r\n <MessageBar intent=\"info\" layout=\"auto\">\r\n <MessageBarBody>\r\n {i18n.getString(_TL_('Start and end dates are managed at the campaign level.'))}\r\n </MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n )}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"placement-target\"\r\n title={<TextTitle\r\n icon={placementTargetIcon}\r\n titleKey={_TL_('Placement targeting')}\r\n details={placementTargetingDetails}\r\n />}\r\n >{\r\n data && data.adGroup ? (\r\n <ValidatedBoostPlacementTarget\r\n i18n={i18n}\r\n hideHeader\r\n boostSetting={{\r\n adUnitIds: BoostAdunitIds,\r\n publisherIds: BoostPublisherIds,\r\n accountIds: BoostAccountIds,\r\n triggerIds: BoostTriggerIds,\r\n }}\r\n />\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"contextual-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Contextual targeting')}\r\n icon={contextualTargetIcon}\r\n details={contextualTargetDetails}\r\n />}\r\n >{\r\n data && data.adGroup ? (\r\n <ContextualTargetWithStyle\r\n i18n={i18n}\r\n validationProps={{\r\n data: {\r\n contextualTargets,\r\n },\r\n }}\r\n hideHeader\r\n />\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n {\r\n !hideLocationTarget &&\r\n <ValidatedPanel\r\n key=\"location-target\"\r\n data={data}\r\n onDataChange={onDataChange}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpand,\r\n expandKey: 'location-target',\r\n }}\r\n title={<TextTitle\r\n titleKey={_TL_('Location')}\r\n key=\"location-target\"\r\n topicKey=\"pop_BA_CampaignCreate_Settings_LocationTargeting\"\r\n panelKey=\"location-target\"\r\n details={getLocationTargetTitleDetails(i18n, locationTargets, true, '', true)}\r\n icon={locationTargetIcon}\r\n />}\r\n >\r\n {locationTargets ? (\r\n <ServerValidatedLocationTargetSetting\r\n validationProps={{\r\n data: locationTargets,\r\n }}\r\n bundleCountries={bundleCountries}\r\n bundleLocationCriterions={bundleLocationCriterions}\r\n isRadiusExcludeEnabled={!isAudience || !isXandrServing}\r\n allowNegativeLocationTargeting={isAudience ? true : XandrNegativeTarget}\r\n showSearchTypeOptions={!isXandrServing}\r\n defaultSelectedSearchType={SEARCH_TYPE.Boundary}\r\n isBrandAwarenessCampaignScenario={isXandrServing}\r\n hideIntent\r\n scope={scope}\r\n isAdGroupLevel={isCTVOrDeal ? false : (isEdit || isAudienceAdGroupCreate)}\r\n showUserParentLevelToggle={isCTVOrDeal ? false : (isEdit || isAudienceAdGroupCreate)}\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 allowBidAdjustment={isAudienceAdGroupEdit}\r\n dealInfo={{ isForDeal: isDealFlow && shouldShowDealLocationTarget, dealCountryCode, dealSupportedLocationType }}\r\n // For the current state, we use the GEO check for location setting validation.\r\n // In the future, we will distinguish TARGETABLE deal and GEO deal based on translated VP.\r\n />\r\n ) : (<SectionShimmer />)}\r\n </ValidatedPanel>\r\n }\r\n {\r\n shouldShowNetflixTC &&\r\n <ValidatedFixedPanel\r\n key=\"netflix-tc\"\r\n title={<TextTitle\r\n titleKey={_TL_('Netflix Terms and Conditions')}\r\n />}\r\n >\r\n <NetflixTCAgreement\r\n i18n={i18n}\r\n cid={cid}\r\n aid={aid}\r\n />\r\n </ValidatedFixedPanel>\r\n }\r\n <ValidatedPanel\r\n key=\"gender-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Gender')}\r\n key=\"gender-target\"\r\n panelKey=\"gender-target\"\r\n details={formatGenders(genderTypes, i18n)}\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Gender\"\r\n icon={genderTarget}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpand,\r\n expandKey: 'gender-target',\r\n }}\r\n >\r\n {\r\n genderTypes ? (\r\n <>\r\n <Gender\r\n i18n={i18n}\r\n genders={genderTypes}\r\n />\r\n {\r\n isEdit && !isCTVOrDeal && (\r\n <ValidatedBidAdjustment\r\n data={data}\r\n validationProps={{\r\n data: data.adGroup,\r\n onValidate,\r\n stopPropagation: true,\r\n }}\r\n criterionType=\"Gender\"\r\n />\r\n )\r\n }\r\n </>\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"age-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Age')}\r\n key=\"age-target\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Age\"\r\n panelKey=\"age-target\"\r\n details={formatAgeRanges(ageRanges, i18n)}\r\n icon={ageTarget}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpand,\r\n expandKey: 'age-target',\r\n }}\r\n >\r\n {\r\n ageRanges ? (\r\n <>\r\n <AgeRange\r\n i18n={i18n}\r\n ageRanges={ageRanges}\r\n />\r\n {\r\n isEdit && !isCTVOrDeal && (\r\n <ValidatedBidAdjustment\r\n data={data}\r\n validationProps={{\r\n data: data.adGroup,\r\n onValidate,\r\n stopPropagation: true,\r\n }}\r\n criterionType=\"Age\"\r\n />\r\n )\r\n }\r\n </>\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n {\r\n !hideGenreTarget && (\r\n <ValidatedPanel\r\n key=\"genre-targets\"\r\n title={<TextTitle\r\n titleKey={_TL_('Genre')}\r\n key=\"genre-targets\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Genre\"\r\n panelKey=\"genre-targets\"\r\n details={formatGenreTargets({ genreTargets, genreOptions, i18n })}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpand,\r\n expandKey: 'genre-targets',\r\n }}\r\n >\r\n {\r\n genreTargets ? (\r\n <>\r\n <ValidatedGenreTargets\r\n i18n={i18n}\r\n genreTargets={genreTargets}\r\n genreOptions={genreOptions}\r\n />\r\n </>\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n )\r\n }\r\n <ValidatedFixedPanel\r\n key=\"predictive-targeting\"\r\n title={data ? <PredictiveTargetingHeader data={data.adGroup} /> : <SectionShimmer count={1} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <div />\r\n </ValidatedFixedPanel>\r\n <ValidatedPanel\r\n key=\"ad-schedule\"\r\n title={adGroup ? <TextTitle\r\n titleKey={_TL_('Ad schedule')}\r\n key=\"ad-schedule\"\r\n panelKey=\"ad-schedule\"\r\n details={deal ? getDateSettingDetails(i18n, adGroup.StartDate, adGroup.EndDate) : `${getDateSettingDetails(i18n, adGroup.StartDate, adGroup.EndDate)}: ${getAdScheduleDetails(i18n, adScheduleView && adScheduleView.current, true)}`}\r\n icon={adScheduleIcon}\r\n /> : <SectionShimmer count={1} />}\r\n >\r\n {\r\n adGroup && campaign ? (\r\n <AdSchedule\r\n adGroup={adGroup}\r\n campaign={campaign}\r\n showBidAdjustmentColumn={!isCTVOrDeal}\r\n hideUseCampaignSetting={isCTVOrDeal}\r\n setAdScheduleViewCallback={setAdScheduleViewCallback}\r\n isCreate={!isEdit}\r\n />\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n </Collapse>\r\n </div>\r\n {!isDealFlow && <TargetingPreferences data={data} onDataChange={onDataChange} error={error} isDateSettingsDisplayed={!isAudienceFlow} />}\r\n {expiredAdGroupError.length > 0 && (\r\n <div style={{ marginBottom: '4px' }}>\r\n <Alert\r\n message={expiredAdGroupError[0].message}\r\n level=\"Error\"\r\n icon={<div className=\"alert-image\" />}\r\n dismissible={false}\r\n />\r\n </div>\r\n )}\r\n {bidAmountsLessThanFloorPriceAdGroupError.length > 0 && (\r\n <div style={{ marginBottom: '4px' }}>\r\n <Alert\r\n message={bidAmountsLessThanFloorPriceAdGroupError[0].message}\r\n level=\"Error\"\r\n icon={<div className=\"alert-image\" />}\r\n dismissible={false}\r\n />\r\n </div>\r\n )}\r\n {AgeGenderDisclaimer && <Alert\r\n message={i18n.getString(_TL_('If you’re advertising in connection with any financial, insurance, education, career and employment, and/or housing services, you should <b>not</b> 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={(<div className=\"alert-image\" />)}\r\n dismissible={false}\r\n />}\r\n </div>\r\n <div className={classNames(isEdit ? classes.estimationPartEditFlow : classes.estimationPart, 'estimation-part')}>\r\n {isValidTargets && isAudience && data.adGroup && data.campaign &&\r\n <TargetingEstimation\r\n data={data}\r\n isCampaignCreationPlannerIntegrationEnabled={CampaignCreationPlannerIntegration}\r\n PTPerfEstimationUIUpdate={PTPerfEstimationUIUpdate}\r\n isMultiAdFormatEnabled={CampaignCreationPlannerIntegrationMultiAd}\r\n validationProps={{ field: 'reachEstimation' }}\r\n showBreakdown={InMarketAudienceRedesign}\r\n isAudienceAdGroupEdit={isAudienceAdGroupEdit}\r\n audienceUsePrivacyCheck={AudienceUsePrivacyCheckV2}\r\n />\r\n }\r\n {(flow === FLOWS.VIDEO_CAMPAIGNS || flow === FLOWS.DISPLAY_CAMPAIGNS || isCTVFlow)\r\n && adGroup && campaign && <ReachEstimate\r\n i18n={i18n}\r\n permissions={serverContext.Permissions}\r\n shouldServeOnMSAN\r\n targets={formatReachEstimateData({\r\n adGroup,\r\n bundleCountries,\r\n campaignSubType: campaign.campaignSubType,\r\n campaignBiddingScheme: campaign.BiddingScheme,\r\n })}\r\n accountId={serverContext.CurrentAccount.Id}\r\n customerId={serverContext.CurrentCustomer.Id}\r\n validationProps={{ field: 'reachEstimation' }}\r\n />\r\n }\r\n {\r\n isDealFlow && deal && adGroup && campaign &&\r\n <DealImpressionPanel\r\n targets={formatReachEstimateData({\r\n adGroup,\r\n bundleCountries,\r\n campaignSubType: campaign.campaignSubType,\r\n campaignBiddingScheme: campaign.BiddingScheme,\r\n })}\r\n i18n={i18n}\r\n serverContext={serverContext}\r\n deal={deal}\r\n />\r\n }\r\n </div>\r\n </Stack>\r\n </ValidationGroup>\r\n </FormErrorGroup>\r\n </AttentionBeaconGroup>\r\n </ActuationGroup>\r\n </div>\r\n );\r\n};\r\n\r\nAdGroupStepShellInternal.propTypes = {\r\n data: PropTypes.shape({\r\n adGroup: PropTypes.shape({\r\n UseOptimizedTargeting: PropTypes.bool,\r\n StartDate: PropTypes.string,\r\n EndDate: PropTypes.string,\r\n Id: PropTypes.number,\r\n }),\r\n campaign: PropTypes.shape({\r\n BiddingScheme: PropTypes.shape({\r\n Type: PropTypes.string,\r\n }),\r\n TimeZone: PropTypes.string,\r\n UseCampaignLevelDates: PropTypes.bool,\r\n EndDate: PropTypes.string,\r\n StartDate: PropTypes.string,\r\n }),\r\n exclusions: PropTypes.shape({\r\n adgroupExclusions: PropTypes.shape({}),\r\n }),\r\n errors: PropTypes.arrayOf(PropTypes.shape({\r\n message: PropTypes.string,\r\n property: PropTypes.string,\r\n code: PropTypes.string,\r\n })),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.arrayOf(PropTypes.shape({\r\n message: PropTypes.string,\r\n property: PropTypes.string,\r\n code: PropTypes.string,\r\n })).isRequired,\r\n scope: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const AdGroupStepShell = withScope(AdGroupStepShellInternal);\r\n","export const getContextualTargetStyles = () => ({\r\n root: {\r\n marginTop: 20,\r\n display: 'flex',\r\n },\r\n targetsContainer: {\r\n border: '1px solid gray',\r\n paddingLeft: 12,\r\n minWidth: '550px',\r\n },\r\n treeViewContainer: {\r\n '& .checkbox-inline.disabled': {\r\n paddingLeft: 0,\r\n '& input': {\r\n display: 'none',\r\n },\r\n '& span': {\r\n color: 'black',\r\n fontWeight: 'bold',\r\n },\r\n },\r\n },\r\n selectionContainer: {\r\n border: '1px solid gray',\r\n padding: '5px 10px',\r\n marginLeft: 12,\r\n width: '100%',\r\n '& .selectedTargetsLabel': {\r\n fontSize: '16px',\r\n fontWeight: 'bold',\r\n margin: '10px 0px',\r\n },\r\n '& .selectedTargetButton.btn-default': {\r\n padding: '2px 10px',\r\n paddingRight: '3px',\r\n height: 'unset',\r\n '& .iconba.iconba-Cancel': {\r\n top: 0,\r\n fontWeight: 'bold',\r\n },\r\n marginLeft: '5px',\r\n marginBottom: '5px',\r\n },\r\n '& .categoryName': {\r\n fontSize: '14px',\r\n fontWeight: '700',\r\n marginTop: '10px',\r\n marginBottom: '2px',\r\n },\r\n '& .selectedNodesContainer': {\r\n paddingTop: '5px',\r\n },\r\n },\r\n contextualTargetTitle: {\r\n flex: '100%',\r\n },\r\n});\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { isEmpty } from 'underscore';\r\n\r\nconst campaignCriterionTypeName = 'Model.CampaignCriterion';\r\n\r\nexport const readCampaignCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\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 .CampaignCriterions\r\n .$cast(campaignCriterionTypeName)\r\n .get({\r\n filter: {\r\n where: type,\r\n },\r\n })\r\n .toPromise();\r\n\r\n\r\nexport const readDayTimeCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n}) =>\r\n readCampaignCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n type: \"isof(Criterion,'Model.DayTimeCriterion')\",\r\n });\r\n\r\n\r\nexport const viewModelToBulkModelForAdSchedules = ({ campaignViewModel }) => {\r\n const targets = campaignViewModel.data.adSchedulesBulkUpsert || [];\r\n return targets.map((criterion) => {\r\n const Status = isEmpty(criterion) ? 'Active' : criterion.Status;\r\n if (campaignViewModel.data.Id) {\r\n return {\r\n ...criterion,\r\n Status,\r\n Campaign: {\r\n Id: campaignViewModel.data.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n Status,\r\n CampaignName: campaignViewModel.Name,\r\n };\r\n });\r\n};\r\n\r\nexport const readLocationCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n}) =>\r\n readCampaignCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\",\r\n });\r\n\r\nexport const readDeviceCriterion = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) =>\r\n readCampaignCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type: \"isof(Criterion,'Model.DeviceCriterion')\",\r\n });\r\n","/* eslint-disable no-param-reassign */\r\nimport _ from 'underscore';\r\nimport { getDefaultAdGroup } from '../../native-ads/constants';\r\n\r\nexport const defaultNativeAdGroup = {\r\n getDefaultAdGroup,\r\n defaultProperties: ['Name', 'FrequencyCapSettings', 'CpmBid', 'SearchBid', 'UseOptimizedTargeting', 'AdRotation'],\r\n setCustomProperties: (data) => {\r\n data.StartDate = new Date();\r\n },\r\n defaultTargetingProperties: ['ageRanges', 'genderTypes', 'deviceTypes', 'initialDeviceTypes'],\r\n setCustomTargetingProperties: _.noop,\r\n};\r\n\r\nexport const defaultDealAdGroup = {\r\n getDefaultAdGroup,\r\n defaultProperties: ['Name', 'FrequencyCapSettings'],\r\n setCustomProperties: (data) => {\r\n data.StartDate = new Date();\r\n },\r\n defaultTargetingProperties: [],\r\n setCustomTargetingProperties: _.noop,\r\n};\r\n\r\nexport const defaultCTVAdGroup = {\r\n getDefaultAdGroup,\r\n defaultProperties: ['Name', 'FrequencyCapSettings'],\r\n setCustomProperties: (data) => {\r\n data.StartDate = new Date();\r\n },\r\n defaultTargetingProperties: ['ageRanges', 'genderTypes'],\r\n setCustomTargetingProperties: _.noop,\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 { isAudience, isCTVCampaign, isDealCampaign } from '../../../step-constants';\r\nimport { defaultNativeAdGroup, defaultDealAdGroup, defaultCTVAdGroup } from './default-adgroup';\r\n\r\nconst useDefaultAdGroupForFlow = (flow) => {\r\n if (isAudience(flow)) {\r\n return defaultNativeAdGroup;\r\n }\r\n\r\n if (isDealCampaign(flow)) {\r\n return defaultDealAdGroup;\r\n }\r\n\r\n if (isCTVCampaign(flow)) {\r\n return defaultCTVAdGroup;\r\n }\r\n\r\n return {};\r\n};\r\n\r\nexport const useDefaultAdGroup = (flow) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n getDefaultAdGroup = _.noop,\r\n defaultProperties,\r\n setCustomProperties = _.noop,\r\n defaultTargetingProperties,\r\n setCustomTargetingProperties = _.noop,\r\n } = useDefaultAdGroupForFlow(flow) || {};\r\n\r\n const defaultAdGroupModel = getDefaultAdGroup(i18n, serverContext);\r\n const { data: defaultAdGroupData } = defaultAdGroupModel || {};\r\n\r\n const defaultAdGroup = _.pick(defaultAdGroupData, defaultProperties);\r\n setCustomProperties(defaultAdGroup);\r\n\r\n const defaultTargeting = _.pick(defaultAdGroupData, defaultTargetingProperties);\r\n setCustomTargetingProperties(defaultTargeting);\r\n\r\n return {\r\n defaultAdGroup,\r\n defaultTargeting,\r\n };\r\n};\r\n","\r\nimport _, { extend, each } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useContext, useCallback } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n loadBundleCountries,\r\n saveAdGroup,\r\n modelToViewModelForAdGroup,\r\n modelToViewModelForCampaign,\r\n readLocationCriterions,\r\n readDayTimeCriterions,\r\n readTargetingCriterions,\r\n readAudienceCriterions,\r\n getErrorsPlaceholders,\r\n loadAdGroup,\r\n loadCampaign,\r\n readPlacementCriterions,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { getDealDetails, modelConstraints } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useAudienceData } from '@bingads-webui-campaign-react/pmax-lite-data';\r\nimport {\r\n readDayTimeCriterions as campaignReadDayTimeCriterions,\r\n readLocationCriterions as campaignReadLocationCriterions,\r\n readDeviceCriterion as campaignReadDeviceCriterions,\r\n} from '../../shared/model/campaign-criterion';\r\nimport { useDefaultAdGroup } from './use-default-adgroup/index';\r\n\r\nimport {\r\n isAudienceCampaign,\r\n isAudienceAdGroupEdit,\r\n isCTVAdGroupEdit,\r\n isDisplayAdsCampaign,\r\n isVideoAdsCampaign,\r\n isAudienceAdGroupCreation,\r\n isAdGroupCreation,\r\n isDealCampaign,\r\n} from '../../step-constants';\r\n\r\nexport const useAdGroupRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n const { send, state } = useWizardService();\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const scenarioContext = useContext(ScenarioContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n const { cid, aid } = scope.values;\r\n\r\n const { ServicesEndpoints } = serverContext;\r\n const odataUrl = ServicesEndpoints && ServicesEndpoints.CampaignAPI;\r\n const isOnebox = odataUrl && odataUrl.toString().indexOf('redmond.corp') > 0;\r\n const [, getAudienceData] = useAudienceData({ postponeFetch: true, pathOverride: isOnebox ? '/Advertiser/V2' : 'Campaign/V2', audienceType: 'InMarket' });\r\n\r\n const inMarketAudienceRedesignEnabled = _.get(serverContext, ['DynamicPermissions', 'InMarketAudienceRedesign']);\r\n\r\n const {\r\n ads, flow, isAdGroupPublishing, isDefaultAdGroupStepModel,\r\n } = state.context.wizardData;\r\n\r\n const { defaultAdGroup: defaultAdGroupData, defaultTargeting } = useDefaultAdGroup(flow) || {};\r\n const isDealFlow = isDealCampaign(flow);\r\n\r\n const loadAudienceData = useCallback(\r\n () => getAudienceData()\r\n .then(audienceList => _.filter(audienceList, audience => audience && audience.Type === 'InMarket'))\r\n , [getAudienceData]\r\n );\r\n\r\n const allSettledPromiseWrapper = (promises) => {\r\n const wrappedPromises = promises.map(p =>\r\n p.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\n const load = () => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n\r\n const adGroupId = savedAdGroup ? savedAdGroup.Id : null;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null;\r\n\r\n let loadPromises = {\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n campaignLocationCriterions: campaignReadLocationCriterions({\r\n cid, aid, campaignId,\r\n }),\r\n campaignDeviceCriterions: campaignReadDeviceCriterions({\r\n cid, aid, campaignId,\r\n }),\r\n campaignDayTimeCriterions: campaignReadDayTimeCriterions({\r\n cid, aid, campaignId,\r\n }),\r\n };\r\n\r\n if (isDealFlow) {\r\n loadPromises = extend(loadPromises, {\r\n dealDetails: getDealDetails(cid, aid, campaignId, serverContext),\r\n });\r\n }\r\n\r\n if (adGroupId) {\r\n loadPromises = extend(loadPromises, {\r\n adGroup: loadAdGroup(cid, aid, campaignId, adGroupId),\r\n placementCriterions: readPlacementCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\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 exclusions: exclusionRepository.load(campaignId, adGroupId, ScopeLevel.AdGroup),\r\n });\r\n }\r\n\r\n if (inMarketAudienceRedesignEnabled) {\r\n loadPromises = extend(loadPromises, {\r\n audienceList: loadAudienceData(),\r\n });\r\n }\r\n\r\n return allSettledPromiseWrapper(Object.values(loadPromises))\r\n .then((results) => {\r\n const resultMap = Object.keys(loadPromises).reduce((acc, key, index) => {\r\n if (results[index].status === 'fulfilled') {\r\n acc[key] = results[index].value;\r\n }\r\n return acc;\r\n }, {});\r\n\r\n const errors = results.reduce((acc, result) => {\r\n if (result.status === 'rejected') {\r\n acc.push(...result.reason.errors);\r\n }\r\n return acc;\r\n }, []);\r\n\r\n const {\r\n adGroup = {},\r\n campaign = {},\r\n locationCriterions = null,\r\n campaignLocationCriterions,\r\n campaignDeviceCriterions,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions = null,\r\n campaignDayTimeCriterions,\r\n targetCriterions = null,\r\n audienceCriterions = null,\r\n exclusions: [campaignExclusions, adgroupExclusions] = [null, null],\r\n audienceList,\r\n placementCriterions = null,\r\n dealDetails = null,\r\n } = resultMap || {};\r\n\r\n const adGroupData = modelToViewModelForAdGroup({\r\n adGroupModel: adGroup,\r\n campaignModel: campaign,\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n campaignLocationCriterionsModel: campaignLocationCriterions ? campaignLocationCriterions.value : [],\r\n campaignDeviceCriterions: campaignDeviceCriterions ? campaignDeviceCriterions.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions ? bundleCountriesAndLocationCriterions.bundleCountries : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n targetCriterionsModel: targetCriterions ? targetCriterions.value : [],\r\n audienceCriterionsModel: audienceCriterions ? audienceCriterions.value : [],\r\n placementCriterionsModel: placementCriterions ? placementCriterions.value : [],\r\n i18n,\r\n isAudienceAds: isAudienceCampaign(flow) || isAudienceAdGroupEdit(flow) || isAudienceAdGroupCreation(flow),\r\n isDisplayAds: isDisplayAdsCampaign(flow),\r\n isVideoAds: isVideoAdsCampaign(flow),\r\n isAudienceAdGroupEdit: isAudienceAdGroupEdit(flow),\r\n isEnableMSANDisplayCampaignsEnabled: serverContext.DynamicPermissions && serverContext.DynamicPermissions.EnableMSANDisplayCampaigns,\r\n isEnableMSANVideoCampaignsEnabled: serverContext.DynamicPermissions && serverContext.DynamicPermissions.EnableMSANVideoCampaigns,\r\n defaultAdGroupData,\r\n defaultTargeting,\r\n separateIMA: inMarketAudienceRedesignEnabled,\r\n ads,\r\n });\r\n\r\n if (isDefaultAdGroupStepModel && (isDisplayAdsCampaign(flow) || isVideoAdsCampaign(flow))) {\r\n adGroupData.data.StartDate = new Date();\r\n }\r\n\r\n let adGroupModelWithConstraintsPromise = Promise.resolve(adGroupData.data);\r\n\r\n if (isDealFlow && dealDetails) {\r\n adGroupModelWithConstraintsPromise = modelConstraints(dealDetails, adGroupData.data, serverContext);\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { deal: dealDetails });\r\n }\r\n\r\n return adGroupModelWithConstraintsPromise\r\n .then((constraintModel) => {\r\n adGroupData.data = constraintModel;\r\n })\r\n .then(() => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n // eslint-disable-next-line no-param-reassign\r\n dayTimeCriterionsModel: campaignDayTimeCriterions ? each(campaignDayTimeCriterions.value, (cr) => { cr.Id = ''; }) : [],\r\n });\r\n\r\n return {\r\n adGroup: adGroupData.data,\r\n campaign: campaignData.data,\r\n ...bundleCountriesAndLocationCriterions,\r\n exclusions: {\r\n campaignExclusions,\r\n adgroupExclusions,\r\n },\r\n audienceList,\r\n ...getErrorsPlaceholders(),\r\n errors,\r\n };\r\n });\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n const {\r\n adGroup, bundleCountries, bundleLocationCriterions, exclusions,\r\n } = data;\r\n\r\n if (isAdGroupPublishing || isAdGroupCreation(flow)) {\r\n adGroup.Status = 'Active';\r\n } else if (!isAudienceAdGroupEdit(flow) && !isCTVAdGroupEdit(flow)) {\r\n adGroup.Status = 'Paused';\r\n } else if (isAudienceAdGroupEdit(flow) && adGroup.Status === 'Draft') {\r\n adGroup.Status = undefined;\r\n }\r\n\r\n const saveAdGroupPromise = saveAdGroup({\r\n adGroup: { data: adGroup },\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n campaign: state.context.wizardData.campaign,\r\n isDisplayPlus: true,\r\n flow,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveAdGroup'),\r\n i18n,\r\n serverContext,\r\n });\r\n\r\n const savePromises = [saveAdGroupPromise];\r\n\r\n if (isAudienceAdGroupEdit(flow)) {\r\n const saveExclusionsData = {\r\n CampaignId: state.context.wizardData.campaign.Id,\r\n AdGroupId: adGroup.Id,\r\n AdvancedSettings: {\r\n ExcludedSites: exclusions.adgroupExclusions.ExcludedSites,\r\n },\r\n };\r\n const saveExclusionsPromise = exclusionRepository.saveExtensions(saveExclusionsData, ScopeLevel.AdGroup);\r\n savePromises.push(saveExclusionsPromise);\r\n }\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 if (activity) {\r\n activity.signal(`onAdGroupSavedSuccessfully - Status: ${adGroup.Status}, Id: ${adGroup.Id}`);\r\n }\r\n\r\n const adGroupMtModel = results[0].value.adGroup.data;\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { adGroup: adGroupMtModel, isDefaultAdGroupStepModel: false });\r\n\r\n return resolve(results[0].value);\r\n }\r\n\r\n const errors = _.map(results, (result) => {\r\n if (activity) {\r\n activity.signal(`onAdGroupSavedError - error ${JSON.stringify(result)}`);\r\n }\r\n if (result.status === 'fulfilled') {\r\n return null;\r\n }\r\n\r\n const { serverErrors = {} } = result.reason;\r\n\r\n if (result.reason.NegativeSitesResult) {\r\n const { NegativeSitesResult } = result.reason;\r\n serverErrors.property = 'webExclusions';\r\n serverErrors.NegativeSitesResult = NegativeSitesResult.EntityErrors;\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({ error: _.flatten(errors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import {\r\n alertStyle,\r\n entitySelectorStyle,\r\n paginationStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const disclaimerSettingsStyles = ({ palette, iconFontFamily = 'MsAds MDL2 Assets' }) => (\r\n {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n '& .form-group': {\r\n '& .form-control-static': {\r\n marginTop: 8,\r\n marginBottom: 8,\r\n position: 'relative',\r\n\r\n '& .addDisclaimerButton': {\r\n position: 'absolute',\r\n left: 0,\r\n },\r\n },\r\n\r\n '& .alert.alert-info': {\r\n marginTop: 5,\r\n marginBottom: 16,\r\n width: 'fit-content',\r\n },\r\n\r\n '& .disclaimer-selector': {\r\n '& .list-selector-option': {\r\n '& .disclaimer-item-name': {\r\n display: 'inline-block',\r\n maxWidth: 180,\r\n },\r\n\r\n '& .action-right': {\r\n float: 'right',\r\n },\r\n },\r\n\r\n '& .open .dropdown-menu': {\r\n position: 'relative',\r\n marginBottom: 10,\r\n\r\n '& .list-selector-content': {\r\n height: 'auto',\r\n },\r\n },\r\n\r\n '& .truncated': {\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n\r\n ...entitySelectorStyle({ palette, iconFontFamily }),\r\n ...paginationStyle({ palette }),\r\n },\r\n\r\n '& .col-sm-1, & .col-sm-2, & .col-sm-3, & .col-sm-4, & .col-sm-5, & .col-sm-6, & .col-sm-7, & .col-sm-8, & .col-sm-9, & .col-sm-10, & .col-sm-11, & .col-sm-12': {\r\n float: 'none',\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n },\r\n }\r\n);\r\n\r\nexport const disclaimerPanelStyles = ({ palette, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '.disclaimer-editor-panel': {\r\n ...alertStyle({ palette, iconFontFamily }),\r\n\r\n '& .panel-content': {\r\n width: 592,\r\n\r\n '& .panel-title': {\r\n fontSize: 20,\r\n fontWeight: '600 !important',\r\n lineHeight: '27px',\r\n },\r\n\r\n '& .panel-body': {\r\n paddingRight: 64,\r\n display: 'flex',\r\n 'flex-direction': 'column',\r\n\r\n '& .disclaimer-setting-content': {\r\n marginBottom: 'auto',\r\n },\r\n\r\n '& .disclaimer-setting-footer': {\r\n marginTop: 32,\r\n\r\n '& button ~ button': {\r\n marginLeft: 10,\r\n },\r\n },\r\n },\r\n\r\n '& .form-group': {\r\n margin: 0,\r\n\r\n '& > .control-label': {\r\n textAlign: 'left',\r\n float: 'none',\r\n width: '100%',\r\n },\r\n\r\n '& > .col-sm-8': {\r\n width: '100%',\r\n },\r\n },\r\n\r\n '& .form-group ~ .form-group': {\r\n marginTop: 32,\r\n },\r\n\r\n '& .col-sm-1, & .col-sm-2, & .col-sm-3, & .col-sm-4, & .col-sm-5, & .col-sm-6, & .col-sm-7, & .col-sm-8, & .col-sm-9, & .col-sm-10, & .col-sm-11, & .col-sm-12': {\r\n float: 'none',\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n },\r\n\r\n '& .alert.alert-info': {\r\n marginTop: 8,\r\n },\r\n\r\n '& div.error': {\r\n color: '#A80000',\r\n margin: '4px 0 0 0',\r\n fontSize: 12,\r\n },\r\n\r\n '& .mt-error': {\r\n backgroundColor: '#fde7e9',\r\n padding: 5,\r\n marginTop: 10,\r\n '& .over-all-errors.error': {\r\n fontSize: 12,\r\n color: '#D90026',\r\n },\r\n },\r\n\r\n '& .setting-disclaimer-layoutType .radio': {\r\n paddingTop: 0,\r\n },\r\n\r\n '& .dropdown-toggle.btn': {\r\n border: 'none',\r\n width: '100%',\r\n height: '100%',\r\n paddingLeft: 8,\r\n paddingRight: 8,\r\n borderRadius: 2,\r\n },\r\n\r\n '& .ba-dropdown-selector': {\r\n position: 'relative',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n minWidth: 132,\r\n verticalAlign: 'baseline',\r\n marginLeft: 8,\r\n height: 30,\r\n borderRadius: 2,\r\n\r\n '& .glyphicon-triangle-bottom': {\r\n marginTop: 4,\r\n '&::before': {\r\n content: '\"\\\\E70D\"',\r\n },\r\n },\r\n },\r\n\r\n '& .dropdown-menu': {\r\n top: 'auto',\r\n position: 'absolute',\r\n width: '100%',\r\n padding: '10px',\r\n },\r\n\r\n '& .ba-list-selector': {\r\n border: 'none',\r\n '& .list-selector-item': {\r\n padding: '5px 10px',\r\n margin: '0',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: '#f5f5f5',\r\n },\r\n '&.selected': {\r\n background: '#E7F0F6',\r\n },\r\n '& .item-actions': {\r\n float: 'right',\r\n },\r\n },\r\n },\r\n\r\n '& textarea#disclaimer-editor-information-popup': {\r\n height: 169,\r\n resize: 'none',\r\n },\r\n\r\n '& textarea#disclaimer-editor-information-additionalline': {\r\n height: 69,\r\n resize: 'none',\r\n },\r\n\r\n '& .url-editor-form': {\r\n display: 'flex',\r\n gridTemplateColumns: 'auto 1fr',\r\n\r\n '& > select.form-control': {\r\n width: 'auto',\r\n marginRight: 6,\r\n },\r\n\r\n '& > input': {\r\n marginLeft: 6,\r\n },\r\n },\r\n },\r\n },\r\n});","import { getCollapsiblePanelStyles } from '../../shared/styles';\r\nimport { disclaimerSettingsStyles, disclaimerPanelStyles } from './components/styles/disclaimer-setting-styles';\r\n\r\nexport const getCampaignStyles = (components, theme) => ({\r\n divider: {\r\n padding: '5px 0px 0px 4px',\r\n width: '100%',\r\n borderTop: '2px solid #E0E0E0',\r\n marginTop: 30,\r\n marginBottom: 20,\r\n },\r\n budgetContainer: {\r\n '& .budget-title-container span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n campaignShell: {\r\n display: 'flex',\r\n width: 966,\r\n '& .multi-selector': {\r\n maxWidth: 888,\r\n },\r\n '& .collapse-panel.disclaimer': {\r\n '& .collapse-content': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n },\r\n '& .deal-impression-container': {\r\n marginLeft: 8,\r\n },\r\n '& .device-target .collapse-title-bar .title-item .collapse-title': {\r\n marginLeft: '8px',\r\n },\r\n },\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n estimationPart: {\r\n flexGrow: '1',\r\n position: 'sticky',\r\n marginTop: '58px',\r\n marginLeft: '30px',\r\n },\r\n disclaimerContainerWrapper: disclaimerSettingsStyles(theme),\r\n '@global': {\r\n ...disclaimerPanelStyles(theme),\r\n },\r\n});\r\n","import React, { useContext, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Label } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ServerValidatedLegacyBudget } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { MinXandrDailyBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { getBidTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { isXandrDisplayAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { getCampaignStyles } from '../styles';\r\n\r\nexport const XandrBudgetAndBidStrategy = ({\r\n data, isPremiumStreaming,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getCampaignStyles);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { campaign, dealDetails } = data || {};\r\n\r\n const minBudget = useMemo(() => {\r\n if (dealDetails) {\r\n const exchangeRateMapping = getAccountExchangeRateFromLocalStorage(serverContext);\r\n const 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\r\n return MinXandrDailyBudgetRangePerCurrency[serverContext.CurrentAccount.CurrencyCode];\r\n }, [dealDetails, serverContext]);\r\n\r\n const topicForBidStrategy = useMemo(() => {\r\n if (isXandrDisplayAdsCampaign(campaign.CampaignSubType)) {\r\n return undefined;\r\n }\r\n\r\n if (isPremiumStreaming) {\r\n return 'pop_BA_PremiumStreaming_BidStrategy';\r\n }\r\n return 'pop_BA_VideoAds_BidStrategyType';\r\n }, [campaign.CampaignSubType, isPremiumStreaming]);\r\n\r\n return (\r\n <div className={classes.budgetContainer}>\r\n <ServerValidatedLegacyBudget\r\n className={classNames('budget', classes.budget)}\r\n campaignId={campaign && campaign.Id}\r\n validationDailyMinBudget={minBudget}\r\n hideBudgetMinRecommendation\r\n required\r\n validationProps={{\r\n data: { Budget: campaign && campaign.Budget },\r\n }}\r\n isCreation\r\n isPremiumStreaming={isPremiumStreaming}\r\n />\r\n <span className=\"bid-strategy-type\">\r\n <Label>\r\n {i18n.getString(_TL_('Bid strategy'))}\r\n <HelpPopup\r\n topic={topicForBidStrategy}\r\n aria-label={i18n.getString(_TL_('Click to learn more about bid strategy'))}\r\n />\r\n </Label>\r\n {getBidTitleDetails(i18n, campaign.BiddingScheme)}\r\n </span>\r\n </div>\r\n\r\n );\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { makeStyles, Label } from '@fluentui/react-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\n\r\nconst useStyles = makeStyles({\r\n dateManagementSelector: {\r\n marginBottom: '16px',\r\n },\r\n stackStyles: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'nowrap',\r\n width: 'auto',\r\n height: 'auto',\r\n boxSizing: 'border-box',\r\n '> *': {\r\n textOverflow: 'ellipsis',\r\n },\r\n '> :not(:first-child)': {\r\n marginTop: '0px',\r\n },\r\n '> *:not(.ms-StackItem)': {\r\n flexShrink: 1,\r\n },\r\n },\r\n stackItem: {\r\n height: 'auto',\r\n width: 'auto',\r\n flexShrink: 1,\r\n },\r\n});\r\n\r\nexport const InfoLabel = ({ label, infoTopic }) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.stackStyles} >\r\n <Label size=\"medium\" weight=\"semibold\" className={classes.stackItem}>\r\n {i18n.getString(label)}\r\n </Label>\r\n {infoTopic &&\r\n <HelpButton\r\n className={classes.stackItem}\r\n topic={infoTopic}\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: infoTopic })}\r\n />\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nInfoLabel.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n infoTopic: PropTypes.string,\r\n};\r\n\r\nInfoLabel.defaultProps = {\r\n infoTopic: null,\r\n};\r\n","import React, { useState, useMemo, useEffect, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { noop, get } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport SharedBudgetSwitchView from '@bingads-webui-campaign-legacy/shared-budget/view/shared-budget-switch-editor';\r\nimport Budget from '@bingads-webui-campaign-legacy/budget/view/budget';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedLegacyBidStrategy } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport types from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\n\r\nimport { getBudgetStyles } from './styles/bid-strategy-styles';\r\nimport { InfoLabel } from './info-label';\r\n\r\nconst AudienceBudgetBidStrategyInternal = ({\r\n data,\r\n classes,\r\n updateValidation,\r\n campaignType,\r\n campaignSubType,\r\n isEnableMSANDisplayCampaignsEnabled,\r\n isEnableMSANVideoCampaignsEnabled,\r\n setBudgetView,\r\n hideBidStrategy,\r\n activity,\r\n showBudgetTypeSelection,\r\n allowBudgetTypeSelection,\r\n allowSharedBudgetLibrarySelection,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const campaign = useMemo(() => (\r\n isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled ? data : data.campaign\r\n ), [data, isEnableMSANDisplayCampaignsEnabled, isEnableMSANVideoCampaignsEnabled]);\r\n const bidStrategyName = get(data, ['campaign', 'BidStrategyName'], '');\r\n\r\n const [sharedBudgetRef, setSharedBudgetRef] = useState();\r\n\r\n const sharedBudget = useMemo(() => {\r\n const factory = SharedBudgetSwitchView.newFactory(Budget);\r\n\r\n const sharedBudgetView = factory({\r\n accountCurrencyCode: 'USD',\r\n model: undefined,\r\n withRealTimeUpdates: true,\r\n showBudgetTypeSelection,\r\n allowBudgetTypeSelection,\r\n allowSharedBudgetLibrarySelection,\r\n });\r\n\r\n sharedBudgetView.render();\r\n\r\n return sharedBudgetView;\r\n }, []);\r\n\r\n const onBudgetChange = () => {\r\n const budget = sharedBudget.getValues();\r\n const isValid = sharedBudget.validate();\r\n if (activity) {\r\n activity.signal(`onBudgetChange - ${JSON.stringify(budget)} - isValid: ${isValid}}`);\r\n }\r\n updateValidation(isValid ? [] : [i18n.getString(_TL_('Invalid budget'))], { BudgetId: budget && budget.Id, Budget: { Amount: budget && budget.Amount, Id: budget && budget.Id, Type: budget && budget.Type } });\r\n };\r\n\r\n useEffect(() => {\r\n if (setBudgetView && sharedBudget) {\r\n setBudgetView(sharedBudget);\r\n }\r\n }, [sharedBudget, setBudgetView]);\r\n\r\n useEffect(() => {\r\n if (sharedBudgetRef) {\r\n sharedBudgetRef.innerHTML = '';\r\n sharedBudgetRef.append(sharedBudget.el);\r\n\r\n sharedBudget.update(campaign.Budget);\r\n sharedBudget.budgetView.on('budget.updated', onBudgetChange);\r\n sharedBudget.budgetView.on('change', onBudgetChange);\r\n sharedBudget.grid.gridView.on('didUpdate', onBudgetChange);\r\n sharedBudget.viewModel.sharedBudgetSwitch.subscribe(() => {\r\n onBudgetChange();\r\n });\r\n }\r\n\r\n return noop;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [sharedBudgetRef]);\r\n\r\n useEffect(() => {\r\n sharedBudget.viewModel.isCPSSelected(campaign.BiddingScheme.Type === types.costPerSale);\r\n sharedBudget.viewModel.sharedBudgetIsNotAllowedWarning(i18n.getString(_TL_('Shared budget is not allowed if CPS is selected')));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [campaign.BiddingScheme.Type]);\r\n\r\n return (\r\n <div className={classNames(classes.pickerContainer, 'budget-bid-strategy-container')} >\r\n <div className=\".campaign-settings__container vanila-budget\">\r\n <div className={classes.budgetHeader}>\r\n <InfoLabel label={_TL_('Budget')} />\r\n </div>\r\n <div className={classNames('budget-view')} ref={newRef => setSharedBudgetRef(newRef)} />\r\n </div>\r\n {!hideBidStrategy &&\r\n <div>\r\n <ValidatedLegacyBidStrategy\r\n className=\"vanila-bid-strategy\"\r\n campaignId={campaign.Id}\r\n campaignType={campaignType}\r\n hideBudgetMinRecommendation\r\n campaignSubType={campaignSubType}\r\n validationProps={{\r\n initialValue: campaign.BiddingScheme,\r\n data: campaign,\r\n }}\r\n isCreation\r\n bidStrategyName={bidStrategyName}\r\n i18nNewDesign={i18n}\r\n validateWithBudget\r\n budgetAmount={sharedBudget && sharedBudget.getValues() ? sharedBudget.getValues().Amount : null}\r\n />\r\n </div>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nAudienceBudgetBidStrategyInternal.protoTypes = {\r\n classes: PropTypes.shape({\r\n pickerContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n Budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n Id: PropTypes.number,\r\n Type: PropTypes.string,\r\n }),\r\n BiddingScheme: PropTypes.shape({\r\n Type: PropTypes.string,\r\n BidStrategyId: PropTypes.number,\r\n }),\r\n BidStrategyName: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n campaignSubType: PropTypes.string,\r\n isEnableMSANDisplayCampaignsEnabled: PropTypes.bool,\r\n isEnableMSANVideoCampaignsEnabled: PropTypes.bool,\r\n setBudgetView: PropTypes.func,\r\n hideBidStrategy: PropTypes.bool,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n showBudgetTypeSelection: PropTypes.bool,\r\n allowBudgetTypeSelection: PropTypes.bool,\r\n allowSharedBudgetLibrarySelection: PropTypes.bool,\r\n};\r\n\r\nAudienceBudgetBidStrategyInternal.defaultProps = {\r\n campaignSubType: undefined,\r\n isEnableMSANDisplayCampaignsEnabled: false,\r\n isEnableMSANVideoCampaignsEnabled: false,\r\n setBudgetView: undefined,\r\n hideBidStrategy: false,\r\n activity: undefined,\r\n showBudgetTypeSelection: false,\r\n allowBudgetTypeSelection: true,\r\n allowSharedBudgetLibrarySelection: true,\r\n};\r\n\r\nexport const AudienceBudgetBidStrategy = withCustomValidation(withDefaultStyles(AudienceBudgetBidStrategyInternal, getBudgetStyles));\r\n","import {\r\n convertToLocalStyle,\r\n glyphIconStyle,\r\n helpbuttonStyle,\r\n uiblockerStyle,\r\n sharedBudgetGridWrapper,\r\n containerBudgetStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getBudgetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...containerBudgetStyle({ palette }),\r\n ...sharedBudgetGridWrapper({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .displayNone': {\r\n display: 'none',\r\n },\r\n },\r\n budgetHeader: {\r\n marginBottom: 6,\r\n },\r\n});\r\n","import React, { useMemo, useContext } from 'react';\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 { getBidTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { BudgetTypes } from '../../../common/constants';\r\n\r\nexport const BudgetBidStrategyDetails = ({ budget, biddingScheme }) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n Amount,\r\n Id,\r\n Type,\r\n } = budget || {};\r\n\r\n const budgetTitleDetails = useMemo(() => {\r\n if (Id) {\r\n return i18n.getString(_TL_('Budget applied from shared library'));\r\n }\r\n\r\n if (Amount == null || Amount === 0) {\r\n return i18n.getString(_TL_('No budget selected'));\r\n }\r\n\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const currencySymbol = i18n.getCurrencySymbol(currencyCode);\r\n\r\n const individualBudget = i18n.getString(_TL_('Individual budget'));\r\n\r\n if (Type === BudgetTypes.LifetimeBudgetStandard) {\r\n return `${individualBudget}: ${currencySymbol}${Amount} ${i18n.getString(_TL_('campaign total'))}`;\r\n }\r\n\r\n return `${individualBudget}: ${currencySymbol}${Amount}/${i18n.getString(_TL_('day'))}`;\r\n }, [Amount, Id, Type, i18n, serverContext.CurrentAccount.CurrencyCode]);\r\n\r\n const bidStrategyDetails = useMemo(() =>\r\n `${i18n.getString(_TL_('Bid strategy'))}: ${getBidTitleDetails(i18n, biddingScheme)}`, [biddingScheme, i18n]);\r\n\r\n return (\r\n <>\r\n <div>\r\n {budgetTitleDetails}\r\n </div>\r\n <div>\r\n {bidStrategyDetails}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nBudgetBidStrategyDetails.propTypes = {\r\n budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n Id: PropTypes.number,\r\n Type: PropTypes.string,\r\n }),\r\n biddingScheme: PropTypes.shape({\r\n Type: PropTypes.string,\r\n }),\r\n};\r\n\r\nBudgetBidStrategyDetails.defaultProps = {\r\n budget: {},\r\n biddingScheme: null,\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { CampaignGoalTypeBoostV2 } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\n\r\nexport const CampaignGoal = ({ campaign }) => {\r\n const CampaignGoali18nMap = CampaignGoalTypeBoostV2;\r\n\r\n const campaignGoalText = _.result(\r\n _.find(campaign.CampaignSettings, i => _.has(i, 'CampaignObjectiveSettingType')),\r\n 'CampaignObjectiveSettingType'\r\n );\r\n\r\n return _.has(CampaignGoali18nMap, campaignGoalText) ? (\r\n <span>{CampaignGoali18nMap[campaignGoalText]}</span>\r\n ) : <span>{_TL_('Campaign goal not set')}</span>;\r\n};\r\n\r\nCampaignGoal.propTypes = {\r\n campaign: PropTypes.shape({\r\n CampaignSettings: PropTypes.shape([]).isRequired,\r\n }).isRequired,\r\n};\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n audienceTargetsSettingsStyles,\r\n criterionSettingIndustryStyles,\r\n audienceBudgetBidsStyles,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getBidAdjustmentStylesTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingIndustryStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...audienceTargetsSettingsStyles({ palette }),\r\n ...audienceBudgetBidsStyles({ palette }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n editTargetButtonContainer: {\r\n paddingBottom: '8px',\r\n },\r\n noTargetSelected: {\r\n marginRight: '5px',\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n","import React, { useContext, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { BidAdjustment } from '@bingads-webui-campaign/target-bid-adjustment';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { modelToViewModelForLocationTargets } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { getBidAdjustmentStylesTargetStyles } from './styles/bid-adjustments-styles';\r\n\r\nconst criterionTypeToString = {\r\n JobFunction: _TL_('Job Function'),\r\n Industry: _TL_('Industry'),\r\n CompanyName: _TL_('Company'),\r\n Age: _TL_('Age'),\r\n Gender: _TL_('Gender'),\r\n Device: _TL_('Device'),\r\n Location: _TL_('Location'),\r\n Audience: _TL_('Audience'),\r\n};\r\n\r\nconst typeToValidationKey = {\r\n JobFunction: ['jobTargets', 'negativeJobTargets'],\r\n Industry: ['industry', 'negativeIndustry'],\r\n CompanyName: ['companyNameTargets', 'negativeCompanyNameTargets'],\r\n Age: ['ageRanges'],\r\n Gender: ['genderTypes'],\r\n Audience: ['audiences'],\r\n Location: ['locationTargets'],\r\n};\r\n\r\nconst criterionsToFetch = [\r\n 'AgeCriterion',\r\n 'GenderCriterion',\r\n 'CompanyNameCriterion',\r\n 'IndustryCriterion',\r\n 'JobFunctionCriterion',\r\n 'LocationCriterion',\r\n 'AudienceCriterion',\r\n];\r\n\r\nconst BidAdjustmentInternal = ({\r\n cid,\r\n data,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n updateValidation,\r\n}) => {\r\n const [bidAdjustmentRef, setBidAdjustmentRef] = useState();\r\n\r\n const { bundleCountries } = data;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getBidAdjustmentStylesTargetStyles);\r\n\r\n const currentLevelTargetInfo = useMemo(() => (new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: true,\r\n })), []);\r\n\r\n const onChange = useCallback((changedKey) => {\r\n const updatedItems = currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const targets = updatedItems.filter(({ CriterionType }) => (CriterionType === changedKey))\r\n .map(({ Id, Status, Criterion }) => ({ Id, status: Status, Criterion }));\r\n\r\n const negativeTargets = updatedItems.filter(({ CriterionType }) => (CriterionType === `Negative${changedKey}`))\r\n .map(({ Id, Status, Criterion }) => ({ Id, status: Status, Criterion }));\r\n\r\n const validationKeys = typeToValidationKey[changedKey];\r\n if (targets.length > 0 && negativeTargets.length > 0) {\r\n updateValidation([], { [validationKeys[0]]: [...targets], [validationKeys[1]]: [...negativeTargets] });\r\n } else if (negativeTargets.length > 0) {\r\n updateValidation([], { [validationKeys[1]]: [...negativeTargets] });\r\n } else if (changedKey === 'Audience') {\r\n const audiences = currentLevelTargetInfo.criterionsByType.Audience;\r\n updateValidation([], { audiences: [...audiences] });\r\n } else if (changedKey === 'Location') {\r\n const adjustedLocations = currentLevelTargetInfo.criterionsByType.Location;\r\n\r\n const modelForParsing = _.map(adjustedLocations, location => ({\r\n ...location,\r\n CriterionBid: {\r\n Multiplier: location.Criterion.BidAdjustment,\r\n },\r\n }));\r\n\r\n const location = modelToViewModelForLocationTargets({\r\n model: modelForParsing, adGroupId, bundleCountries, overrideOriginalBidAdjustment: true,\r\n });\r\n\r\n updateValidation([], { locationTargets: location.locationTargets });\r\n } else {\r\n updateValidation([], { [validationKeys[0]]: [...targets] });\r\n }\r\n\r\n if (activity) {\r\n activity.signal('onBidAdjustmentChanged');\r\n }\r\n }, [activity, adGroupId, bundleCountries, currentLevelTargetInfo, updateValidation]);\r\n\r\n useEffect(() => {\r\n if (bidAdjustmentRef) {\r\n bidAdjustmentRef.innerHTML = '';\r\n\r\n Promise.all([\r\n currentLevelTargetInfo.fetchCriterions(campaignId, adGroupId, criterionsToFetch),\r\n currentLevelTargetInfo.initializeWithhAdGroupAudience(campaignId, adGroupId),\r\n ]).then(() => {\r\n const allKeys = currentLevelTargetInfo.getAllNoneEmptyTypeKeys();\r\n\r\n _.each(allKeys, (key) => {\r\n currentLevelTargetInfo.off(`AdGroupCriterion${key}Changed`, () => onChange(key));\r\n const view = new BidAdjustment({\r\n currentLevelTargetInfo,\r\n isForVNext: true,\r\n campaignId,\r\n adGroupId,\r\n criterionTypes: [key],\r\n supportCashbackSettings: false,\r\n showExclusion: false,\r\n });\r\n\r\n view.render();\r\n\r\n const header = document.createElement('h5');\r\n header.innerHTML = i18n.getString(criterionTypeToString[key]);\r\n header.style.cssText = 'margin-top: 20px;';\r\n\r\n bidAdjustmentRef.append(header);\r\n bidAdjustmentRef.append(view.el);\r\n\r\n onChange(key);\r\n currentLevelTargetInfo.on(`AdGroupCriterion${key}Changed`, () => onChange(key));\r\n });\r\n });\r\n }\r\n }, [aid, bidAdjustmentRef, campaignId, adGroupId, cid, currentLevelTargetInfo, i18n, onChange]);\r\n\r\n return (\r\n <div className={classNames('job-function-picker', classes.pickerContainer)} >\r\n <div className=\"criterion-setting-container\">\r\n <div className=\"target-edit-container\">\r\n <div className={classNames('job-function-association-view', 'criterion-setting-JobFunction')} ref={newRef => setBidAdjustmentRef(newRef)} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nBidAdjustmentInternal.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n adGroupId: PropTypes.string.isRequired,\r\n data: PropTypes.shape({\r\n bundleCountries: PropTypes.arrayOf(PropTypes.shape([])),\r\n }).isRequired,\r\n};\r\n\r\nexport const ValidatedBidAdjustment = withCustomValidation(BidAdjustmentInternal);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Checkbox } from '@bingads-webui-react/checkbox';\r\n\r\nexport const CallToActionOptOut = (props) => {\r\n const {\r\n i18n,\r\n data,\r\n onDataChange,\r\n } = props;\r\n\r\n const isCallToActionOptOut = data.campaign.IsCallToActionOptOut;\r\n\r\n const onCheckedChange = (event) => {\r\n const { checked } = event.target;\r\n onDataChange({\r\n data: {\r\n ...data,\r\n campaign: {\r\n ...data.campaign,\r\n IsCallToActionOptOut: !checked,\r\n },\r\n },\r\n isValid: true,\r\n });\r\n };\r\n\r\n return (\r\n <div style={{ marginLeft: 3 }}>\r\n <Checkbox\r\n className={`${!isCallToActionOptOut ? 'checked' : ''} call-to-action-enable-checkbox`}\r\n checked={!isCallToActionOptOut}\r\n onChange={onCheckedChange}\r\n >\r\n {i18n.getString(_TL_('Enable calls to action for Native ads'))}\r\n </Checkbox>\r\n </div>\r\n );\r\n};\r\n\r\nCallToActionOptOut.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { AdsCampaignDisclaimers } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\n\r\nexport const getAssociatedDisclaimer = (campaignId, repository) => (campaignId ? repository.association.findAll({\r\n where: {\r\n campaignId,\r\n },\r\n}).then((disclaimerdata) => {\r\n if (disclaimerdata && disclaimerdata.length > 0) {\r\n return disclaimerdata[0];\r\n }\r\n return null;\r\n}) : Promise.resolve(null));\r\n\r\nconst DisclaimerExtensionInternal = (props) => {\r\n const {\r\n className,\r\n updateValidation,\r\n campaignId,\r\n repository,\r\n validationProps,\r\n ...rest\r\n } = props;\r\n\r\n const displayPlusDisclaimerRef = useRef(null);\r\n const { data } = validationProps || {};\r\n const { DisclaimerAdsEnabled, associatedDisclaimer } = data || {};\r\n\r\n const onDataChange = useCallback(() => {\r\n const result = displayPlusDisclaimerRef.current.getValues();\r\n const error = displayPlusDisclaimerRef.current.validateAndWarn();\r\n // If no disclaimer is associated, update the change to the outside\r\n if (!result.AdExtensionAssociations || result.AdExtensionAssociations.length === 0) {\r\n result.AdExtensionAssociations = null;\r\n }\r\n updateValidation(error ? [error] : [], result);\r\n }, [updateValidation]);\r\n\r\n const [disclaimerAdsEnabled, setDisClaimerAdsEnabled] = useState(DisclaimerAdsEnabled);\r\n\r\n useEffect(() => {\r\n setDisClaimerAdsEnabled(DisclaimerAdsEnabled);\r\n }, [DisclaimerAdsEnabled]);\r\n\r\n const onDisclaimerCheckboxChange = (value) => {\r\n setDisClaimerAdsEnabled(value);\r\n };\r\n\r\n return (\r\n <div className={className}>\r\n <AdsCampaignDisclaimers\r\n ref={displayPlusDisclaimerRef}\r\n campaignId={campaignId}\r\n repository={repository}\r\n selectedDisclaimer={associatedDisclaimer}\r\n DisclaimerAdsEnabled={disclaimerAdsEnabled}\r\n onDataChange={onDataChange}\r\n onDisclaimerCheckboxChange={onDisclaimerCheckboxChange}\r\n isForNew\r\n {...rest}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport const ValidatedDisclaimerExtension = withCustomValidation(DisclaimerExtensionInternal);\r\n\r\n","// TODO: Update key value when available - Task 8947815: Update info popup key\r\nexport const dateManagementInfoKey = 'pop_BA_CampaignCreate_Budget_BidStrategy';\r\n\r\nexport const dateSettingsManageAtAdGroupLevelText = _TL_('Start and end dates are managed at the ad group level.');\r\n","import React, { useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { ChoiceGroup } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\n\r\nimport { InfoLabel } from '../info-label';\r\n\r\nconst getStyles = () =>\r\n ({\r\n dateManagementSelectorContainer: {\r\n '& .ms-ChoiceField': {\r\n '& .ms-ChoiceField-input': {\r\n position: 'absolute',\r\n opacity: 0,\r\n top: 0,\r\n right: 0,\r\n width: '100%',\r\n height: '100%',\r\n margin: 0,\r\n },\r\n '& .ms-ChoiceField-field': {\r\n padding: 0,\r\n marginRight: 8,\r\n '& .ms-ChoiceFieldLabel': {\r\n verticalAlign: 'baseline',\r\n fontWeight: 400,\r\n },\r\n },\r\n },\r\n },\r\n });\r\n\r\nconst DATE_MANAGEMENT_OPTIONS = {\r\n CampaignLevel: {\r\n value: 'campaignLevel',\r\n label: _TL_('Campaign level'),\r\n },\r\n AdGroupLevel: {\r\n value: 'adGroupLevel',\r\n label: _TL_('Ad group level'),\r\n },\r\n};\r\n\r\nexport const DateManagementSelector = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const {\r\n value,\r\n onChange,\r\n isEnabled,\r\n } = props;\r\n\r\n const selectionValue = value ? DATE_MANAGEMENT_OPTIONS.CampaignLevel.value : DATE_MANAGEMENT_OPTIONS.AdGroupLevel.value;\r\n\r\n const options = useMemo(() => _.values(DATE_MANAGEMENT_OPTIONS).map(option => ({\r\n key: option.value,\r\n text: i18n.getString(option.label),\r\n ariaLabel: i18n.getString(option.label),\r\n disabled: !isEnabled,\r\n })), [i18n, isEnabled]);\r\n\r\n return (\r\n <div className={classes.dateManagementSelectorContainer}>\r\n <InfoLabel label={_TL_('Date management')} />\r\n <ChoiceGroup\r\n selectedKey={selectionValue}\r\n options={options}\r\n onChange={(e, data) => onChange({ UseCampaignLevelDates: data.key === DATE_MANAGEMENT_OPTIONS.CampaignLevel.value })}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nDateManagementSelector.propTypes = {\r\n value: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n isEnabled: PropTypes.bool,\r\n};\r\n\r\nDateManagementSelector.defaultProps = {\r\n value: false,\r\n isEnabled: true,\r\n};\r\n\r\nexport const ValidatedDateManagementSelector = withCustomValidation(DateManagementSelector);\r\n","import React, { useContext } from 'react';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { dateSettingsManageAtAdGroupLevelText } from './constants';\r\n\r\nconst useStyles = makeStyles({\r\n messageBar: {\r\n marginTop: '10px',\r\n },\r\n});\r\n\r\nexport const DateManagementInfo = () => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n <div className={classes.messageBar}>\r\n <MessageBar intent=\"info\">\r\n <MessageBarBody>\r\n {i18n.getString(dateSettingsManageAtAdGroupLevelText)}\r\n </MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n </>\r\n );\r\n};\r\n","import React, { useMemo, useContext, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyDateSetting, validateDate, getCurrentDate } from '@bingads-webui-campaign/date-setting';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\n\r\nimport { DateManagementSelector } from './date-management-selector';\r\nimport { DateManagementInfo } from './date-management-info';\r\nimport { BudgetTypes } from '../../../../common/constants';\r\nimport { validateLifetimeBudgetDateRange } from './utils';\r\n\r\nconst useStyles = makeStyles({\r\n dateManagementSelector: {\r\n marginBottom: '16px',\r\n },\r\n});\r\n\r\nexport const AudienceDateSetting = ({\r\n validationProps,\r\n updateValidation,\r\n isEditFlow,\r\n displayDateManagementSelector,\r\n allowDateManagementSelection,\r\n ...restProps\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const classes = useStyles();\r\n\r\n const { data } = validationProps;\r\n\r\n const {\r\n StartDate,\r\n EndDate,\r\n UseCampaignLevelDates,\r\n BudgetType,\r\n } = data;\r\n\r\n const currentDate = getCurrentDate();\r\n\r\n const validateLifetimeBudgetDateSettings = (newData, errors) => {\r\n if (BudgetType === BudgetTypes.LifetimeBudgetStandard) {\r\n const budgetRangeError = validateLifetimeBudgetDateRange(newData, i18n);\r\n\r\n if (budgetRangeError) {\r\n errors.push(budgetRangeError);\r\n }\r\n }\r\n };\r\n\r\n const validate = (newData) => {\r\n const validationError = validateDate(newData, i18n);\r\n\r\n validateLifetimeBudgetDateSettings(newData, validationError);\r\n\r\n updateValidation(validationError, newData);\r\n };\r\n\r\n const logActivity = (action, newData) => {\r\n if (activity) {\r\n activity.signal(`${action} - ${JSON.stringify(newData)}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const validationErrors = [];\r\n\r\n validateLifetimeBudgetDateSettings(data, validationErrors);\r\n\r\n updateValidation(validationErrors);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [BudgetType]);\r\n\r\n\r\n const onDateChange = (newData) => {\r\n const amendedData = {\r\n ...newData,\r\n UseCampaignLevelDates,\r\n };\r\n\r\n validate(amendedData);\r\n\r\n logActivity('onLegacyDateSettingChange', amendedData);\r\n };\r\n\r\n const onDateManagementChange = (newData) => {\r\n const amendedData = {\r\n ...newData,\r\n StartDate,\r\n EndDate,\r\n };\r\n\r\n validate(amendedData);\r\n\r\n logActivity('onDateManagementChange', amendedData);\r\n };\r\n\r\n const dateSettingWithDefaultStartDate = useMemo(() => _.defaults(data, {\r\n StartDate: currentDate,\r\n }), [currentDate, data]);\r\n\r\n return (\r\n <div>\r\n {displayDateManagementSelector &&\r\n <div className={classes.dateManagementSelector}>\r\n <DateManagementSelector\r\n onChange={onDateManagementChange}\r\n value={UseCampaignLevelDates}\r\n isEnabled={allowDateManagementSelection}\r\n />\r\n </div>\r\n }\r\n {(UseCampaignLevelDates || !isEditFlow) ?\r\n <LegacyDateSetting\r\n onChange={onDateChange}\r\n data={dateSettingWithDefaultStartDate}\r\n activityLogger={activity}\r\n {...restProps}\r\n /> :\r\n <DateManagementInfo />\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nAudienceDateSetting.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n StartDate: PropTypes.instanceOf(Date),\r\n EndDate: PropTypes.instanceOf(Date),\r\n UseCampaignLevelDates: PropTypes.bool,\r\n BudgetType: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n displayDateManagementSelector: PropTypes.bool,\r\n allowDateManagementSelection: PropTypes.bool,\r\n isEditFlow: PropTypes.bool,\r\n};\r\n\r\nAudienceDateSetting.defaultProps = {\r\n displayDateManagementSelector: false,\r\n allowDateManagementSelection: true,\r\n isEditFlow: false,\r\n};\r\n\r\nexport const ValidatedAudienceDateSetting = withError(withCustomValidation(AudienceDateSetting));\r\n","import { getDateSettingDetails, numberOfDaysBetweenDates } from '@bingads-webui-campaign/date-setting';\r\n\r\nimport { dateSettingsManageAtAdGroupLevelText } from './constants';\r\n\r\nexport const validateLifetimeBudgetDateRange = (newData, i18n) => {\r\n const MAX_DATE_RANGE = 365;\r\n\r\n const { StartDate, EndDate } = newData || {};\r\n\r\n if (StartDate && EndDate && numberOfDaysBetweenDates(StartDate, EndDate) > MAX_DATE_RANGE) {\r\n return i18n.getString(_TL_('The maximum campaign total budget duration is {0} days.')).replace('{0}', MAX_DATE_RANGE);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getAudienceDateSettingsDetails = ({\r\n i18n, isEdit, dateSettings, isLifetimeBudgetFeatureEnabled,\r\n}) => {\r\n const {\r\n UseCampaignLevelDates,\r\n StartDate,\r\n EndDate,\r\n } = dateSettings;\r\n\r\n if (!UseCampaignLevelDates && isEdit) {\r\n return i18n.getString(dateSettingsManageAtAdGroupLevelText);\r\n }\r\n\r\n return getDateSettingDetails(i18n, StartDate, EndDate, UseCampaignLevelDates, isLifetimeBudgetFeatureEnabled);\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { WebsiteListSelector } from '@bingads-webui-campaign-react/website-list-selector';\r\n\r\nexport const WebsiteLists = ({\r\n selectedExclusions = [],\r\n onExclusionsChange = () => {},\r\n}) => (\r\n <WebsiteListSelector\r\n listType=\"block\"\r\n selected={selectedExclusions}\r\n onChange={onExclusionsChange}\r\n />\r\n);\r\n\r\nWebsiteLists.propTypes = {\r\n selectedExclusions: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.string.isRequired,\r\n })),\r\n onExclusionsChange: PropTypes.func,\r\n};\r\n\r\nWebsiteLists.defaultProps = {\r\n selectedExclusions: [],\r\n onExclusionsChange: () => {},\r\n};\r\n","import React, { useContext, useMemo, useState, useCallback, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\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 { Collapse, TextTitle, ValidatedBootstrapPanel, useCollapseState, ValidatedFixedPanel, ValidatedPanel, collapseExpander } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n FormErrorGroup,\r\n entityIs,\r\n anyComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n withControlErrorHandling,\r\n withUnvalidatedControlErrors,\r\n} from '@bingads-webui-campaign-react/error-handling';\r\nimport { SEARCH_TYPE } from '@bingads-webui-react/bing-maps';\r\nimport { isXandrServing, ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { Stack } from '@fluentui/react';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useWizardService, matchStepState, STEP_STATES, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getLocationTargetTitleDetails, getAdScheduleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ValidatedConversionGoals, ValidatedLocationTargetSetting, useIsMounted } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { getDateSettingDetails, getLaterDate } from '@bingads-webui-campaign/date-setting';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { campaignNameProp, DealImpressionPanel, Device, getDeviceDetails } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { ValidatedUrlOptionsParameter, UrlOptionsImg } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { DisclaimerStringMap } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport { DisclaimerAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport Repository from '@bingads-webui-campaign-legacy/adextension-shared/service/repository';\r\nimport { ServerValidatedWebExclusions, webExclusionPropertyVal } from '@bingads-webui-react/web-exclusions';\r\nimport { ThirdPartyMeasurementV3WithValidation, formatVendorSettings } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { getMessageType } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\n\r\nimport { TargetingEstimation } from '../adgroup/components/targeting-estimation';\r\nimport { StepHeader } from '../../shared/step-header';\r\nimport { XandrBudgetAndBidStrategy } from './components/xandr-budget-bid-strategy';\r\nimport { AudienceBudgetBidStrategy } from './components/audience-budget-bid-strategy';\r\nimport { BudgetBidStrategyDetails } from './components/budget-bid-strategy-details';\r\nimport { CampaignGoal } from './components/campaign-goal';\r\nimport { XandrBidValue, AudienceBidValue } from '../../shared/components';\r\nimport { SectionShimmer } from '../../shared/section-shimmer';\r\nimport { ValidatedBidAdjustment } from './components/audience-bid-adjustment';\r\nimport { ValidatedBidAdjustment as ValidatedBidAdjustmentGrid } from '../adgroup/components/audience-bid-adjustment';\r\nimport { CallToActionOptOut } from './components/call-to-action-opt-out';\r\nimport {\r\n isAudienceCampaign as isAudienceCampaignCreate,\r\n isAudienceCampaignEdit as isAudienceCampaignEditFlow,\r\n isEdit as isEditFlow,\r\n isDisplayAdsCampaign,\r\n isVideoAdsCampaign,\r\n isCTVOrDeal,\r\n isCTVCampaign,\r\n} from '../../step-constants';\r\nimport { getCampaignStyles } from './styles';\r\nimport { getCampaignPanels } from '../../step-utils';\r\nimport adScheduleIcon from '../../media/ad-schedule.svg';\r\nimport bidAdjustmentIcon from '../../media/bid-adjustment.svg';\r\nimport bidValueIcon from '../../media/bid-value.svg';\r\nimport budgetBidStrategyIcon from '../../media/budget-bid-strategy.svg';\r\nimport conversionGoalsIcon from '../../media/conversion-goals.svg';\r\nimport startDateEndDateIcon from '../../media/start-date-end-date.svg';\r\nimport locationTargetIcon from '../../media/location-target.svg';\r\nimport phoneDesktopIcon from '../../media/phone-desktop-regular.svg';\r\nimport webExclusionsIcon from '../../media/web-exclusions.svg';\r\nimport CallToActionImg from '../../media/call-to-action.svg';\r\nimport Ruler from '../../shared/media/ruler.svg';\r\nimport { BiddingSchemeToBidType, BudgetTypes } from '../../common/constants';\r\nimport { ERROR_ENTITY } from '../../common/error-entities';\r\nimport { ValidatedDisclaimerExtension, getAssociatedDisclaimer } from './components/disclaimer-extension';\r\nimport { ValidatedAudienceDateSetting, getAudienceDateSettingsDetails } from './components/audience-date-setting';\r\nimport { WebsiteLists } from './components/website-lists';\r\n\r\nconst getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n\r\n\r\nconst adGroupLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\n\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLocationTargetSetting,\r\n { filter: adGroupLocationCriterions }\r\n));\r\n\r\nexport const CampaignStepShell = ({\r\n data,\r\n onDataChange: onDataChangeProp,\r\n error,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const isMounted = useIsMounted();\r\n\r\n const classes = useDefaultStyles(getCampaignStyles);\r\n const serverContext = useContext(ServerContext);\r\n const { DynamicPermissions = {} } = serverContext || {};\r\n const {\r\n ConversionAssociationWarning: IsConversionAssociationWarningEnabled,\r\n CampaignLifetimeBudget: IsCampaignLifetimeBudgetEnabled,\r\n AudienceUsePrivacyCheckV2,\r\n } = DynamicPermissions;\r\n\r\n const { state, send } = useWizardService();\r\n const wizardData = state.context.wizardData || {};\r\n const {\r\n flow, isDefaultCampaignStepModel, adGroup: initialAdGroup, campaign: initialCampaign, lifetimeBudgetFlowData = {},\r\n } = wizardData;\r\n const { isBudgetTypeEditable = false, isDateManagementEditable = false } = lifetimeBudgetFlowData;\r\n\r\n const currentDate = useMemo(() => new Date(), []);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const currentStates = state.toStrings()[1];\r\n\r\n const { basicOptions, advancedOptions } = getCampaignPanels(flow, serverContext);\r\n\r\n const isAudienceCampaignEdit = useMemo(() => isAudienceCampaignEditFlow(flow), [flow]);\r\n const isAudienceCampaign = useMemo(() => isAudienceCampaignCreate(flow) || isAudienceCampaignEdit, [flow, isAudienceCampaignEdit]);\r\n const isEdit = useMemo(() => isEditFlow(flow), [flow]);\r\n const isCTVOrDealFlow = useMemo(() => isCTVOrDeal(flow), [flow]);\r\n const isCTVFlow = useMemo(() => isCTVCampaign(flow), [flow]);\r\n\r\n const isLifetimeBudgetFeatureEnabled = IsCampaignLifetimeBudgetEnabled && isAudienceCampaign;\r\n\r\n const allowStartDateEdit = useMemo(() => {\r\n if (initialCampaign && initialCampaign.UseCampaignLevelDates) {\r\n return initialCampaign.StartDate > currentDate;\r\n } else if (initialAdGroup) {\r\n return initialAdGroup.StartDate > currentDate;\r\n }\r\n\r\n return true;\r\n }, [currentDate, initialAdGroup, initialCampaign]);\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 onDataChange = useCallback((...args) => {\r\n if (!isMounted.current) return;\r\n onDataChangeProp(...args);\r\n }, [isMounted, onDataChangeProp]);\r\n\r\n const webExclusionsError = useMemo(() => error && error.filter(err => err.property === 'webExclusions'), [error]);\r\n const setExclusionsCallback = useCallback((exclusionsData, type) => {\r\n if (data) {\r\n const patchedData = {\r\n data: {\r\n ...data,\r\n exclusions: {\r\n ...(data.exclusions || {}),\r\n campaignExclusions: {\r\n ...(data.exclusions && data.exclusions.campaignExclusions ? data.exclusions.campaignExclusions : {}),\r\n [type]: exclusionsData,\r\n },\r\n },\r\n },\r\n };\r\n onDataChange(patchedData);\r\n }\r\n }, [data, onDataChange]);\r\n const onExclusionsListSelected = useCallback((exclusionsList) => {\r\n if (data) {\r\n const patchedData = {\r\n data: {\r\n ...data,\r\n websiteExclusionLists: exclusionsList.map(list => ({ ...list, Id: list.value })),\r\n },\r\n };\r\n onDataChange(patchedData);\r\n }\r\n }, [data, onDataChange]);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { aid, cid } = scope.values;\r\n const advertiserCustomerId = serverContext.CurrentAccount.AdvertiserCustomerID;\r\n\r\n const [optionsShown, setOptionsShown] = useState(basicOptions);\r\n\r\n const {\r\n adGroup, campaign, bundleCountries, bundleLocationCriterions, dealDetails,\r\n } = data || {};\r\n\r\n const { Id: adGroupId } = adGroup || {};\r\n\r\n const dateSettings = useMemo(() => ({\r\n StartDate: campaign && campaign.UseCampaignLevelDates ? campaign && campaign.StartDate : adGroup && adGroup.StartDate,\r\n EndDate: campaign && campaign.UseCampaignLevelDates ? campaign && campaign.EndDate : adGroup && adGroup.EndDate,\r\n UseCampaignLevelDates: campaign && campaign.UseCampaignLevelDates,\r\n }), [adGroup, campaign]);\r\n\r\n const dateSettingsDetails = useMemo(\r\n () => (isAudienceCampaign && dateSettings\r\n ? getAudienceDateSettingsDetails({\r\n i18n,\r\n isEdit,\r\n dateSettings,\r\n isLifetimeBudgetFeatureEnabled: IsCampaignLifetimeBudgetEnabled,\r\n })\r\n : getDateSettingDetails(\r\n i18n,\r\n dateSettings.StartDate,\r\n dateSettings.EndDate,\r\n dateSettings.UseCampaignLevelDates,\r\n isLifetimeBudgetFeatureEnabled\r\n )),\r\n [IsCampaignLifetimeBudgetEnabled, dateSettings, i18n, isAudienceCampaign, isEdit, isLifetimeBudgetFeatureEnabled]\r\n );\r\n\r\n const isLifetimeBudget = (campaign && campaign.Budget && campaign.Budget.Type === BudgetTypes.LifetimeBudgetStandard) || false;\r\n\r\n const disclaimerRepositoryRef = useRef(new Repository({\r\n schema: DisclaimerAdExtension,\r\n skipExtensionCache: true,\r\n }));\r\n\r\n const { Id: campaignId, adSchedules, locationTargets } = campaign || {};\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap, DisclaimerStringMap]), [i18n]);\r\n\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: (campaign && campaign.TrackingUrlTemplate) || null,\r\n FinalUrlSuffix: (campaign && campaign.FinalUrlSuffix) || null,\r\n UrlCustomParameters: (campaign && campaign.UrlCustomParameters) || null,\r\n }), [campaign]);\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n const devicesDetails = useMemo(() => ((!campaign || !campaign.campaignLevelDeviceTargets)\r\n ? ''\r\n : getDeviceDetails(campaign.campaignLevelDeviceTargets, false, i18n)), [campaign, i18n]);\r\n\r\n const onValidate = (result) => {\r\n if (data && data.campaign) {\r\n let adGroupData = {};\r\n let campaignData = {};\r\n if (result && result.data) {\r\n if (result.data.BiddingScheme && result.data.BiddingScheme.Type === 'MaxConversions') {\r\n // for max conv we hide the bid panel\r\n const filterOutBidPanel = optionsShown.filter(option => option !== 'bid-value');\r\n adGroupData = {\r\n CpmBid: null,\r\n CpvBid: null,\r\n };\r\n setOptionsShown([...filterOutBidPanel]);\r\n } else {\r\n setOptionsShown([...basicOptions]);\r\n }\r\n\r\n if (result.data.StartDate) {\r\n adGroupData = {\r\n ...adGroupData,\r\n StartDate: result.data.StartDate,\r\n EndDate: result.data.EndDate,\r\n };\r\n }\r\n\r\n if (result.data.Budget && result.data.Budget.Type === BudgetTypes.LifetimeBudgetStandard) {\r\n const { StartDate, EndDate } = dateSettings;\r\n if (StartDate) {\r\n campaignData = {\r\n StartDate,\r\n EndDate: EndDate || getLaterDate(StartDate, 365),\r\n UseCampaignLevelDates: true,\r\n };\r\n }\r\n }\r\n }\r\n\r\n const patchedData = {\r\n data: {\r\n ...data,\r\n campaign: {\r\n ...data.campaign,\r\n ...result.data,\r\n ...campaignData,\r\n },\r\n },\r\n isValid: result.isValid,\r\n };\r\n\r\n if (!isEdit) {\r\n let pricingModelUpdate = {};\r\n if (result.data) {\r\n pricingModelUpdate = {\r\n PricingModel: result.data.BiddingScheme && result.data.BiddingScheme.Type,\r\n };\r\n }\r\n patchedData.data.adGroup = {\r\n ...data.adGroup,\r\n ...pricingModelUpdate,\r\n ...adGroupData,\r\n };\r\n }\r\n\r\n if (isEdit && IsConversionAssociationWarningEnabled) {\r\n const message = getMessageType(data, patchedData.data);\r\n if (message) {\r\n const updatedData = {\r\n wizardData: {\r\n ...wizardData,\r\n customConfirmMessages: [message],\r\n },\r\n };\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, updatedData.wizardData);\r\n }\r\n }\r\n\r\n onDataChange(patchedData);\r\n }\r\n };\r\n\r\n const onAdGroupValidate = (result) => {\r\n if (adGroup) {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n adGroup: {\r\n ...data.adGroup,\r\n ...result.data,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n optionsShown /* all sections */,\r\n ['campaign-name', 'bid-and-budget', 'bid-value', 'conversions', 'start-end-dates', 'disclaimer'] /* initially expanded sections */\r\n );\r\n\r\n const [\r\n allAdvancedCampaignSettingsSections,\r\n advancedCampaignSettingsExpandedSections,\r\n setAdvancedCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n advancedOptions /* all sections */,\r\n [''] /* initially expanded sections */\r\n );\r\n\r\n const advancedSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdvancedCampaignSettingsExpandedSections }),\r\n [setAdvancedCampaignSettingsExpandedSections]\r\n );\r\n\r\n const {\r\n DynamicPermissions: {\r\n XandrNegativeTarget,\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n EnableDoubleVerify,\r\n PTPerfEstimationUIUpdate,\r\n CampaignCreationPlannerIntegration,\r\n WebsiteExclusionLists,\r\n },\r\n Permissions: {\r\n IsMSANDisclaimerEnabled,\r\n IsMSANISPOTEnabled,\r\n },\r\n } = serverContext;\r\n\r\n const isValidTargets = useMemo(() => {\r\n if (data && data.adGroup && campaign && campaign.BiddingScheme &&\r\n (data.adGroup.UseOptimizedTargeting === false || CampaignCreationPlannerIntegration) &&\r\n (data.adGroup[BiddingSchemeToBidType[campaign.BiddingScheme.Type]] > 0) &&\r\n campaign.Budget.Amount > 0\r\n ) {\r\n return false; // false until planner supports all bid strategies\r\n }\r\n return false;\r\n }, [CampaignCreationPlannerIntegration, campaign, data]);\r\n\r\n const BudgetAndBidStrategy = isAudienceCampaign ||\r\n (EnableMSANDisplayCampaigns && isDisplayAdsCampaign(flow)) ||\r\n (EnableMSANVideoCampaigns && isVideoAdsCampaign(flow)) ?\r\n AudienceBudgetBidStrategy : XandrBudgetAndBidStrategy;\r\n\r\n const BidValue = isAudienceCampaign ||\r\n (EnableMSANDisplayCampaigns && isDisplayAdsCampaign(flow)) ||\r\n (EnableMSANVideoCampaigns && isVideoAdsCampaign(flow)) ?\r\n AudienceBidValue : XandrBidValue;\r\n\r\n let campaignSubType = null;\r\n if (isAudienceCampaign) {\r\n campaignSubType = CampaignSubTypes.AudienceStatic;\r\n } else if (EnableMSANDisplayCampaigns && isDisplayAdsCampaign(flow)) {\r\n campaignSubType = CampaignSubTypes.DisplayAds;\r\n } else if (EnableMSANVideoCampaigns && isVideoAdsCampaign(flow)) {\r\n campaignSubType = CampaignSubTypes.BrandAwarenessVideoAds;\r\n }\r\n\r\n const DisclaimerAdsEnabled = useMemo(\r\n () =>\r\n _.result(_.find( // from campaign setting DB\r\n _.get(campaign, 'CampaignSettings', []),\r\n setting => setting['@odata.type'] === '#Model.DisclaimerSetting'\r\n ), 'DisclaimerAdsEnabled', false)\r\n , [campaign]\r\n );\r\n\r\n const verifiedTrackingSettingsValidationProps = useMemo(\r\n () => {\r\n const { campaign: campaignFromData } = data || {};\r\n if (_.isNull(campaignFromData) || _.isUndefined(campaignFromData)) {\r\n return { data: null };\r\n }\r\n const VerifiedTrackingSettings = _.get(campaignFromData, ['VerifiedTrackingSettings'], []);\r\n\r\n return {\r\n data: {\r\n VerifiedTrackingSettings,\r\n },\r\n };\r\n }\r\n , [data]\r\n );\r\n\r\n const shouldSelectAllDevices = useMemo(() => {\r\n if (campaign != null) {\r\n if (campaign.CampaignType === 'Audience'\r\n && campaign.initialCampaignLevelDeviceTargets\r\n && campaign.initialCampaignLevelDeviceTargets.length === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }, [campaign]);\r\n\r\n const [associatedDisclaimer, setAssociatedDisclaimer] = useState(null);\r\n\r\n useEffect(() => {\r\n if (IsMSANDisclaimerEnabled && campaignId) {\r\n getAssociatedDisclaimer(campaignId, disclaimerRepositoryRef.current).then((disclaimer) => {\r\n if (!_.isEmpty(disclaimer)) {\r\n setAssociatedDisclaimer(disclaimer);\r\n }\r\n });\r\n }\r\n return null;\r\n }, [IsMSANDisclaimerEnabled, campaignId]);\r\n\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onCampaignStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onCampaignStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n return (\r\n <div className={classNames(classes.campaignShell, 'campaign-shell', 'campaign-step')}>\r\n <ActuationGroup actuationProps={{ isActive: false }}>\r\n <AttentionBeaconGroup>\r\n <FormErrorGroup formErrorProps={{ errors: error || [], showAllValidationErrors }}>\r\n <ValidationGroup\r\n validationProps={{\r\n schema: Campaign,\r\n onValidate,\r\n data: (data && data.campaign) || {},\r\n i18n: legacyI18n,\r\n }}\r\n >\r\n <div className={classNames('campaign-step')}>\r\n {!isEdit &&\r\n <div>\r\n <Stack token={{ childrenGap: 14 }}>\r\n <StepHeader\r\n title={_TL_('Budget, bid, & campaign')}\r\n description={_TL_('Tell us about your campaign and how much you want to spend.')}\r\n />\r\n </Stack>\r\n </div>\r\n }\r\n <Stack horizontal token={{ childrenGap: 14 }}>\r\n <Collapse allPanelItems={allCampaignSettingsSections} checkItems skipItemsTypeCheck activeKeys={campaignSettingsExpandedSections} setActiveKeys={setCampaignSettingsExpandedSections}>\r\n <ValidatedFixedPanel\r\n key=\"campaign-name\"\r\n title={<TextTitle titleKey={_TL_('Campaign name')} topicKey=\"pop_BA_CampaignCreate_Settings_CampaignName\" />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <RemainingCharsValidatedTextField\r\n placeholder={_TL_('Enter a name for your campaign')}\r\n id=\"input-campaign-name\"\r\n validationProps={{\r\n field: 'Name',\r\n schema: Campaign,\r\n }}\r\n i18n={i18n}\r\n formErrorProps={{ filter: campaignNameProp }}\r\n />\r\n </ValidatedFixedPanel>\r\n <ValidatedFixedPanel\r\n key=\"campaign-goal\"\r\n title={<TextTitle titleKey={_TL_('Campaign goal')} />}\r\n >\r\n {data && data.campaign ? (\r\n <CampaignGoal campaign={data.campaign} />\r\n ) : (<SectionShimmer count={1} />)}\r\n </ValidatedFixedPanel>\r\n <ValidatedPanel\r\n key=\"bid-and-budget\"\r\n title={<TextTitle\r\n titleKey={_TL_('Budget and Bid Strategy')}\r\n icon={budgetBidStrategyIcon}\r\n details={(campaign && isAudienceCampaign)\r\n && <BudgetBidStrategyDetails budget={campaign.Budget} biddingScheme={campaign.BiddingScheme} />\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n data && data.campaign ? (\r\n <BudgetAndBidStrategy\r\n data={data}\r\n onDataChange={onDataChange}\r\n legacyI18n={legacyI18n}\r\n campaignType=\"audience\"\r\n campaignSubType={campaignSubType}\r\n isPremiumStreaming={isCTVFlow}\r\n showBudgetTypeSelection={isLifetimeBudgetFeatureEnabled}\r\n allowBudgetTypeSelection={!isEdit && isBudgetTypeEditable}\r\n allowSharedBudgetLibrarySelection={!isLifetimeBudget || isBudgetTypeEditable}\r\n />\r\n ) : (<SectionShimmer count={3} />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"start-end-dates\"\r\n title={<TextTitle\r\n titleKey={_TL_('Start and end dates')}\r\n details={\r\n dateSettings\r\n ? dateSettingsDetails : <SectionShimmer count={1} />\r\n }\r\n icon={startDateEndDateIcon}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n campaign && campaign.Budget && dateSettings ? (\r\n <ValidatedAudienceDateSetting\r\n i18n={i18n}\r\n validationProps={{\r\n onValidate,\r\n stopPropagation: true,\r\n data: {\r\n StartDate: dateSettings.StartDate,\r\n EndDate: dateSettings.EndDate,\r\n UseCampaignLevelDates: dateSettings.UseCampaignLevelDates,\r\n BudgetType: campaign.Budget.Type,\r\n TimeZone: campaign.timeZone,\r\n isCreate: allowStartDateEdit || isDefaultCampaignStepModel,\r\n },\r\n }}\r\n isEditFlow={isEdit}\r\n displayDateManagementSelector={!isEdit && !isLifetimeBudget && isLifetimeBudgetFeatureEnabled}\r\n allowDateManagementSelection={isDateManagementEditable}\r\n allowNoEndDateSelection={!isLifetimeBudget}\r\n />\r\n ) : (<SectionShimmer count={3} />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"conversions\"\r\n title={<TextTitle\r\n titleKey={_TL_('Conversions')}\r\n topicKey=\"pop_BA_PMAX_Conversions\"\r\n icon={conversionGoalsIcon}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n data && data.campaign ? (\r\n <ValidatedConversionGoals\r\n campaign={data.campaign}\r\n validationProps={{\r\n initialValue: data.campaign,\r\n data: data.campaign,\r\n }}\r\n cid={advertiserCustomerId}\r\n aid={aid}\r\n showTrackingStatusIcon={IsConversionAssociationWarningEnabled}\r\n />\r\n ) : (<SectionShimmer count={3} />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"bid-value\"\r\n title={<TextTitle titleKey={_TL_('Default bid')} icon={bidValueIcon} topicKey=\"pop_BA_CampaignCreate_Budget_DefaultBid\" />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n data && data.adGroup ? (\r\n <BidValue\r\n data={data}\r\n onDataChange={onDataChange}\r\n legacyI18n={legacyI18n}\r\n />\r\n ) : (<SectionShimmer count={3} />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"location-target\"\r\n data={data}\r\n onDataChange={onDataChange}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n title={<TextTitle\r\n titleKey={_TL_('Location')}\r\n key=\"location-target\"\r\n topicKey=\"pop_BA_CampaignCreate_Settings_LocationTargeting\"\r\n panelKey=\"location-target\"\r\n details={getLocationTargetTitleDetails(i18n, locationTargets, false, '', true)}\r\n icon={locationTargetIcon}\r\n />}\r\n >\r\n {locationTargets ? (\r\n <ServerValidatedLocationTargetSetting\r\n validationProps={{\r\n data: locationTargets,\r\n }}\r\n bundleCountries={bundleCountries}\r\n bundleLocationCriterions={bundleLocationCriterions}\r\n isRadiusExcludeEnabled={!isAudienceCampaign || !(EnableMSANDisplayCampaigns && EnableMSANVideoCampaigns)}\r\n allowNegativeLocationTargeting={isAudienceCampaign ? true : XandrNegativeTarget}\r\n showSearchTypeOptions={isAudienceCampaign || ((EnableMSANDisplayCampaigns && EnableMSANVideoCampaigns))}\r\n defaultSelectedSearchType={SEARCH_TYPE.Boundary}\r\n isBrandAwarenessCampaignScenario={isXandrServing(campaign.CampaignSubType, campaign.CampaignSettings)}\r\n hideIntent\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 ) : (<SectionShimmer />)}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"disclaimer\"\r\n title={<TextTitle\r\n titleKey={_TL_('Disclaimer')}\r\n icon={bidAdjustmentIcon}\r\n topicKey=\"pop_BA_Audience_Disclaimers\"\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {data && data.campaign ? (\r\n <ValidatedDisclaimerExtension\r\n className={classNames(classes.disclaimerContainerWrapper, 'disclaimer__container')}\r\n i18n={legacyI18n}\r\n campaignId={campaignId}\r\n schema={DisclaimerAdExtension}\r\n repository={disclaimerRepositoryRef.current}\r\n validationProps={{\r\n data: {\r\n DisclaimerAdsEnabled,\r\n AdExtensionAssociations: [], // AdExtensionAssociation in the UI\r\n associatedDisclaimer, // Disclaimer Association from DB\r\n },\r\n }}\r\n AllowDisclaimerEnabled\r\n usePanel\r\n isNativeAd // We only let native ad flow show this component\r\n />\r\n ) : (<SectionShimmer count={3} />)}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"call-to-action-opt-out\"\r\n title={<TextTitle\r\n titleKey={_TL_('Call to action')}\r\n icon={CallToActionImg}\r\n topicKey=\"pop_BA_Audiences_EnableCTA\"\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {data && data.campaign ? (\r\n <CallToActionOptOut\r\n i18n={i18n}\r\n data={data}\r\n onDataChange={onDataChange}\r\n />\r\n ) : (<SectionShimmer count={3} />)}\r\n </ValidatedPanel>\r\n </Collapse>\r\n {dealDetails && <DealImpressionPanel i18n={i18n} deal={dealDetails} serverContext={serverContext} />}\r\n </Stack>\r\n <Stack horizontal token={{ childrenGap: 14 }}>\r\n {\r\n advancedOptions.length > 0 && (\r\n <ValidatedBootstrapPanel\r\n defaultExpanded={false}\r\n className={classNames(classes.collapsiblePanel, 'advanced-settings-panel')}\r\n render={() => (\r\n <>\r\n <BootstrapPanel.Heading>\r\n <BootstrapPanel.Title toggle>\r\n {i18n.getString(_TL_('Advanced settings'))}\r\n </BootstrapPanel.Title>\r\n </BootstrapPanel.Heading>\r\n <BootstrapPanel.Collapse>\r\n <BootstrapPanel.Body>\r\n <div className={classNames('advanced-campaign-section')}>\r\n <Collapse allPanelItems={allAdvancedCampaignSettingsSections} checkItems skipItemsTypeCheck activeKeys={advancedCampaignSettingsExpandedSections} setActiveKeys={setAdvancedCampaignSettingsExpandedSections}>\r\n <ValidatedPanel\r\n key=\"ad-schedule\"\r\n title={<TextTitle\r\n titleKey={_TL_('Ad schedule')}\r\n key=\"ad-schedule\"\r\n panelKey=\"ad-schedule\"\r\n details={`${getAdScheduleDetails(i18n, adScheduleView && adScheduleView.current, true)}`}\r\n icon={adScheduleIcon}\r\n />}\r\n >\r\n {\r\n campaign || adGroup ? (\r\n <ValidatedLegacyAdSchedule\r\n isCreation\r\n hideMinuteOptions\r\n level={isEdit ? 'campaign' : 'adgroup'}\r\n entity={{ data: campaign }}\r\n validationProps={{\r\n data: adSchedules,\r\n }}\r\n hideUseCampaignSetting\r\n showBidAdjustmentColumn={isEdit}\r\n setAdScheduleView={setAdScheduleViewCallback}\r\n />\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"advanced-url-options\"\r\n title={<TextTitle titleKey={_TL_('Advanced URL options')} details={urlOptionsDetails} icon={UrlOptionsImg} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <span className=\"url-options-descriptions\">\r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n </span>\r\n {\r\n campaign &&\r\n <ValidatedUrlOptionsParameter\r\n i18n={i18n}\r\n validationProps={{\r\n data: {\r\n TrackingUrlTemplate: campaign.TrackingUrlTemplate,\r\n FinalUrlSuffix: campaign.FinalUrlSuffix,\r\n UrlCustomParameters: campaign.UrlCustomParameters,\r\n },\r\n }}\r\n />\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"device-target\"\r\n title={<TextTitle\r\n titleKey={_TL_('Device')}\r\n key=\"device-target\"\r\n details={devicesDetails}\r\n icon={phoneDesktopIcon}\r\n iconStyles={{ width: 28 }}\r\n panelKey=\"device-target\"\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Device\"\r\n />}\r\n >\r\n {\r\n (campaign && campaign.campaignLevelDeviceTargets) ? (\r\n <>\r\n <Device\r\n i18n={i18n}\r\n devices={campaign.campaignLevelDeviceTargets}\r\n isCTVSupported={false}\r\n validationPropsField=\"campaignLevelDeviceTargets\"\r\n defaultSelectAll={shouldSelectAllDevices}\r\n key=\"campaignLevelDeviceTargets\"\r\n />\r\n <ValidatedBidAdjustmentGrid\r\n data={data}\r\n validationProps={{\r\n data: data.campaign,\r\n stopPropagation: true,\r\n }}\r\n criterionType=\"Device\"\r\n criterionLevel=\"CampaignCriterion\"\r\n isAudienceEdit={isAudienceCampaignEdit}\r\n />\r\n </>\r\n ) : (<SectionShimmer />)\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"web-exclusions\"\r\n title={\r\n <TextTitle\r\n titleKey={WebsiteExclusionLists ? _TL_('Website control lists') : _TL_('Web Exclusions')}\r\n icon={webExclusionsIcon}\r\n iconStyles={{ width: 22 }}\r\n topicKey=\"pop_BA_WebsiteControlLists\"\r\n details={\r\n WebsiteExclusionLists\r\n ? i18n.getString(_TL_('{{selected}} lists selected'), { selected: data?.websiteExclusionLists?.length })\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 {WebsiteExclusionLists ? (\r\n <WebsiteLists selectedExclusions={data?.websiteExclusionLists} onExclusionsChange={onExclusionsListSelected} />\r\n ) : (\r\n <span className=\"web-exclusions-description\">\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 </span>\r\n )}\r\n <ServerValidatedWebExclusions\r\n showSiteExclusion\r\n showIPExclusion\r\n {...(WebsiteExclusionLists ? {\r\n showAccordion: true,\r\n siteInputProps: { placeholder: 'Enter one website per line.' },\r\n ipInputProps: { placeholder: 'Enter one IP address per line.' },\r\n } : {})}\r\n level={ScopeLevel.Campaign}\r\n exclusionData={data && data.exclusions ? data.exclusions : {}}\r\n setExclusionsCallback={setExclusionsCallback}\r\n errors={webExclusionsError}\r\n formErrorProps={{ filter: webExclusionPropertyVal }}\r\n />\r\n </ValidatedPanel>\r\n {\r\n campaignId && adGroupId && (\r\n <ValidatedPanel\r\n key=\"bid-adjustment\"\r\n title={<TextTitle\r\n titleKey={_TL_('Bid adjustment')}\r\n icon={bidAdjustmentIcon}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <ValidatedBidAdjustment\r\n data={data}\r\n aid={aid}\r\n cid={cid}\r\n validationProps={{\r\n data: data.adGroup,\r\n onValidate: onAdGroupValidate,\r\n stopPropagation: true,\r\n }}\r\n adGroupId={adGroupId}\r\n campaignId={campaignId}\r\n />\r\n </ValidatedPanel>\r\n )\r\n }\r\n {\r\n campaign && campaignId && (\r\n <ValidatedPanel\r\n key=\"third-party-measurement-settings\"\r\n title={<TextTitle\r\n headingClassName=\"third-party-measurement-header\"\r\n headingRole=\"heading\"\r\n headingLevel=\"2\"\r\n titleKey={_TL_('Third-party measurement')}\r\n icon={Ruler}\r\n topicKey=\"pop_BA_Measurement_ThirdParty\"\r\n details={formatVendorSettings({ verifiedTrackingSettingsValidationProps, i18n })}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: advancedSettingsExpand,\r\n expandKey: 'third-party-measurement',\r\n }}\r\n >\r\n <ThirdPartyMeasurementV3WithValidation\r\n i18n={i18n}\r\n aid={aid}\r\n cid={cid}\r\n validationProps={verifiedTrackingSettingsValidationProps}\r\n EnableDoubleVerify={EnableDoubleVerify}\r\n IsMSANISPOTEnabled={IsMSANISPOTEnabled}\r\n />\r\n </ValidatedPanel>\r\n )\r\n }\r\n </Collapse>\r\n </div>\r\n </BootstrapPanel.Body>\r\n </BootstrapPanel.Collapse>\r\n </>\r\n )}\r\n />\r\n )\r\n }\r\n </Stack>\r\n </div>\r\n <div className={classNames(classes.estimationPart, 'estimation-part')}>\r\n {isValidTargets && !isCTVOrDealFlow &&\r\n <TargetingEstimation\r\n data={data}\r\n isCampaignCreationPlannerIntegrationEnabled={CampaignCreationPlannerIntegration}\r\n PTPerfEstimationUIUpdate={PTPerfEstimationUIUpdate}\r\n validationProps={{ field: 'reachEstimation' }}\r\n audienceUsePrivacyCheck={AudienceUsePrivacyCheckV2}\r\n />\r\n }\r\n </div>\r\n </ValidationGroup>\r\n </FormErrorGroup>\r\n </AttentionBeaconGroup>\r\n </ActuationGroup>\r\n </div>\r\n );\r\n};\r\n\r\nCampaignStepShell.propTypes = {\r\n data: PropTypes.shape({\r\n adGroup: PropTypes.shape({\r\n Id: PropTypes.number,\r\n UseOptimizedTargeting: PropTypes.bool,\r\n BiddingScheme: PropTypes.shape({\r\n Type: PropTypes.string,\r\n }),\r\n campaignLevelDeviceTargets: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n Type: PropTypes.string,\r\n })),\r\n }),\r\n campaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n Budget: PropTypes.shape({\r\n Type: PropTypes.string,\r\n Amount: PropTypes.number,\r\n }),\r\n StartDate: PropTypes.string,\r\n EndDate: PropTypes.string,\r\n UseCampaignLevelDates: PropTypes.bool,\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n campaignLevelDeviceTargets: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n Type: PropTypes.string,\r\n })),\r\n }),\r\n exclusions: PropTypes.shape({\r\n campaignExclusions: PropTypes.shape({\r\n [webExclusionPropertyVal]: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n Type: PropTypes.string,\r\n })),\r\n }),\r\n }),\r\n websiteExclusionLists: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n })),\r\n }),\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.arrayOf(PropTypes.shape({\r\n property: PropTypes.string,\r\n message: PropTypes.string,\r\n })),\r\n};\r\n\r\nCampaignStepShell.defaultProps = {\r\n data: null,\r\n error: [],\r\n};\r\n","export const AdGroupNegativeReferenceId = -111;\r\n\r\nconst getTargetCriterion = ({\r\n targets,\r\n type,\r\n propKey,\r\n adGroupViewModel,\r\n campaignViewModel,\r\n overrideType = undefined,\r\n}) => targets.map((target) => {\r\n const criterion = {\r\n Type: overrideType || type,\r\n BidAdjustment: target.Criterion.BidAdjustment,\r\n [`${overrideType || type}Criterion`]: {\r\n [propKey]: target.Criterion.Target,\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// in this view model to bulk model for targets\r\n// in addition to the criterion, we also add the bid adjustment value for each criterion.\r\n// the structure of this is a an object compared to xandr's array of criterions.\r\nexport const viewModelToBulkModelForBidAdjustmentUI = ({ adGroupViewModel, campaignViewModel }) => {\r\n // ageRanges\r\n const ageTargets = adGroupViewModel.data.ageRanges || [];\r\n const negativeAgeRanges = adGroupViewModel.data.negativeAgeRanges || [];\r\n const genderTypes = adGroupViewModel.data.genderTypes || [];\r\n const negativeGenderTypes = adGroupViewModel.data.negativeGenderTypes || [];\r\n const jobTargets = adGroupViewModel.data.jobTargets || [];\r\n const negativeJobTargets = adGroupViewModel.data.negativeJobTargets || [];\r\n const industryTargets = adGroupViewModel.data.industry || [];\r\n const negativeIndustryTargets = adGroupViewModel.data.negativeIndustry || [];\r\n const companyNameTargets = adGroupViewModel.data.companyNameTargets || [];\r\n const negativeCompanyNameTargets = adGroupViewModel.data.negativeCompanyNameTargets || [];\r\n\r\n\r\n const ageTargetCriterions = getTargetCriterion({\r\n targets: ageTargets,\r\n type: 'Age',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const negativeAgeTargetCriterions = getTargetCriterion({\r\n targets: negativeAgeRanges,\r\n type: 'NegativeAge',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const genderTargetCriterions = getTargetCriterion({\r\n targets: genderTypes,\r\n type: 'Gender',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const negativeGenderTargetCriterions = getTargetCriterion({\r\n targets: negativeGenderTypes,\r\n type: 'NegativeGender',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const jobTargetCriterions = getTargetCriterion({\r\n targets: jobTargets,\r\n type: 'JobFunction',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const negativeJobTargetCriterions = getTargetCriterion({\r\n targets: negativeJobTargets,\r\n type: 'NegativeJobFunction',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const industryTargetCriterions = getTargetCriterion({\r\n targets: industryTargets,\r\n type: 'Industry',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const negativeIndustryTargetCriterions = getTargetCriterion({\r\n targets: negativeIndustryTargets,\r\n type: 'NegativeIndustry',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const companyNameTargetCriterions = getTargetCriterion({\r\n targets: companyNameTargets,\r\n type: 'CompanyName',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n const negativeCompanyNameTargetCriterions = getTargetCriterion({\r\n targets: negativeCompanyNameTargets,\r\n type: 'NegativeCompanyName',\r\n propKey: 'Target',\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n\r\n return [\r\n ...ageTargetCriterions,\r\n ...negativeAgeTargetCriterions,\r\n ...genderTargetCriterions,\r\n ...negativeGenderTargetCriterions,\r\n ...jobTargetCriterions,\r\n ...negativeJobTargetCriterions,\r\n ...industryTargetCriterions,\r\n ...negativeIndustryTargetCriterions,\r\n ...companyNameTargetCriterions,\r\n ...negativeCompanyNameTargetCriterions,\r\n ];\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n loadCampaign,\r\n loadAdGroup,\r\n modelToViewModelForAdGroup,\r\n modelToViewModelForCampaign,\r\n getErrorsPlaceholders,\r\n saveAdGroup,\r\n loadBundleCountries,\r\n saveCampaign,\r\n readAudienceCriterions,\r\n readTargetingCriterions,\r\n readLocationCriterions,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { viewModelToBulkModelForDisclaimerAssociation } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport { getVerifiedTrackingSettingWrite as viewModelToBulkModelForVerifiedTrackingSettings } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { modelConstraints } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { viewModelToBulkModelForBidAdjustmentUI } from '../../shared/model/adgroup-criterions-with-bid-adjustment';\r\nimport { isAudience, shouldEnableBidAdjustment, isDealCampaign, isCTVOrDeal } from '../../step-constants';\r\nimport { readDayTimeCriterions, viewModelToBulkModelForAdSchedules } from '../../shared/model/campaign-criterion';\r\n\r\nexport const useCampaignRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n const { state, send } = useWizardService();\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const {\r\n flow, isPublishing, isDefaultCampaignStepModel, deal,\r\n } = state.context.wizardData;\r\n\r\n const load = () => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n\r\n const adGroupId = savedAdGroup ? savedAdGroup.Id : null;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null;\r\n\r\n let loadPromises = {\r\n adGroup: loadAdGroup(cid, aid, campaignId, adGroupId),\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\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 dayTimeCriterions: readDayTimeCriterions({\r\n cid, aid, campaignId,\r\n }),\r\n };\r\n\r\n if (isDealCampaign(flow)) {\r\n loadPromises = _.extend(loadPromises, {\r\n locationCriterions: readLocationCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n });\r\n }\r\n\r\n return Promise.props(loadPromises).then(({\r\n adGroup,\r\n campaign,\r\n bundleCountriesAndLocationCriterions,\r\n audienceCriterions,\r\n targetCriterions,\r\n dayTimeCriterions,\r\n locationCriterions,\r\n }) => {\r\n const adGroupData = modelToViewModelForAdGroup({\r\n adGroupModel: adGroup,\r\n campaignModel: campaign,\r\n i18n,\r\n audienceCriterionsModel: audienceCriterions ? audienceCriterions.value : [],\r\n targetCriterionsModel: targetCriterions ? targetCriterions.value : [],\r\n isAudienceAds: isAudience(flow),\r\n ...isDealCampaign(flow) ? {\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n } : {},\r\n });\r\n\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n });\r\n\r\n if (isDefaultCampaignStepModel && !isCTVOrDeal(flow)) {\r\n adGroupData.data.StartDate = new Date();\r\n campaignData.data.StartDate = new Date();\r\n }\r\n\r\n let constraintAdGroupModel = Promise.resolve(adGroupData.data);\r\n\r\n if (isDealCampaign(flow) && deal) {\r\n constraintAdGroupModel = modelConstraints(deal, adGroupData.data, serverContext);\r\n }\r\n\r\n\r\n return constraintAdGroupModel.then((adGroupModel) => {\r\n const data = {\r\n adGroup: adGroupModel,\r\n campaign: campaignData.data,\r\n ...bundleCountriesAndLocationCriterions,\r\n ...getErrorsPlaceholders(),\r\n dealDetails: deal,\r\n };\r\n\r\n return data;\r\n });\r\n });\r\n };\r\n\r\n const allSettledPromiseWrapper = (promises) => {\r\n const wrappedPromises = promises.map(p => Promise.resolve(p)\r\n .then(\r\n val => ({ status: 'fulfilled', value: val }),\r\n err => ({ status: 'rejected', reason: err })\r\n ));\r\n return Promise.all(wrappedPromises);\r\n };\r\n\r\n const save = ({ data }) => {\r\n const {\r\n adGroup, campaign, bundleCountries, bundleLocationCriterions,\r\n } = data;\r\n\r\n if (isPublishing) {\r\n campaign.Status = 'Active';\r\n } else {\r\n campaign.Status = 'Paused';\r\n }\r\n\r\n if (campaign.UseCampaignLevelDates) {\r\n adGroup.StartDate = new Date();\r\n adGroup.EndDate = null;\r\n } else {\r\n campaign.StartDate = new Date();\r\n campaign.EndDate = null;\r\n }\r\n\r\n const saveCampaignPromise = saveCampaign({\r\n campaign: { data: campaign },\r\n viewModelToBulkModelForAdSchedules,\r\n viewModelToBulkModelForDisclaimerAssociation,\r\n viewModelToBulkModelForVerifiedTrackingSettings,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n\r\n const saveAdGroupsPromise = saveCampaignPromise\r\n .then(() => saveAdGroup({\r\n adGroup: { data: adGroup },\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n campaign: state.context.wizardData.campaign,\r\n customTargetingBulkModel: shouldEnableBidAdjustment(flow, serverContext) ? viewModelToBulkModelForBidAdjustmentUI : undefined,\r\n isDisplayPlus: true,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveAdGroup'),\r\n i18n,\r\n serverContext,\r\n }));\r\n\r\n const savePromises = [saveCampaignPromise, saveAdGroupsPromise];\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 if (activity) {\r\n activity.signal(`onBudgetAndBidSavedSuccessfully - Status: ${campaign.Status}, Id: ${campaign.Id}`);\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: results[0].value.campaign.data,\r\n adGroup: results[1].value.adGroup.data,\r\n isDefaultCampaignStepModel: false,\r\n lifetimeBudgetFlowData: {\r\n isBudgetTypeEditable: false,\r\n isDateManagementEditable: false,\r\n },\r\n });\r\n\r\n return resolve({\r\n adGroup: results[1].value.adGroup.data,\r\n campaign: results[0].value.campaign.data,\r\n ...getErrorsPlaceholders(),\r\n });\r\n }\r\n\r\n const errors = _.map(results, (result) => {\r\n if (activity) {\r\n activity.signal(`OnBudgetAndBidSavedError - error: ${JSON.stringify(result)}`);\r\n }\r\n if (result.status === 'fulfilled') {\r\n return null;\r\n }\r\n\r\n const { serverErrors = {} } = result.reason;\r\n\r\n return serverErrors;\r\n });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(errors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n loadCampaign,\r\n loadBundleCountries,\r\n modelToViewModelForCampaign,\r\n getErrorsPlaceholders,\r\n saveCampaign,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { getDealDetails } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { getVerifiedTrackingSettingWrite as viewModelToBulkModelForVerifiedTrackingSettings } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { viewModelToBulkModelForDisclaimerAssociation } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport { showBudgetBidCampaignNotifications } from '@bingads-webui-campaign/import-shared-utils';\r\nimport { repository } from '@bingads-webui-campaign-react/website-list-selector';\r\nimport { isCTVCampaign, isDealCampaign } from '../../step-constants';\r\nimport {\r\n readDayTimeCriterions,\r\n viewModelToBulkModelForAdSchedules,\r\n readLocationCriterions,\r\n readDeviceCriterion,\r\n} from '../../shared/model/campaign-criterion';\r\n\r\nexport const useCampaignEditRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n const { state, send } = useWizardService();\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const scenarioContext = useContext(ScenarioContext);\r\n const serverContext = useContext(ServerContext);\r\n const { DynamicPermissions = {} } = serverContext || {};\r\n const {\r\n AudienceMMACTAOptOut: isAudienceMMACTAOptOutEnabled,\r\n AudienceMMACTADefaultOptOut: isAudienceMMACTADefaultOptOutEnabled,\r\n WebsiteExclusionLists: isWebsiteExclusionListsEnabled,\r\n } = DynamicPermissions;\r\n\r\n const activity = useContext(ActivityContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const { cid, aid } = scope.values;\r\n const { flow } = state.context.wizardData;\r\n const isCTVCampaignFlow = isCTVCampaign(flow);\r\n const isDealCampaignFlow = isDealCampaign(flow);\r\n\r\n const load = () => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null;\r\n\r\n if (isCTVCampaignFlow || isDealCampaignFlow) {\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n dealDetails: getDealDetails(cid, aid, campaignId, serverContext),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n dealDetails,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n dealDetails,\r\n });\r\n\r\n return {\r\n campaign: campaignData.data,\r\n dealDetails,\r\n ...getErrorsPlaceholders(),\r\n };\r\n });\r\n }\r\n\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n exclusions: exclusionRepository.load(campaignId, null, ScopeLevel.Campaign),\r\n dayTimeCriterions: readDayTimeCriterions({\r\n cid, aid, campaignId,\r\n }),\r\n locationCriterions: readLocationCriterions({\r\n cid, aid, campaignId,\r\n }),\r\n campaignDeviceCriterions: readDeviceCriterion({\r\n cid, aid, campaignId,\r\n }),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n };\r\n\r\n if (isWebsiteExclusionListsEnabled) {\r\n loadPromises.websiteExclusionLists = repository.getListsByCampaignId(serverContext, campaignId);\r\n } else {\r\n loadPromises.websiteExclusionLists = Promise.resolve([]);\r\n }\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n exclusions: [campaignExclusions],\r\n dayTimeCriterions,\r\n locationCriterions,\r\n campaignDeviceCriterions,\r\n bundleCountriesAndLocationCriterions,\r\n websiteExclusionLists,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n campaignDeviceCriterions: campaignDeviceCriterions ? campaignDeviceCriterions.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n isAudienceMMACTAOptOutEnabled,\r\n isAudienceMMACTADefaultOptOutEnabled,\r\n });\r\n\r\n return {\r\n campaign: campaignData.data,\r\n ...bundleCountriesAndLocationCriterions,\r\n exclusions: {\r\n campaignExclusions,\r\n },\r\n websiteExclusionLists: websiteExclusionLists.map(entity => ({ ...entity, value: entity.Id, content: entity.Name })),\r\n ...getErrorsPlaceholders(),\r\n };\r\n });\r\n };\r\n\r\n const allSettledPromiseWrapper = (promises) => {\r\n const wrappedPromises = promises.map(p => Promise.resolve(p)\r\n .then(\r\n val => ({ status: 'fulfilled', value: val }),\r\n err => ({ status: 'rejected', reason: err })\r\n ));\r\n return Promise.all(wrappedPromises);\r\n };\r\n\r\n const save = ({ data }) => {\r\n const {\r\n campaign,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n exclusions,\r\n websiteExclusionLists,\r\n } = data;\r\n\r\n if (campaign.Status === 'UserPaused') {\r\n campaign.Status = 'Paused';\r\n }\r\n\r\n let saveCampaignPromise;\r\n let saveExclusionsPromise = Promise.resolve();\r\n let saveWebsiteExclusionListsPromise = Promise.resolve();\r\n\r\n if (isCTVCampaignFlow || isDealCampaignFlow) {\r\n saveCampaignPromise = saveCampaign({\r\n campaign: { data: campaign },\r\n viewModelToBulkModelForVerifiedTrackingSettings,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n } else {\r\n saveCampaignPromise = saveCampaign({\r\n campaign: { data: campaign },\r\n viewModelToBulkModelForAdSchedules,\r\n viewModelToBulkModelForVerifiedTrackingSettings,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n viewModelToBulkModelForDisclaimerAssociation,\r\n isAudienceMMACTAOptOutEnabled,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n\r\n const saveExclusionsData = {\r\n campaignId: campaign.Id,\r\n AdvanceSettings: {\r\n Exclusions: {\r\n ExcludedIPs: exclusions.campaignExclusions.ExcludedIPs,\r\n ExcludedSites: exclusions.campaignExclusions.ExcludedSites,\r\n },\r\n },\r\n };\r\n saveExclusionsPromise = exclusionRepository.saveExtensions(saveExclusionsData, ScopeLevel.Campaign);\r\n if (isWebsiteExclusionListsEnabled) {\r\n saveWebsiteExclusionListsPromise = repository.associateListsToCampaign(serverContext, websiteExclusionLists, campaign.Id);\r\n }\r\n }\r\n\r\n const savePromises = [saveCampaignPromise, saveExclusionsPromise, saveWebsiteExclusionListsPromise];\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 const { activity: BudgetBidCampaignImportNotificationActivity } = instrumentation.createScenarioAndActivity({\r\n scenarioName: 'BudgetBidCampaignImportNotification',\r\n activityName: 'AudienceCampaignSettingPage',\r\n });\r\n\r\n const { campaign: initialCampaign } = state.context.stepContexts.CAMPAIGN_EDIT.initialData;\r\n\r\n showBudgetBidCampaignNotifications({\r\n campaignItemList: [initialCampaign],\r\n oldBudget: initialCampaign.Budget,\r\n newBudget: campaign.Budget,\r\n oldBidStrategy: initialCampaign.BiddingScheme,\r\n newBidStrategy: campaign.BiddingScheme,\r\n activity: BudgetBidCampaignImportNotificationActivity,\r\n });\r\n\r\n if (activity) {\r\n activity.signal(`onBudgetAndBidSavedSuccessfully - Status: ${campaign.Status}, Id: ${campaign.Id}`);\r\n }\r\n\r\n if (isCTVCampaignFlow || isDealCampaignFlow) {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: results[0].value.campaign.data });\r\n } else {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: results[0].value.campaign.data, exclusions: results[1].value });\r\n }\r\n\r\n return resolve({\r\n campaign: results[0].value.campaign.data,\r\n ...getErrorsPlaceholders(),\r\n });\r\n }\r\n\r\n const errors = _.map(results, (result) => {\r\n if (activity) {\r\n activity.signal(`OnBudgetAndBidSavedError - error: ${JSON.stringify(result)}`);\r\n }\r\n if (result.status === 'fulfilled') {\r\n return null;\r\n }\r\n\r\n const { serverErrors = {} } = result.reason;\r\n\r\n if (result.reason.NegativeSitesResult) {\r\n const { NegativeSitesResult } = result.reason;\r\n serverErrors.property = 'webExclusions';\r\n serverErrors.NegativeSitesResult = NegativeSitesResult.EntityErrors;\r\n }\r\n\r\n if (result.reason.NegativeIPsResult) {\r\n const { NegativeIPsResult } = result.reason;\r\n serverErrors.property = 'webExclusions';\r\n serverErrors.NegativeIPsResult = NegativeIPsResult.EntityErrors;\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({ error: _.flatten(errors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useState, useEffect, useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport _preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { isAudienceCampaign as isAudienceCampaignFlow, isMultiAdsAudienceCampaign, isCTVCampaign, isDealCampaign } from '../../step-constants';\r\n\r\nconst BiddingSchemeToBidType = {\r\n EnhancedCpc: 'SearchBid',\r\n ManualCpc: 'SearchBid',\r\n ManualCpm: 'CpmBid',\r\n ManualCpv: 'CpvBid',\r\n};\r\n\r\nconst buildSchemaData = ({\r\n data, timeDisplayType, isAudienceCampaign, serverContext, numberOfAds, isCTVFlow, isDealFlow,\r\n}) => {\r\n const {\r\n DynamicPermissions: {\r\n GenreTargets,\r\n CampaignLifetimeBudget: IsCampaignLifetimeBudgetEnabled,\r\n },\r\n } = serverContext;\r\n\r\n const locations = _.map(\r\n _.filter(\r\n data.adGroup.locationTargets.currentLevelSettings.currentLocations,\r\n loc => loc.SelectionStatus === 'Included'\r\n ),\r\n loc => loc.location\r\n );\r\n\r\n const { deal, campaign = {}, adGroup = {} } = data;\r\n const hideGenreTargetForDeal = isDealFlow ? !(deal && deal.Genre) : false;\r\n\r\n const isUseCampaignLevelDates = campaign.UseCampaignLevelDates;\r\n const startDate = isUseCampaignLevelDates ? campaign.StartDate : adGroup.StartDate;\r\n const endDate = isUseCampaignLevelDates ? campaign.EndDate : adGroup.EndDate;\r\n\r\n return ({\r\n adsPanel: {\r\n isRendered: !_.isUndefined(data.ads),\r\n },\r\n adCreation: {\r\n numAds: numberOfAds,\r\n },\r\n adGroupName: {\r\n data: data.adGroup.Name,\r\n },\r\n locationTargeting: {\r\n locations,\r\n targetOption: data.adGroup.locationTargets.currentLevelSettings.targetOption,\r\n },\r\n genderTargeting: {\r\n genders: data.adGroup.genderTypes,\r\n isRendered: data.adGroup.genderTypes && data.adGroup.genderTypes.length > 0,\r\n },\r\n ageRangeTargeting: {\r\n ageRanges: data.adGroup.ageRanges,\r\n isRendered: data.adGroup.ageRanges && data.adGroup.ageRanges.length > 0,\r\n },\r\n genreTargeting: {\r\n genreTargets: data.adGroup.genreTargets,\r\n isRendered: GenreTargets && (isCTVFlow || (isDealFlow && !hideGenreTargetForDeal)),\r\n },\r\n predictiveTargeting: {\r\n isPredictiveTargetingEnabled: data.adGroup.UseOptimizedTargeting,\r\n isRendered: isAudienceCampaign,\r\n },\r\n advancedTargetingSeparator: {},\r\n interest: {\r\n interests: data.adGroup.interests,\r\n isRendered: data.adGroup.interests && data.adGroup.interests.length > 0,\r\n },\r\n audience: {\r\n audiences: data.adGroup.audiences,\r\n isRendered: data.adGroup.audiences && data.adGroup.audiences.length > 0,\r\n },\r\n company: {\r\n companyTargets: data.adGroup.companyNameTargets,\r\n negativeCompanyTargets: data.adGroup.negativeCompanyNameTargets,\r\n isRendered: (data.adGroup.companyNameTargets && data.adGroup.companyNameTargets.length > 0) || (data.adGroup.negativeCompanyNameTargets && data.adGroup.negativeCompanyNameTargets.length > 0),\r\n },\r\n jobFunction: {\r\n jobTargets: data.adGroup.jobTargets,\r\n negativeJobTargets: data.adGroup.negativeJobTargets,\r\n isRendered: (data.adGroup.jobTargets && data.adGroup.jobTargets.length > 0) || (data.adGroup.negativeJobTargets && data.adGroup.negativeJobTargets.length > 0),\r\n },\r\n industry: {\r\n industryTargets: data.adGroup.industry,\r\n negativeIndustryTargets: data.adGroup.negativeIndustry,\r\n isRendered: (data.adGroup.industry && data.adGroup.industry.length > 0) || (data.adGroup.negativeIndustry && data.adGroup.negativeIndustry.length > 0),\r\n },\r\n adScheduleAdGroup: {\r\n startDate: data.adGroup.StartDate,\r\n endDate: data.adGroup.EndDate,\r\n adSchedules: data.adGroup.adSchedules.dayTimeRanges,\r\n useSearcherTimeZone: data.adGroup.AdScheduleUseSearcherTimeZone,\r\n timeDisplayType,\r\n isRendered: !isAudienceCampaign,\r\n },\r\n campaignName: {\r\n data: data.campaign.Name,\r\n },\r\n conversionGoals: {\r\n conversionGoals: data.campaign.conversionGoals,\r\n isRendered: !(isCTVFlow || isDealFlow),\r\n },\r\n budget: {\r\n data: data.campaign.Budget,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n },\r\n bidStrategy: {\r\n data: data.campaign.BiddingScheme,\r\n },\r\n bidValue: {\r\n data: data.adGroup[BiddingSchemeToBidType[data.campaign.BiddingScheme.Type]],\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n isRendered: data.campaign.BiddingScheme && data.campaign.BiddingScheme.Type !== 'MaxConversions',\r\n },\r\n startEndDatesCampaign: {\r\n startDate,\r\n endDate,\r\n isUseCampaignLevelDates,\r\n isDateLevelDisplayed: isAudienceCampaign && IsCampaignLifetimeBudgetEnabled,\r\n isRendered: isAudienceCampaign,\r\n },\r\n });\r\n};\r\n\r\nexport const useSummarySchemaData = ({ data }) => {\r\n const { state } = useWizardService();\r\n const { flow } = state.context.wizardData;\r\n const isAudienceCampaign = isAudienceCampaignFlow(flow);\r\n const isCTVFlow = isCTVCampaign(flow);\r\n const isDealFlow = isDealCampaign(flow);\r\n\r\n const [timeDisplayType, setTimeDisplayType] = useState('12-hour');\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const numberOfAds = useMemo(() => {\r\n if (isMultiAdsAudienceCampaign(flow)) {\r\n return data && data.ads && data.ads.ads && data.ads.ads && Object.keys(data.ads.ads).length;\r\n }\r\n\r\n return (data && data.ads && data.ads.ads && data.ads.ads.data && data.ads.ads.data.length) || 1;\r\n }, [data, flow]);\r\n\r\n useEffect(() => {\r\n const preferencesService = _preferencesService.default || _preferencesService;\r\n preferencesService.initialize().then(() => {\r\n const isTwelveHourDisplay = preferencesService.findByName('WebApp.CampaignUI.isTwelveHourDisplay') || {};\r\n setTimeDisplayType(_.isUndefined(isTwelveHourDisplay.Data) || isTwelveHourDisplay.Data ? '12-hour' : '24-hour');\r\n });\r\n }, []);\r\n\r\n return (data && buildSchemaData({\r\n data, timeDisplayType, isAudienceCampaign, serverContext, numberOfAds, isCTVFlow, isDealFlow,\r\n })) || {};\r\n};\r\n\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { GeneratedUI } from '@bingads-webui-campaign-react/ui-generator';\r\nimport { summaryPageComponentTypes } from '@bingads-webui-campaign-react/summary-page';\r\nimport { WIZARD_EVENTS, useWizardService } from '@bingads-webui-react/wizard';\r\nimport { StepHeader } from '../../shared/step-header';\r\nimport { buildSchema } from './schema';\r\nimport { useSummarySchemaData } from './use-summary-schema-data';\r\nimport { STEP_PATHS, FLOWS_TO_FIRST_STEP } from '../../step-constants';\r\n\r\nexport const SummaryStepShell = ({\r\n data,\r\n}) => {\r\n const schemaData = useSummarySchemaData({ data });\r\n\r\n const { send, state } = useWizardService();\r\n\r\n const onAdsHeaderActionClick = useCallback(() => {\r\n const stepId = FLOWS_TO_FIRST_STEP[state.context.wizardData.flow];\r\n\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId,\r\n });\r\n }, [send, state.context.wizardData.flow]);\r\n\r\n const onTargetingHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.AD_GROUP,\r\n }), [send]);\r\n\r\n const onCampaignSettingsHeaderActionClick = useCallback(() =>\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.CAMPAIGN_CREATION,\r\n }), [send]);\r\n\r\n const options = useMemo(() => ({\r\n onAdsHeaderActionClick,\r\n onTargetingHeaderActionClick,\r\n onCampaignSettingsHeaderActionClick,\r\n }), [onAdsHeaderActionClick, onTargetingHeaderActionClick, onCampaignSettingsHeaderActionClick]);\r\n\r\n const schema = useMemo(() => buildSchema(options), [options]);\r\n\r\n return (\r\n <div className=\"summary-step\" >\r\n <Stack tokens={{ childrenGap: 22 }}>\r\n <Stack>\r\n <StepHeader\r\n title={_TL_('Prepare for success!')}\r\n description={_TL_('Here\\'s a summary of everything in your campaign. All objects are available, but campaign is not live yet.')}\r\n />\r\n </Stack>\r\n {data ?\r\n <div className=\"summary-sections\">\r\n <GeneratedUI schema={schema} customComponentTypes={summaryPageComponentTypes} {...schemaData} />\r\n </div>\r\n : null\r\n }\r\n\r\n </Stack>\r\n </div>\r\n );\r\n};\r\n\r\nSummaryStepShell.propTypes = {\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nSummaryStepShell.defaultProps = {\r\n data: null,\r\n};\r\n","import { buildDefaultDataProperty } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const buildSchema = options => ({\r\n separatorStyles: {\r\n marginBottom: 20,\r\n },\r\n ads: {\r\n type: 'panel',\r\n header: {\r\n title: 'Ads',\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onAdsHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n adCreation: {\r\n type: 'ad-creation',\r\n dynamicProps: props => props.adCreation,\r\n },\r\n },\r\n dynamicProps: props => props.adsPanel,\r\n },\r\n targeting: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Targeting'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onTargetingHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n adGroupName: buildDefaultDataProperty({\r\n label: _TL_('Ad group name'),\r\n dynamicProps: props => props.adGroupName,\r\n }),\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n locationTargeting: {\r\n type: 'location-targeting',\r\n dynamicProps: props => props.locationTargeting,\r\n },\r\n genderTargeting: {\r\n type: 'gender-targeting',\r\n dynamicProps: props => props.genderTargeting,\r\n },\r\n ageRangeTargeting: {\r\n type: 'age-range-targeting',\r\n dynamicProps: props => props.ageRangeTargeting,\r\n },\r\n genreTargeting: {\r\n type: 'genre-targeting',\r\n dynamicProps: props => props.genreTargeting,\r\n },\r\n predictiveTargeting: {\r\n type: 'predictive-targeting',\r\n dynamicProps: props => props.predictiveTargeting,\r\n },\r\n advancedTargetingSeparator: {\r\n type: 'horizontal-divider',\r\n dynamicProps: props => props.advancedTargetingSeparator,\r\n },\r\n interest: {\r\n type: 'interest',\r\n dynamicProps: props => props.interest,\r\n },\r\n audience: {\r\n type: 'audience',\r\n dynamicProps: props => props.audience,\r\n },\r\n company: {\r\n type: 'company',\r\n dynamicProps: props => props.company,\r\n },\r\n jobFunction: {\r\n type: 'job-function',\r\n dynamicProps: props => props.jobFunction,\r\n },\r\n industry: {\r\n type: 'industry',\r\n dynamicProps: props => props.industry,\r\n },\r\n adScheduleAdGroup: {\r\n type: 'ad-schedule',\r\n dynamicProps: props => props.adScheduleAdGroup,\r\n },\r\n },\r\n },\r\n campaignSettings: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Campaign settings'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onCampaignSettingsHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n campaignName: buildDefaultDataProperty({\r\n label: _TL_('Campaign name'),\r\n dynamicProps: props => props.campaignName,\r\n }),\r\n conversionGoals: {\r\n type: 'conversion-goals',\r\n dynamicProps: props => props.conversionGoals,\r\n },\r\n budget: {\r\n type: 'budget',\r\n dynamicProps: props => props.budget,\r\n },\r\n bidStrategy: {\r\n type: 'bid-strategy',\r\n dynamicProps: props => props.bidStrategy,\r\n },\r\n bidValue: {\r\n type: 'bid-value',\r\n dynamicProps: props => props.bidValue,\r\n },\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n startEndDatesCampaign: {\r\n type: 'start-end-dates',\r\n dynamicProps: props => props.startEndDatesCampaign,\r\n },\r\n },\r\n },\r\n});\r\n","import Promise from 'bluebird';\r\nimport { useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport {\r\n loadCampaign,\r\n loadAdGroup,\r\n modelToViewModelForAdGroup,\r\n modelToViewModelForCampaign,\r\n loadBundleCountries,\r\n readAudienceCriterions,\r\n readTargetingCriterions,\r\n readLocationCriterions,\r\n saveCampaign,\r\n saveJustAdGroup,\r\n readDayTimeCriterions,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { readDayTimeCriterions as readDayTimeCriterionsCampaign } from '../../shared/model/campaign-criterion';\r\nimport { isAudienceCampaign, isDealCampaign } from '../../step-constants';\r\n\r\nexport const useSummaryRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n const { state } = useWizardService();\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n\r\n const scenarioContext = useContext(ScenarioContext);\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const { flow, isPublishing, deal } = state.context.wizardData;\r\n\r\n const inMarketAudienceRedesignEnabled = _.get(serverContext, ['DynamicPermissions', 'InMarketAudienceRedesign']);\r\n\r\n const load = () => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n\r\n const adGroupId = savedAdGroup ? savedAdGroup.Id : null;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null;\r\n\r\n let loadPromises = {\r\n adGroup: Promise.resolve(savedAdGroup),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n };\r\n\r\n loadPromises = _.extend(loadPromises, {\r\n adGroup: loadAdGroup(cid, aid, campaignId, adGroupId),\r\n campaign: loadCampaign(cid, aid, campaignId),\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 dayTimeCriterionsCampaign: readDayTimeCriterionsCampaign({\r\n cid, aid, campaignId,\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 });\r\n\r\n return Promise.props(loadPromises).then(({\r\n adGroup,\r\n campaign,\r\n locationCriterions,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n dayTimeCriterionsCampaign,\r\n targetCriterions,\r\n audienceCriterions,\r\n }) => {\r\n const adGroupData = modelToViewModelForAdGroup({\r\n adGroupModel: adGroup,\r\n campaignModel: campaign,\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 isAudienceAds: isAudienceCampaign(flow),\r\n separateIMA: inMarketAudienceRedesignEnabled,\r\n });\r\n\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n dayTimeCriterionsModel: dayTimeCriterionsCampaign ? dayTimeCriterionsCampaign.value : [],\r\n });\r\n\r\n return {\r\n ads: state.context.wizardData && state.context.wizardData.ads,\r\n adGroup: adGroupData.data,\r\n campaign: campaignData.data,\r\n ...(isDealCampaign(flow) ? { deal } : {}),\r\n };\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n const savedCampaign = data.campaign;\r\n const savedAdGroup = data.adGroup;\r\n\r\n if (isPublishing) {\r\n savedCampaign.Status = 'Active';\r\n savedAdGroup.Status = 'Active';\r\n } else {\r\n savedCampaign.Status = 'Paused';\r\n }\r\n\r\n return new Promise((resolve, reject) => saveCampaign({\r\n campaign: { data: savedCampaign },\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n }).then(() => saveJustAdGroup({\r\n adGroup: { data: savedAdGroup },\r\n campaign: savedCampaign,\r\n }, {\r\n i18n,\r\n })).then(() => {\r\n resolve();\r\n }).catch(err => reject(err)));\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useCallback } from 'react';\r\n\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\n// Specific to multi ad format in native campaign\r\nexport const useSelectedAdFormatState = () => {\r\n const { state: wizardState, send: wizardSend } = useWizardService();\r\n const updateSelectedAdFormat = useCallback(value => wizardSend(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { selectedAdFormat: value }), [wizardSend]);\r\n\r\n return [\r\n wizardState.context.wizardData.selectedAdFormat || AdFormat.Native,\r\n updateSelectedAdFormat,\r\n ];\r\n};\r\n","import React, { useMemo, useCallback, useContext, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { AdFormatOption, AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { DisplayAdsWithCopilot } from '@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components';\r\n\r\nimport { NativeAd } from '../native-ads/components/native-ad';\r\nimport { VideoAds } from '../video-ads/';\r\nimport { useSelectedAdFormatState } from '../../common/use-selected-ad-format';\r\nimport { NativeAdFooter } from '../native-ads/components/native-ad-footer';\r\n\r\nexport const MultiAdFormatStepShell = ({\r\n data,\r\n error,\r\n onDataChange,\r\n adsType = '',\r\n loadClipchampPlayer = null,\r\n}) => {\r\n const [selectedAdFormat, setSelectedAdFormat] = useSelectedAdFormatState();\r\n const i18n = useContext(I18nContext);\r\n const [isLoaded, setIsLoaded] = useState(false);\r\n const [isDisabled, setIsDisabled] = useState(false);\r\n const { state } = useWizardService();\r\n const currentStates = state.toStrings()[1];\r\n\r\n const onFormatChange = useCallback((value) => {\r\n setSelectedAdFormat(value);\r\n // Reset data\r\n onDataChange({ data: value === AdFormat.Native ? { data: {} } : { data: [] } });\r\n }, [onDataChange, setSelectedAdFormat]);\r\n\r\n const stepData = useMemo(() => {\r\n if (selectedAdFormat === AdFormat.Native) {\r\n return data || { data: {} };\r\n }\r\n\r\n return data || { data: [] };\r\n }, [data, selectedAdFormat]);\r\n\r\n // Wait for data is loaded to have a stable data state\r\n useEffect(() => {\r\n if (!isLoaded && matchStepState(state, STEP_STATES.ACTIVE)) {\r\n setIsLoaded(true);\r\n }\r\n }, [state, currentStates, isLoaded]);\r\n\r\n // To ensure disabled is fixed even we remove the ad when update\r\n useEffect(() => {\r\n if (isLoaded && !isDisabled) {\r\n const adData = _.isArray(stepData.data) ? stepData.data[0] : stepData.data;\r\n const adId = adData && adData.Id;\r\n\r\n if (adId) {\r\n setIsDisabled(true);\r\n }\r\n }\r\n }, [isLoaded, isDisabled, stepData.data]);\r\n\r\n // To ensure that ad format is Display when adsType is Display on initial load\r\n useEffect(() => {\r\n if (adsType === AdFormat.Display && selectedAdFormat !== AdFormat.Display) {\r\n setSelectedAdFormat(AdFormat.Display);\r\n }\r\n }, [adsType, setSelectedAdFormat]);\r\n\r\n return (\r\n <div className=\"multi-ad-format-step-shell\">\r\n {isLoaded && (\r\n <>\r\n <AdFormatOption i18n={i18n} value={selectedAdFormat} onChange={onFormatChange} disabled={isDisabled} />\r\n {selectedAdFormat === AdFormat.Native && <NativeAd data={stepData} error={error} onDataChange={onDataChange} loadClipchampPlayer={loadClipchampPlayer} hideFooter supportImageFitting />}\r\n {selectedAdFormat === AdFormat.Display && <DisplayAdsWithCopilot data={stepData} error={error} onDataChange={onDataChange} hideFooter />}\r\n {selectedAdFormat === AdFormat.Video && <VideoAds data={stepData} error={error} onDataChange={onDataChange} loadClipchampPlayer={loadClipchampPlayer} hideFooter />}\r\n <NativeAdFooter />\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nMultiAdFormatStepShell.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({}).isRequired,\r\n adsType: PropTypes.string,\r\n};\r\n\r\nexport const SingleMultiAdFormatStepShell = props => <MultiAdFormatStepShell {...props} isMultipleNative={false} />;\r\n","import { useCallback, useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\n\r\nimport { useMultipleNativeAdsRepository, getDefaultCampaign, getDefaultAdGroup, useNativeAdRepository } from '../native-ads';\r\nimport { useDisplayAdsRepository } from '../display-ads';\r\nimport { useVideoAdsRepository } from '../video-ads';\r\nimport { useSelectedAdFormatState } from '../../common/use-selected-ad-format';\r\n\r\nexport const useMultiAdFormatRepository = (isMultipleFlow = true) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const defaultCampaign = useMemo(() => getDefaultCampaign(i18n, serverContext), [i18n, serverContext]);\r\n const defaultAdGroup = useMemo(() => getDefaultAdGroup(i18n, serverContext), [i18n, serverContext]);\r\n\r\n const { state } = useWizardService();\r\n const [selectedAdFormat] = useSelectedAdFormatState();\r\n\r\n const { save: nativeAdSave } = useNativeAdRepository();\r\n const { save: multipleNativeAdSave } = useMultipleNativeAdsRepository();\r\n const { save: displayAdSave } = useDisplayAdsRepository(defaultCampaign, defaultAdGroup);\r\n const { save: videoAdSave } = useVideoAdsRepository(defaultCampaign, defaultAdGroup);\r\n\r\n const save = useCallback((data) => {\r\n const dataToSave = { ...data, data: { ...data.data, adSubType: selectedAdFormat } };\r\n switch (selectedAdFormat) {\r\n case AdFormat.Native:\r\n return isMultipleFlow ? multipleNativeAdSave(dataToSave) : nativeAdSave(dataToSave);\r\n case AdFormat.Display:\r\n return displayAdSave(dataToSave);\r\n case AdFormat.Video:\r\n return videoAdSave(dataToSave);\r\n default:\r\n return Promise.reject();\r\n }\r\n }, [selectedAdFormat, isMultipleFlow, multipleNativeAdSave, nativeAdSave, displayAdSave, videoAdSave]);\r\n\r\n const load = useCallback(() => new Promise((resolve) => {\r\n if (state.context.wizardData.ads) {\r\n const ids = _.keys(state.context.wizardData.ads.ads);\r\n if (!isMultipleFlow && ids.length > 0) {\r\n resolve(state.context.wizardData.ads.ads[ids[0]]);\r\n } else if (state.context.wizardData.editingAdId) {\r\n const { editingAdId } = state.context.wizardData;\r\n resolve(state.context.wizardData.ads.ads[editingAdId]);\r\n } else {\r\n resolve(undefined);\r\n }\r\n } else {\r\n resolve(undefined);\r\n }\r\n }), [isMultipleFlow, state.context.wizardData]);\r\n\r\n return { save, load };\r\n};\r\n\r\nexport const useSingleMultiAdFormatRepository = () => useMultiAdFormatRepository(false);\r\n","import _ from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst adEDM = edmCampaign.types.resolve('Model.ResponsiveAd');\r\nconst adResource = new adEDM.ResourceIdentifier();\r\n\r\nconst updateData = data => adResource.bulkUpdate.bind(adResource)(data);\r\n\r\nconst viewModelToModelForAdToDelete = ({ adsViewModel, campaign, adGroup }) => {\r\n const adViewModel = [];\r\n\r\n _.each(adsViewModel, (ad) => {\r\n const fields = {\r\n 'Client Id': '0', // `${ad.uid}`,\r\n Id: ad.Id,\r\n Status: 'Deleted',\r\n Campaign: _.pick(campaign, 'Id'),\r\n AdGroup: _.pick(adGroup, 'Id'),\r\n };\r\n\r\n adViewModel.push(fields);\r\n });\r\n\r\n return adViewModel;\r\n};\r\n\r\nexport const deleteAd = ({ ad, campaign, adGroup }) => {\r\n const deleteAds = viewModelToModelForAdToDelete({ adsViewModel: ad, campaign, adGroup });\r\n\r\n return updateData(deleteAds).then(result => result, err => err);\r\n};\r\n\r\n","import React, { useMemo } from 'react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\n\r\nexport const DisplayAdPreview = ({ ad }) => {\r\n const resizeImageHeightForThumbnail = useMemo(() => {\r\n if (ad && ad.image && ad.image.cropHeight && ad.image.cropWidth) {\r\n const aspectRatio = ad.image.cropWidth / ad.image.cropHeight;\r\n const maxWidth = 360;\r\n return Math.min(maxWidth / aspectRatio, 220);\r\n }\r\n return 0;\r\n }, [ad]);\r\n\r\n return (\r\n <CroppedImageView\r\n src={ad.image.src}\r\n originalWidth={ad.image.originalWidth}\r\n aspectRatio={ad.image.cropWidth / ad.image.cropHeight}\r\n resizeImageHeight={resizeImageHeightForThumbnail}\r\n SourceWidth={ad.image.cropWidth}\r\n SourceX={ad.image.cropX}\r\n SourceY={ad.image.cropY}\r\n />\r\n );\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport { Caption2, Caption1, Body2 } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const NativeAdPreview = ({ ad, classes }) => {\r\n const i18n = useContext(I18nContext);\r\n const adTitle = useMemo(() => ad && ad.Headlines && ad.Headlines.Headline0, [ad]);\r\n const adDescription = useMemo(() => ad && ad.Descriptions && ad.Descriptions.Description0, [ad]);\r\n const businessName = useMemo(() => ad && ad.BusinessName, [ad]);\r\n const adImageUrl = useMemo(() => ad && ad.Images && ad.Images.ImageList && ad.Images.ImageList[0] && ad.Images.ImageList[0][0].src, [ad]);\r\n\r\n return (\r\n <>\r\n <div className={classes.imageContainer}>\r\n <img className={classes.nativeAdImage} src={adImageUrl} alt={i18n.getString(_TL_('Ad preview image'))} />\r\n <div className={classes.nativeAdImageForeground} />\r\n </div>\r\n <div className={classes.textOverlay}>\r\n <Body2>{adTitle}</Body2>\r\n <Caption2>{adDescription}</Caption2>\r\n <Caption1>\r\n <span className={classes.adLabel}>Ad</span>\r\n {businessName}\r\n </Caption1>\r\n </div>\r\n </>\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport const VideoAdPreview = ({ ad }) => (\r\n <video controls>\r\n <source src={ad.video.src} />\r\n <track\r\n kind=\"captions\"\r\n src=\"\"\r\n srcLang=\"en\"\r\n label=\"English\"\r\n default\r\n />\r\n </video>\r\n);\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport { ContentViewRegular, ImageMultipleRegular, VideoRegular } from '@fluentui/react-icons';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nconst iconSize = 22;\r\n\r\nexport const getConfigByType = (type) => {\r\n switch (type) {\r\n case AdFormat.Native:\r\n return {\r\n icon: <ContentViewRegular fontSize={iconSize} />,\r\n label: _TL_('Native ad'),\r\n };\r\n case AdFormat.Display:\r\n return {\r\n icon: <ImageMultipleRegular fontSize={iconSize} />,\r\n label: _TL_('Display ad'),\r\n };\r\n default: // Video\r\n return {\r\n icon: <VideoRegular fontSize={iconSize} />,\r\n label: _TL_('Video ad'),\r\n };\r\n }\r\n};\r\n\r\nexport const getDescriptionByType = (ad, type, i18n) => {\r\n switch (type) {\r\n case AdFormat.Native: {\r\n const imageCount = ad && ad.Images && ad.Images.ImageList && ad.Images.ImageList.length;\r\n const headLinesCount = _.keys(ad && ad.Headlines).length;\r\n const longHeadLinesCount = _.keys(ad && ad.LongHeadlines).length;\r\n const descriptionCount = _.keys(ad && ad.Descriptions).length;\r\n return i18n.getString(_TL_('{{imageCount}} images, {{headlineCount}} headlines, {{descCount}} descriptions'), {\r\n imageCount,\r\n headlineCount: headLinesCount + longHeadLinesCount,\r\n descCount: descriptionCount,\r\n });\r\n }\r\n case AdFormat.Display: {\r\n const { targetWidth, targetHeight } = ad.data.image;\r\n return `${targetWidth}x${targetHeight}`;\r\n }\r\n default: { // Video\r\n // If the video is still transcoding, we don't have the duration yet\r\n if (!ad.data.video.duration) {\r\n return '';\r\n }\r\n\r\n const videoDuration = ad.data.video.duration / 1000;\r\n const minutes = Math.floor(videoDuration / 60);\r\n const seconds = Math.floor(videoDuration % 60);\r\n const formattedDuration = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\r\n return formattedDuration;\r\n }\r\n }\r\n};\r\n","export const getAdThumbnailStyles = () => ({\r\n root: {\r\n '& .fui-CardHeader__image': {\r\n padding: 6,\r\n background: '#F0F0F0',\r\n borderRadius: 4,\r\n },\r\n\r\n '& .fui-CardHeader__action': {\r\n display: 'flex',\r\n },\r\n\r\n '& .fui-Button': {\r\n border: 'none',\r\n marginLeft: 4,\r\n },\r\n },\r\n cardPreview: {\r\n width: 365,\r\n height: 236,\r\n background: '#F0F0F0',\r\n padding: 10,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n\r\n '& .cropped-image-view': {\r\n borderRadius: 5,\r\n },\r\n\r\n '& video': {\r\n borderRadius: 5,\r\n objectFit: 'cover',\r\n },\r\n },\r\n imageContainer: {\r\n overflow: 'hidden',\r\n borderRadius: 5,\r\n position: 'relative',\r\n },\r\n nativeAdImage: {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n nativeAdImageForeground: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n top: 80,\r\n backgroundImage: 'linear-gradient(to bottom, transparent 0, black 100%)',\r\n },\r\n textOverlay: {\r\n height: 'fit-content !important',\r\n width: '90% !important',\r\n position: 'absolute',\r\n bottom: 20,\r\n left: 20,\r\n display: 'flex !important',\r\n flexDirection: 'column',\r\n color: 'white',\r\n\r\n '& .fui-Text': {\r\n marginBottom: 2,\r\n },\r\n },\r\n adLabel: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n border: '0.5px solid white',\r\n padding: '2px 4px',\r\n borderRadius: 3,\r\n marginRight: 4,\r\n },\r\n previewDescription: {\r\n textOverflow: 'ellipsis !important',\r\n width: 208,\r\n overflow: 'hidden !important',\r\n whiteSpace: 'nowrap !important',\r\n },\r\n});\r\n\r\nexport const getAdsContainerStyles = () => ({\r\n menuButton: {\r\n height: 'fit-content',\r\n '& svg': {\r\n marginRight: 4,\r\n color: '#0078D4',\r\n },\r\n },\r\n menuContainer: {\r\n '& svg': {\r\n marginRight: 4,\r\n },\r\n '& .fui-MenuItem__content': {\r\n display: 'flex',\r\n minWidth: 157,\r\n padding: 5,\r\n },\r\n },\r\n toolbar: {\r\n margin: '17px 0',\r\n },\r\n radioGroup: {\r\n flexDirection: 'row !important',\r\n },\r\n radioOption: {\r\n padding: '6px 14px',\r\n borderRadius: 8,\r\n margin: '0 4px',\r\n border: '1px solid #E1DFDD',\r\n\r\n '& .fui-Radio__indicator': {\r\n display: 'none',\r\n },\r\n\r\n '& .fui-Label ': {\r\n padding: 0,\r\n },\r\n\r\n '&.selected': {\r\n border: '1px solid #0078D4',\r\n },\r\n },\r\n emptyViewContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n\r\n '& .empty-view-title': {\r\n fontWeight: 500,\r\n fontSize: 20,\r\n lineHeight: '24px',\r\n color: '#212121',\r\n },\r\n\r\n '& .empty-view-desc': {\r\n marginTop: 16,\r\n maxWidth: 350,\r\n fontWeight: 400,\r\n fontSize: 16,\r\n lineHeight: '24px',\r\n color: '#6E6E6E',\r\n textAlign: 'center',\r\n },\r\n },\r\n});\r\n","import React, { useMemo, useCallback, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport {\r\n Text, Button,\r\n Card, CardPreview, CardHeader,\r\n Dialog, DialogTrigger, DialogSurface, DialogTitle, DialogBody, DialogActions, DialogContent,\r\n} from '@fluentui/react-components';\r\nimport { EditRegular, DeleteRegular, } from '@fluentui/react-icons';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { useSelectedAdFormatState } from '../../../common/use-selected-ad-format';\r\nimport { STEP_PATHS } from '../../../step-constants';\r\nimport { DisplayAdPreview } from './components/display-ad-preview';\r\nimport { NativeAdPreview } from './components/native-ad-preview';\r\nimport { VideoAdPreview } from './components/video-ad-preview';\r\nimport { getConfigByType, getDescriptionByType } from './utils';\r\nimport { getAdThumbnailStyles } from './styles';\r\n\r\nexport const AdThumbnail = ({\r\n item,\r\n onDeleteAdClicked,\r\n type,\r\n}) => {\r\n const classes = useDefaultStyles(getAdThumbnailStyles);\r\n const { send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n const [, setSelectedAdFormat] = useSelectedAdFormatState();\r\n const ad = useMemo(() => (_.isArray(item) ? item[0] : item), [item]);\r\n const adId = useMemo(() => ad && ad.Id, [ad]);\r\n\r\n const onEditAdClick = useCallback((editingAdId) => {\r\n setSelectedAdFormat(type);\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n editingAdId,\r\n });\r\n\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.MULTI_NATIVE_AD,\r\n });\r\n }, [send, setSelectedAdFormat, type]);\r\n\r\n const onDeleteAd = useCallback((deletingAdId) => {\r\n onDeleteAdClicked(deletingAdId);\r\n }, [onDeleteAdClicked]);\r\n\r\n return (\r\n <Dialog>\r\n <Card className={classNames(classes.root, 'ad-thumbnail', `ad-thumbnail-${type}`)}>\r\n <CardPreview className={classes.cardPreview}>\r\n {type === AdFormat.Native && <NativeAdPreview classes={classes} ad={ad} />}\r\n {type === AdFormat.Display && <DisplayAdPreview ad={ad.data} />}\r\n {type === AdFormat.Video && <VideoAdPreview ad={ad.data} />}\r\n </CardPreview>\r\n <CardHeader\r\n image={getConfigByType(type).icon}\r\n header={<Text weight=\"bold\">{i18n.getString(getConfigByType(type).label)}</Text>}\r\n description={\r\n <Text className={classes.previewDescription} title={getDescriptionByType(ad, type, i18n)}>\r\n {getDescriptionByType(ad, type, i18n)}\r\n </Text>\r\n }\r\n action={\r\n <>\r\n <Button onClick={() => onEditAdClick(adId)} icon={<EditRegular />} />\r\n <DialogTrigger disableButtonEnhancement>\r\n <Button icon={<DeleteRegular />} />\r\n </DialogTrigger>\r\n </>\r\n }\r\n />\r\n </Card>\r\n <DialogSurface>\r\n <DialogBody className=\"delete-dialog\">\r\n <DialogTitle>{i18n.getString(_TL_('Delete this Ad?'))}</DialogTitle>\r\n <DialogContent>\r\n {i18n.getString(_TL_('This ad will be removed from this campaign. There is no way to undo this action.'))}\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" className=\"delete-button\" onClick={() => onDeleteAd(adId)}>{i18n.getString(_TL_('Delete Ad'))}</Button>\r\n <DialogTrigger disableButtonEnhancement>\r\n <Button appearance=\"secondary\" className=\"cancel-button\">{i18n.getString(_TL_('Cancel'))}</Button>\r\n </DialogTrigger>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n );\r\n};\r\n\r\nAdThumbnail.propTypes = {\r\n item: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.arrayOf({})]).isRequired,\r\n onDeleteAdClicked: PropTypes.func.isRequired,\r\n type: PropTypes.string.isRequired,\r\n};\r\n","import React, { useContext, useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { MenuButton, Menu, MenuTrigger, MenuPopover, MenuList, MenuItem, RadioGroup, Radio } from '@fluentui/react-components';\r\nimport { Stack } from '@fluentui/react';\r\nimport { AddRegular, ContentViewRegular, ImageRegular, VideoRegular } from '@fluentui/react-icons';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { deleteAd } from '../model';\r\nimport { StepHeader } from '../../../shared/step-header';\r\nimport { useSelectedAdFormatState } from '../../../common/use-selected-ad-format';\r\nimport { AdThumbnail } from './ad-thumbnail';\r\nimport { STEP_PATHS, FLOWS, isAudienceAdGroupMultiAdCreation } from '../../../step-constants';\r\nimport { getAdsContainerStyles } from './styles';\r\nimport DesertSvg from '../../../media/desert.svg';\r\n\r\nconst iconSize = 20;\r\n\r\nconst FilterFormat = {\r\n all: {\r\n value: 'all',\r\n label: _TL_('All'),\r\n },\r\n native: {\r\n value: 'native',\r\n label: _TL_('Native ads'),\r\n },\r\n display: {\r\n value: 'display',\r\n label: _TL_('Display ads'),\r\n },\r\n video: {\r\n value: 'video',\r\n label: _TL_('Video ads'),\r\n },\r\n};\r\n\r\nexport const MultiAdFormatAdsContainer = ({\r\n data,\r\n onDataChange,\r\n}) => {\r\n const classes = useDefaultStyles(getAdsContainerStyles);\r\n const i18n = useContext(I18nContext);\r\n const { state, send } = useWizardService();\r\n const [, setSelectedAdFormat] = useSelectedAdFormatState();\r\n const [filterFormat, setFilterFormat] = useState(FilterFormat.all.value);\r\n\r\n const { ads } = (data && data.ads) || {};\r\n\r\n const {\r\n flow, campaign, adGroup, ads: adsData,\r\n } = state.context.wizardData;\r\n\r\n const adIds = useMemo(() => {\r\n switch (filterFormat) {\r\n case FilterFormat.native.value:\r\n return _.filter(_.keys(ads), adId => ads[adId].adSubType === AdFormat.Native);\r\n case FilterFormat.display.value:\r\n return _.filter(_.keys(ads), adId => ads[adId].adSubType === AdFormat.Display);\r\n case FilterFormat.video.value:\r\n return _.filter(_.keys(ads), adId => ads[adId].adSubType === AdFormat.Video);\r\n default:\r\n return _.keys(ads);\r\n }\r\n }, [ads, filterFormat]);\r\n\r\n const onClickCreateNewAd = useCallback((type) => {\r\n setSelectedAdFormat(type);\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n editingAdId: null,\r\n });\r\n\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.MULTI_NATIVE_AD,\r\n });\r\n }, [send, setSelectedAdFormat]);\r\n\r\n const updateData = useCallback((adsToUpdate) => {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n ads: {\r\n ...adsData,\r\n ads: {\r\n ...adsToUpdate,\r\n },\r\n },\r\n },\r\n });\r\n }, [adsData, data, onDataChange]);\r\n\r\n const onDeleteAdClicked = useCallback((adId) => {\r\n deleteAd({\r\n ad: [ads[adId].data],\r\n campaign,\r\n adGroup,\r\n }).then(() => {\r\n const adsWithoutDeletedAd = _.omit(ads, adId);\r\n\r\n if (_.isEmpty(adsWithoutDeletedAd)) {\r\n updateData(adsWithoutDeletedAd);\r\n\r\n const updatedFlow = isAudienceAdGroupMultiAdCreation(flow) ? FLOWS.AUDIENCE_AD_GROUP_CREATION : FLOWS.AUDIENCE_CAMPAIGNS;\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n ads: {\r\n ...adsWithoutDeletedAd,\r\n },\r\n editingAdId: null,\r\n flow: updatedFlow,\r\n });\r\n\r\n send(WIZARD_EVENTS.SAVE_AND_GOTO, {\r\n stepId: STEP_PATHS.NATIVE_AD,\r\n flowFactors: { flow: updatedFlow },\r\n });\r\n } else {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n ads: {\r\n ...adsData,\r\n ads: {\r\n ...adsWithoutDeletedAd,\r\n },\r\n },\r\n });\r\n updateData(adsWithoutDeletedAd);\r\n }\r\n });\r\n }, [adGroup, ads, adsData, campaign, flow, send, updateData]);\r\n\r\n return (\r\n <div className=\"multi-ad-format-ads-container\">\r\n <Stack tokens={{ childrenGap: 8 }}>\r\n <StepHeader\r\n title={_TL_('Ads')}\r\n description={_TL_('Create up to 15 ads for this campaign.')}\r\n />\r\n </Stack>\r\n <Stack className={classes.toolbar} horizontal verticalAlign=\"center\" tokens={{ childrenGap: 10 }} wrap>\r\n <Menu>\r\n <MenuTrigger disableButtonEnhancement>\r\n <MenuButton className={classes.menuButton}>\r\n <AddRegular fontSize={iconSize} />\r\n {i18n.getString(_TL_('Create another ad'))}\r\n </MenuButton>\r\n </MenuTrigger>\r\n\r\n <MenuPopover className={classes.menuContainer}>\r\n <MenuList>\r\n <MenuItem onClick={() => onClickCreateNewAd(AdFormat.Native)}>\r\n <ContentViewRegular fontSize={iconSize} />\r\n {i18n.getString(_TL_('Native ad'))}\r\n </MenuItem>\r\n <MenuItem onClick={() => onClickCreateNewAd(AdFormat.Display)}>\r\n <ImageRegular fontSize={iconSize} />\r\n {i18n.getString(_TL_('Display ad'))}\r\n </MenuItem>\r\n <MenuItem onClick={() => onClickCreateNewAd(AdFormat.Video)}>\r\n <VideoRegular fontSize={iconSize} />\r\n {i18n.getString(_TL_('Video ad'))}\r\n </MenuItem>\r\n </MenuList>\r\n </MenuPopover>\r\n </Menu>\r\n\r\n <RadioGroup\r\n className={classes.radioGroup}\r\n onChange={(ev, change) => setFilterFormat(change.value)}\r\n value={filterFormat}\r\n >\r\n {_.keys(FilterFormat).map(key => (\r\n <Radio\r\n className={classNames(classes.radioOption, filterFormat === FilterFormat[key].value && 'selected')}\r\n key={key}\r\n value={FilterFormat[key].value}\r\n label={i18n.getString(FilterFormat[key].label)}\r\n />\r\n ))}\r\n </RadioGroup>\r\n </Stack>\r\n {\r\n data && !_.isEmpty(adIds) && (\r\n <Stack horizontal tokens={{ childrenGap: 15 }} wrap>\r\n {adIds.map(adId => (\r\n <AdThumbnail\r\n key={adId}\r\n item={ads[adId].data}\r\n onDeleteAdClicked={onDeleteAdClicked}\r\n type={ads[adId].adSubType}\r\n />\r\n ))}\r\n </Stack>\r\n )\r\n }\r\n {\r\n data && _.isEmpty(adIds) && (\r\n <Stack horizontal verticalAlign=\"center\" horizontalAlign=\"center\">\r\n <div className={classNames('empty-view-container', classes.emptyViewContainer)}>\r\n <img src={DesertSvg} alt=\"desert\" />\r\n <div className=\"empty-view-title\">{i18n.getString(_TL_('Nothing to see here'))}</div>\r\n <div className=\"empty-view-desc\">\r\n {i18n.getString(_TL_(\"You haven't created any {{adType}} yet. Once you create an ad, you'll see it here.\"), { adType: i18n.getString(FilterFormat[filterFormat].label) })}\r\n </div>\r\n </div>\r\n </Stack>\r\n )\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nMultiAdFormatAdsContainer.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport { Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getNeedConfirming } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\nimport { AdFormat } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { useVideoAdsRepository, VideoAds } from './video-ads';\r\nimport { useAdGroupRepository, AdGroupStepShell } from './adgroup';\r\nimport { useCampaignRepository, useCampaignEditRepository, CampaignStepShell } from './campaign';\r\nimport { useDisplayAdsRepository, DisplayAds } from './display-ads';\r\nimport { useNativeAdRepository, SingleNativeAdStepShell, NativeAdsContainer, MultiAdsStepShell, useMultipleNativeAdsRepository, useNativeAdsManagerRepository } from './native-ads';\r\nimport { useSummaryRepository, SummaryStepShell } from './summary';\r\nimport { SingleMultiAdFormatStepShell, MultiAdFormatStepShell, MultiAdFormatAdsContainer, useMultiAdFormatAdsManagerRepository, useMultiAdFormatRepository, useSingleMultiAdFormatRepository } from './multi-ad-format';\r\nimport { STEP_PATHS, WIZARD_TYPES } from '../step-constants';\r\n\r\nconst editWizardTypeList = [\r\n WIZARD_TYPES.AUDIENCE_CAMPAIGN_EDIT,\r\n WIZARD_TYPES.AUDIENCE_AD_GROUP_EDIT,\r\n WIZARD_TYPES.AUDIENCE_CAMPAIGN_CTV_EDIT,\r\n WIZARD_TYPES.AUDIENCE_AD_GROUP_CTV_EDIT,\r\n WIZARD_TYPES.AUDIENCE_CAMPAIGN_DEAL_EDIT,\r\n WIZARD_TYPES.AUDIENCE_AD_GROUP_DEAL_EDIT,\r\n];\r\n\r\nexport const getStepConfig = (permissions, wizardType, adsType = '', loadClipchampPlayer = null) => StepConfig.map((step) => {\r\n if (_.get(permissions, ['dynamic', 'ConversionAssociationWarning']) && editWizardTypeList.includes(wizardType) && step.id === STEP_PATHS.CAMPAIGN_EDIT) {\r\n const mapStep = {\r\n ...step,\r\n machineOptions: {\r\n guards: {\r\n needsConfirming: context => getNeedConfirming(permissions, context),\r\n },\r\n },\r\n\r\n };\r\n return mapStep;\r\n } else if (step.id === STEP_PATHS.VIDEO_AD) {\r\n const updatedVideoStep = {\r\n ...step,\r\n view: props => <Activity name=\"VideoAdsSettings\"> <VideoAds {...props} loadClipchampPlayer={loadClipchampPlayer} /> </Activity>,\r\n };\r\n return updatedVideoStep;\r\n } else if (step.id === STEP_PATHS.NATIVE_AD) {\r\n if (adsType === AdFormat.Display) {\r\n const updatedStep = {\r\n ...step,\r\n view: props => <DisplayAds {...props} />,\r\n repository: useDisplayAdsRepository,\r\n };\r\n return updatedStep;\r\n }\r\n\r\n return {\r\n ...step,\r\n };\r\n }\r\n return step;\r\n});\r\n\r\nexport const StepConfig = [{\r\n id: STEP_PATHS.VIDEO_AD,\r\n view: props => <Activity name=\"VideoAdsSettings\"> <VideoAds {...props} /> </Activity>,\r\n repository: useVideoAdsRepository,\r\n},\r\n{\r\n id: STEP_PATHS.DISPLAY_AD,\r\n view: props => <DisplayAds {...props} />,\r\n repository: useDisplayAdsRepository,\r\n},\r\n{\r\n id: STEP_PATHS.NATIVE_AD,\r\n view: props => <Activity name=\"NativeAdStepSettings\"> <SingleNativeAdStepShell {...props} /> </Activity>,\r\n repository: useNativeAdRepository,\r\n},\r\n{\r\n id: STEP_PATHS.MULTI_NATIVE_AD,\r\n view: props => <Activity name=\"MultiNativeAdStepSettings\"> <MultiAdsStepShell {...props} /> </Activity>,\r\n repository: useMultipleNativeAdsRepository,\r\n},\r\n{\r\n id: STEP_PATHS.MULTI_AD_MANAGER,\r\n view: props => <Activity name=\"MultiAdsManager\"> <NativeAdsContainer {...props} /> </Activity>,\r\n repository: useNativeAdsManagerRepository,\r\n},\r\n{\r\n id: STEP_PATHS.AD_GROUP,\r\n view: props => <Activity name=\"AdGroupStepSettings\"> <AdGroupStepShell {...props} /> </Activity>,\r\n repository: useAdGroupRepository,\r\n},\r\n{\r\n id: STEP_PATHS.CAMPAIGN_CREATION,\r\n view: props => <Activity name=\"BudgetAndBidSettings\"> <CampaignStepShell {...props} /> </Activity>,\r\n repository: useCampaignRepository,\r\n},\r\n{\r\n id: STEP_PATHS.CAMPAIGN_EDIT,\r\n view: props => <Activity name=\"CampaignEdit\"> <CampaignStepShell {...props} /> </Activity>,\r\n repository: useCampaignEditRepository,\r\n},\r\n{\r\n id: STEP_PATHS.SUMMARY,\r\n view: props => <Activity name=\"SummaryStepSettings\"> <SummaryStepShell {...props} /> </Activity>,\r\n repository: useSummaryRepository,\r\n}];\r\n\r\nexport const getStepConfigMultiAdFormat = (permissions, wizardType, adsType = '', loadClipchampPlayer = null) => StepConfigMultiAdFormat.map((step) => {\r\n if (_.get(permissions, ['dynamic', 'ConversionAssociationWarning']) && editWizardTypeList.includes(wizardType) && step.id === STEP_PATHS.CAMPAIGN_EDIT\r\n ) {\r\n const mapStep = {\r\n ...step,\r\n machineOptions: {\r\n guards: {\r\n needsConfirming: context => getNeedConfirming(permissions, context),\r\n },\r\n },\r\n\r\n };\r\n return mapStep;\r\n } else if (step.id === STEP_PATHS.NATIVE_AD) {\r\n if (adsType === AdFormat.Display) {\r\n const updatedStep = {\r\n ...step,\r\n view: props => <Activity name=\"NativeAdStepSettings\"> <SingleMultiAdFormatStepShell {...props} adsType={adsType} /> </Activity>,\r\n };\r\n return updatedStep;\r\n }\r\n\r\n return {\r\n ...step,\r\n view: props => <Activity name=\"NativeAdStepSettings\"> <SingleMultiAdFormatStepShell {...props} loadClipchampPlayer={loadClipchampPlayer} /> </Activity>,\r\n };\r\n } else if (step.id === STEP_PATHS.VIDEO_AD) {\r\n const updatedVideoStep = {\r\n ...step,\r\n view: props => <Activity name=\"VideoAdsSettings\"> <VideoAds {...props} loadClipchampPlayer={loadClipchampPlayer} /> </Activity>,\r\n };\r\n return updatedVideoStep;\r\n }\r\n\r\n return step;\r\n});\r\n\r\nexport const StepConfigMultiAdFormat = [{\r\n id: STEP_PATHS.NATIVE_AD,\r\n view: props => <Activity name=\"NativeAdStepSettings\"> <SingleMultiAdFormatStepShell {...props} /> </Activity>,\r\n repository: useSingleMultiAdFormatRepository,\r\n},\r\n{\r\n id: STEP_PATHS.MULTI_NATIVE_AD,\r\n view: props => <Activity name=\"MultiNativeAdStepSettings\"> <MultiAdFormatStepShell {...props} /> </Activity>,\r\n repository: useMultiAdFormatRepository,\r\n},\r\n{\r\n id: STEP_PATHS.VIDEO_AD,\r\n view: props => <Activity name=\"VideoAdsSettings\"> <VideoAds {...props} /> </Activity>,\r\n repository: useVideoAdsRepository,\r\n},\r\n{\r\n id: STEP_PATHS.MULTI_AD_MANAGER,\r\n view: props => <Activity name=\"MultiAdsManager\"> <MultiAdFormatAdsContainer {...props} /> </Activity>,\r\n repository: useMultiAdFormatAdsManagerRepository,\r\n},\r\n{\r\n id: STEP_PATHS.AD_GROUP,\r\n view: props => <Activity name=\"AdGroupStepSettings\"> <AdGroupStepShell {...props} /> </Activity>,\r\n repository: useAdGroupRepository,\r\n},\r\n{\r\n id: STEP_PATHS.CAMPAIGN_CREATION,\r\n view: props => <Activity name=\"BudgetAndBidSettings\"> <CampaignStepShell {...props} /> </Activity>,\r\n repository: useCampaignRepository,\r\n},\r\n{\r\n id: STEP_PATHS.CAMPAIGN_EDIT,\r\n view: props => <Activity name=\"CampaignEdit\"> <CampaignStepShell {...props} /> </Activity>,\r\n repository: useCampaignEditRepository,\r\n},\r\n{\r\n id: STEP_PATHS.SUMMARY,\r\n view: props => <Activity name=\"SummaryStepSettings\"> <SummaryStepShell {...props} /> </Activity>,\r\n repository: useSummaryRepository,\r\n}];\r\n","import { useContext } from 'react';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\n\r\nexport const useNativeAdsManagerRepository = () => {\r\n const { state } = useWizardService();\r\n\r\n const load = () => new Promise((resolve) => {\r\n resolve(state.context.wizardData);\r\n });\r\n\r\n const save = useContext(() => Promise.resolve());\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useContext } from 'react';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\n\r\nexport const useMultiAdFormatAdsManagerRepository = () => {\r\n const { state } = useWizardService();\r\n\r\n const load = () => new Promise((resolve) => {\r\n resolve(state.context.wizardData);\r\n });\r\n\r\n const save = useContext(() => Promise.resolve());\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useMemo, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\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 DefaultTemplate,\r\n CancelWizardDialog,\r\n ConfirmWizardDialog,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { withLoggingContext } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { useConfirmDialogConfigWithLogger } from '@bingads-webui-campaign-react/campaign-settings-wizard-v1-utils';\r\n\r\nimport { getFlow } from '../step-utils';\r\nimport {\r\n getStepConfig,\r\n getStepConfigMultiAdFormat,\r\n} from '../steps';\r\nimport { FLOWS_TO_FIRST_STEP } from '../step-constants';\r\n\r\nconst DisplayPlusWizardInternal = ({\r\n wizardType, flowType, routeToNavigateToWhenDone, initialWizardData, scope, perfMarker, permissions, children, adsType, loadClipchampPlayer,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n const isEnableMultiAdFormat = permissions && permissions.dynamic && permissions.dynamic.MultiAdFormat && !permissions.IsAmplifyEnabled;\r\n const isConversionAssociationWarningEnabled = permissions && permissions.dynamic && permissions.dynamic.ConversionAssociationWarning;\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild(`DisplayPlusWizard-${wizardType}`)\r\n ), [perfMarker, wizardType]);\r\n\r\n const initialStep = FLOWS_TO_FIRST_STEP[flowType];\r\n\r\n const steps = useMemo(() => (isEnableMultiAdFormat ? getStepConfigMultiAdFormat(permissions, wizardType, adsType, loadClipchampPlayer) : getStepConfig(permissions, wizardType, adsType, loadClipchampPlayer)), [isEnableMultiAdFormat, permissions, wizardType, adsType, loadClipchampPlayer]);\r\n\r\n const config = useMemo(() => ({\r\n id: 'display-plus-wizard',\r\n initialStep,\r\n steps,\r\n initialFlowFactors: { flow: flowType },\r\n initialWizardData: {\r\n flow: flowType,\r\n ...initialWizardData,\r\n },\r\n getFlow: ({ flow }) => getFlow({ flow, permissions }),\r\n actions: {\r\n onDone: () => scope.save(routeToNavigateToWhenDone),\r\n onExited: () => scope.save(routeToNavigateToWhenDone),\r\n },\r\n loadClipchampPlayer,\r\n attachStepActivities: false,\r\n }), [flowType, initialStep, initialWizardData, permissions, routeToNavigateToWhenDone, scope, steps, adsType, loadClipchampPlayer]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ DisplayPlusCampaigns: flowType });\r\n }, [flowType]);\r\n\r\n return (\r\n <PerformanceMarkerProvider\r\n name=\"DisplayPlusXandrVideoAds\"\r\n instrumentation={instrumentation}\r\n immediateDone={false}\r\n >\r\n <Scenario name={`DisplayPlus-${flowType}`}>\r\n <Activity name=\"DefaultWizardActivity\">\r\n <MmpFetchProvider>\r\n <Wizard config={config}>\r\n <WizardPerfMarker wizardName=\"DisplayPlusWizard\" wizardMarker={wizardPerfMarker} >\r\n <LayoutContainer template={DefaultTemplate}>\r\n <Layout type=\"StepContainer\" component={StepContainer} />\r\n <Layout type=\"Blocker\" component={BusyBlocker} loadingText=\"Processing\" />\r\n <Layout type=\"CancelDialog\" component={CancelWizardDialog} />\r\n {isConversionAssociationWarningEnabled && <Layout type=\"ConfirmDialog\" component={ConfirmWizardDialog} config={useConfirmDialogConfigWithLogger} />}\r\n {children}\r\n </LayoutContainer>\r\n </WizardPerfMarker>\r\n </Wizard>\r\n </MmpFetchProvider>\r\n </Activity>\r\n </Scenario>\r\n </PerformanceMarkerProvider>\r\n );\r\n};\r\n\r\nDisplayPlusWizardInternal.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n wizardType: PropTypes.string.isRequired,\r\n flowType: PropTypes.string.isRequired,\r\n routeToNavigateToWhenDone: PropTypes.func.isRequired,\r\n initialWizardData: PropTypes.shape({}),\r\n permissions: PropTypes.shape({}).isRequired,\r\n children: PropTypes.node,\r\n adsType: PropTypes.string,\r\n};\r\n\r\nDisplayPlusWizardInternal.defaultProps = {\r\n initialWizardData: {},\r\n children: null,\r\n adsType: '',\r\n};\r\n\r\nexport const DisplayPlusWizard = withPermissions(withScope(withLoggingContext(withRecommendationContext(DisplayPlusWizardInternal))));\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 { useIsInternalUser } from '@bingads-webui-campaign-react/basic-context-utils';\r\nimport { Stack, PrimaryButton, DefaultButton } from '@fluentui/react';\r\nimport {\r\n useWizardService,\r\n getIsFirstStep,\r\n getIsLastStep,\r\n getCurrentStepId,\r\n matchStepState,\r\n STEP_STATES,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n Text,\r\n makeStyles,\r\n shorthands,\r\n tokens\r\n} from '@fluentui/react-components';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { MessageBar, MessageBarTitle, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { STEP_PATHS, FLOWS } from '../step-constants';\r\nimport { useSkipAdCreationState } from '../common/use-skip-ad-creation';\r\n\r\nconst useStyles = makeStyles({\r\n warning: {\r\n ...shorthands.margin(tokens.spacingVerticalL, tokens.spacingVerticalNone),\r\n },\r\n});\r\n\r\n\r\nconst SaveAndPublish = () => {\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, { isPublishing: true });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => {\r\n const currentStep = getCurrentStepId(state);\r\n\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n return i18n.getString(_TL_('Go live'));\r\n }\r\n\r\n return i18n.getString(_TL_('Save & go live'));\r\n }, [i18n, state]);\r\n\r\n return (\r\n <PrimaryButton\r\n disabled={isBlocking}\r\n onClick={onNextClicked}\r\n className=\"step-save-and-publish-button\"\r\n >\r\n {buttonText}\r\n </PrimaryButton>\r\n );\r\n};\r\n\r\nconst SaveAsDraft = () => {\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('onSaveAsDraftClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isPublishing: false });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => {\r\n const currentStep = getCurrentStepId(state);\r\n\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n return i18n.getString(_TL_('Don\\'t go live'));\r\n }\r\n\r\n return i18n.getString(_TL_('Save & don\\'t go live'));\r\n }, [i18n, state]);\r\n\r\n return (\r\n <DefaultButton\r\n disabled={isBlocking}\r\n onClick={onNextClicked}\r\n className=\"step-save-draft-button\"\r\n >\r\n {buttonText}\r\n </DefaultButton>\r\n );\r\n};\r\n\r\nexport const SaveAndExitButton = () => {\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('onSaveAndExitButtonClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isAdGroupPublishing: true });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n return (\r\n <DefaultButton\r\n disabled={isBlocking}\r\n onClick={onNextClicked}\r\n className=\"step-save-and-exit-button\"\r\n >\r\n {i18n.getString(_TL_('Save and exit'))}\r\n </DefaultButton>\r\n );\r\n};\r\n\r\nexport const SkipAdCreationButton = () => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const { state, send } = useWizardService();\r\n const [, setSkipAdCreation] = useSkipAdCreationState();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING)\r\n || matchStepState(state, STEP_STATES.LOADING)\r\n || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSkipAdCreationButtonClicked');\r\n }\r\n send(WIZARD_EVENTS.SAVE_EMPTY_AND_NEXT);\r\n setSkipAdCreation(true);\r\n }, [activity, send, setSkipAdCreation]);\r\n\r\n return (\r\n <DefaultButton\r\n disabled={isBlocking}\r\n onClick={onNextClicked}\r\n className=\"step-skip-ad-creation-button\"\r\n >\r\n {i18n.getString(_TL_('Proceed without ad'))}\r\n </DefaultButton>\r\n );\r\n};\r\n\r\nexport const NextButton = ({ buttonText, disabled }) => {\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 const currentStepId = getCurrentStepId(state);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (currentStepId === STEP_PATHS.MULTI_AD_MANAGER) {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, { stepId: STEP_PATHS.AD_GROUP });\r\n } else {\r\n send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n }\r\n }, [currentStepId, send]);\r\n\r\n return (\r\n <PrimaryButton\r\n disabled={disabled || isBlocking}\r\n onClick={onNextClicked}\r\n className=\"step-next-button\"\r\n >\r\n {buttonText ? i18n.getString(buttonText) : i18n.getString(_TL_('Next'))}\r\n </PrimaryButton>\r\n );\r\n};\r\n\r\nexport const BackButton = ({ buttonText }) => {\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 const currentStepId = getCurrentStepId(state);\r\n\r\n const onBackClicked = useCallback(() => {\r\n if (currentStepId === STEP_PATHS.AD_GROUP && state.context.wizardData.flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS) {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, { stepId: STEP_PATHS.MULTI_AD_MANAGER });\r\n } else {\r\n send(WIZARD_EVENTS.BACK);\r\n }\r\n }, [currentStepId, send, state.context.wizardData.flow]);\r\n\r\n return (\r\n <DefaultButton\r\n disabled={isBlocking}\r\n onClick={onBackClicked}\r\n className=\"step-back-button\"\r\n >\r\n {buttonText ? i18n.getString(buttonText) : i18n.getString(_TL_('Back'))}\r\n </DefaultButton>\r\n );\r\n};\r\nBackButton.propTypes = {\r\n buttonText: PropTypes.string,\r\n};\r\nBackButton.defaultProps = {\r\n buttonText: undefined,\r\n};\r\n\r\n\r\nNextButton.propTypes = {\r\n buttonText: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n};\r\nNextButton.defaultProps = {\r\n buttonText: undefined,\r\n disabled: false,\r\n};\r\n\r\nexport const DisplayPlusStepFooter = ({\r\n nextButtonText,\r\n nextDisabled,\r\n backButtonText,\r\n cancelButtonText,\r\n hideBackButton,\r\n}) => {\r\n const { state } = useWizardService();\r\n const { dynamic: { AWFWebExclusionsWarning: showAWFWarning } } = useContext(PermissionsContext);\r\n const i18n = useContext(I18nContext);\r\n const styles = useStyles();\r\n const isFirstStep = getIsFirstStep(state);\r\n const isLastStep = getIsLastStep(state);\r\n\r\n const currentStep = getCurrentStepId(state);\r\n\r\n const isInternalUser = useIsInternalUser();\r\n const wasAdAlreadyCreated = state.context.wizardData.ads;\r\n\r\n return (\r\n <>\r\n {showAWFWarning && isLastStep && (\r\n <Stack>\r\n <div className={styles.warning}>\r\n <MessageBar layout=\"multiline\">\r\n <MessageBarBody>\r\n <MessageBarTitle>{i18n.getString(_TL_('Note'))}</MessageBarTitle>\r\n <Text size={200}>{i18n.getString(_TL_('Please note that Audience campaigns will always serve on Microsoft sites (e.g., Microsoft Bing, Microsoft Casual Games, MSN, and Outlook.com) even if you’ve added website exclusions for them.'))}</Text>\r\n </MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n </Stack>\r\n )}\r\n <Stack horizontal tokens={{ childrenGap: 16 }}>\r\n {(isFirstStep && isInternalUser && !wasAdAlreadyCreated) && <SkipAdCreationButton />}\r\n {(!isFirstStep && !hideBackButton) && <BackButton buttonText={backButtonText} />}\r\n {(!isLastStep ? <NextButton buttonText={nextButtonText} disabled={nextDisabled} /> : <SaveAndPublish />)}\r\n {isLastStep && <SaveAsDraft />}\r\n {currentStep === STEP_PATHS.AD_GROUP && <SaveAndExitButton />}\r\n {isFirstStep && <CancelButton buttonText={cancelButtonText} />}\r\n </Stack>\r\n </>\r\n );\r\n};\r\nDisplayPlusStepFooter.propTypes = {\r\n nextButtonText: PropTypes.string,\r\n nextDisabled: PropTypes.bool,\r\n backButtonText: PropTypes.string,\r\n cancelButtonText: PropTypes.string,\r\n hideBackButton: PropTypes.bool,\r\n};\r\nDisplayPlusStepFooter.defaultProps = {\r\n nextButtonText: undefined,\r\n nextDisabled: false,\r\n backButtonText: undefined,\r\n cancelButtonText: undefined,\r\n hideBackButton: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@fluentui/react';\r\nimport {\r\n SaveAndExitButton,\r\n CancelButton,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { MessageBar, MessageBarTitle, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport {\r\n Text,\r\n makeStyles,\r\n shorthands,\r\n tokens\r\n} from '@fluentui/react-components';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n warning: {\r\n ...shorthands.margin(tokens.spacingVerticalL, tokens.spacingVerticalNone),\r\n },\r\n});\r\n\r\nexport const EditFooter = ({\r\n saveAndExitButtonText,\r\n cancelButtonText,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const styles = useStyles();\r\n const { dynamic: { AWFWebExclusionsWarning: showAWFWarning } } = useContext(PermissionsContext);\r\n\r\n return (\r\n <>\r\n {showAWFWarning && (\r\n <Stack>\r\n <div className={styles.warning}>\r\n <MessageBar layout=\"multiline\">\r\n <MessageBarBody>\r\n <MessageBarTitle>{i18n.getString(_TL_('Note'))}</MessageBarTitle>\r\n <Text size={200}>{i18n.getString(_TL_('Please note that Audience campaigns will always serve on Microsoft sites (e.g., Microsoft Bing, Microsoft Casual Games, MSN, and Outlook.com) even if you’ve added website exclusions for them.'))}</Text>\r\n </MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n </Stack>\r\n )}\r\n <Stack horizontal tokens={{ childrenGap: 16 }}>\r\n <SaveAndExitButton buttonText={saveAndExitButtonText} />\r\n <CancelButton buttonText={cancelButtonText} />\r\n </Stack>\r\n </>\r\n );\r\n};\r\n\r\nEditFooter.propTypes = {\r\n saveAndExitButtonText: PropTypes.string,\r\n cancelButtonText: PropTypes.string,\r\n};\r\n\r\nEditFooter.defaultProps = {\r\n saveAndExitButtonText: undefined,\r\n cancelButtonText: undefined,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@fluentui/react';\r\nimport {\r\n useWizardService,\r\n getIsFirstStep,\r\n getIsLastStep,\r\n getCurrentStepId,\r\n} from '@bingads-webui-react/wizard';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { BackButton, NextButton, SaveAndExitButton } from './footer';\r\nimport { STEP_PATHS } from '../step-constants';\r\n\r\nexport const AdGroupCreationFooter = ({\r\n nextButtonText,\r\n backButtonText,\r\n cancelButtonText,\r\n}) => {\r\n const { state } = useWizardService();\r\n const isFirstStep = getIsFirstStep(state);\r\n const isLastStep = getIsLastStep(state);\r\n\r\n const currentStep = getCurrentStepId(state);\r\n\r\n return (\r\n <Stack horizontal tokens={{ childrenGap: 16 }}>\r\n {isFirstStep && <NextButton buttonText={nextButtonText} />}\r\n {isFirstStep && <SaveAndExitButton />}\r\n {isFirstStep && <CancelButton buttonText={cancelButtonText} />}\r\n {!isFirstStep && <BackButton buttonText={backButtonText} />}\r\n {!isFirstStep && !isLastStep && <SaveAndExitButton buttonText={nextButtonText} />}\r\n {(isLastStep || currentStep === STEP_PATHS.MULTI_AD_MANAGER) && <SaveAndExitButton />}\r\n </Stack>\r\n );\r\n};\r\nAdGroupCreationFooter.propTypes = {\r\n nextButtonText: PropTypes.string,\r\n backButtonText: PropTypes.string,\r\n cancelButtonText: PropTypes.string,\r\n};\r\n\r\nAdGroupCreationFooter.defaultProps = {\r\n nextButtonText: undefined,\r\n backButtonText: undefined,\r\n cancelButtonText: undefined,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { ResponsiveStepList } from '@bingads-webui-react/step-progress-indicator';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\nimport {\r\n useWizardService,\r\n getCurrentStepId,\r\n getCurrentFlow,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\n\r\nimport { getStepListConfig } from './steps';\r\n\r\nexport const StepList = () => {\r\n const { state, send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n\r\n const currentStepId = getCurrentStepId(state);\r\n const currentFlow = getCurrentFlow(state);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n const { flow } = state.context.wizardData;\r\n\r\n const stepListConfig = useMemo(() => getStepListConfig({ i18n, flow, currentStepId }), [currentStepId, flow, i18n]);\r\n\r\n const getDefaultOnItemClickFn = useCallback((step) => {\r\n let toStep;\r\n if (currentFlow.includes(step.id)) {\r\n toStep = step;\r\n } else if (!_.isEmpty(step.steps)) {\r\n const firstSubStep = _.find(step.steps, s => currentFlow.includes(s.id));\r\n if (firstSubStep) {\r\n toStep = firstSubStep;\r\n }\r\n }\r\n if (toStep && toStep.isBehind) {\r\n return () => {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: toStep.id,\r\n });\r\n };\r\n }\r\n return undefined;\r\n }, [currentFlow, send]);\r\n\r\n return (\r\n <ResponsiveStepList\r\n config={stepListConfig}\r\n currentStepId={currentStepId}\r\n currentFlow={currentFlow}\r\n getOnItemClickFn={getDefaultOnItemClickFn}\r\n displayMode={displayMode}\r\n />\r\n );\r\n};\r\n\r\n","import { STEP_PATHS, FLOWS } from '../step-constants';\r\n\r\nexport const getStepListConfig = ({ i18n, flow, currentStepId }) => {\r\n if (flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS && currentStepId === STEP_PATHS.MULTI_AD_MANAGER) {\r\n return ([{\r\n id: STEP_PATHS.MULTI_AD_MANAGER,\r\n title: i18n.getString(_TL_('Ads')),\r\n },\r\n {\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n }, {\r\n id: STEP_PATHS.CAMPAIGN_CREATION,\r\n title: i18n.getString(_TL_('Budget & bid strategy')),\r\n }, {\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n }]);\r\n }\r\n\r\n if (flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS && currentStepId === STEP_PATHS.MULTI_NATIVE_AD) {\r\n return ([{\r\n id: STEP_PATHS.MULTI_NATIVE_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n },\r\n {\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n }, {\r\n id: STEP_PATHS.CAMPAIGN_CREATION,\r\n title: i18n.getString(_TL_('Budget & bid strategy')),\r\n }, {\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n }]);\r\n } else if (flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS) {\r\n return ([{\r\n id: STEP_PATHS.MULTI_NATIVE_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n },\r\n {\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n }, {\r\n id: STEP_PATHS.CAMPAIGN_CREATION,\r\n title: i18n.getString(_TL_('Budget & bid strategy')),\r\n }, {\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n }]);\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_CREATION) {\r\n return ([{\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n },\r\n {\r\n id: STEP_PATHS.NATIVE_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n }]);\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_CTV_CREATION || flow === FLOWS.AUDIENCE_AD_GROUP_DEAL_CREATION) {\r\n return ([{\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n },\r\n {\r\n id: STEP_PATHS.VIDEO_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n }]);\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_MULTI_AD_CREATION && currentStepId === STEP_PATHS.MULTI_AD_MANAGER) {\r\n return ([{\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n },\r\n {\r\n id: STEP_PATHS.MULTI_AD_MANAGER,\r\n title: i18n.getString(_TL_('Ads')),\r\n }]);\r\n }\r\n\r\n if (flow === FLOWS.AUDIENCE_AD_GROUP_MULTI_AD_CREATION && currentStepId === STEP_PATHS.MULTI_NATIVE_AD) {\r\n return ([{\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n },\r\n {\r\n id: STEP_PATHS.MULTI_NATIVE_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n }]);\r\n }\r\n\r\n return ([{\r\n id: STEP_PATHS.VIDEO_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n },\r\n {\r\n id: STEP_PATHS.DISPLAY_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n },\r\n {\r\n id: STEP_PATHS.NATIVE_AD,\r\n title: i18n.getString(_TL_('Ads')),\r\n },\r\n {\r\n id: STEP_PATHS.AD_GROUP,\r\n title: i18n.getString(_TL_('Targets & ad group')),\r\n }, {\r\n id: STEP_PATHS.CAMPAIGN_CREATION,\r\n title: i18n.getString(_TL_('Budget & bid strategy')),\r\n }, {\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n }]\r\n );\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { AdTypes } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\nimport { Layout } from '@bingads-webui-react/wizard';\r\nimport { isDealCampaign, isCTVCampaign, getVideoDeal } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { ErrorBar } from '@bingads-webui-fluent-component/wizard-ui-library';\r\n\r\nimport { AD_TYPES_TO_FLOWS } from '../step-constants';\r\nimport { DisplayPlusWizard } from './wizard';\r\nimport { DisplayPlusStepFooter } from '../footers';\r\nimport { StepList } from '../step-list';\r\n\r\nconst getDisplayPlusCampaignType = () => {\r\n let displayPlusCampaignType = appConfig.get('DisplayPlusCampaignType');\r\n if (!displayPlusCampaignType) {\r\n if (localStorage && localStorage.supportsStorage()) {\r\n displayPlusCampaignType = localStorage.get('DisplayPlusCampaignType');\r\n displayPlusCampaignType = displayPlusCampaignType && displayPlusCampaignType.type;\r\n appConfig.set('DisplayPlusCampaignType', displayPlusCampaignType);\r\n }\r\n\r\n if (!displayPlusCampaignType) {\r\n if (isDealCampaign()) {\r\n displayPlusCampaignType = AdTypes.Netflix;\r\n } else if (isCTVCampaign()) {\r\n displayPlusCampaignType = AdTypes.AudienceVideo;\r\n }\r\n }\r\n }\r\n\r\n return displayPlusCampaignType;\r\n};\r\n\r\nconst DisplayPlusCampaignWizardInternal = ({\r\n siteMap, perfMarker, scope, adsType, loadClipchampPlayer,\r\n}) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(siteMap, 'campaigns');\r\n\r\n const wizardType = getDisplayPlusCampaignType() || AdTypes.Native;\r\n const videoDeal = getVideoDeal();\r\n\r\n const flowType = AD_TYPES_TO_FLOWS[wizardType];\r\n\r\n useEffect(() => {\r\n if (isDealCampaign()) {\r\n if (!videoDeal) {\r\n // return to objective page if user navigates to this page directly\r\n scope.save('/campaign/vnext/createcampaign/objective');\r\n }\r\n }\r\n }, [scope, videoDeal]);\r\n\r\n const lifetimeBudgetFlowData = {\r\n isBudgetTypeEditable: true,\r\n isDateManagementEditable: true,\r\n };\r\n\r\n return (\r\n <DisplayPlusWizard\r\n adsType={adsType}\r\n wizardType={wizardType}\r\n flowType={flowType}\r\n routeToNavigateToWhenDone={routeToNavigateToWhenDone}\r\n perfMarker={perfMarker}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n initialWizardData={{\r\n videoDeal,\r\n lifetimeBudgetFlowData,\r\n }}\r\n >\r\n <Layout type=\"StepList\" component={StepList} />\r\n <Layout type=\"ErrorBar\" component={ErrorBar} />\r\n <Layout\r\n type=\"Footer\"\r\n component={DisplayPlusStepFooter}\r\n nextButtonText={_TL_('Save & go to next step')}\r\n />\r\n </DisplayPlusWizard>\r\n );\r\n};\r\n\r\nDisplayPlusCampaignWizardInternal.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n adsType: PropTypes.string,\r\n};\r\n\r\nexport const DisplayPlusCampaignWizard = withSiteMap(withScope(DisplayPlusCampaignWizardInternal));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Layout } from '@bingads-webui-react/wizard';\r\nimport { ErrorBar } from '@bingads-webui-fluent-component/wizard-ui-library';\r\n\r\nimport { DisplayPlusWizard } from './wizard';\r\nimport { EditFooter } from '../footers';\r\n\r\nexport const DisplayPlusEditWizard = ({\r\n wizardType, flowType, routeToNavigateToWhenDone, initialWizardData, perfMarker,\r\n}) => (\r\n <DisplayPlusWizard\r\n wizardType={wizardType}\r\n flowType={flowType}\r\n routeToNavigateToWhenDone={routeToNavigateToWhenDone}\r\n initialWizardData={initialWizardData}\r\n perfMarker={perfMarker}\r\n >\r\n <Layout type=\"ErrorBar\" component={ErrorBar} />\r\n <Layout\r\n type=\"Footer\"\r\n component={EditFooter}\r\n saveAndExitButtonText={_TL_('Save')}\r\n cancelButtonText={_TL_('Cancel')}\r\n />\r\n </DisplayPlusWizard>\r\n);\r\n\r\nDisplayPlusEditWizard.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n wizardType: PropTypes.string.isRequired,\r\n flowType: PropTypes.string.isRequired,\r\n routeToNavigateToWhenDone: PropTypes.func.isRequired,\r\n initialWizardData: PropTypes.shape({}).isRequired,\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useDisplayPlusEditWizardStyles = makeStyles({\r\n wizardWrapper: {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { isAudienceNativeAdsCampaign, isAudienceCTVCampaign, isAudienceDealCampaign } from '@bingads-webui-campaign-react/constants';\r\n\r\nimport { WIZARD_TYPE_TO_FLOW, WIZARD_TYPES } from '../step-constants';\r\nimport { DisplayPlusEditWizard } from './display-plus-edit-wizard';\r\nimport { useDisplayPlusEditWizardStyles } from './wizard-styles';\r\n\r\nconst getWizardType = (currentCampaign) => {\r\n if (isAudienceNativeAdsCampaign(currentCampaign.CampaignSubType)) {\r\n return WIZARD_TYPES.AUDIENCE_CAMPAIGN_EDIT;\r\n }\r\n\r\n if (isAudienceCTVCampaign(currentCampaign)) {\r\n return WIZARD_TYPES.AUDIENCE_CAMPAIGN_CTV_EDIT;\r\n }\r\n\r\n if (isAudienceDealCampaign(currentCampaign)) {\r\n return WIZARD_TYPES.AUDIENCE_CAMPAIGN_DEAL_EDIT;\r\n }\r\n\r\n return WIZARD_TYPES.AUDIENCE_CAMPAIGN_EDIT;\r\n};\r\n\r\nconst DisplayPlusEditCampaignWizardInternal = ({ currentCampaign, siteMap, perfMarker }) => {\r\n const styles = useDisplayPlusEditWizardStyles();\r\n const routeToNavigateToWhenDone = getRoutePathById(siteMap, 'overview');\r\n\r\n const wizardType = getWizardType(currentCampaign);\r\n const flowType = WIZARD_TYPE_TO_FLOW[wizardType];\r\n\r\n return (\r\n <div className={mergeClasses('display-plus-edit-campaign-wizard', styles.wizardWrapper)}>\r\n <DisplayPlusEditWizard\r\n wizardType={wizardType}\r\n flowType={flowType}\r\n routeToNavigateToWhenDone={routeToNavigateToWhenDone}\r\n initialWizardData={{ campaign: currentCampaign }}\r\n perfMarker={perfMarker}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nDisplayPlusEditCampaignWizardInternal.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.number.isRequired,\r\n CampaignSubType: PropTypes.number.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const DisplayPlusEditCampaignWizard = withSiteMap(DisplayPlusEditCampaignWizardInternal);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { isAudienceNativeAdsCampaign, isAudienceCTVCampaign, isAudienceDealCampaign } from '@bingads-webui-campaign-react/constants';\r\n\r\nimport { WIZARD_TYPE_TO_FLOW, WIZARD_TYPES } from '../step-constants';\r\nimport { DisplayPlusEditWizard } from './display-plus-edit-wizard';\r\nimport { useDisplayPlusEditWizardStyles } from './wizard-styles';\r\n\r\nconst getWizardType = (currentCampaign) => {\r\n if (isAudienceNativeAdsCampaign(currentCampaign.CampaignSubType)) {\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_EDIT;\r\n }\r\n\r\n if (isAudienceCTVCampaign(currentCampaign)) {\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_CTV_EDIT;\r\n }\r\n\r\n if (isAudienceDealCampaign(currentCampaign)) {\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_DEAL_EDIT;\r\n }\r\n\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_EDIT;\r\n};\r\n\r\nconst DisplayPlusEditAdGroupWizardInternal = ({\r\n currentCampaign, currentAdGroup, siteMap, perfMarker,\r\n}) => {\r\n const styles = useDisplayPlusEditWizardStyles();\r\n const routeToNavigateToWhenDone = getRoutePathById(siteMap, 'adgroups');\r\n\r\n const wizardType = getWizardType(currentCampaign);\r\n const flowType = WIZARD_TYPE_TO_FLOW[wizardType];\r\n\r\n return (\r\n <div className={mergeClasses('display-plus-edit-adgroup-wizard', styles.wizardWrapper)}>\r\n <DisplayPlusEditWizard\r\n wizardType={wizardType}\r\n flowType={flowType}\r\n routeToNavigateToWhenDone={routeToNavigateToWhenDone}\r\n initialWizardData={{\r\n campaign: currentCampaign,\r\n adGroup: currentAdGroup,\r\n }}\r\n perfMarker={perfMarker}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nDisplayPlusEditAdGroupWizardInternal.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currentCampaign: PropTypes.shape({\r\n CampaignSubType: PropTypes.number.isRequired,\r\n }).isRequired,\r\n currentAdGroup: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const DisplayPlusEditAdGroupWizard = withSiteMap(DisplayPlusEditAdGroupWizardInternal);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { isAudienceNativeAdsCampaign, isAudienceCTVCampaign, isAudienceDealCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { Layout } from '@bingads-webui-react/wizard';\r\nimport { ErrorBar } from '@bingads-webui-fluent-component/wizard-ui-library';\r\n\r\nimport { WIZARD_TYPE_TO_FLOW, WIZARD_TYPES } from '../step-constants';\r\nimport { DisplayPlusWizard } from './wizard';\r\nimport { StepList } from '../step-list';\r\nimport { AdGroupCreationFooter } from '../footers';\r\n\r\nconst getWizardType = (currentCampaign) => {\r\n if (isAudienceNativeAdsCampaign(currentCampaign.CampaignSubType)) {\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_CREATION;\r\n }\r\n\r\n if (isAudienceCTVCampaign(currentCampaign)) {\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_CTV_CREATION;\r\n }\r\n\r\n if (isAudienceDealCampaign(currentCampaign)) {\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_DEAL_CREATION;\r\n }\r\n\r\n return WIZARD_TYPES.AUDIENCE_AD_GROUP_CREATION;\r\n};\r\n\r\nconst DisplayPlusCreateAdGroupWizardInternal = ({\r\n currentCampaign, currentAdGroup, siteMap, perfMarker,\r\n}) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(siteMap, 'adgroups');\r\n\r\n const wizardType = getWizardType(currentCampaign);\r\n const flowType = WIZARD_TYPE_TO_FLOW[wizardType];\r\n\r\n return (\r\n <DisplayPlusWizard\r\n wizardType={wizardType}\r\n flowType={flowType}\r\n routeToNavigateToWhenDone={routeToNavigateToWhenDone}\r\n initialWizardData={{\r\n campaign: currentCampaign,\r\n adGroup: currentAdGroup,\r\n }}\r\n perfMarker={perfMarker}\r\n >\r\n <Layout type=\"StepList\" component={StepList} />\r\n <Layout type=\"ErrorBar\" component={ErrorBar} />\r\n <Layout\r\n type=\"Footer\"\r\n component={AdGroupCreationFooter}\r\n nextButtonText={_TL_('Save & go to next step')}\r\n />\r\n </DisplayPlusWizard>\r\n );\r\n};\r\n\r\nDisplayPlusCreateAdGroupWizardInternal.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currentCampaign: PropTypes.shape({\r\n CampaignSubType: PropTypes.number.isRequired,\r\n }).isRequired,\r\n currentAdGroup: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const DisplayPlusCreateAdGroupWizard = withSiteMap(DisplayPlusCreateAdGroupWizardInternal);\r\n","import React, { useEffect, useMemo, useState, useContext } from 'react';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { noop, every, pluck } from 'underscore';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { CompanyNameTargetSetting } from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withBidAdjustment } from './with-bid-adjustment';\r\nimport { getCompanyTargetStyles } from './styles/company-target-styles';\r\n\r\nexport const formatCompany = ({ companyNameTargets, i18n }) => {\r\n if (!companyNameTargets || !companyNameTargets.length) {\r\n return i18n.getString(_TL_('Target Companies'));\r\n }\r\n\r\n if (companyNameTargets.length === 1) {\r\n return i18n.getString(_TL_('Targeted: 1 company'));\r\n }\r\n\r\n return i18n.getString(_TL_('Targeted: {{count}} companies'), { count: (companyNameTargets.length) });\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst UnstyledCompanyPicker = (props) => {\r\n const {\r\n classes,\r\n updateValidation,\r\n validationProps,\r\n onAudienceTargetInfoChange,\r\n shouldHide,\r\n showExclusion,\r\n } = props;\r\n\r\n const { data: { companyNameTargets, negativeCompanyNameTargets } } = validationProps;\r\n\r\n const [companyAssociationRef, setCompanyAssociationRef] = useState();\r\n\r\n const styles = useStyles();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const companyAssociationView = useMemo(() => {\r\n const companyView = new CompanyNameTargetSetting({\r\n criterionType: 'CompanyName',\r\n type: 'CompanyName',\r\n showBidOnlyNote: false,\r\n showExclusion,\r\n defaultBidAdjustment: 0,\r\n isForVNext: true,\r\n currentLevelTargetInfo,\r\n });\r\n\r\n companyView.render();\r\n\r\n return companyView;\r\n }, [currentLevelTargetInfo, showExclusion]);\r\n\r\n const onChange = () => {\r\n const updatedItems = companyAssociationView.currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const companyNameTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'CompanyName'))\r\n .map(({ Id, Criterion }) => {\r\n const { CompanyNameCriterion, BidAdjustment } = Criterion;\r\n\r\n return { ...CompanyNameCriterion, Id, BidAdjustment };\r\n });\r\n\r\n const negativeCompanyNameTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'NegativeCompanyName'))\r\n .map(({ Id, Criterion }) => {\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return { ...CompanyNameCriterion, Id };\r\n });\r\n\r\n updateValidation([], { companyNameTargets: companyNameTarget, negativeCompanyNameTargets: negativeCompanyNameTarget });\r\n\r\n if (activity) {\r\n activity.signal(`onCompanyTargetChange - ${JSON.stringify({ companies: companyNameTarget })}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n onAudienceTargetInfoChange(currentLevelTargetInfo);\r\n }, [currentLevelTargetInfo, onAudienceTargetInfoChange]);\r\n\r\n useEffect(() => {\r\n if (companyAssociationRef && companyAssociationRef.childElementCount === 0 && companyAssociationView) {\r\n companyAssociationRef.innerHTML = '';\r\n companyAssociationRef.append(companyAssociationView.el);\r\n }\r\n }, [companyAssociationRef, companyAssociationView]);\r\n\r\n useEffect(() => {\r\n currentLevelTargetInfo.off('AdGroupCriterionCompanyNameChanged', onChange);\r\n\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'CompanyName'));\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'NegativeCompanyName'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isCompanyTargetSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return pluck(companyNameTargets, 'Target').includes(CompanyNameCriterion.Target);\r\n }));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isNegativeCompanyTargetSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return pluck(negativeCompanyNameTargets, 'Target').includes(CompanyNameCriterion.Target);\r\n }));\r\n\r\n if (companyNameTargets && (currentTargets.length !== companyNameTargets.length || !isCompanyTargetSame)) {\r\n companyNameTargets.forEach(({ BidAdjustment = 0, ...companyTarget }) => {\r\n const criterionData = {\r\n ...companyTarget,\r\n Id: companyTarget.Target,\r\n };\r\n\r\n const companyNameCriterion = criterionHelper.buildLinkedInCriterion(\r\n 'CompanyName',\r\n criterionData,\r\n true,\r\n BidAdjustment,\r\n 0\r\n );\r\n\r\n const criterion = {\r\n ...companyNameCriterion,\r\n Id: companyTarget.Id,\r\n };\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n\r\n if (negativeCompanyNameTargets && (currentNegativeTargets.length !== negativeCompanyNameTargets.length || !isNegativeCompanyTargetSame)) {\r\n negativeCompanyNameTargets.forEach((companyTarget) => {\r\n const criterionData = {\r\n ...companyTarget,\r\n Id: companyTarget.Target,\r\n };\r\n\r\n const companyNameCriterion = criterionHelper.buildLinkedInCriterion(\r\n 'CompanyName',\r\n criterionData,\r\n false,\r\n 0,\r\n 0\r\n );\r\n\r\n const criterion = {\r\n ...companyNameCriterion,\r\n Id: companyTarget.Id,\r\n };\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n\r\n currentLevelTargetInfo.on('AdGroupCriterionCompanyNameChanged', onChange);\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionCompanyNameChanged', onChange);\r\n };\r\n }, [companyNameTargets, negativeCompanyNameTargets]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <div>\r\n <div className={classNames('company-picker', classes.pickerContainer, shouldHide && styles.hide)} >\r\n <div className={classNames('company-association-view', 'criterion-setting-CompanyName')} ref={newRef => setCompanyAssociationRef(newRef)} />\r\n </div>\r\n </div >\r\n );\r\n};\r\n\r\nUnstyledCompanyPicker.propTypes = {\r\n classes: PropTypes.shape({\r\n pickerContainer: PropTypes.string.isRequired,\r\n editTargetButtonContainer: PropTypes.string.isRequired,\r\n hide: PropTypes.string.isRequired,\r\n noTargetSelected: PropTypes.string.isRequired,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n companyNameTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n negativeCompanyNameTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n onAudienceTargetInfoChange: PropTypes.func,\r\n shouldHide: PropTypes.bool,\r\n showExclusion: PropTypes.bool,\r\n};\r\n\r\nUnstyledCompanyPicker.defaultProps = {\r\n onAudienceTargetInfoChange: noop,\r\n shouldHide: false,\r\n showExclusion: true,\r\n};\r\n\r\nexport const ValidatedCompanyPicker = withBidAdjustment(withDefaultStyles(withCustomValidation(UnstyledCompanyPicker), getCompanyTargetStyles), 'CompanyName', ['companyNameTargets', 'negativeCompanyNameTargets']);\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport { criterionSettingCompanyStyles } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getCompanyTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingCompanyStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","export const contentTargetingGroups = [\r\n {\r\n name: _TL_('Microsoft Edge Browsers'),\r\n description: _TL_('Native ad placements on Microsoft Edge’s new tab page'),\r\n placementId: 12,\r\n },\r\n {\r\n name: _TL_('Productivity'),\r\n description: _TL_('Microsoft 365 (Native and Display ad placements) and Outlook (Native and Display ad placements)'),\r\n placementId: 13,\r\n },\r\n {\r\n name: _TL_('Gaming'),\r\n description: _TL_('Native, Display, and Video ad placements on Microsoft Casual Games'),\r\n placementId: 14,\r\n },\r\n {\r\n name: _TL_('MSN'),\r\n description: _TL_('Native, Display, and Video ad placements on MSN (serving with all available MSN content)'),\r\n placementId: 15,\r\n },\r\n // {\r\n // name: _TL_('MSN - Sports'),\r\n // description: _TL_('Native, Display, and Video ad placements serving exclusively with MSN sports-related content'),\r\n // placementId: 3,\r\n // },\r\n {\r\n name: _TL_('MSN - Health'),\r\n description: _TL_('Native, Display, and Video ad placements serving exclusively with MSN health-related content'),\r\n placementId: 7,\r\n },\r\n {\r\n name: _TL_('MSN - Money'),\r\n description: _TL_('Native, Display, and Video ad placements serving exclusively with MSN money-related content'),\r\n placementId: 4,\r\n },\r\n];\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CampaignOData } from '@bingads-webui-react/campaign-odata';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { itemStyle } from './styles/placements-function-target-styles';\r\n\r\nexport const CheckOOInventoryBlocklists = ({\r\n i18n,\r\n}) => (\r\n <CampaignOData\r\n call={({ currentAccount }) => currentAccount.PlacementExclusionLists['Default.GetOwnedOperatedExclusions'].get()}\r\n >\r\n {oolist => (\r\n oolist.value.length > 0 &&\r\n <MessageBar\r\n id=\"placements-target-message-bar\"\r\n messageBarType={MessageBarType.severeWarning}\r\n isMultiline\r\n styles={itemStyle}\r\n className=\"targets-message-bar\"\r\n >\r\n {i18n.getString(_TL_('You may be excluding the following websites which will prevent your campaign from serving'))}: { oolist.value.map(item => item.Url).join(', ')}\r\n </MessageBar>\r\n )\r\n }\r\n </CampaignOData>\r\n);\r\n\r\nCheckOOInventoryBlocklists.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useState, useCallback, useEffect, useMemo } from 'react';\r\nimport { Body1Stronger, Body1, tokens, shorthands, makeStyles, Checkbox, Label, RadioGroup, Radio } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { CheckOOInventoryBlocklists } from './check-oo-inventory-blocklists';\r\nimport { contentTargetingGroups } from './content-targeting-groups';\r\n\r\nconst useContentTargetingStyles = makeStyles({\r\n contentTargetingSpecificOptionsContainerStyle: {\r\n flexDirection: 'column',\r\n },\r\n contentTargetingSpecificOptionContainerStyle: {\r\n display: 'flex',\r\n ...shorthands.padding(tokens.spacingHorizontalXS, tokens.spacingHorizontalNone, tokens.spacingVerticalXS, tokens.spacingHorizontalNone),\r\n ...shorthands.gap(tokens.spacingVerticalS),\r\n ...shorthands.borderBottom(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1),\r\n },\r\n controlWrapperStyle: {\r\n width: '100%',\r\n '>label': {\r\n width: '100%',\r\n marginTop: '-2px',\r\n },\r\n },\r\n labelDescriptionStyle: {\r\n fontSize: '12px',\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n entireSpecificSelectionStyle: {\r\n paddingBottom: '16px',\r\n },\r\n});\r\n\r\nconst ENTIRE_MICROSOFT_NETWORK = 'entire';\r\nconst SPECIFIC_PLACEMENTS = 'specific';\r\nconst EXCLUDED_PLACEMENT_IDS = [3, 4, 7];\r\n\r\nconst isTheEntireMicrosoftNetworkSelected = placements => _.isEmpty(placements);\r\n\r\nconst EntireNetworkOrSpecificSelection = React.memo(({ entireSpecificSelection, onChangeEntireSpecific }) => {\r\n const i18n = useContext(I18nContext);\r\n const styles = useContentTargetingStyles();\r\n const allPlacementsLabel = i18n.getString(_TL_('The entire Microsoft Advertising Network (recommended)'));\r\n const allPlacementsSubLabel = i18n.getString(_TL_('This option includes Microsoft sites and additional partner traffic for extended reach and lower cost per click.'));\r\n const specificPlacementsLabel = i18n.getString(_TL_('Microsoft sites'));\r\n const specificPlacementsSubLabel = i18n.getString(_TL_('Show your ads on specific Microsoft placements.'));\r\n\r\n return (\r\n <RadioGroup\r\n onChange={onChangeEntireSpecific}\r\n value={entireSpecificSelection}\r\n className={styles.entireSpecificSelectionStyle}\r\n >\r\n <Radio\r\n className={styles.controlWrapperStyle}\r\n label={\r\n <>\r\n <Body1Stronger>\r\n {allPlacementsLabel}\r\n </Body1Stronger>\r\n <br />\r\n <Body1>\r\n {allPlacementsSubLabel}\r\n </Body1>\r\n </>\r\n }\r\n value={ENTIRE_MICROSOFT_NETWORK}\r\n />\r\n <Radio\r\n className={styles.controlWrapperStyle}\r\n label={\r\n <>\r\n <Body1Stronger>\r\n {specificPlacementsLabel}\r\n </Body1Stronger>\r\n <br />\r\n <Body1>\r\n {specificPlacementsSubLabel}\r\n </Body1>\r\n </>\r\n }\r\n value={SPECIFIC_PLACEMENTS}\r\n />\r\n </RadioGroup>\r\n );\r\n});\r\n\r\nEntireNetworkOrSpecificSelection.propTypes = {\r\n entireSpecificSelection: PropTypes.string.isRequired,\r\n onChangeEntireSpecific: PropTypes.func.isRequired,\r\n};\r\n\r\nconst ContentTargetingSpecificPlacements = React.memo(({ groups, selectedPlacements, onToggleContentTargetingPlacement }) => {\r\n const isOnlyOnePlacementSelected = useMemo(() => (selectedPlacements || []).length === 1, [selectedPlacements]);\r\n const i18n = useContext(I18nContext);\r\n const styles = useContentTargetingStyles();\r\n return (\r\n <>\r\n <CheckOOInventoryBlocklists i18n={i18n} />\r\n {groups.map((group) => {\r\n const isChecked = selectedPlacements.includes(group.placementId);\r\n const isDisabled = isOnlyOnePlacementSelected && isChecked;\r\n return (\r\n <div\r\n key={group.placementId}\r\n className={styles.contentTargetingSpecificOptionContainerStyle}\r\n >\r\n <Checkbox\r\n checked={isChecked}\r\n onChange={() => onToggleContentTargetingPlacement(group.placementId)}\r\n disabled={isDisabled}\r\n className={styles.controlWrapperStyle}\r\n label={\r\n <>\r\n <Body1Stronger>\r\n {i18n.getString(group.name)}\r\n </Body1Stronger>\r\n <br />\r\n <Body1 className={styles.labelDescriptionStyle}>\r\n {i18n.getString(group.description)}\r\n </Body1>\r\n </>\r\n }\r\n />\r\n </div>\r\n );\r\n })}\r\n </>\r\n );\r\n});\r\n\r\nContentTargetingSpecificPlacements.propTypes = {\r\n groups: PropTypes.arrayOf(PropTypes.shape({\r\n placementId: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n })).isRequired,\r\n selectedPlacements: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n onToggleContentTargetingPlacement: PropTypes.func.isRequired,\r\n};\r\n\r\nconst ContentTargetingPlacementsInternal = ({ updateValidation, validationProps, msnSubcategoriesEnabled }) => {\r\n const i18n = useContext(I18nContext);\r\n const placementsSectionLabel = i18n.getString(_TL_('Where do you want to show your ads?'));\r\n const placementOptionsLabel = i18n.getString(_TL_('Choose the specific Microsoft placements'));\r\n const filteredContentTargetingGroups = msnSubcategoriesEnabled ? contentTargetingGroups : contentTargetingGroups.filter(({ placementId }) => !EXCLUDED_PLACEMENT_IDS.includes(placementId));\r\n\r\n const { data: { placements } } = validationProps;\r\n\r\n const [entireSpecificSelection, setEntireSpecificSelection] = useState(isTheEntireMicrosoftNetworkSelected(placements) ? ENTIRE_MICROSOFT_NETWORK : SPECIFIC_PLACEMENTS);\r\n\r\n const selectedPlacements = useMemo(() => (placements ? placements.map(v => v.PlacementId) : []), [placements]);\r\n\r\n useEffect(() => {\r\n const radioSelection = isTheEntireMicrosoftNetworkSelected(placements) ? ENTIRE_MICROSOFT_NETWORK : SPECIFIC_PLACEMENTS;\r\n setEntireSpecificSelection(radioSelection);\r\n }, [setEntireSpecificSelection, placements]);\r\n\r\n const onChangeEntireSpecific = useCallback((_e, data) => {\r\n setEntireSpecificSelection(data.value);\r\n if (data.value === SPECIFIC_PLACEMENTS) {\r\n updateValidation([], {\r\n placements: filteredContentTargetingGroups.map(v => ({ PlacementId: v.placementId })),\r\n });\r\n } else {\r\n updateValidation([], {\r\n placements: [],\r\n });\r\n }\r\n }, [updateValidation, setEntireSpecificSelection, filteredContentTargetingGroups]);\r\n\r\n const onToggleContentTargetingPlacement = useCallback((placementId) => {\r\n if (selectedPlacements.includes(placementId)) {\r\n updateValidation([], {\r\n placements: selectedPlacements.filter(v => v !== placementId).map(v => ({ PlacementId: v })),\r\n });\r\n } else {\r\n updateValidation([], {\r\n placements: [...selectedPlacements, placementId].map(v => ({ PlacementId: v })),\r\n });\r\n }\r\n }, [updateValidation, selectedPlacements]);\r\n const styles = useContentTargetingStyles();\r\n return (\r\n <div id=\"placements-target-view\">\r\n <Label>{placementsSectionLabel}</Label>\r\n <EntireNetworkOrSpecificSelection\r\n entireSpecificSelection={entireSpecificSelection}\r\n onChangeEntireSpecific={onChangeEntireSpecific}\r\n />\r\n {entireSpecificSelection === SPECIFIC_PLACEMENTS && (\r\n <div key=\"contentTargetingSpecificOptionsContainer\" className={styles.contentTargetingSpecificOptionsContainerStyle}>\r\n <Label size=\"regular\" weight=\"regular\">{placementOptionsLabel}</Label>\r\n <ContentTargetingSpecificPlacements\r\n groups={filteredContentTargetingGroups}\r\n selectedPlacements={selectedPlacements}\r\n onToggleContentTargetingPlacement={onToggleContentTargetingPlacement}\r\n />\r\n </div>)}\r\n </div>\r\n );\r\n};\r\n\r\nContentTargetingPlacementsInternal.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n placements: PropTypes.arrayOf(PropTypes.shape([])),\r\n }).isRequired,\r\n }).isRequired,\r\n msnSubcategoriesEnabled: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport const getContentTargetingPlacementsSummaryText = ({ i18n, placements }) => (\r\n isTheEntireMicrosoftNetworkSelected(placements)\r\n ? i18n.getString(_TL_('The entire Microsoft Advertising Network'))\r\n : i18n.getString(_TL_('Microsoft sites')));\r\n\r\nexport const ContentTargetingPlacements = withCustomValidation(ContentTargetingPlacementsInternal);\r\n","import React, { useEffect, useMemo, useState, useContext } from 'react';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { flatten, noop, every, isEmpty } from 'underscore';\r\nimport { IndustryTargetSetting } from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getIndustryTargetStyles } from './styles/industry-target-styles';\r\nimport { withBidAdjustment } from './with-bid-adjustment';\r\n\r\nexport const formatIndustry = ({ industry, i18n }) => {\r\n if (!industry || !industry.length) {\r\n return i18n.getString(_TL_('Target Industries'));\r\n }\r\n\r\n if (industry.length === 1) {\r\n return i18n.getString(_TL_('Targeted: 1 industry'));\r\n }\r\n\r\n return i18n.getString(_TL_('Targeted: {{count}} industries'), { count: (industry.length) });\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst UnstyledIndustryPicker = (props) => {\r\n const {\r\n classes,\r\n updateValidation,\r\n validationProps,\r\n onAudienceTargetInfoChange,\r\n shouldHide,\r\n showExclusion,\r\n initialIndustryTargets,\r\n } = props;\r\n\r\n const { data: { industry, negativeIndustry } } = validationProps;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const [industryAssociationRef, setIndustryAssociationRef] = useState();\r\n const styles = useStyles();\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const industryAssociationView = useMemo(() => {\r\n const industryView = new IndustryTargetSetting({\r\n criterionType: 'Industry',\r\n type: 'Industry',\r\n showBidOnlyNote: false,\r\n showExclusion,\r\n defaultBidAdjustment: 0,\r\n isForVNext: true,\r\n currentLevelTargetInfo,\r\n });\r\n\r\n industryView.render();\r\n\r\n return industryView;\r\n }, [currentLevelTargetInfo, showExclusion]);\r\n\r\n const onChange = () => {\r\n if (isEmpty(validationProps.data)) {\r\n // data is still loading\r\n return;\r\n }\r\n\r\n const updatedItems = industryAssociationView.currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const industryTargetsBidAdjustment = [];\r\n\r\n const industryTargets = updatedItems.filter(({ CriterionType }) => (CriterionType === 'Industry'))\r\n .map(({ Id, Criterion }) => {\r\n const { IndustryCriterion } = Criterion;\r\n\r\n const targetWithBidAdjustment = {\r\n Id,\r\n Criterion,\r\n };\r\n\r\n industryTargetsBidAdjustment.push(targetWithBidAdjustment);\r\n\r\n return IndustryCriterion.Target;\r\n });\r\n\r\n const negativeIndustryTargets = updatedItems.filter(({ CriterionType }) => (CriterionType === 'NegativeIndustry'))\r\n .map(({ Criterion }) => {\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return IndustryCriterion.Target;\r\n });\r\n\r\n updateValidation([], { industry: industryTargets, negativeIndustry: negativeIndustryTargets, industryTargetsBidAdjustment });\r\n\r\n if (activity) {\r\n activity.signal(`onIndustryTargetChange - ${JSON.stringify({ industry: industryTargets })}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n onAudienceTargetInfoChange(currentLevelTargetInfo);\r\n }, [currentLevelTargetInfo, onAudienceTargetInfoChange]);\r\n\r\n useEffect(() => {\r\n if (industryAssociationRef && industryAssociationRef.childElementCount === 0 && industryAssociationView) {\r\n industryAssociationRef.innerHTML = '';\r\n industryAssociationRef.append(industryAssociationView.el);\r\n }\r\n }, [industryAssociationRef, industryAssociationView]);\r\n\r\n useEffect(() => {\r\n industryAssociationView.searchView.searchTreeInitializationPromise.then(() => {\r\n currentLevelTargetInfo.off('AdGroupCriterionIndustryChanged', onChange);\r\n\r\n const industryTargets = industryAssociationView.searchView.treeView.node.children.map((child) => {\r\n const { children } = child;\r\n\r\n const innerChildren = children.map(innerChild => innerChild.data);\r\n\r\n return [...innerChildren];\r\n });\r\n\r\n const flatIndustryTargets = flatten(industryTargets);\r\n\r\n if (industry && industry.length > 0) {\r\n const selectedIndustries = flatIndustryTargets.filter(({ Id }) => industry.includes(Id));\r\n\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'Industry'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return industry.includes(IndustryCriterion.Target);\r\n }));\r\n\r\n if (currentTargets.length !== selectedIndustries.length || !isSame) {\r\n selectedIndustries.forEach((data) => {\r\n const { BidAdjustment = 0, Id } = (initialIndustryTargets && initialIndustryTargets.find(({ criterion }) => criterion === data.Id)) || {};\r\n const industryCriterion = criterionHelper.buildLinkedInCriterion(\r\n 'Industry',\r\n data,\r\n true,\r\n BidAdjustment,\r\n 0\r\n );\r\n\r\n const criterion = {\r\n ...industryCriterion,\r\n Id,\r\n };\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n\r\n if (negativeIndustry && negativeIndustry.length > 0) {\r\n const selectedNegativeIndustries = flatIndustryTargets.filter(({ Id }) => negativeIndustry.includes(Id));\r\n\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'NegativeIndustry'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return negativeIndustry.includes(IndustryCriterion.Target);\r\n }));\r\n\r\n if (currentNegativeTargets.length !== selectedNegativeIndustries.length || !isSame) {\r\n selectedNegativeIndustries.forEach((data) => {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'Industry',\r\n data,\r\n false,\r\n 0,\r\n 0\r\n );\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n }).then(() => {\r\n currentLevelTargetInfo.on('AdGroupCriterionIndustryChanged', onChange);\r\n currentLevelTargetInfo.trigger('AdGroupCriterionIndustryChanged'); // trigger the initial validation\r\n });\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionIndustryChanged', onChange);\r\n };\r\n }, [industry, negativeIndustry]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <div className={classNames('industry-picker crud-audience-adgroup audience-target-settings-container', classes.pickerContainer, shouldHide && styles.hide)} >\r\n <div className={classNames('industry-association-view', 'criterion-setting-Industry')} ref={newRef => setIndustryAssociationRef(newRef)} />\r\n </div>\r\n );\r\n};\r\n\r\nUnstyledIndustryPicker.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 validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n industry: PropTypes.arrayOf(PropTypes.shape([])),\r\n negativeIndustry: PropTypes.arrayOf(PropTypes.shape([])),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n onAudienceTargetInfoChange: PropTypes.func,\r\n shouldHide: PropTypes.bool,\r\n showExclusion: PropTypes.bool,\r\n initialIndustryTargets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n\r\nUnstyledIndustryPicker.defaultProps = {\r\n shouldHide: false,\r\n showExclusion: true,\r\n onAudienceTargetInfoChange: noop,\r\n};\r\n\r\nconst UnstyledIndustryPickerWithBidAdjustment = withBidAdjustment(UnstyledIndustryPicker, 'Industry', ['industry', 'negativeIndustry']);\r\n\r\nexport const ValidatedIndustryPicker = withDefaultStyles(withCustomValidation(UnstyledIndustryPickerWithBidAdjustment), getIndustryTargetStyles);\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport { criterionSettingIndustryStyles } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getIndustryTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingIndustryStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { every, noop, isEmpty } from 'underscore';\r\nimport { JobFunctionTargetSetting } from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getJobFunctionTargetStyles } from './styles/job-function-target-styles';\r\nimport { withBidAdjustment } from './with-bid-adjustment';\r\n\r\nexport const formatJobFunction = ({ jobTargets, i18n }) => {\r\n if (!jobTargets || !jobTargets.length) {\r\n return i18n.getString(_TL_('Target Jobs'));\r\n }\r\n\r\n if (jobTargets.length === 1) {\r\n return i18n.getString(_TL_('Targeted: 1 job'));\r\n }\r\n\r\n return i18n.getString(_TL_('Targeted: {{count}} jobs'), { count: (jobTargets.length) });\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst UnstyledJobFunctionPicker = (props) => {\r\n const {\r\n classes,\r\n updateValidation,\r\n validationProps,\r\n onAudienceTargetInfoChange,\r\n shouldHide,\r\n showExclusion,\r\n initialJobTargets,\r\n } = props;\r\n const { data: { jobTargets, negativeJobTargets } } = validationProps;\r\n\r\n const [jobFunctionAssociationRef, setJobFunctionAssociationRef] = useState();\r\n\r\n const styles = useStyles();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const jobFunctionAssociationView = useMemo(() => {\r\n const jobFunctionView = new JobFunctionTargetSetting({\r\n criterionType: 'JobFunction',\r\n type: 'JobFunction',\r\n showBidOnlyNote: false,\r\n showExclusion,\r\n defaultBidAdjustment: 0,\r\n isForVNext: true,\r\n currentLevelTargetInfo,\r\n });\r\n\r\n jobFunctionView.render();\r\n\r\n return jobFunctionView;\r\n }, [currentLevelTargetInfo, showExclusion]);\r\n\r\n const onChange = () => {\r\n if (isEmpty(validationProps.data)) {\r\n // data is still loading\r\n return;\r\n }\r\n\r\n const updatedItems = jobFunctionAssociationView.currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const jobTargetBidAdjustments = [];\r\n\r\n const jobTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'JobFunction'))\r\n .map(({ Id, Criterion }) => {\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n const targetWithBidAdjustment = {\r\n Id,\r\n Criterion,\r\n };\r\n\r\n jobTargetBidAdjustments.push(targetWithBidAdjustment);\r\n\r\n return JobFunctionCriterion.Target;\r\n });\r\n\r\n const negativeJobTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'NegativeJobFunction'))\r\n .map(({ Criterion }) => {\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return JobFunctionCriterion.Target;\r\n });\r\n\r\n updateValidation([], { jobTargets: jobTarget, negativeJobTargets: negativeJobTarget, jobTargetBidAdjustments });\r\n\r\n if (activity) {\r\n activity.signal(`onIndustryTargetChange - ${JSON.stringify({ jobFunction: jobTarget })}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n onAudienceTargetInfoChange(currentLevelTargetInfo);\r\n }, [currentLevelTargetInfo, onAudienceTargetInfoChange]);\r\n\r\n useEffect(() => {\r\n if (jobFunctionAssociationRef && jobFunctionAssociationRef.childElementCount === 0 && jobFunctionAssociationView) {\r\n jobFunctionAssociationRef.innerHTML = '';\r\n jobFunctionAssociationRef.append(jobFunctionAssociationView.el);\r\n }\r\n }, [jobFunctionAssociationRef, jobFunctionAssociationView]);\r\n\r\n useEffect(() => {\r\n jobFunctionAssociationView.searchView.initializeSearchDataTask.then(() => {\r\n currentLevelTargetInfo.off('AdGroupCriterionJobFunctionChanged', onChange);\r\n\r\n const allJobTargets = jobFunctionAssociationView.searchView.searchResultView.items.map(item => item);\r\n\r\n if (jobTargets && jobTargets.length > 0) {\r\n const selectedJobTargets = allJobTargets.filter(({ id }) => jobTargets.includes(id));\r\n\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'JobFunction'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return jobTargets.includes(JobFunctionCriterion.Target);\r\n }));\r\n\r\n if (currentTargets.length !== selectedJobTargets.length || !isSame) {\r\n selectedJobTargets.forEach((data) => {\r\n const { BidAdjustment = 0, Id } = (initialJobTargets && initialJobTargets.find(({ criterion }) => criterion === data.id)) || {};\r\n const jobFunctionCriterion = criterionHelper.buildLinkedInCriterion(\r\n 'JobFunction',\r\n data,\r\n true,\r\n BidAdjustment,\r\n 0\r\n );\r\n\r\n const criterion = {\r\n ...jobFunctionCriterion,\r\n Id,\r\n };\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n\r\n if (negativeJobTargets && negativeJobTargets.length > 0) {\r\n const selectedNegativeJobTargets = allJobTargets.filter(({ id }) => negativeJobTargets.includes(id));\r\n\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'NegativeJobFunction'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return negativeJobTargets.includes(JobFunctionCriterion.Target);\r\n }));\r\n\r\n if (currentNegativeTargets.length !== selectedNegativeJobTargets.length || !isSame) {\r\n selectedNegativeJobTargets.forEach((data) => {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'JobFunction',\r\n data,\r\n false,\r\n 0,\r\n 0\r\n );\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n }).then(() => {\r\n currentLevelTargetInfo.on('AdGroupCriterionJobFunctionChanged', onChange);\r\n currentLevelTargetInfo.trigger('AdGroupCriterionJobFunctionChanged'); // trigger the initial validation\r\n });\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionJobFunctionChanged', onChange);\r\n };\r\n }, [jobTargets, negativeJobTargets]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <div className={classNames('job-function-picker', classes.pickerContainer, shouldHide && styles.hide)} >\r\n <div className={classNames('job-function-association-view', 'criterion-setting-JobFunction')} ref={newRef => setJobFunctionAssociationRef(newRef)} />\r\n </div>\r\n );\r\n};\r\n\r\nUnstyledJobFunctionPicker.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 validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n jobTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n negativeJobTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n onAudienceTargetInfoChange: PropTypes.func,\r\n shouldHide: PropTypes.bool,\r\n showExclusion: PropTypes.bool,\r\n initialJobTargets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n\r\nUnstyledJobFunctionPicker.defaultProps = {\r\n shouldHide: false,\r\n showExclusion: true,\r\n onAudienceTargetInfoChange: noop,\r\n};\r\n\r\nconst UnstyledJobFunctionPickerWithBidAdjustment = withBidAdjustment(UnstyledJobFunctionPicker, 'JobFunction', ['jobTargets', 'negativeJobTargets']);\r\n\r\nexport const ValidatedJobFunctionPicker = withDefaultStyles(withCustomValidation(UnstyledJobFunctionPickerWithBidAdjustment), getJobFunctionTargetStyles);\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport { criterionSettingJobFunctionStyles } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getJobFunctionTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingJobFunctionStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import { tableStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { audienceBudgetBidsStyles } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getBidAdjustmentStyles = (_, { palette }) => ({\r\n pickerContainer: {\r\n ...audienceBudgetBidsStyles({ palette }),\r\n ...tableStyle({ palette }),\r\n overflow: 'auto',\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import { mergeStyles } from '@fluentui/react/lib/Styling';\r\n\r\nexport const placementsOptionStyle = mergeStyles({\r\n paddingLeft: '26px',\r\n fontWeight: '100',\r\n});\r\n\r\nexport const placementsAllSpecificChoiceGroup = mergeStyles({\r\n marginBottom: '20px',\r\n});\r\n\r\nexport const placementsCheckboxes = mergeStyles({\r\n marginBottom: '20px',\r\n});\r\n\r\nexport const itemStyle = mergeStyles({\r\n width: '320px',\r\n border: '1px solid',\r\n borderRadius: '4px',\r\n backgroundColor: '#FFFFFF',\r\n borderColor: '#D1D1D1',\r\n '&:hover': {\r\n backgroundColor: '#F5F5F5 !important',\r\n borderColor: '#BDBDBD !important',\r\n },\r\n});\r\n\r\nexport const itemStyleChecked = mergeStyles({\r\n width: '320px',\r\n border: '1px solid',\r\n borderRadius: '4px',\r\n backgroundColor: 'white !important',\r\n borderColor: '#BDBDBD !important',\r\n '&:hover': {\r\n backgroundColor: '#F5F5F5 !important',\r\n borderColor: '#BDBDBD !important',\r\n },\r\n});\r\n\r\nexport const itemStyleDisabled = mergeStyles({\r\n width: '320px',\r\n border: '1px solid',\r\n borderRadius: '4px',\r\n backgroundColor: '#F5F5F5 !important',\r\n borderColor: '#BDBDBD !important',\r\n});\r\n\r\nexport const placementCard = mergeStyles({\r\n paddingLeft: '16px',\r\n width: '280px',\r\n});\r\n\r\nexport const iconSection = mergeStyles({\r\n padding: '4px',\r\n border: 'solid 1px',\r\n width: '40px',\r\n height: '40px',\r\n marginTop: '8px',\r\n borderColor: 'white',\r\n backgroundColor: '#F0F0F0',\r\n '&:hover': {\r\n backgroundColor: '#E1E4E9 !important',\r\n },\r\n});\r\n\r\nexport const iconSectionChecked = mergeStyles({\r\n padding: '4px',\r\n border: 'solid 1px',\r\n width: '40px',\r\n height: '40px',\r\n marginTop: '8px',\r\n borderColor: 'white',\r\n backgroundColor: '#CFE4FA !important',\r\n '&:hover': {\r\n backgroundColor: '#E1E4E9 !important',\r\n },\r\n});\r\n\r\nexport const iconSectionDisabled = mergeStyles({\r\n padding: '4px',\r\n border: 'solid 1px',\r\n width: '40px',\r\n height: '40px',\r\n marginTop: '8px',\r\n borderColor: 'white',\r\n backgroundColor: '#E1E4E9 !important',\r\n});\r\n\r\nexport const titleStyle = mergeStyles({\r\n paddingLeft: '16px',\r\n fontWeight: '600',\r\n lineHeight: '16px',\r\n});\r\n\r\nexport const subheaderStyle = mergeStyles({\r\n paddingLeft: '56px',\r\n display: 'flex',\r\n paddingBottom: '12px',\r\n color: '#616161',\r\n lineHeight: '0.3',\r\n fontSize: '13px',\r\n});\r\n","import { any } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useState, useContext, useMemo, useEffect, useCallback } from 'react';\r\nimport { Button, Link, mergeClasses, makeStyles } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { BidAdjustment as BidAdjustmentView } from '@bingads-webui-campaign/target-bid-adjustment';\r\n\r\nimport { getBidAdjustmentStyles } from './styles/bid-adjustment-styles';\r\n\r\nconst useStyles = makeStyles({\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst TargetEditButton = (props) => {\r\n const {\r\n isBidAdjustmentsVisible, onClick, isTargetSelected, i18n, classes, readOnly,\r\n } = props;\r\n\r\n if (readOnly || !isBidAdjustmentsVisible) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className={mergeClasses('edit-target-button-container', classes.editTargetButtonContainer)}>\r\n {\r\n !isTargetSelected && (\r\n <span className={mergeClasses('no-target-selected', classes.noTargetSelected)}>\r\n {i18n.getString(_TL_('No targets selected.'))}\r\n  \r\n </span>\r\n )\r\n }\r\n {\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n <Link inline onClick={() => onClick()}>{i18n.getString(_TL_('Edit target'))}</Link>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nTargetEditButton.propTypes = {\r\n isBidAdjustmentsVisible: PropTypes.bool.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n isTargetSelected: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n editTargetButtonContainer: PropTypes.string,\r\n noTargetSelected: PropTypes.string,\r\n }).isRequired,\r\n readOnly: PropTypes.bool,\r\n};\r\n\r\nTargetEditButton.defaultProps = {\r\n readOnly: false,\r\n};\r\n\r\n// 'targetNameList' is the list of fields in validationProps.data that are used to construct target grid\r\nexport const withBidAdjustment = (Component, criterionType, targetsFieldNameList) => {\r\n const HOC = (props) => {\r\n const { showBidAdjustments, readOnly, ...rest } = props;\r\n const [isBidAdjustmentsVisible, setIsBidAdjustmentsVisible] = useState(showBidAdjustments);\r\n const [bidAdjustmentRef, setBidAdjustmentRef] = useState();\r\n const [targetInfo, setTargetInfo] = useState();\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const bidAdjustmentclasses = useDefaultStyles(getBidAdjustmentStyles);\r\n const styles = useStyles();\r\n\r\n const { validationProps = {} } = props;\r\n const { data } = validationProps;\r\n\r\n const isTargetSelected = useMemo(() => data && targetsFieldNameList.length > 0 &&\r\n any(targetsFieldNameList, targetsFieldName => data[targetsFieldName] && data[targetsFieldName].length > 0), [data]);\r\n\r\n const updateTargetInfo = useCallback(info => setTargetInfo(info), []);\r\n\r\n useEffect(() => {\r\n if (bidAdjustmentRef && bidAdjustmentRef.childElementCount === 0 && isBidAdjustmentsVisible && targetInfo) {\r\n const bidAdjustmentView = new BidAdjustmentView({\r\n currentLevelTargetInfo: targetInfo,\r\n criterionTypes: [criterionType],\r\n isAudienceCampaign: true,\r\n isForVNext: true,\r\n supportCashbackSettings: false,\r\n readonly: readOnly,\r\n });\r\n\r\n bidAdjustmentView.render();\r\n\r\n bidAdjustmentRef.innerHTML = '';\r\n bidAdjustmentRef.append(bidAdjustmentView.el);\r\n }\r\n }, [bidAdjustmentRef, isBidAdjustmentsVisible, readOnly, targetInfo]);\r\n\r\n const updateBidAdjustmentVisibility = useCallback((isVisible) => {\r\n setIsBidAdjustmentsVisible(isVisible);\r\n }, []);\r\n\r\n const targetEditButtonProps = useMemo(() => ({\r\n readOnly,\r\n isBidAdjustmentsVisible,\r\n onClick: updateBidAdjustmentVisibility,\r\n isTargetSelected,\r\n i18n,\r\n classes: bidAdjustmentclasses,\r\n }), [readOnly, isBidAdjustmentsVisible, updateBidAdjustmentVisibility, isTargetSelected, i18n, bidAdjustmentclasses]);\r\n\r\n return (\r\n <div className=\"with-bid-adjustment-container\">\r\n <TargetEditButton {...targetEditButtonProps} />\r\n <Component {...rest} onAudienceTargetInfoChange={updateTargetInfo} shouldHide={isBidAdjustmentsVisible} />\r\n <div className={mergeClasses(bidAdjustmentclasses.pickerContainer, (!isBidAdjustmentsVisible || !isTargetSelected) && styles.hide)}>\r\n <div className=\"criterion-setting-container\">\r\n <div className=\"target-edit-container\">\r\n <div ref={newRef => setBidAdjustmentRef(newRef)} />\r\n </div>\r\n </div>\r\n </div>\r\n {\r\n showBidAdjustments && !isBidAdjustmentsVisible && (\r\n <Button appearance=\"primary\" onClick={() => setIsBidAdjustmentsVisible(true)} className=\"done-button\">\r\n {i18n.getString(_TL_('Done'))}\r\n </Button>\r\n )\r\n }\r\n </div>\r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n showBidAdjustments: PropTypes.bool,\r\n readOnly: PropTypes.bool,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n };\r\n\r\n HOC.defaultProps = {\r\n showBidAdjustments: false,\r\n readOnly: false,\r\n };\r\n\r\n return HOC;\r\n};\r\n","export const getCollapsiblePanelStyles = (components, theme) => ({\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\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\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\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","import { getCollapsiblePanelStyles } from './collapsible-panel';\r\n\r\nexport const getNativeAdsStyles = (components, theme) => ({\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n});\r\n","import { UAPPlacementTypeAlias as EPT } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\n//\r\n// Ad Preview Constants\r\nexport const extraPlacementInfo = {\r\n [EPT.MSANV2.MSEdgeCarousel]: {\r\n previewTitle: _TL_('Microsoft Edge carousel'),\r\n previewHeaderTitle: _TL_('Ad preview (2.01 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_201x100',\r\n imagePreviewHeight: 10, // 152,\r\n editingPlacementType: EPT.MSANV2.MSEdgeCarousel,\r\n hasLogo: true,\r\n },\r\n [EPT.MSANV2.MSANBanner]: {\r\n previewTitle: _TL_('MSN banner'),\r\n previewHeaderTitle: _TL_('Ad preview (2 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_200x100',\r\n imagePreviewHeight: 100,\r\n editingPlacementType: EPT.MSANV2.MSANBanner,\r\n },\r\n [EPT.MSANV2.MSANRiver]: {\r\n previewTitle: _TL_('MSN feed'),\r\n previewHeaderTitle: _TL_('Ad preview (1.91 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_191x100',\r\n imagePreviewHeight: 200,\r\n editingPlacementType: EPT.MSANV2.MSANRiver,\r\n hasLogo: true,\r\n },\r\n [EPT.MSANV2.MSNCarousel]: {\r\n previewTitle: _TL_('MSN carousel'),\r\n previewHeaderTitle: _TL_('Ad preview (1.69 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_169x100',\r\n imagePreviewHeight: 372,\r\n editingPlacementType: EPT.MSANV2.MSNCarousel,\r\n },\r\n [EPT.MSANV2.MSNPartnerStripe]: {\r\n previewTitle: _TL_('MSN partner stripe'),\r\n previewHeaderTitle: _TL_('Ad preview (1.53 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_153x100',\r\n imagePreviewHeight: 150,\r\n editingPlacementType: EPT.MSANV2.MSNPartnerStripe,\r\n },\r\n [EPT.MSANV2.MSNRestoday]: {\r\n previewTitle: _TL_('MSN Restoday'),\r\n previewHeaderTitle: _TL_('Ad preview (1.24 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_124x100',\r\n imagePreviewHeight: 84,\r\n editingPlacementType: EPT.MSANV2.MSNRestoday,\r\n },\r\n [EPT.MSANV2.MSANRectangle]: {\r\n previewTitle: _TL_('MSN rectangle image'),\r\n previewHeaderTitle: _TL_('Ad preview (1.20 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_120x100',\r\n imagePreviewHeight: 250,\r\n editingPlacementType: EPT.MSANV2.MSANRectangle,\r\n hasLogo: true,\r\n },\r\n [EPT.MSANV2.MSEdgeMobile]: {\r\n previewTitle: _TL_('Microsoft Edge mobile'),\r\n previewHeaderTitle: _TL_('Ad preview (1 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_1x1',\r\n imagePreviewHeight: 150,\r\n editingPlacementType: EPT.MSANV2.MSEdgeMobile,\r\n hasLogo: true,\r\n },\r\n [EPT.Outlook.Mobile]: {\r\n previewTitle: _TL_('Microsoft Outlook web (mobile)'),\r\n customClassName: 'outlook_text_mobile',\r\n editingPlacementType: EPT.Outlook.Mobile,\r\n hasLogo: true,\r\n },\r\n [EPT.Outlook.Web]: {\r\n previewTitle: _TL_('Microsoft Outlook web (computer)'),\r\n customClassName: 'outlook_text_web',\r\n editingPlacementType: EPT.Outlook.Web,\r\n hasLogo: true,\r\n },\r\n [EPT.Responsive.MSAN.WideImage]: {\r\n previewTitle: _TL_('MSN feed'),\r\n previewHeaderTitle: _TL_('Ad preview (1.91 : 1 aspect ratio)'),\r\n customClassName: 'msan_191x100',\r\n imagePreviewHeight: 200,\r\n disclaimerMessage: _TL_('This is an example of how your ad could appear on other websites on the Microsoft Advertising Network. The final ad format is likely to change to match the look and feel of the website.'),\r\n editingPlacementType: EPT.MSAN.WideImage,\r\n },\r\n [EPT.Responsive.MSAN.MSEdgeSingleCarousel]: {\r\n previewTitle: _TL_('Microsoft Edge single carousel'),\r\n previewHeaderTitle: _TL_('Ad preview (1.78 : 1 aspect ratio)'),\r\n customClassName: 'edge_178x100',\r\n imagePreviewHeight: 220,\r\n editingPlacementType: EPT.MSAN.MSEdgeSingleCarousel,\r\n },\r\n [EPT.Responsive.MSAN.MSNInArticle]: {\r\n previewTitle: _TL_('MSN in-article ad'),\r\n previewHeaderTitle: _TL_('Ad preview (1.5 : 1 aspect ratio)'),\r\n customClassName: 'msan_150x100',\r\n imagePreviewHeight: 200,\r\n editingPlacementType: EPT.MSAN.MSNInArticle,\r\n },\r\n [EPT.Responsive.MSAN.MSNSmallHeadline]: {\r\n previewTitle: _TL_('MSN small headline'),\r\n previewHeaderTitle: _TL_('Ad preview (1.33 : 1 aspect ratio)'),\r\n customClassName: 'msan_133x100',\r\n imagePreviewHeight: 75,\r\n editingPlacementType: EPT.MSAN.MSNSmallHeadline,\r\n },\r\n [EPT.Responsive.MSAN.SquareImage]: {\r\n previewTitle: _TL_('MSN square image'),\r\n previewHeaderTitle: _TL_('Ad preview (1 : 1 aspect ratio)'),\r\n customClassName: 'msan_1x1',\r\n imagePreviewHeight: 75,\r\n disclaimerMessage: _TL_('This is an example of how your ad could appear on other websites on the Microsoft Advertising Network. The final ad format is likely to change to match the look and feel of the website.'),\r\n editingPlacementType: EPT.MSAN.SquareImage,\r\n },\r\n [EPT.Responsive.MSANV2.MSANRiver]: {\r\n previewTitle: _TL_('MSN feed'),\r\n previewHeaderTitle: _TL_('Ad preview (1.91 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_191x100',\r\n imagePreviewHeight: 200,\r\n editingPlacementType: EPT.MSANV2.MSANRiver,\r\n hasLogo: true,\r\n },\r\n [EPT.Responsive.MSANV2.MSEdgeMobile]: {\r\n previewTitle: _TL_('Microsoft Edge mobile'),\r\n previewHeaderTitle: _TL_('Ad preview (1 : 1 aspect ratio)'),\r\n customClassName: 'mmav2_1x1',\r\n imagePreviewHeight: 150,\r\n editingPlacementType: EPT.MSANV2.MSEdgeMobile,\r\n hasLogo: true,\r\n },\r\n [EPT.Responsive.Outlook.Mobile]: {\r\n previewTitle: _TL_('Microsoft Outlook web (mobile)'),\r\n customClassName: 'outlook_text_mobile',\r\n editingPlacementType: EPT.Outlook.Mobile,\r\n },\r\n [EPT.Responsive.Outlook.Web]: {\r\n previewTitle: _TL_('Microsoft Outlook web (computer)'),\r\n customClassName: 'outlook_text_web',\r\n editingPlacementType: EPT.Outlook.Web,\r\n },\r\n [EPT.Responsive.Boost.WindowsSpotlight]: {\r\n previewTitle: _TL_('Windows Spotlight'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.WindowsSpotlight,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.DiscoverCard]: {\r\n previewTitle: _TL_('Discover card'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.DiscoverCard,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.StartMenu]: {\r\n previewTitle: _TL_('Start Menu'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.StartMenu,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.ActionCenter]: {\r\n previewTitle: _TL_('Action Center'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.ActionCenter,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.Banner]: {\r\n previewTitle: _TL_('Banner'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.Banner,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.Prong1Prong2Feed]: {\r\n previewTitle: _TL_('Prong 1 / Prong 2 / Feed'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.Prong1Prong2Feed,\r\n hasLogo: true,\r\n hideHeaderButtons: true,\r\n },\r\n [EPT.Responsive.Boost.Coachmark]: {\r\n previewTitle: _TL_('CoachMark'),\r\n previewHeaderTitle: _TL_('Ad preview'),\r\n editingPlacementType: EPT.Boost.Coachmark,\r\n hideHeaderButtons: true,\r\n },\r\n};\r\n\r\nexport const responsiveMsanMMAConfig = [{\r\n placementSetName: 'responsiveMsanMMAConfig',\r\n placementTypes: [\r\n EPT.Responsive.MSAN.WideImage,\r\n EPT.Responsive.MSAN.MSEdgeSingleCarousel,\r\n EPT.Responsive.MSAN.MSNInArticle,\r\n EPT.Responsive.MSAN.MSNSmallHeadline,\r\n EPT.Responsive.MSAN.SquareImage,\r\n EPT.Responsive.Outlook.Web,\r\n EPT.Responsive.Outlook.Mobile,\r\n ],\r\n}];\r\n\r\nexport const msanMMAV2Config = [{\r\n placementSetName: 'msanMMAV2Config',\r\n placementTypes: [\r\n EPT.MSANV2.MSEdgeCarousel,\r\n EPT.MSANV2.MSANBanner,\r\n EPT.MSANV2.MSANRiver,\r\n EPT.MSANV2.MSNCarousel,\r\n EPT.MSANV2.MSNPartnerStripe,\r\n EPT.MSANV2.MSNRestoday,\r\n EPT.MSANV2.MSANRectangle,\r\n EPT.MSANV2.MSEdgeMobile,\r\n EPT.Outlook.Web,\r\n EPT.Outlook.Mobile,\r\n ],\r\n}];\r\n\r\nexport const msanMMAConfig = [{\r\n placementSetName: 'msanMMAConfig',\r\n placementTypes: [\r\n EPT.MSAN.WideImage,\r\n EPT.MSAN.MSEdgeSingleCarousel,\r\n EPT.MSAN.MSNInArticle,\r\n EPT.MSAN.MSNSmallHeadline,\r\n EPT.MSAN.SquareImage,\r\n EPT.Outlook.Web,\r\n EPT.Outlook.Mobile,\r\n ],\r\n}];\r\n\r\nexport const responsiveMsanMMABoostConfig = [{\r\n placementSetName: 'responsiveMsanMMABoostConfig',\r\n placementTypes: [\r\n EPT.Responsive.MSAN.WideImage,\r\n EPT.Responsive.MSAN.MSEdgeSingleCarousel,\r\n EPT.Responsive.MSAN.MSNInArticle,\r\n EPT.Responsive.MSAN.MSNSmallHeadline,\r\n EPT.Responsive.MSAN.SquareImage,\r\n EPT.Responsive.Boost.WindowsSpotlight,\r\n EPT.Responsive.Boost.DiscoverCard,\r\n EPT.Responsive.Boost.StartMenu,\r\n EPT.Responsive.Boost.ActionCenter,\r\n EPT.Responsive.Boost.Prong1Prong2Feed,\r\n ],\r\n}];\r\n\r\nexport const responsiveMsanMMABoostConfigV2 = [{\r\n placementSetName: 'responsiveMsanMMABoostConfig',\r\n placementTypes: [\r\n EPT.Responsive.MSANV2.MSANRiver,\r\n EPT.Responsive.MSAN.MSEdgeSingleCarousel,\r\n EPT.Responsive.MSAN.MSNInArticle,\r\n EPT.Responsive.MSAN.MSNSmallHeadline,\r\n EPT.Responsive.MSANV2.MSEdgeMobile,\r\n EPT.Responsive.Boost.WindowsSpotlight,\r\n EPT.Responsive.Boost.DiscoverCard,\r\n EPT.Responsive.Boost.StartMenu,\r\n EPT.Responsive.Boost.ActionCenter,\r\n EPT.Responsive.Boost.Prong1Prong2Feed,\r\n ],\r\n}];\r\n\r\nexport const msanMMABoostConfig = [{\r\n placementSetName: 'msanMMABoostConfig',\r\n placementTypes: [\r\n EPT.MSAN.WideImage,\r\n EPT.MSAN.MSEdgeSingleCarousel,\r\n EPT.MSAN.MSNInArticle,\r\n EPT.MSAN.MSNSmallHeadline,\r\n EPT.MSAN.SquareImage,\r\n EPT.Boost.WindowsSpotlight,\r\n EPT.Boost.DiscoverCard,\r\n EPT.Boost.StartMenu,\r\n EPT.Boost.ActionCenter,\r\n EPT.Boost.Banner,\r\n EPT.Boost.Prong1Prong2Feed,\r\n EPT.Boost.Coachmark,\r\n ],\r\n}];\r\n\r\nexport const msanMMABoostConfigV2 = [{\r\n placementSetName: 'msanMMABoostConfig',\r\n placementTypes: [\r\n EPT.MSANV2.MSANRiver,\r\n EPT.MSAN.MSEdgeSingleCarousel,\r\n EPT.MSAN.MSNInArticle,\r\n EPT.MSAN.MSNSmallHeadline,\r\n EPT.MSANV2.MSEdgeMobile,\r\n EPT.Boost.WindowsSpotlight,\r\n EPT.Boost.DiscoverCard,\r\n EPT.Boost.StartMenu,\r\n EPT.Boost.ActionCenter,\r\n EPT.Boost.Banner,\r\n EPT.Boost.Prong1Prong2Feed,\r\n EPT.Boost.Coachmark,\r\n ],\r\n}];\r\n\r\nexport const BiddingSchemes = {\r\n EnhancedCpc: 'EnhancedCpc',\r\n MaxConversions: 'MaxConversions',\r\n ManualCpm: 'ManualCpm',\r\n};\r\n\r\nexport const AdPreviewOverideStylesByKey = {\r\n mma_191x100: { imagePreviewHeight: 153, imagePreviewWidth: 292 },\r\n edge_178x100: { imagePreviewHeight: 220, imagePreviewWidth: 390 },\r\n msan_191x100: { imagePreviewHeight: 200, imagePreviewWidth: 382 },\r\n msan_150x100: { imagePreviewHeight: 200, imagePreviewWidth: 300 },\r\n};\r\n\r\nexport const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AdGroup: 'adGroup',\r\n Ad: 'ResponsiveAd',\r\n};\r\n","import { extensionEditorStyles } from '@bingads-webui-campaign-react/common-styles';\r\nimport { AdPreviewOverideStylesByKey } from '../constants';\r\n\r\nconst IndicatorWidth = 10;\r\nconst IndicatorsGap = 8;\r\n\r\nconst getIndicatorsWidth = placements => (placements * IndicatorWidth) + ((placements - 1) * IndicatorsGap);\r\n\r\nexport const getImageExperienceStyles = (_, { palette = {} }) => ({\r\n '@global': {\r\n ...extensionEditorStyles({ palette }),\r\n },\r\n nativeAdStepShell: {\r\n width: '100%',\r\n },\r\n 'nativeAdStepShell-l': {\r\n width: 'calc(100% - 64px)',\r\n },\r\n nativeAdImagePreviewCarousel: {\r\n position: 'sticky',\r\n width: 420,\r\n top: '0px',\r\n '& .carousel-inner .ad-placement-preview': {\r\n height: 450,\r\n },\r\n '& .new-preview-carousel-container-adprelib': {\r\n // backgroundColor: '#ffffff',\r\n border: '1px solid #C8C8C8 !important',\r\n // borderRadius: '4px',\r\n // boxShadow: '0px 2px 4px 0px rgba(0, 0, 0, 0.10)',\r\n // maxWidth: '420px',\r\n minWidth: 'unset !important',\r\n\r\n '& .preview-string': {\r\n bottom: 'unset !important',\r\n },\r\n\r\n '& .ad-preview-actions': {\r\n display: 'flex',\r\n },\r\n '& .carousel-inner': {\r\n height: 450,\r\n },\r\n\r\n '& .carousel-indicators': {\r\n display: 'flex',\r\n gap: '8px',\r\n left: '50% !important',\r\n margin: '48px 0 !important',\r\n transform: 'translateX(-50%)',\r\n\r\n '& li': {\r\n margin: '0',\r\n },\r\n },\r\n\r\n '& .carousel-control': {\r\n display: 'flex',\r\n width: '12px',\r\n margin: '12px 0 !important',\r\n left: '50% !important',\r\n },\r\n\r\n '& .carousel-wrapper .carousel-control.left': {\r\n transform: ({ placements }) => {\r\n const transformations = [];\r\n\r\n // Move left arrow to the center\r\n transformations.push('translateX(-50%)');\r\n\r\n // Move left arrow to the left of the indicators\r\n const indicatorsWidth = getIndicatorsWidth(placements);\r\n transformations.push(`translateX(-${indicatorsWidth / 2}px)`);\r\n\r\n // Add extra space between the left arrow and the indicators\r\n transformations.push('translateX(-16px)');\r\n\r\n return transformations.join(' ');\r\n },\r\n bottom: 16,\r\n },\r\n\r\n '& .carousel-wrapper .carousel-control.right': {\r\n transform: ({ placements }) => {\r\n const transformations = [];\r\n\r\n // Move right arrow to the center\r\n transformations.push('translateX(-50%)');\r\n\r\n // Move right arrow to the right of the indicators\r\n const indicatorsWidth = getIndicatorsWidth(placements);\r\n transformations.push(`translateX(${indicatorsWidth / 2}px)`);\r\n\r\n // Add extra space between the right arrow and the indicators\r\n transformations.push('translateX(14px)');\r\n\r\n return transformations.join(' ');\r\n },\r\n bottom: 16,\r\n },\r\n\r\n '& .ad-preview-title': {\r\n height: '24px',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n\r\n '& .preview-title-string-key': {\r\n color: '#323130',\r\n fontSize: '14px',\r\n fontWeight: 700,\r\n marginRight: '8px',\r\n },\r\n\r\n '& .preview-title-preview-type': {\r\n fontSize: '14px',\r\n },\r\n },\r\n\r\n '& .carousel-inner .ad-placement-preview, & .carousel-inner .ad-placement-card-preview': {\r\n overflow: 'hidden',\r\n\r\n '& .card-parent': {\r\n width: '100%',\r\n },\r\n\r\n '& .responsive-ad-preview-content': {\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.boost-windows, & .ad-placement-card-preview.boost-windows': {\r\n '& .card-parent': {\r\n '& .responsive-ad-preview-content': {\r\n height: 'fit-content',\r\n width: 'fit-content',\r\n maxWidth: '100%',\r\n '& .text-container-apl': {\r\n maxWidth: 'calc(100% - 25px)',\r\n },\r\n },\r\n },\r\n },\r\n '& .ad-placement-preview.boost-start-menu, & .ad-placement-card-preview.boost-start-menu': {\r\n '& .new-responsive-ad-preview-container': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.boost-actionCenter, & .ad-placement-card-preview.boost-actionCenter': {\r\n '& .new-responsive-ad-preview-container': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.boost-banner, & .ad-placement-card-preview.boost-banner': {\r\n '& .new-responsive-ad-preview-container': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .ad-placement-preview.mma_191x100, & .ad-placement-card-preview.mma_191x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.mma_191x100.imagePreviewWidth,\r\n '& .text-container-apl': {\r\n padding: '5px 12px 12px 12px',\r\n '& .short-headline': {\r\n wordWrap: 'break-word',\r\n },\r\n '& .final-url': {\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.edge_178x100, & .ad-placement-card-preview.edge_178x100': {\r\n '& .card-parent': {\r\n '& .responsive-ad-preview-content': {\r\n height: 'fit-content',\r\n width: 'fit-content',\r\n maxWidth: '100%',\r\n '& .text-container-apl': {\r\n maxWidth: 'calc(100% - 25px)',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.msan_191x100, & .ad-placement-card-preview.msan_191x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.msan_191x100.imagePreviewWidth,\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.msan_150x100, & .ad-placement-card-preview.msan_150x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.msan_150x100.imagePreviewWidth,\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.msan_1x1, & .ad-placement-card-preview.msan_1x1': {\r\n padding: 20,\r\n },\r\n\r\n '& .ad-placement-preview.msan_133x100, & .ad-placement-card-preview.msan_133x100': {\r\n padding: 20,\r\n },\r\n\r\n '& .ad-placement-preview.bing_text, & .ad-placement-card-preview.bing_text': {\r\n '& .responsive-ad-preview-content': {\r\n '& .text-container-apl': {\r\n '& .final-url > .multi-line-processed-text': {\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.outlook_text_mobile, & .ad-placement-card-preview.outlook_text_mobile': {\r\n '& .responsive-ad-preview-content': {\r\n boxSizing: 'content-box',\r\n maxWidth: 'calc(100% - 50px)',\r\n '& .description': {\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n width: '100%',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-preview.outlook_text_web, & .ad-placement-card-preview.outlook_text_web': {\r\n padding: '0px 8px',\r\n\r\n '& .responsive-ad-preview-content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n minWidth: 0,\r\n '& .text-container-apl': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n whiteSpace: 'nowrap',\r\n minWidth: 0,\r\n '& .pre-headline-divider': {\r\n height: 2,\r\n },\r\n '& .description-parent': {\r\n flex: '1 1 0px',\r\n minWidth: 0,\r\n '& .description': {\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n width: '100%',\r\n },\r\n },\r\n },\r\n\r\n '& .business-name-with-ads': {\r\n marginRight: 10,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n 'nativeAdImagePreviewCarousel-xxl': {\r\n '@media (min-width: 1400px)': {\r\n width: ({ isMMAV2Enabled }) => (isMMAV2Enabled ? 670 : 530),\r\n },\r\n width: 420,\r\n },\r\n 'nativeAdImagePreviewCarousel-xl': {\r\n width: 420,\r\n },\r\n rightStyles: {\r\n // '@media (min-width: 1750px)': {\r\n // width: '50%',\r\n // },\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n width: '100%',\r\n gap: '32px',\r\n '& .text-input-container': {\r\n width: '100% !important',\r\n },\r\n '& .title-item': {\r\n width: 'auto',\r\n maxWidth: '100%',\r\n },\r\n },\r\n leftStyles: {\r\n width: '100%',\r\n maxWidth: '530px',\r\n },\r\n 'leftStyles-xxl': {\r\n width: '530px',\r\n },\r\n 'leftStyles-xl': {\r\n width: '430px',\r\n },\r\n headerStackStyles: {\r\n width: 'unset',\r\n },\r\n 'headerStackStyles-l': {\r\n width: '430px',\r\n },\r\n 'headerStackStyles-xl': {\r\n width: '430px',\r\n },\r\n 'headerStackStyles-xxl': {\r\n width: '530px',\r\n },\r\n imageExperienceStyle: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n '& .image-list-choice-group .ms-ChoiceFieldGroup-flexContainer': {\r\n width: 'unset !important',\r\n },\r\n },\r\n textAssetStyle: {\r\n '& .text-assets-collection-container': {\r\n width: '100%',\r\n // '@media (max-width: 1750px)': {\r\n // width: 'unset !important',\r\n // },\r\n },\r\n },\r\n businessNameStyle: {\r\n '& .business-name-container': {\r\n width: '100%',\r\n // '@media (max-width: 1750px)': {\r\n // width: 'unset !important',\r\n // },\r\n },\r\n },\r\n imageListLoadingContainer: {\r\n minHeight: 84,\r\n '& .loading': {\r\n paddingTop: 30,\r\n },\r\n },\r\n imageListErrorContainer: {\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 },\r\n adPreviewPlacementHeader: {\r\n '& > .ad-preview-title': {\r\n margin: '20px 24px 16px 24px',\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n lineHeight: '24px',\r\n },\r\n },\r\n adPreviewPlacementContainer: {\r\n height: 450,\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n flexDirection: 'column',\r\n\r\n '&:hover .card-parent .placement-card-content': {\r\n borderColor: '#004578',\r\n },\r\n\r\n '& .ad-placement-card-preview': ({ isMMAV2Enabled }) => (isMMAV2Enabled ? {} : {\r\n overflow: 'visible !important', // to show the shadow\r\n margin: 'unset !important',\r\n }),\r\n\r\n '& .ad-placement-card-preview.edge_178x100': {\r\n '& .card-parent': {\r\n maxWidth: 220 * 1.78,\r\n },\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_133x100': {\r\n marginTop: '150px !important',\r\n paddingBottom: '0 !important',\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_1x1': {\r\n marginTop: '150px !important',\r\n paddingBottom: '0 !important',\r\n },\r\n\r\n '& .ad-placement-card-preview.outlook_text_web': {\r\n marginTop: '150px !important',\r\n },\r\n\r\n '& .ad-placement-card-preview.outlook_text_mobile': {\r\n margin: '150px 11.5px 0 11.5px !important',\r\n },\r\n\r\n '& .preview-string': {\r\n width: '100%',\r\n fontSize: 14,\r\n textAlign: 'center',\r\n lineHeight: '20px',\r\n paddingTop: 12,\r\n marginBottom: ({ isMMAV2Enabled }) => (isMMAV2Enabled ? 20 : 0),\r\n },\r\n\r\n '& .additional-disclaimer-message': {\r\n position: 'absolute',\r\n left: 0,\r\n width: '100%',\r\n bottom: 0,\r\n padding: '0 24px',\r\n fontSize: 12,\r\n textAlign: 'left',\r\n lineHeight: '20px',\r\n },\r\n\r\n '& .placement-validation-message': {\r\n display: 'inline-block',\r\n width: '100%',\r\n fontSize: 14,\r\n textAlign: 'center',\r\n lineHeight: 2,\r\n marginRight: 16,\r\n },\r\n\r\n '& .responsive-boost-ad-placement-container': {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n '& > .ad-placement-card-preview': {\r\n boxShadow: '0px 0.511px 1.533px rgb(0 0 0 / 10%), 0px 2.72533px 6.132px rgb(0 0 0 / 13%) !important',\r\n borderRadius: '5.11px !important',\r\n },\r\n },\r\n '& .responsive-boost-ad-placement-container.responsive-boost-start-menu': {\r\n marginTop: '30%',\r\n },\r\n '& .responsive-boost-ad-placement-container.responsive-boost-action-center': {\r\n marginTop: '20%',\r\n },\r\n '& .responsive-boost-ad-placement-container.responsive-boost-banner': {\r\n marginTop: '35%',\r\n marginLeft: 15,\r\n marginRight: 15,\r\n },\r\n },\r\n});\r\n","export const getNativeAdPanels = (serverContext, isVideo, isDisplay) => {\r\n if (isVideo || isDisplay) {\r\n const multiAdFormatAdPanels = {\r\n advancedPanels: [\r\n 'third-party-measurement',\r\n ],\r\n };\r\n\r\n if (isVideo && serverContext.DynamicPermissions.AdvancedURLOptionsForVideo) {\r\n multiAdFormatAdPanels.advancedPanels.push('advanced-url-options');\r\n }\r\n\r\n if (isDisplay && serverContext.DynamicPermissions.AdvancedURLOptionsForDisplay) {\r\n multiAdFormatAdPanels.advancedPanels.push('advanced-url-options');\r\n }\r\n\r\n if (serverContext.Permissions.isImpressionTrackingForDisplayAndVideoEnabled) {\r\n multiAdFormatAdPanels.advancedPanels.push('impression-tracking-URLs');\r\n }\r\n\r\n return multiAdFormatAdPanels;\r\n }\r\n\r\n const panels = {\r\n basicPanels: [\r\n 'images',\r\n 'business-name',\r\n 'text',\r\n ],\r\n advancedPanels: [\r\n 'mobile-final-url',\r\n 'advanced-url-options',\r\n 'impression-tracking-URLs',\r\n 'third-party-measurement',\r\n 'ads-optimization',\r\n ],\r\n };\r\n\r\n if (serverContext.DynamicPermissions.VideoAsAnAsset && !serverContext.Permissions.IsAmplifyEnabled) {\r\n panels.basicPanels.push('videos');\r\n }\r\n\r\n if (serverContext.Permissions.IsAmplifyEnabled && serverContext.DynamicPermissions.DisplayPlusAmplify) {\r\n panels.basicPanels.push('logos');\r\n panels.basicPanels.push('hotspot-panel');\r\n panels.basicPanels.push('portrait-images');\r\n\r\n panels.advancedPanels.push('anchor-ad');\r\n panels.advancedPanels.push('call-to-action');\r\n } else if (serverContext.Permissions.IsMSANLogoAndCTAForMMAEnabled) {\r\n panels.basicPanels.push('logos', 'call-to-action');\r\n }\r\n\r\n if (serverContext.Permissions.IsMSANDisclaimerEnabled &&\r\n !serverContext.Permissions.IsDomesticSimplifiedChineseEnabled) {\r\n panels.advancedPanels.push('disclaimer');\r\n }\r\n\r\n return panels;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ValidatedLegacyCallToAction } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst getStyles = () => ({\r\n container: {\r\n height: '100%',\r\n '& #language-cta-boost': {\r\n position: 'relative',\r\n marginBottom: '10px',\r\n },\r\n '& #cta-boost': {\r\n position: 'relative',\r\n marginBottom: '10px',\r\n },\r\n },\r\n});\r\n\r\nexport const ValidatedCallToAction = ({\r\n data,\r\n ...rest\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const {\r\n languageValue,\r\n value,\r\n ctaText,\r\n ctaAriaText,\r\n } = data;\r\n\r\n return (\r\n <div className={classes.container}>\r\n <ValidatedLegacyCallToAction\r\n isBoostScenario\r\n isBoostCustomCTAEnabled\r\n id=\"cta-boost\"\r\n languageValue={languageValue}\r\n value={value}\r\n ctaText={ctaText}\r\n ctaAriaText={ctaAriaText}\r\n {...rest}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nValidatedCallToAction.propTypes = {\r\n data: PropTypes.shape({\r\n languageValue: PropTypes.string,\r\n value: PropTypes.string,\r\n ctaText: PropTypes.string,\r\n ctaAriaText: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\n","import 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 {\r\n useDefaultStyles,\r\n withDefaultStyles,\r\n} from '@bingads-webui-react/with-default-styles';\r\nimport { ImpressionTrackingUrlOptions as ImpressionTrackingView } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { adEditorOverrideStyle } from '@bingads-webui-campaign-react/ad-editor-styles';\r\n\r\nconst getTopGridPanelCustomStyles = (__, palette, iconFontFamily) =>\r\n Object.assign({}, adEditorOverrideStyle({ palette, iconFontFamily }));\r\n\r\nconst extractImpressionTrackingSetting = (impressionTrackingUrls) => {\r\n if (_.isArray(impressionTrackingUrls)) {\r\n return impressionTrackingUrls;\r\n }\r\n return ['', ''];\r\n};\r\n\r\nexport const formatImpressionTrackingSetting = (\r\n impressionTrackingUrls,\r\n i18n\r\n) => {\r\n const [firstUrl, secondUrl] = extractImpressionTrackingSetting(impressionTrackingUrls);\r\n\r\n const getImpressionTrackingComponent = url => (\r\n <div>\r\n {i18n.getString(_TL_('Impression tracking URL: ')) +\r\n (!url || url === '' ? i18n.getString(_TL_('None')) : url)}\r\n </div>\r\n );\r\n\r\n return (\r\n <div white-space=\"pre\">\r\n {getImpressionTrackingComponent(firstUrl)}\r\n {getImpressionTrackingComponent(secondUrl)}\r\n </div>\r\n );\r\n};\r\n\r\nconst ImpressionTrackingSetting = ({\r\n i18n,\r\n impressionTrackingUrls,\r\n updateValidation,\r\n}) => {\r\n const classes = useDefaultStyles();\r\n\r\n const [\r\n impressionTrackingSettingRef,\r\n setImpressionTrackingSettingRef,\r\n ] = useState();\r\n\r\n useEffect(() => {\r\n updateValidation([], { ImpressionTrackingUrls: impressionTrackingUrls });\r\n }, [impressionTrackingUrls, updateValidation]);\r\n\r\n const legacyI18n = useMemo(\r\n () => window.globalLegacyI18n.get('$/i18n!legacy/global'),\r\n []\r\n );\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [\r\n legacyI18n,\r\n i18n,\r\n ]);\r\n\r\n const impressionTrackingViewReact = useMemo(\r\n () => {\r\n const impressionTrackingView = new ImpressionTrackingView({\r\n i18n: i18nMerged,\r\n initialImpressionTrackingUrls: impressionTrackingUrls,\r\n isIASSectionVisible: false,\r\n isVerticalUrlInput: true,\r\n });\r\n\r\n impressionTrackingView.render();\r\n\r\n return impressionTrackingView;\r\n },\r\n [impressionTrackingUrls, i18nMerged]\r\n );\r\n\r\n useEffect(\r\n () => {\r\n if (impressionTrackingSettingRef) {\r\n impressionTrackingSettingRef.innerHTML = '';\r\n impressionTrackingSettingRef.append(impressionTrackingViewReact.el);\r\n\r\n impressionTrackingViewReact.on('InputChange', (value) => {\r\n updateValidation([], {\r\n ImpressionTrackingUrls: value,\r\n });\r\n });\r\n }\r\n\r\n return noop;\r\n },\r\n [\r\n impressionTrackingSettingRef,\r\n impressionTrackingViewReact,\r\n updateValidation,\r\n ]\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames([\r\n 'impression-tracking-setting-picker',\r\n classes.pickerContainer,\r\n ])}\r\n >\r\n <div>\r\n {i18n.getString(_TL_('Set up the third-party impression tracking information for your ads.'))}\r\n </div>\r\n <div\r\n className={classNames(['impression-tracking-setting-view'])}\r\n ref={newRef => setImpressionTrackingSettingRef(newRef)}\r\n />\r\n </div>\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 impressionTrackingUrls: PropTypes.shape(PropTypes.string).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nconst validatedImpressionTrackingSetting = withDefaultStyles(\r\n withCustomValidation(ImpressionTrackingSetting),\r\n getTopGridPanelCustomStyles\r\n);\r\n\r\nexport { validatedImpressionTrackingSetting as ImpressionTrackingSetting };\r\n","import React from 'react';\r\n\r\nexport const disclaimerInfo = i18n => (\r\n <div white-space=\"pre\">\r\n {i18n.getString(_TL_('This is a campaign-level disclaimer that will only serve in your Native ads.'))}\r\n </div>\r\n);\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { BoostAnchors } from '@bingads-webui-campaign-react/responsive-ad-editor-components';\r\n\r\nconst ValidatedAnchorAdInternal = ({\r\n validationProps,\r\n updateValidation,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { data = {} } = validationProps;\r\n\r\n const { BoostAnchors: BoostAnchorsData } = data;\r\n\r\n const onUpdate = (result) => {\r\n updateValidation([], { BoostAnchors: result });\r\n };\r\n\r\n return (\r\n <BoostAnchors\r\n i18n={i18n}\r\n defaultSelectedKey={BoostAnchorsData}\r\n onUpdate={onUpdate}\r\n />\r\n );\r\n};\r\n\r\nValidatedAnchorAdInternal.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n BoostAnchors: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedAnchorAd = withCustomValidation(withUnvalidatedControlErrors(withControlErrorHandling(withError(ValidatedAnchorAdInternal))));\r\n\r\n","import React, { useMemo, useContext, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { first, get } from 'underscore';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n ValidatedPanel,\r\n ValidatedFixedPanel,\r\n TextTitle,\r\n getPanelErrorProps,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedUrlOptionsParameter, ValidatedMobileUrlWithoutCheckbox as ValidatedMobileUrl } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { isEmptyUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { ThirdPartyMeasurementWithValidation, ThirdPartyMeasurementV2WithValidation, formatThirdPartyMeasurementSetting } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport MobileFinalUrlImg from '../media/mobile-url.svg';\r\nimport UrlOptionsImg from '../media/campaign-url-options.svg';\r\nimport ImpressionsTracking from '../media/impressions-tracking.svg';\r\nimport CallToActionImg from '../media/call-to-action.svg';\r\nimport ConnectedImage from '../media/connected.svg';\r\nimport Disclaimer from '../media/disclaimer.svg';\r\nimport { getNativeAdsStyles } from '../styles';\r\nimport { getNativeAdPanels } from '../configs';\r\nimport { ValidatedCallToAction } from './validated-call-to-action';\r\nimport { ImpressionTrackingSetting, formatImpressionTrackingSetting } from './impressions-tracking';\r\nimport { disclaimerInfo } from './disclaimer';\r\nimport { ValidatedAnchorAd } from './validated-anchor-ad';\r\n\r\nexport const getFinalUrlCardSummaryDetails = (i18n, finalUrls) => (isEmptyUrl(finalUrls) ? i18n.getString(_TL_('No URL')) : first(finalUrls));\r\n\r\nconst nativeAdMobileFinalUrlsProp = propertyIs('MobileFinalUrls');\r\nconst ServerValidatedMobileFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedMobileUrl, { filter: nativeAdMobileFinalUrlsProp }));\r\n\r\nconst impressionTrackingSettingsProp = propertyIs('ImpressionTrackingUrls');\r\nconst ValidatedImpressionTrackingSetting = withControlErrorHandling(withUnvalidatedControlErrors(ImpressionTrackingSetting, { filter: impressionTrackingSettingsProp }));\r\n\r\nexport const AdvancedSettings = ({\r\n mobileFinalUrls,\r\n trackingUrlTemplate,\r\n finalUrlSuffix,\r\n urlCustomParameters,\r\n impressionTrackingUrls,\r\n verifiedTrackingSettings,\r\n biddingScheme,\r\n CallToAction,\r\n CallToActionText,\r\n CallToActionAriaText,\r\n setNewCTACallback,\r\n BoostAnchors,\r\n isDisplay,\r\n isVideo,\r\n shouldShowDisclaimerPanel,\r\n}) => {\r\n const i18n = useContext(I18nContext);\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 classes = useDefaultStyles(getNativeAdsStyles);\r\n\r\n const [\r\n allAdvancedSettingsSections,\r\n advancedSettingsExpandedSections,\r\n setAdvancedSettingsExpandedSections,\r\n ] = useCollapseState(\r\n getNativeAdPanels(serverContext, isVideo, isDisplay).advancedPanels /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const isThirdPartyMeasurementEnabled = useMemo(() => {\r\n // If is video but biddng scheme is CPV, then return false\r\n if (isVideo && get(biddingScheme, 'Type') === 'ManualCpv') {\r\n return false;\r\n }\r\n\r\n return true;\r\n }, [biddingScheme, isVideo]);\r\n\r\n const verifiedTrackingSettingsValidationProps = useMemo(() => ({\r\n data: {\r\n VerifiedTrackingSettings: verifiedTrackingSettings,\r\n },\r\n initialValue: {\r\n VerifiedTrackingSettings: verifiedTrackingSettings,\r\n },\r\n }), [verifiedTrackingSettings]);\r\n\r\n const allAdvancedSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdvancedSettingsExpandedSections }),\r\n [setAdvancedSettingsExpandedSections]\r\n );\r\n\r\n const [advancedSettingsSectionExpanded, setAdvancedSettingsSectionExpanded] = useState(false);\r\n const onAdvancedSettingsSectionToggle = useCallback((expanded) => {\r\n setAdvancedSettingsSectionExpanded(expanded);\r\n }, []);\r\n\r\n const mobileFinalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n MobileFinalUrls: mobileFinalUrls,\r\n },\r\n initialValue: {\r\n MobileFinalUrls: mobileFinalUrls,\r\n },\r\n }), [mobileFinalUrls]);\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 const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n const mobileFinalUrlDetails = useMemo(() => (isEmptyUrl(mobileFinalUrls) ? i18n.getString(_TL_('Mobile URL: None')) : first(mobileFinalUrls)), [i18n, mobileFinalUrls]);\r\n\r\n const serverValidatedMobileFinalUrl = useMemo(() => (\r\n <ServerValidatedMobileFinalUrl\r\n i18n={i18n}\r\n validationProps={mobileFinalUrlValidationProps}\r\n permissions={permissions}\r\n validateOnRender\r\n validateOnDomain\r\n />\r\n ), [i18n, mobileFinalUrlValidationProps, permissions]);\r\n\r\n const validatedUrlOptionsParameter = useMemo(() => (\r\n <ValidatedUrlOptionsParameter\r\n i18n={i18n}\r\n validationProps={{\r\n initialValue: urlOptions,\r\n data: urlOptions,\r\n }}\r\n />\r\n ), [i18n, urlOptions]);\r\n\r\n const validatedImpressionTrackingSetting = useMemo(() => (\r\n <ValidatedImpressionTrackingSetting\r\n i18n={i18n}\r\n impressionTrackingUrls={impressionTrackingUrls}\r\n />\r\n ), [i18n, impressionTrackingUrls]);\r\n\r\n const thirdPartyMeasurementWithValidation = useMemo(() => {\r\n const ThirdPartyMeasurementComponentWithValidation =\r\n get(permissions, 'IsMOATEnabled', false) ? ThirdPartyMeasurementV2WithValidation : ThirdPartyMeasurementWithValidation;\r\n let adType = 'native';\r\n if (isDisplay) {\r\n adType = 'display';\r\n } else if (isVideo) {\r\n adType = 'video';\r\n }\r\n return (\r\n <ThirdPartyMeasurementComponentWithValidation\r\n i18n={i18n}\r\n validationProps={verifiedTrackingSettingsValidationProps}\r\n adType={adType}\r\n />\r\n );\r\n }, [i18n, verifiedTrackingSettingsValidationProps, permissions, isDisplay, isVideo]);\r\n\r\n const callToAction = useMemo(() => (\r\n <ValidatedCallToAction\r\n i18n={i18n}\r\n permissions={permissions}\r\n validateOnRender\r\n data={{\r\n languageValue: CallToAction && CallToAction.language,\r\n value: CallToAction && CallToAction.cta,\r\n ctaText: CallToActionText,\r\n ctaAriaText: CallToActionAriaText,\r\n }}\r\n setNewCTACallback={setNewCTACallback}\r\n />\r\n ), [CallToAction, CallToActionText, i18n, permissions, setNewCTACallback, CallToActionAriaText]);\r\n\r\n const anchorAd = useMemo(() => (\r\n <ValidatedAnchorAd\r\n validationProps={{\r\n data: {\r\n BoostAnchors,\r\n },\r\n }}\r\n />\r\n ), [BoostAnchors]);\r\n\r\n const advancedInputSections = () => (\r\n <Collapse allPanelItems={allAdvancedSettingsSections} checkItems skipItemsTypeCheck activeKeys={advancedSettingsExpandedSections} setActiveKeys={setAdvancedSettingsExpandedSections}>\r\n <ValidatedPanel\r\n key=\"mobile-final-url\"\r\n title={<TextTitle titleKey={_TL_('Mobile URL')} topicKey=\"pop_BA_CampaignCreate_AudAds_MobileURL\" details={mobileFinalUrlDetails} icon={MobileFinalUrlImg} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAdvancedSettingsExpand,\r\n expandKey: 'mobile-final-url',\r\n }}\r\n >\r\n {serverValidatedMobileFinalUrl}\r\n </ValidatedPanel>\r\n <ValidatedFixedPanel\r\n key=\"call-to-action\"\r\n title={<TextTitle titleKey={_TL_('Call to action')} icon={CallToActionImg} />}\r\n noOverflowHidden\r\n relativePosition\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {callToAction}\r\n </ValidatedFixedPanel>\r\n <ValidatedFixedPanel\r\n key=\"anchor-ad\"\r\n title={<TextTitle titleKey={_TL_('Anchor the ad')} />}\r\n >\r\n {anchorAd}\r\n </ValidatedFixedPanel>\r\n <ValidatedPanel\r\n key=\"advanced-url-options\"\r\n title={<TextTitle titleKey={_TL_('Advanced URL options')} details={urlOptionsDetails} icon={UrlOptionsImg} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAdvancedSettingsExpand,\r\n expandKey: 'advanced-url-options',\r\n }}\r\n >\r\n <span className=\"url-options-descriptions\">\r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n </span>\r\n {validatedUrlOptionsParameter}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"impression-tracking-URLs\"\r\n title={<TextTitle\r\n titleKey={_TL_('Impression tracking URLs')}\r\n details={formatImpressionTrackingSetting(impressionTrackingUrls, i18n)}\r\n icon={ImpressionsTracking}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAdvancedSettingsExpand,\r\n expandKey: 'impression-tracking-URLs',\r\n }}\r\n >\r\n {validatedImpressionTrackingSetting}\r\n </ValidatedPanel>\r\n {\r\n isThirdPartyMeasurementEnabled && (\r\n <ValidatedPanel\r\n key=\"third-party-measurement\"\r\n title={<TextTitle\r\n titleKey={_TL_('Third-party measurement')}\r\n details={formatThirdPartyMeasurementSetting(verifiedTrackingSettings, i18n)}\r\n icon={ConnectedImage}\r\n topicKey=\"pop_BA_VideoAds_Measurement\"\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAdvancedSettingsExpand,\r\n expandKey: 'third-party-measurement',\r\n }}\r\n >\r\n <div className=\"third-party-measurement-container\">\r\n {thirdPartyMeasurementWithValidation}\r\n </div>\r\n </ValidatedPanel>\r\n )\r\n }\r\n {shouldShowDisclaimerPanel && (\r\n <ValidatedFixedPanel\r\n key=\"disclaimer\"\r\n title={<TextTitle\r\n titleKey={_TL_('Disclaimer')}\r\n icon={Disclaimer}\r\n topicKey=\"pop_BA_Audience_Disclaimers\"\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {disclaimerInfo(i18n)}\r\n </ValidatedFixedPanel>\r\n )}\r\n </Collapse>\r\n );\r\n\r\n return (\r\n <>\r\n <ValidatedBootstrapPanel\r\n onToggle={onAdvancedSettingsSectionToggle}\r\n expanded={advancedSettingsSectionExpanded}\r\n actuationProps={{\r\n expand: allAdvancedSettingsExpand,\r\n\r\n }}\r\n className={classNames(classes.collapsiblePanel, 'advanced-settings-panel')}\r\n render={() => (\r\n <>\r\n <BootstrapPanel.Heading>\r\n <BootstrapPanel.Title toggle>\r\n {i18n.getString(_TL_('Advanced settings'))}\r\n </BootstrapPanel.Title>\r\n </BootstrapPanel.Heading>\r\n <BootstrapPanel.Collapse>\r\n <BootstrapPanel.Body style={{ overflow: 'visible' }}>\r\n <div className={classNames('advanced-settings-section')}>\r\n {advancedInputSections()}\r\n </div>\r\n </BootstrapPanel.Body>\r\n </BootstrapPanel.Collapse>\r\n </>\r\n )}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nAdvancedSettings.propTypes = {\r\n finalUrlSuffix: PropTypes.string,\r\n impressionTrackingUrls: PropTypes.arrayOf(PropTypes.string),\r\n mobileFinalUrls: PropTypes.string,\r\n trackingUrlTemplate: PropTypes.string,\r\n urlCustomParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n verifiedTrackingSettings: PropTypes.shape({}),\r\n biddingScheme: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n language: PropTypes.string,\r\n cta: PropTypes.string,\r\n }),\r\n CallToActionText: PropTypes.string,\r\n CallToActionAriaText: PropTypes.string,\r\n BoostAnchors: PropTypes.shape({}),\r\n setNewCTACallback: PropTypes.func,\r\n isDisplay: PropTypes.bool,\r\n isVideo: PropTypes.bool,\r\n shouldShowDisclaimerPanel: PropTypes.bool,\r\n};\r\n\r\nAdvancedSettings.defaultProps = {\r\n finalUrlSuffix: undefined,\r\n mobileFinalUrls: undefined,\r\n trackingUrlTemplate: undefined,\r\n urlCustomParameters: undefined,\r\n impressionTrackingUrls: undefined,\r\n verifiedTrackingSettings: undefined,\r\n biddingScheme: null,\r\n CallToAction: null,\r\n CallToActionText: undefined,\r\n CallToActionAriaText: undefined,\r\n BoostAnchors: undefined,\r\n setNewCTACallback: null,\r\n isDisplay: false,\r\n isVideo: false,\r\n shouldShowDisclaimerPanel: false,\r\n};\r\n","import _, { map } from 'underscore';\r\nimport React, { useContext, useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { TextAssetCollectionWithRecommendations, getTextAssetCollectionConfig, getTextAssetCollectionConfigByFeature } from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nconst HeadlinesWithRecommendationPrefillInternal = (props) => {\r\n const {\r\n currentData,\r\n withInlineRecommendations,\r\n updateValidation,\r\n isAudienceAd,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const permissions = useContext(PermissionsContext);\r\n const textAssetCollectionConfig = useMemo(() => getTextAssetCollectionConfigByFeature({ featureName: 'displayPlus' }), []);\r\n\r\n const headlineConfig = useMemo(() => getTextAssetCollectionConfig('headlines', i18n, textAssetCollectionConfig), [i18n, textAssetCollectionConfig]);\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n\r\n const headlinesRecommendationText = useMemo(() =>\r\n recommendationContext && recommendationContext.headlines && map(recommendationContext.headlines, rec => rec.Text), [recommendationContext]);\r\n const [prevHeadlineRecommendation, setPrevHeadlineRecommendation] = useState();\r\n\r\n useEffect(() => {\r\n if (headlinesRecommendationText && _.isArray(headlinesRecommendationText) && !_.isEmpty(headlinesRecommendationText) &&\r\n currentData && currentData.Headline0 === '') {\r\n if (prevHeadlineRecommendation &&\r\n (headlinesRecommendationText[0] === prevHeadlineRecommendation[0])) {\r\n return;\r\n }\r\n\r\n setPrevHeadlineRecommendation(headlinesRecommendationText);\r\n currentData.Headline0 = (headlinesRecommendationText && headlinesRecommendationText[0]) || '';\r\n updateValidation([], {\r\n Headlines: currentData,\r\n });\r\n }\r\n }, [prevHeadlineRecommendation, headlinesRecommendationText, currentData, updateValidation]);\r\n\r\n return (\r\n <TextAssetCollectionWithRecommendations\r\n {...headlineConfig}\r\n validationProps={{\r\n data: {\r\n Headlines: currentData,\r\n },\r\n }}\r\n isOptional={false}\r\n showDeleteButton\r\n i18n={i18n}\r\n withInlineRecommendations={withInlineRecommendations}\r\n updateValidation={updateValidation}\r\n enableCopilotRecommendations={permissions.dynamic.DisplayPlusCopilotRecommendations}\r\n isAudienceAd={isAudienceAd}\r\n />\r\n );\r\n};\r\n\r\nHeadlinesWithRecommendationPrefillInternal.propTypes = {\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n withInlineRecommendations: PropTypes.bool.isRequired,\r\n currentData: PropTypes.shape({\r\n Headline0: PropTypes.string,\r\n Headline1: PropTypes.string,\r\n }).isRequired,\r\n textAssetConfig: PropTypes.shape({\r\n descriptions: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n isAudienceAd: PropTypes.bool,\r\n};\r\n\r\nHeadlinesWithRecommendationPrefillInternal.defaultProps = {\r\n isAudienceAd: false,\r\n};\r\n\r\nexport const HeadlinesWithRecommendationPrefill = withCustomValidation(HeadlinesWithRecommendationPrefillInternal);\r\n","import _, { map } from 'underscore';\r\nimport React, { useContext, useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { TextAssetCollectionWithRecommendations, getTextAssetCollectionConfig, getTextAssetCollectionConfigByFeature } from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nconst LongHeadlinesWithRecommendationPrefillInternal = (props) => {\r\n const {\r\n currentData,\r\n withInlineRecommendations,\r\n updateValidation,\r\n } = props;\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const i18n = useContext(I18nContext);\r\n const permissions = useContext(PermissionsContext);\r\n const textAssetCollectionConfig = useMemo(() => getTextAssetCollectionConfigByFeature({ featureName: 'displayPlus' }), []);\r\n\r\n const longHeadlineConfig = useMemo(() => getTextAssetCollectionConfig('longHeadlines', i18n, textAssetCollectionConfig), [i18n, textAssetCollectionConfig]);\r\n\r\n const longHeadlinesRecommendationText = useMemo(() =>\r\n recommendationContext && recommendationContext.longHeadlines && map(recommendationContext.longHeadlines, rec => rec.Text), [recommendationContext]);\r\n const [prevLongHeadlineRecommendation, setPrevLongHeadlineRecommendation] = useState();\r\n\r\n useEffect(() => {\r\n if (longHeadlinesRecommendationText && _.isArray(longHeadlinesRecommendationText) && !_.isEmpty(longHeadlinesRecommendationText) &&\r\n currentData && currentData.LongHeadline0 === '') {\r\n if (prevLongHeadlineRecommendation && longHeadlinesRecommendationText[0] === prevLongHeadlineRecommendation[0]) {\r\n return;\r\n }\r\n\r\n setPrevLongHeadlineRecommendation(longHeadlinesRecommendationText);\r\n currentData.LongHeadline0 = (longHeadlinesRecommendationText && longHeadlinesRecommendationText[0]) || '';\r\n updateValidation([], {\r\n LongHeadlines: currentData,\r\n });\r\n }\r\n }, [prevLongHeadlineRecommendation, longHeadlinesRecommendationText, currentData, updateValidation]);\r\n\r\n return (\r\n <TextAssetCollectionWithRecommendations\r\n {...longHeadlineConfig}\r\n validationProps={{\r\n data: {\r\n LongHeadlines: currentData,\r\n },\r\n }}\r\n isOptional={false}\r\n showDeleteButton\r\n i18n={i18n}\r\n withInlineRecommendations={withInlineRecommendations}\r\n updateValidation={updateValidation}\r\n enableCopilotRecommendations={permissions.dynamic.DisplayPlusCopilotRecommendations}\r\n />\r\n );\r\n};\r\n\r\nLongHeadlinesWithRecommendationPrefillInternal.propTypes = {\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n withInlineRecommendations: PropTypes.bool.isRequired,\r\n currentData: PropTypes.shape({\r\n LongHeadline0: PropTypes.string,\r\n }).isRequired,\r\n textAssetConfig: PropTypes.shape({\r\n descriptions: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const LongHeadlinesWithRecommendationPrefill = withCustomValidation(LongHeadlinesWithRecommendationPrefillInternal);\r\n","import _, { map } from 'underscore';\r\nimport React, { useContext, useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { TextAssetCollectionWithRecommendations, getTextAssetCollectionConfig, getTextAssetCollectionConfigByFeature } from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nconst DescriptionsWithRecommendationPrefillInternal = (props) => {\r\n const {\r\n currentData,\r\n withInlineRecommendations,\r\n updateValidation,\r\n } = props;\r\n\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const i18n = useContext(I18nContext);\r\n const permissions = useContext(PermissionsContext);\r\n const textAssetCollectionConfig = useMemo(() => getTextAssetCollectionConfigByFeature({ featureName: 'displayPlus' }), []);\r\n\r\n const descriptionsConfig = useMemo(() => getTextAssetCollectionConfig('descriptions', i18n, textAssetCollectionConfig), [i18n, textAssetCollectionConfig]);\r\n\r\n\r\n const descriptionsRecommendationText = useMemo(() =>\r\n recommendationContext && recommendationContext.descriptions && map(recommendationContext.descriptions, rec => rec.Text), [recommendationContext]);\r\n const [prevDescriptionRecommendation, setPrevDescriptionRecommendation] = useState();\r\n\r\n useEffect(() => {\r\n if (descriptionsRecommendationText && _.isArray(descriptionsRecommendationText) && !_.isEmpty(descriptionsRecommendationText) &&\r\n currentData && currentData.Description0 === '') {\r\n if (prevDescriptionRecommendation && descriptionsRecommendationText[0] === prevDescriptionRecommendation[0]) {\r\n return;\r\n }\r\n\r\n setPrevDescriptionRecommendation(descriptionsRecommendationText);\r\n currentData.Description0 = (descriptionsRecommendationText && descriptionsRecommendationText[0]) || '';\r\n updateValidation([], {\r\n Descriptions: currentData,\r\n });\r\n }\r\n }, [prevDescriptionRecommendation, descriptionsRecommendationText, currentData, updateValidation]);\r\n\r\n\r\n return (\r\n <TextAssetCollectionWithRecommendations\r\n {...descriptionsConfig}\r\n validationProps={{\r\n data: {\r\n Descriptions: currentData,\r\n },\r\n }}\r\n isOptional={false}\r\n showDeleteButton\r\n i18n={i18n}\r\n withInlineRecommendations={withInlineRecommendations}\r\n updateValidation={updateValidation}\r\n enableCopilotRecommendations={permissions.dynamic.DisplayPlusCopilotRecommendations}\r\n />\r\n );\r\n};\r\n\r\nDescriptionsWithRecommendationPrefillInternal.propTypes = {\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n withInlineRecommendations: PropTypes.bool.isRequired,\r\n currentData: PropTypes.shape({\r\n Description0: PropTypes.string,\r\n }).isRequired,\r\n textAssetConfig: PropTypes.shape({\r\n descriptions: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const DescriptionsWithRecommendationPrefill = withCustomValidation(DescriptionsWithRecommendationPrefillInternal);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HeadlinesWithRecommendationPrefill } from './headlines-with-recommendation-prefill';\r\nimport { LongHeadlinesWithRecommendationPrefill } from './long-headlines-with-recommendation-prefill';\r\nimport { DescriptionsWithRecommendationPrefill } from './descriptions-with-recommendation-prefill';\r\n\r\nconst TextAssetCollectionWithRecommendationPrefillInternal = (props) => {\r\n const {\r\n validationProps,\r\n withInlineRecommendations,\r\n fetchRecommendationAssets,\r\n cancelFetchRecommendationAssetsJob,\r\n isAudienceAd,\r\n } = props;\r\n\r\n const { data } = validationProps;\r\n const currentHeadlines = (data && data.Headlines) || '';\r\n const currentLongHeadlines = (data && data.LongHeadlines) || '';\r\n const currentDescriptions = (data && data.Descriptions) || '';\r\n\r\n return (\r\n <div className=\"text-asset-collections\">\r\n <HeadlinesWithRecommendationPrefill\r\n currentData={currentHeadlines}\r\n isOptional={false}\r\n showDeleteButton={false}\r\n withInlineRecommendations={withInlineRecommendations}\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n isAudienceAd={isAudienceAd}\r\n />\r\n <LongHeadlinesWithRecommendationPrefill\r\n currentData={currentLongHeadlines}\r\n isOptional={false}\r\n showDeleteButton={false}\r\n withInlineRecommendations={withInlineRecommendations}\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n />\r\n <DescriptionsWithRecommendationPrefill\r\n currentData={currentDescriptions}\r\n isOptional={false}\r\n showDeleteButton={false}\r\n withInlineRecommendations={withInlineRecommendations}\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nTextAssetCollectionWithRecommendationPrefillInternal.propTypes = {\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n withInlineRecommendations: PropTypes.bool.isRequired,\r\n textAssetConfig: PropTypes.shape({\r\n headlines: PropTypes.shape({}),\r\n longHeadlines: PropTypes.shape({}),\r\n descriptions: PropTypes.shape({}),\r\n }),\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Headlines: PropTypes.shape({}),\r\n LongHeadlines: PropTypes.shape({}),\r\n Descriptions: PropTypes.shape({}),\r\n }),\r\n }),\r\n isAudienceAd: PropTypes.bool.isRequired,\r\n};\r\n\r\nTextAssetCollectionWithRecommendationPrefillInternal.defaultProps = {\r\n textAssetConfig: {\r\n headlines: {},\r\n longHeadlines: {},\r\n descriptions: {},\r\n },\r\n validationProps: {\r\n data: {\r\n Headlines: {},\r\n LongHeadlines: {},\r\n Descriptions: {},\r\n },\r\n },\r\n};\r\n\r\nexport const TextAssetCollectionWithRecommendationPrefill = TextAssetCollectionWithRecommendationPrefillInternal;\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n HeadlineAssetCollection,\r\n LongHeadlineAssetCollection,\r\n DescriptionAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getImageExperienceStyles } from '../../styles';\r\n\r\nconst TextAssetCollectionWithCoPilotInternal = (props) => {\r\n const {\r\n fetchRecommendationAssets,\r\n cancelFetchRecommendationAssetsJob,\r\n setAddNewShortHeadlinesCallback,\r\n setAddNewLongHeadlinesCallback,\r\n setAddNewDescriptionCallback,\r\n isAudienceAd,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getImageExperienceStyles);\r\n const permissions = useContext(PermissionsContext);\r\n\r\n const headlineAssetCollection = useMemo(() => (\r\n <HeadlineAssetCollection\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n isOptional={false}\r\n showDeleteButton\r\n featureName=\"displayPlus\"\r\n enableCopilotRecommendations={permissions.dynamic.DisplayPlusCopilotRecommendations}\r\n setAddNewShortHeadlinesCallback={setAddNewShortHeadlinesCallback}\r\n isAudienceAd={isAudienceAd}\r\n />\r\n ), [fetchRecommendationAssets, cancelFetchRecommendationAssetsJob, permissions.dynamic.DisplayPlusCopilotRecommendations, setAddNewShortHeadlinesCallback, isAudienceAd]);\r\n\r\n const longHeadlineAssetCollection = useMemo(() => (\r\n <LongHeadlineAssetCollection\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n isOptional={false}\r\n showDeleteButton\r\n featureName=\"displayPlus\"\r\n enableCopilotRecommendations={permissions.dynamic.DisplayPlusCopilotRecommendations}\r\n setAddNewLongHeadlinesCallback={setAddNewLongHeadlinesCallback}\r\n />\r\n ), [fetchRecommendationAssets, cancelFetchRecommendationAssetsJob, permissions.dynamic.DisplayPlusCopilotRecommendations, setAddNewLongHeadlinesCallback]);\r\n\r\n const descriptionAssetCollection = useMemo(() => (\r\n <DescriptionAssetCollection\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n isOptional={false}\r\n showDeleteButton\r\n featureName=\"displayPlus\"\r\n enableCopilotRecommendations={permissions.dynamic.DisplayPlusCopilotRecommendations}\r\n setAddNewDescriptionCallback={setAddNewDescriptionCallback}\r\n />\r\n ), [fetchRecommendationAssets, cancelFetchRecommendationAssetsJob, permissions.dynamic.DisplayPlusCopilotRecommendations, setAddNewDescriptionCallback]);\r\n\r\n return (\r\n <div className={classNames('text-asset-collections', classes.textAssetStyle)}>\r\n {headlineAssetCollection}\r\n {longHeadlineAssetCollection}\r\n {descriptionAssetCollection}\r\n </div>\r\n );\r\n};\r\n\r\nTextAssetCollectionWithCoPilotInternal.propTypes = {\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n setAddNewLongHeadlinesCallback: PropTypes.func.isRequired,\r\n setAddNewDescriptionCallback: PropTypes.func.isRequired,\r\n isAudienceAd: PropTypes.bool,\r\n};\r\n\r\nTextAssetCollectionWithCoPilotInternal.defaultProps = {\r\n isAudienceAd: false,\r\n};\r\n\r\nexport const TextAssetCollectionWithCoPilot = withCustomValidation(TextAssetCollectionWithCoPilotInternal);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEmpty, any, uniq } from 'underscore';\r\nimport { HotspotPanel } from '@bingads-webui-campaign-react/responsive-ad-editor-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { entityIs, andComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { ERROR_ENTITY } from '../constants';\r\n\r\nconst nativeAdHotspotsProp = andComp(entityIs(ERROR_ENTITY.Ad), propertyIs('Uri'));\r\n\r\nconst ValidatedHotspotInternal = ({\r\n updateValidation,\r\n validationProps,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { data = {} } = validationProps;\r\n\r\n const { hotspots } = data;\r\n\r\n const validateHotSpot = (newHostpots) => {\r\n const missField = newHostpots.map(i =>\r\n isEmpty(i.glyph) || isEmpty(i.title) || isEmpty(i.actionText) || isEmpty(i.uri) ||\r\n (isEmpty(i.placement)));\r\n\r\n if (any(missField)) {\r\n return [i18n.getString(_TL_('HotSpot missing required field'))];\r\n }\r\n\r\n // check if any duplicate hotspot\r\n const hotspotStrings = newHostpots.map(hotspot => hotspot.title + hotspot.actionText + hotspot.desc + hotspot.uri + hotspot.glyph);\r\n\r\n if (newHostpots.length !== uniq(hotspotStrings).length) {\r\n return [i18n.getString(_TL_('HotSpots duplication'))];\r\n }\r\n\r\n return [];\r\n };\r\n\r\n const onUpdateHotspots = (newHostpots) => {\r\n updateValidation(validateHotSpot(newHostpots), { hotspots: [...newHostpots] });\r\n };\r\n\r\n return (\r\n <HotspotPanel\r\n onUpdateHotspots={onUpdateHotspots}\r\n enableHotSpotPlacement\r\n i18n={i18n}\r\n hideTitle\r\n showHotspotCount\r\n hotspots={hotspots || []}\r\n />\r\n );\r\n};\r\n\r\nValidatedHotspotInternal.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n hotspots: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport const ValidatedHotspot = withControlErrorHandling(withUnvalidatedControlErrors(\r\n withError(withCustomValidation(ValidatedHotspotInternal)),\r\n { filter: nativeAdHotspotsProp }\r\n));\r\n","export const getMultiAdVideoPreviewStyles = (/* components, theme */) => ({\r\n adPreviewTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n height: 280,\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 height: 280,\r\n width: '100%',\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});\r\n","import React, { useRef, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text } 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 { getMultiAdVideoPreviewStyles } from '../styles/multi-ad-video-preview-styles';\r\n\r\nexport const MultiAdVideoPreview = (props) => {\r\n const {\r\n i18n,\r\n data = { videos: [] },\r\n selectedVideoIdx = '',\r\n loadClipchampPlayer,\r\n permissions,\r\n } = props;\r\n\r\n const [selectedVideo, setSelectedVideo] = useState(null);\r\n const videoRef = useRef();\r\n\r\n useEffect(() => {\r\n if (data.videos && selectedVideoIdx !== '') {\r\n const video = data.videos[selectedVideoIdx];\r\n setSelectedVideo(video);\r\n } else {\r\n setSelectedVideo(null);\r\n }\r\n }, [data, selectedVideoIdx]);\r\n\r\n useEffect(() => {\r\n if (videoRef.current) {\r\n videoRef.current.load();\r\n }\r\n }, [selectedVideo]);\r\n\r\n const classes = useDefaultStyles(getMultiAdVideoPreviewStyles);\r\n const source = selectedVideo ? selectedVideo.src : '';\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n return (\r\n <div className={classes.adPreviewRoot}>\r\n <div className={classes.adPreviewHeader}>\r\n <Text className={classes.adPreviewTitle}>\r\n {i18n.getString(_TL_('Ad preview'))}\r\n </Text>\r\n </div>\r\n <div className={classes.previewContainer}>\r\n {videoTemplateUIEnabled ? (\r\n <ClipchampPlayer videoUrl={source} height=\"280\" width=\"100%\" loadClipchampPlayer={loadClipchampPlayer} />\r\n ) : (\r\n <video className={classes.video} controls ref={videoRef}>\r\n <source src={source} />\r\n <track\r\n kind=\"captions\"\r\n src=\"\"\r\n srcLang=\"en\"\r\n label=\"English\"\r\n default\r\n />\r\n </video>\r\n )}\r\n </div>\r\n <div className={classes.previewTag}>\r\n <Text>\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 </Text>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nMultiAdVideoPreview.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n selectedVideoIdx: PropTypes.string,\r\n data: PropTypes.shape({\r\n data: PropTypes.instanceOf(Array),\r\n }).isRequired,\r\n};\r\n\r\nMultiAdVideoPreview.defaultProps = {\r\n selectedVideoIdx: null,\r\n};\r\n","import classNames from 'classnames';\r\nimport React, { useContext, useMemo, useRef, useState, useCallback, useEffect } from 'react';\r\nimport _, { noop, isArray, first, isEmpty } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeStyles } from '@fluentui/react';\r\nimport { Tab, TabList } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n ValidatedPanel,\r\n ValidatedFixedPanel,\r\n getPanelErrorProps,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getFinalUrlCardSummaryDetails } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withFinalUrlRecommendationUpdate } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ValidatedLegacyCallToActionWithLanguage } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport {\r\n CopilotRepositoryProvider,\r\n withBannerService,\r\n} from '@bingads-webui/inline-copilot';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { entityIs, andComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport {\r\n ValidatedFinalUrlWithRecommendations,\r\n ValidatedStoreBackedBusinessName,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { getODataConfig, ValidatedVideoExperienceWithRecommendationFetch } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { getTextCardSummaryDetails } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport {\r\n ImageListPortalContainerWithControlErrorHandling,\r\n ImageListSummaryCardDetails,\r\n ValidatedImageExperienceWrapper,\r\n PerfMaxAdPreview,\r\n PerfMaxAdPreviewUAPL,\r\n PerfMaxImageSuggestionCarousel,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { AdPlacementsGroupType } from '@bingads-webui-campaign-react/ad-placement-consts';\r\nimport { useCopilot } from '@bingads-webui-campaign-react/copilot-experience';\r\nimport { DisclaimerAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport Repository from '@bingads-webui-campaign-legacy/adextension-shared/service/repository';\r\nimport { getAssetEnhancementSettings } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\n\r\nimport { getImageExperienceStyles } from './styles';\r\nimport ImageAssetsImg from './media/image-assets.svg';\r\nimport VideoAssetsImg from './media/video-assets.svg';\r\nimport FinalUrlImg from './media/final-url.svg';\r\nimport LogoAssetsImg from './media/logo-assets.svg';\r\nimport BusinessNameImg from './media/business-name.svg';\r\nimport TextAssetsImg from './media/text.svg';\r\nimport hotspotImg from './media/hotspot.svg';\r\nimport CallToActionImg from './media/call-to-action.svg';\r\nimport { AdvancedSettings } from './components/advanced-settings';\r\nimport { TextAssetCollectionWithRecommendationPrefill } from './components/text-asset-collection-with-recommendation-prefill';\r\nimport { TextAssetCollectionWithCoPilot } from './components/text-asset-collection-with-copilot';\r\nimport {\r\n extraPlacementInfo,\r\n msanMMAConfig,\r\n msanMMAV2Config,\r\n responsiveMsanMMAConfig,\r\n responsiveMsanMMABoostConfigV2,\r\n msanMMABoostConfig,\r\n msanMMABoostConfigV2,\r\n responsiveMsanMMABoostConfig,\r\n AdPreviewOverideStylesByKey,\r\n ERROR_ENTITY,\r\n} from './constants';\r\nimport { getNativeAdPanels } from './configs';\r\nimport { ValidatedHotspot } from './components/validated-hotspot';\r\nimport { MultiAdVideoPreview } from './components/multi-ad-video-preview';\r\n\r\nconst DisplayPlusMaxImageCount = 16;\r\nconst DisplayPlusMaxVideoCount = 5;\r\n\r\nconst TAB_IMAGE_ADS = 'imageAds';\r\nconst TAB_VIDEO_ADS = 'videoAds';\r\n\r\nconst videoTypesWithOrder = ['VideoMedia16X9'];\r\n\r\nconst advancedSettingsStyles = mergeStyles({\r\n marginBottom: 40,\r\n});\r\n\r\nconst nativeAdBusinessNameProp = andComp(entityIs(ERROR_ENTITY.Ad), propertyIs('BusinessName'));\r\nconst nativeAdFinalUrlsProp = andComp(entityIs(ERROR_ENTITY.Ad), propertyIs('FinalUrls'));\r\nconst ValidatedFinalUrlWithStoreURL = withError(withCustomValidation(withFinalUrlRecommendationUpdate(ValidatedFinalUrlWithRecommendations)));\r\nconst ServerValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedFinalUrlWithStoreURL, { filter: nativeAdFinalUrlsProp }));\r\n\r\nconst getPlacementCount = (IsAmplifyEnabled, DisplayPlusAmplify, IsMMAV2Enabled) => {\r\n if (IsAmplifyEnabled && DisplayPlusAmplify) {\r\n return 11;\r\n } else if (IsMMAV2Enabled) {\r\n return 10;\r\n }\r\n return 7;\r\n};\r\n\r\nexport const DisplayPlusNativeAdsInternal = ({\r\n data: ads,\r\n editingAdId,\r\n onDataChange,\r\n isSaving,\r\n isCanceling,\r\n biddingScheme,\r\n scope,\r\n activity,\r\n supportImageFitting,\r\n setAds,\r\n loadClipchampPlayer = null,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const { cid, aid } = scope.values || {};\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n IsAmplifyEnabled, IsMSANLogoAndCTAForMMAEnabled, IsMSANDisclaimerEnabled, IsDomesticSimplifiedChineseEnabled,\r\n } = Permissions;\r\n\r\n const useClipchamp = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n const {\r\n DisplayPlusCopilotRecommendations, DisplayPlusAmplify, UAPLNativeAdIntegration, CopilotCTALogoGeneration,\r\n ImageFittingMVP = false, ImageFittingExlcudeMAE = true, ImageFittingUnifiedImageROI, AdPreviewRefresh,\r\n } = DynamicPermissions;\r\n\r\n const isMMAV2Enabled = Permissions.IsMMAV2Enabled && !(IsAmplifyEnabled && DisplayPlusAmplify);\r\n\r\n const stylingProps = useMemo(() =>\r\n (\r\n {\r\n component: {\r\n placements: getPlacementCount(DisplayPlusAmplify, IsAmplifyEnabled, isMMAV2Enabled),\r\n isMMAV2Enabled,\r\n },\r\n }\r\n ), [DisplayPlusAmplify, IsAmplifyEnabled, isMMAV2Enabled]);\r\n\r\n const getClasses = useResponsiveStyles(getImageExperienceStyles, stylingProps);\r\n\r\n const { data } = ads;\r\n const finalUrls = data && data.FinalUrls;\r\n const FinalUrlForRecommendation = data && data.FinalUrlForRecommendation;\r\n const businessName = data && data.BusinessName;\r\n const mobileFinalUrls = data && data.MobileFinalUrls;\r\n const headlines = (data && data.Headlines) || [];\r\n const longHeadlines = (data && data.LongHeadlines) || [];\r\n const descriptions = (data && data.Descriptions) || [];\r\n const TrackingUrlTemplate = data && data.TrackingUrlTemplate;\r\n const FinalUrlSuffix = data && data.FinalUrlSuffix;\r\n const UrlCustomParameters = data && data.UrlCustomParameters;\r\n const images = data && data.Images;\r\n const videos = data && data.videos;\r\n const impressionTrackingUrls = data && data.ImpressionTrackingUrls;\r\n const verifiedTrackingSettings = data && data.VerifiedTrackingSettings;\r\n const hotspots = data && data.hotspots;\r\n const CallToAction = data && data.CallToAction;\r\n const CallToActionText = data && data.CallToActionText;\r\n const CallToActionAriaText = data && data.CallToActionAriaText;\r\n const BoostAnchors = data && data.BoostAnchors;\r\n const Campaign = data && data.Campaign;\r\n const LegacyResponsiveAd = data && data.LegacyResponsiveAd; // true if is RA\r\n\r\n // disable image fitting for boost campaigns\r\n // disable image fitting for RA\r\n const isImageFittingEnabled = ImageFittingMVP && !ImageFittingExlcudeMAE && ImageFittingUnifiedImageROI && supportImageFitting && !(IsAmplifyEnabled && DisplayPlusAmplify) && !LegacyResponsiveAd;\r\n\r\n const nativeAdPanels = getNativeAdPanels(serverContext).basicPanels;\r\n\r\n const [\r\n allAdSettingsSections,\r\n adSettingsExpandedSections,\r\n setAdSettingsExpandedSections,\r\n ] = useCollapseState(\r\n nativeAdPanels /* all sections */,\r\n ['images', 'videos', 'logos', 'portrait-images', 'hotspot', 'business-name', 'text', 'call-to-action'] /* initially expanded sections */\r\n );\r\n\r\n const [\r\n finalUrlSection,\r\n finalUrlExpandedSection,\r\n setFinalUrlExpandedSection,\r\n ] = useCollapseState(['final-url'], ['final-url']);\r\n\r\n const maxUploadNum = useMemo(() => {\r\n const imageListLength = images && images.ImageList && isArray(images.ImageList) ? images.ImageList.length : 0;\r\n return DisplayPlusMaxImageCount - imageListLength;\r\n }, [images]);\r\n\r\n // copilot states and actions\r\n const [addNewDescriptionCallback, setAddNewDescriptionCallback] = useState(noop);\r\n const [addNewShortHeadlinesCallback, setAddNewShortHeadlinesCallback] = useState(noop);\r\n const [addNewLongHeadlinesCallback, setAddNewLongHeadlinesCallback] = useState(noop);\r\n\r\n const [finalUrlForCopilotRecommendations, setFinalUrlForCopilotRecommendations] = useState(first(finalUrls));\r\n\r\n const [selectedVideoIdx, setSelectedVideoIdx] = useState(null);\r\n const [selectedValue, setSelectedValue] = useState('imageAds');\r\n const [imageExperiencePortalContainerState, setImageExperiencePortalContainerState] = useState({});\r\n const [previewImagesSharedState, setPreviewImagesSharedState] = useState({ previewImageId: null, cropImageObj: null });\r\n const [imageExperienceAddNewImageCallback, setImageExperienceAddNewImageCallback] = useState(noop);\r\n const [newCTACallback, setNewCTACallback] = useState(noop);\r\n const [assetAIEnhancementEnabled, setAssetAIEnhancementEnabled] = useState(false);\r\n const [assetAIEnhancementSettingsCalled, setAssetAIEnhancementSettingsCalled] = useState(false);\r\n const [useBrandKit, setUseBrandKit] = useState(true);\r\n\r\n const imagesContainerRef = useRef(null);\r\n const logosContainerRef = useRef(null);\r\n const portraitContainerRef = useRef(null);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\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\r\n const shouldLogosBeEnabled = useMemo(() => _.indexOf(nativeAdPanels, 'logos') !== -1, [nativeAdPanels]);\r\n const shouldPortraitBeEnabled = useMemo(() => _.indexOf(nativeAdPanels, 'portrait-images') !== -1, [nativeAdPanels]);\r\n\r\n const collectionsSummary = useMemo(() => ([\r\n { collection: headlines, displayText: i18n.getString(_TL_('short headlines')), displayTextSingular: i18n.getString(_TL_('short headline')) },\r\n { collection: longHeadlines, displayText: i18n.getString(_TL_('long headlines')), displayTextSingular: i18n.getString(_TL_('long headline')) },\r\n { collection: descriptions, displayText: i18n.getString(_TL_('descriptions')), displayTextSingular: i18n.getString(_TL_('description')) },\r\n ]), [headlines, longHeadlines, descriptions, i18n]);\r\n\r\n const textCardSummaryDetails = useMemo(() => getTextCardSummaryDetails(collectionsSummary, i18n), [collectionsSummary, i18n]);\r\n\r\n const hotspotSummaryDetails = useMemo(() => {\r\n if (!hotspots) {\r\n return i18n.getString(_TL_('No hotspots added'));\r\n }\r\n if (hotspots.length === 0) {\r\n return i18n.getString(_TL_('No hotspots added'));\r\n } else if (hotspots.length === 1) {\r\n return i18n.getString(_TL_('1 hotspot added'));\r\n }\r\n return i18n.getString(_TL_('{{count}} hotspots added'), { count: hotspots.length });\r\n }, [hotspots, i18n]);\r\n\r\n const allAssetsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdSettingsExpandedSections }),\r\n [setAdSettingsExpandedSections]\r\n );\r\n\r\n const finalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n FinalUrls: finalUrls,\r\n },\r\n initialValue: {\r\n FinalUrls: finalUrls,\r\n },\r\n debounce: 400,\r\n }), [finalUrls]);\r\n\r\n const textAssetsValidationProps = useMemo(() => ({\r\n data: {\r\n Headlines: headlines,\r\n LongHeadlines: longHeadlines,\r\n Descriptions: descriptions,\r\n },\r\n }), [headlines, longHeadlines, descriptions]);\r\n\r\n const ctaValidationProps = useMemo(() => ({\r\n data: {\r\n ...CallToAction,\r\n },\r\n }), [CallToAction]);\r\n\r\n const onTabSelect = useCallback((event, tab) => {\r\n setSelectedValue(tab.value);\r\n }, []);\r\n\r\n const onReset = useCallback(() => {\r\n const dataPatch = {\r\n data: {\r\n data: {\r\n ...data,\r\n Images: {\r\n ...data.Images,\r\n ImageList: [],\r\n ImageAssets: null,\r\n },\r\n Headlines: {\r\n Headline0: '',\r\n Headline1: '',\r\n Headline2: '',\r\n },\r\n LongHeadlines: {\r\n LongHeadline0: '',\r\n },\r\n Descriptions: {\r\n Description0: '',\r\n Description1: '',\r\n },\r\n },\r\n isValid: false,\r\n },\r\n };\r\n\r\n setAds({\r\n ...data,\r\n Images: {\r\n ...data.Images,\r\n ImageList: [],\r\n ImageAssets: null,\r\n },\r\n Headlines: {\r\n Headline0: '',\r\n Headline1: '',\r\n Headline2: '',\r\n },\r\n LongHeadlines: {\r\n LongHeadline0: '',\r\n },\r\n Descriptions: {\r\n Description0: '',\r\n Description1: '',\r\n },\r\n });\r\n\r\n onDataChange(dataPatch);\r\n }, [data, onDataChange]);\r\n\r\n const [shouldShowDisclaimerPanel, setShouldShowDisclaimerPanel] = useState(false);\r\n const disclaimerRepositoryRef = useRef(new Repository({\r\n schema: DisclaimerAdExtension,\r\n skipExtensionCache: true,\r\n }));\r\n\r\n useEffect(() => {\r\n if (activity && activity.signal) {\r\n activity.signal(`[VideoAdsCopilot] - VideoAsAnAsset useBrandKitToggle changed to ${useBrandKit}`);\r\n }\r\n }, [useBrandKit, activity]);\r\n\r\n useEffect(() => {\r\n if (!IsMSANDisclaimerEnabled) {\r\n setShouldShowDisclaimerPanel(false);\r\n return null;\r\n }\r\n\r\n if (IsDomesticSimplifiedChineseEnabled) {\r\n setShouldShowDisclaimerPanel(false);\r\n return null;\r\n }\r\n\r\n if (Campaign && Campaign.Id) {\r\n return disclaimerRepositoryRef.current.association.findAll({\r\n where: {\r\n campaignId: Campaign.Id,\r\n },\r\n }).then((disclaimerdata) => {\r\n if (disclaimerdata && disclaimerdata.length > 0) {\r\n setShouldShowDisclaimerPanel(true);\r\n } else {\r\n setShouldShowDisclaimerPanel(false);\r\n }\r\n });\r\n }\r\n setShouldShowDisclaimerPanel(false);\r\n return null;\r\n }, [Campaign, IsMSANDisclaimerEnabled, IsDomesticSimplifiedChineseEnabled]);\r\n\r\n const {\r\n copilotBanner,\r\n suggestionPoller,\r\n } = useCopilot({\r\n maxUploadNum,\r\n addNewShortHeadlinesCallback,\r\n addNewLongHeadlinesCallback,\r\n addNewDescriptionCallback,\r\n imageExperienceAddNewImageCallback,\r\n newCTACallback,\r\n currentCTA: CallToAction && CallToAction.cta,\r\n onReset,\r\n cid,\r\n aid,\r\n serverContext,\r\n instrumentation,\r\n data,\r\n isSaving,\r\n isCanceling,\r\n enableCopilotRecommendations: DisplayPlusCopilotRecommendations,\r\n skipBusinessNameRecommendation: IsAmplifyEnabled && DisplayPlusAmplify,\r\n });\r\n\r\n const updateFinalUrlForCopilotRecommendations = useCallback(() => {\r\n // to prevent sending too many requests, only update the copilot recommendations after user has finished editing URL\r\n if (IsAmplifyEnabled && DisplayPlusAmplify) {\r\n // for boost campaigns remove the boost prefix from the final url\r\n const schemeRegex = /^(?!https?:\\/\\/)[\\w-]+:/i;\r\n\r\n // Replace the scheme part with an empty string\r\n const urlWithoutScheme = FinalUrlForRecommendation.replace(schemeRegex, '');\r\n\r\n setFinalUrlForCopilotRecommendations(urlWithoutScheme);\r\n } else {\r\n setFinalUrlForCopilotRecommendations(FinalUrlForRecommendation);\r\n }\r\n }, [DisplayPlusAmplify, FinalUrlForRecommendation, IsAmplifyEnabled]);\r\n\r\n const onFinalUrlFocusOut = useCallback(() => {\r\n updateFinalUrlForCopilotRecommendations();\r\n }, [updateFinalUrlForCopilotRecommendations]);\r\n\r\n const onFinalUrlKeyUp = useCallback((e) => {\r\n const { key } = e;\r\n if (key === 'Enter') {\r\n updateFinalUrlForCopilotRecommendations();\r\n }\r\n }, [updateFinalUrlForCopilotRecommendations]);\r\n\r\n const finalUrlAdditionalProps = useMemo(() => ({\r\n onBlur: onFinalUrlFocusOut,\r\n onKeyUp: onFinalUrlKeyUp,\r\n }), [onFinalUrlKeyUp, onFinalUrlFocusOut]);\r\n\r\n const updateFinalUrlCallback = useCallback((newFinalUrls) => {\r\n setAds({\r\n ...data,\r\n FinalUrls: newFinalUrls,\r\n });\r\n\r\n onDataChange({\r\n data: {\r\n data: {\r\n ...data,\r\n FinalUrls: newFinalUrls,\r\n },\r\n },\r\n });\r\n }, [data, onDataChange]);\r\n\r\n useEffect(() => {\r\n if (isImageFittingEnabled && !assetAIEnhancementSettingsCalled) {\r\n setAssetAIEnhancementSettingsCalled(true);\r\n getAssetEnhancementSettings({ aid, cid, oDataConfig }).then((settings) => {\r\n if (settings && settings.AssetAIEnhancementOptout) {\r\n setAssetAIEnhancementEnabled(settings.AssetAIEnhancementOptout === 'false');\r\n }\r\n });\r\n }\r\n }, [aid, assetAIEnhancementSettingsCalled, cid, isImageFittingEnabled, oDataConfig]);\r\n\r\n // memoized native ads components\r\n const serverValidatedFinalUrl = useMemo(() => (\r\n <ServerValidatedFinalUrl\r\n i18n={i18n}\r\n validationProps={finalUrlValidationProps}\r\n permissions={permissions}\r\n validateOnRender\r\n isDisplayPlus\r\n additionalProperties={finalUrlAdditionalProps}\r\n customUrlProtocol={IsAmplifyEnabled && DisplayPlusAmplify}\r\n />\r\n ), [DisplayPlusAmplify, IsAmplifyEnabled, finalUrlAdditionalProps, finalUrlValidationProps, i18n, permissions]);\r\n\r\n const imageListPortalContainer = useMemo(() => (\r\n <>\r\n <ImageListPortalContainerWithControlErrorHandling\r\n i18n={i18n}\r\n containerRef={imagesContainerRef}\r\n containerState={imageExperiencePortalContainerState}\r\n isLogos={false}\r\n />\r\n <PerfMaxImageSuggestionCarousel i18n={i18n} addImageCallback={imageExperienceAddNewImageCallback} permissions={permissions} maxUploadNum={maxUploadNum} isCopilotRecommendations={DisplayPlusCopilotRecommendations} />\r\n </>\r\n ), [i18n, imageExperiencePortalContainerState, permissions, imageExperienceAddNewImageCallback, maxUploadNum, DisplayPlusCopilotRecommendations]);\r\n\r\n const storeBackedBusinessName = useMemo(() => (\r\n <ValidatedStoreBackedBusinessName\r\n id=\"input-business-name\"\r\n i18n={i18n}\r\n validationProps={{\r\n data: { BusinessName: businessName },\r\n initialValue: { BusinessName: businessName },\r\n }}\r\n formErrorProps={{ filter: nativeAdBusinessNameProp }}\r\n />\r\n ), [businessName, i18n]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n <AdvancedSettings\r\n mobileFinalUrls={mobileFinalUrls}\r\n trackingUrlTemplate={TrackingUrlTemplate}\r\n finalUrlSuffix={FinalUrlSuffix}\r\n urlCustomParameters={UrlCustomParameters}\r\n impressionTrackingUrls={impressionTrackingUrls}\r\n verifiedTrackingSettings={verifiedTrackingSettings}\r\n biddingScheme={biddingScheme}\r\n CallToAction={CallToAction}\r\n CallToActionText={CallToActionText}\r\n CallToActionAriaText={CallToActionAriaText}\r\n setNewCTACallback={setNewCTACallback}\r\n BoostAnchors={BoostAnchors}\r\n shouldShowDisclaimerPanel={shouldShowDisclaimerPanel}\r\n />\r\n ), [mobileFinalUrls, TrackingUrlTemplate, FinalUrlSuffix, UrlCustomParameters, impressionTrackingUrls, verifiedTrackingSettings, biddingScheme, CallToAction, CallToActionText, CallToActionAriaText, BoostAnchors, shouldShowDisclaimerPanel]);\r\n\r\n const placementCustomizationPredicate = useCallback((template) => {\r\n if ((!isEmpty(template.key)) && (!isEmpty(AdPreviewOverideStylesByKey[template.key]))) {\r\n return {\r\n ...template,\r\n imagePreviewHeight: AdPreviewOverideStylesByKey[template.key].imagePreviewHeight,\r\n };\r\n }\r\n\r\n return template;\r\n }, []);\r\n\r\n let adPreviewConfig = responsiveMsanMMAConfig;\r\n let placementConfig = msanMMAConfig;\r\n let adPlacementsGroupType = AdPlacementsGroupType.msanImageAd;\r\n\r\n if (IsAmplifyEnabled && DisplayPlusAmplify) {\r\n adPreviewConfig = AdPreviewRefresh ? responsiveMsanMMABoostConfigV2 : responsiveMsanMMABoostConfig;\r\n placementConfig = AdPreviewRefresh ? msanMMABoostConfigV2 : msanMMABoostConfig;\r\n adPlacementsGroupType = AdPlacementsGroupType.msanBoostImageAd;\r\n } else if (isMMAV2Enabled) {\r\n adPreviewConfig = msanMMAV2Config;\r\n placementConfig = msanMMAV2Config;\r\n adPlacementsGroupType = AdPlacementsGroupType.msanV2ImageAd;\r\n }\r\n\r\n const adPreview = useMemo(() => {\r\n const PerfMaxAdPreviewComponent = UAPLNativeAdIntegration ? PerfMaxAdPreviewUAPL : PerfMaxAdPreview;\r\n\r\n const PerfMaxAdPreviewElement = (\r\n <PerfMaxAdPreviewComponent\r\n i18n={i18n}\r\n imageList={images && images.ImageList}\r\n hotspots={hotspots}\r\n updateImageList={noop}\r\n shortHeadline={headlines && headlines.Headline0}\r\n longHeadline={longHeadlines && longHeadlines.LongHeadline0}\r\n description={descriptions && descriptions.Description0}\r\n businessName={businessName}\r\n displayUrl={finalUrls}\r\n url={finalUrls}\r\n previewImagesSharedState={previewImagesSharedState}\r\n setPreviewImagesSharedState={setPreviewImagesSharedState}\r\n isMSANAd\r\n enableAutoPlay={false}\r\n callToAction={CallToAction && CallToAction.cta}\r\n placementCustomizationPredicate={placementCustomizationPredicate}\r\n adPlacementsGroupType={adPlacementsGroupType}\r\n adPreviewConfig={adPreviewConfig}\r\n extraPlacementInfo={extraPlacementInfo}\r\n customPlacementHeaderClassName={getClasses('adPreviewPlacementHeader')}\r\n customPlacementContainerClassName={getClasses('adPreviewPlacementContainer')}\r\n isMMAV2Enabled={isMMAV2Enabled}\r\n activity={activity}\r\n isImageFittingEnabled={isImageFittingEnabled && assetAIEnhancementEnabled}\r\n />\r\n );\r\n\r\n if (!permissions.dynamic.VideoAsAnAsset || IsAmplifyEnabled) {\r\n return PerfMaxAdPreviewElement;\r\n }\r\n\r\n return (\r\n <div>\r\n <TabList selectedValue={selectedValue} onTabSelect={onTabSelect}>\r\n <Tab id={TAB_IMAGE_ADS} value={TAB_IMAGE_ADS}>{i18n.getString(_TL_('Image ads'))}</Tab>\r\n <Tab id={TAB_VIDEO_ADS} value={TAB_VIDEO_ADS}><b>{i18n.getString(_TL_('Video ads'))}</b></Tab>\r\n </TabList>\r\n {selectedValue === TAB_IMAGE_ADS && PerfMaxAdPreviewElement}\r\n {selectedValue === TAB_VIDEO_ADS && (\r\n <MultiAdVideoPreview\r\n i18n={i18n}\r\n selectedVideoIdx={selectedVideoIdx}\r\n data={data}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n permissions={permissions}\r\n />\r\n )}\r\n </div>\r\n );\r\n }, [UAPLNativeAdIntegration, i18n, images, hotspots, headlines, longHeadlines, descriptions, businessName, finalUrls, previewImagesSharedState, CallToAction, placementCustomizationPredicate, adPlacementsGroupType, adPreviewConfig, getClasses, isMMAV2Enabled, activity, isImageFittingEnabled, assetAIEnhancementEnabled, permissions.dynamic.VideoAsAnAsset, IsAmplifyEnabled, selectedValue, onTabSelect, selectedVideoIdx, data]);\r\n\r\n const validatedImageExperienceWrapper = useMemo(() => {\r\n let mappedPreviewImageSharedState = previewImagesSharedState;\r\n const { editingPlacementType } = previewImagesSharedState || {};\r\n if (editingPlacementType && extraPlacementInfo[editingPlacementType]) {\r\n // in editing panel, show normal placement components\r\n mappedPreviewImageSharedState = {\r\n ...previewImagesSharedState,\r\n editingPlacementType: extraPlacementInfo[editingPlacementType].editingPlacementType,\r\n };\r\n }\r\n\r\n return (\r\n <ValidatedImageExperienceWrapper\r\n i18n={i18n}\r\n permissions={permissions}\r\n imagesContaineRef={imagesContainerRef}\r\n logosContaineRef={logosContainerRef}\r\n portraitContainerRef={portraitContainerRef}\r\n isLogoEnabled={shouldLogosBeEnabled}\r\n isBoostPortraitEnabled={shouldPortraitBeEnabled}\r\n updateFinalUrlCallback={updateFinalUrlCallback}\r\n previewImagesSharedState={mappedPreviewImageSharedState}\r\n setPreviewImagesSharedState={setPreviewImagesSharedState}\r\n updatePortalContainerState={setImageExperiencePortalContainerState}\r\n setImageExperienceAddNewImageCallback={setImageExperienceAddNewImageCallback}\r\n validationProps={{ data, initialValue: data }}\r\n suggestionPoller={suggestionPoller}\r\n isCopilotRecommendations={DisplayPlusCopilotRecommendations}\r\n wizardPerfMarker={perfMarker}\r\n isCombinedMsanAndMmaAspectRatios={false}\r\n customMaxImageCount={DisplayPlusMaxImageCount}\r\n isMSANBoostEnabled={IsAmplifyEnabled && DisplayPlusAmplify}\r\n UAPLPMaxIntegration={UAPLNativeAdIntegration}\r\n isAudienceAd\r\n adPreviewConfig={{\r\n adType: IsAmplifyEnabled && DisplayPlusAmplify ? 'Boost' : 'AudienceAd',\r\n placementConfig,\r\n }}\r\n isMMAV2Enabled={isMMAV2Enabled}\r\n showCopilotOptionForImage={permissions.IsBackgroundSceneEnabled}\r\n customAssetLibraryEventHandler={{\r\n onUploadImage: (anActivity, imgId) => {\r\n anActivity.signal(`display plus native ad editor: uploaded image, isEditing:${!!editingAdId}, image id:${imgId}`);\r\n },\r\n onImageListUpdate: (anActivity, newImageList, curImageList) => {\r\n // log when new images added in audience ads editor\r\n // eslint-disable-next-line newline-per-chained-call\r\n const newImageIdList = _.chain(newImageList).flatten().map(img => `${img.id}`).uniq().sortBy().value();\r\n // eslint-disable-next-line newline-per-chained-call\r\n const curImageIdList = _.chain(curImageList).flatten().map(img => `${img.id}`).uniq().sortBy().value();\r\n const newImages = _.difference(newImageIdList, curImageIdList);\r\n if (newImages.length > 0) {\r\n anActivity.signal(`display plus native ad editor: added images, isEditing:${!!editingAdId}, image ids:${newImages.join(',')}, image count:${newImages.length}`);\r\n }\r\n },\r\n }}\r\n supportImageUpscale={permissions.dynamic.AudienceImageUpscale}\r\n isImageFittingEnabled={isImageFittingEnabled && assetAIEnhancementEnabled}\r\n />\r\n );\r\n }, [previewImagesSharedState, i18n, permissions, shouldLogosBeEnabled, shouldPortraitBeEnabled, updateFinalUrlCallback, data, suggestionPoller, DisplayPlusCopilotRecommendations, perfMarker, IsAmplifyEnabled, DisplayPlusAmplify, UAPLNativeAdIntegration, placementConfig, isMMAV2Enabled, isImageFittingEnabled, assetAIEnhancementEnabled, editingAdId]);\r\n\r\n const textAssetCollectionWithCopilot = useMemo(() => (\r\n <TextAssetCollectionWithCoPilot\r\n validationProps={textAssetsValidationProps}\r\n setAddNewDescriptionCallback={setAddNewDescriptionCallback}\r\n setAddNewShortHeadlinesCallback={setAddNewShortHeadlinesCallback}\r\n setAddNewLongHeadlinesCallback={setAddNewLongHeadlinesCallback}\r\n isAudienceAd\r\n />\r\n ), [textAssetsValidationProps]);\r\n\r\n const logosContainer = useMemo(() => (\r\n <>\r\n <span>{i18n.getString(_TL_('You can add up to 5 different logos. Each logo can have one or both 4:1 aspect ratio and 1:1 aspect ratio.'))}</span>\r\n <ImageListPortalContainerWithControlErrorHandling\r\n i18n={i18n}\r\n containerRef={logosContainerRef}\r\n containerState={imageExperiencePortalContainerState}\r\n isLogos\r\n />\r\n </>\r\n ), [i18n, imageExperiencePortalContainerState]);\r\n\r\n const portraitImageContainer = useMemo(() => (\r\n <>\r\n <span> {i18n.getString(_TL_('You can add one portrait image'))} </span>\r\n <ImageListPortalContainerWithControlErrorHandling\r\n i18n={i18n}\r\n containerRef={portraitContainerRef}\r\n containerState={imageExperiencePortalContainerState}\r\n isLogos={false}\r\n />\r\n </>\r\n ), [i18n, imageExperiencePortalContainerState]);\r\n\r\n const hotspot = useMemo(() => (\r\n <>\r\n <ValidatedHotspot\r\n validationProps={{\r\n data: {\r\n hotspots,\r\n },\r\n }}\r\n />\r\n </>\r\n ), [hotspots]);\r\n\r\n const videosContainer = useMemo(() => {\r\n const videoAd = { videos: videos || [] };\r\n\r\n return (\r\n <CampaignFetchProvider>\r\n <ValidatedVideoExperienceWithRecommendationFetch\r\n i18n={i18nMerged}\r\n perfMarker={perfMarker}\r\n permissions={permissions}\r\n oDataConfig={oDataConfig}\r\n cid={cid}\r\n aid={aid}\r\n multiVideoMode\r\n allowedVideoSizes={videoTypesWithOrder}\r\n disableRemoveAll\r\n hideRatioLabel\r\n videoAd={videoAd}\r\n videoExperienceCircleUploadType\r\n disableUploadTextField\r\n videoPickerContainerHeight=\"auto\"\r\n copilotEnabled\r\n setSelectedVideoIdx={setSelectedVideoIdx}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n useBrandKit={useBrandKit}\r\n setUseBrandKit={setUseBrandKit}\r\n serverContext={serverContext}\r\n />\r\n </CampaignFetchProvider>\r\n );\r\n }, [videos, i18nMerged, perfMarker, permissions, oDataConfig, cid, aid, useBrandKit, setUseBrandKit, loadClipchampPlayer, serverContext]);\r\n\r\n return (\r\n <div className=\"display-plus-native-ads\">\r\n {data && (\r\n <CopilotRepositoryProvider\r\n campaignId=\"-1\"\r\n finalUrl={finalUrlForCopilotRecommendations}\r\n locale={i18n.getLocale()}\r\n recommendationType=\"Native\"\r\n serverContext={serverContext}\r\n enableLogoAndCTA={CopilotCTALogoGeneration && IsMSANLogoAndCTAForMMAEnabled}\r\n useClipchamp={useClipchamp}\r\n >\r\n <div className={classNames(getClasses('container'))}>\r\n <div className={classNames(getClasses('leftStyles'))}>\r\n <Collapse allPanelItems={finalUrlSection} checkItems skipItemsTypeCheck activeKeys={finalUrlExpandedSection} setActiveKeys={setFinalUrlExpandedSection}>\r\n <ValidatedPanel\r\n key=\"final-url\"\r\n title={<TextTitle titleKey={_TL_('Final URL')} topicKey=\"pop_BA_NewAdCreate_FinalURL\" details={getFinalUrlCardSummaryDetails(i18n, finalUrls)} icon={FinalUrlImg} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'final-url',\r\n }}\r\n >\r\n <div className=\"final-url-container\">\r\n {serverValidatedFinalUrl}\r\n </div>\r\n </ValidatedPanel>\r\n </Collapse>\r\n\r\n {\r\n DisplayPlusCopilotRecommendations && (copilotBanner)\r\n }\r\n <Collapse allPanelItems={allAdSettingsSections} checkItems skipItemsTypeCheck activeKeys={adSettingsExpandedSections} setActiveKeys={setAdSettingsExpandedSections}>\r\n <ValidatedPanel\r\n key=\"images\"\r\n title={<TextTitle\r\n titleKey={_TL_('Images')}\r\n topicKey=\"pop_BA_ImageAssets_Audience\"\r\n icon={ImageAssetsImg}\r\n iconAltText={i18n.getString(_TL_('\"Images\" panel\\'s image'))}\r\n details={<ImageListSummaryCardDetails i18n={i18n} images={images} isLogos={false} />}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'images',\r\n }}\r\n >\r\n <span>{i18n.getString(_TL_('You can add up to {{limit}} images to your ad.'), { limit: DisplayPlusMaxImageCount })}</span>\r\n <div className={classNames(getClasses('imageExperienceStyle'))}>\r\n {imageListPortalContainer}\r\n </div>\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"videos\"\r\n title={<TextTitle\r\n titleKey={_TL_('Videos')}\r\n topicKey=\"pop_BA_VideoAds_VideoSource\"\r\n icon={VideoAssetsImg}\r\n iconAltText={i18n.getString(_TL_('\"Videos\" panel\\'s image'))}\r\n details={<ImageListSummaryCardDetails i18n={i18n} videos={videos} isLogos={false} isVideos />}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'videos',\r\n }}\r\n >\r\n <span>{i18n.getString(_TL_('You can add up to {{limit}} videos to your ad.'), { limit: DisplayPlusMaxVideoCount })}</span>\r\n <div className={classNames(getClasses('imageExperienceStyle'))}>\r\n {videosContainer}\r\n </div>\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"logos\"\r\n title={<TextTitle\r\n titleKey={_TL_('Logos')}\r\n icon={LogoAssetsImg}\r\n iconAltText={i18n.getString(_TL_('\"Logos\" panel\\'s image'))}\r\n topicKey=\"pop_BA_AudAds_Logos\"\r\n details={<ImageListSummaryCardDetails i18n={i18n} images={images} isLogos />}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'logos',\r\n }}\r\n >\r\n {logosContainer}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"portrait-images\"\r\n title={<TextTitle\r\n titleKey={_TL_('Portrait image')}\r\n icon={LogoAssetsImg}\r\n iconAltText={i18n.getString(_TL_('\"Portrait\" panel\\'s image'))}\r\n details={<ImageListSummaryCardDetails i18n={i18n} images={images} isPortrait />}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'portrait-images',\r\n }}\r\n >\r\n {portraitImageContainer}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"text\"\r\n title={<TextTitle\r\n titleKey={_TL_('Text')}\r\n topicKey=\"pop_BA_AudAds_Text\"\r\n icon={TextAssetsImg}\r\n iconAltText={i18n.getString(_TL_('\"Text\" panel\\'s image'))}\r\n details={textCardSummaryDetails}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'text',\r\n }}\r\n >\r\n {\r\n DisplayPlusCopilotRecommendations ? (\r\n textAssetCollectionWithCopilot\r\n ) : (\r\n <div className={classNames(getClasses('textAssetStyle'))}>\r\n <TextAssetCollectionWithRecommendationPrefill\r\n validationProps={textAssetsValidationProps}\r\n isOptional={false}\r\n showDeleteButton\r\n withInlineRecommendations\r\n isAudienceAd\r\n />\r\n </div>\r\n )\r\n }\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"hotspot-panel\"\r\n title={\r\n <TextTitle\r\n titleKey={_TL_('Hotspot')}\r\n icon={hotspotImg}\r\n details={hotspotSummaryDetails}\r\n />\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'hotspot',\r\n }}\r\n >\r\n {hotspot}\r\n </ValidatedPanel>\r\n <ValidatedPanel\r\n key=\"business-name\"\r\n title={\r\n <TextTitle\r\n titleKey={_TL_('Business name')}\r\n topicKey=\"pop_BA_CampaignCreate_AudAds_BusinessName\"\r\n icon={BusinessNameImg}\r\n iconAltText={i18n.getString(_TL_('\"Business name\" panel\\'s image'))}\r\n />\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <div className={classNames(getClasses('businessNameStyle'))}>\r\n {storeBackedBusinessName}\r\n </div>\r\n </ValidatedPanel>\r\n <ValidatedFixedPanel\r\n key=\"call-to-action\"\r\n title={\r\n <TextTitle\r\n titleKey={_TL_('Call to action')}\r\n topicKey=\"pop_BA_AudAds_CTA\"\r\n icon={CallToActionImg}\r\n iconAltText={i18n.getString(_TL_('\"Call to action\" panel\\'s image'))}\r\n />\r\n }\r\n noOverflowHidden\r\n relativePosition\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n <ValidatedLegacyCallToActionWithLanguage\r\n permissions={permissions}\r\n validationProps={ctaValidationProps}\r\n isDisplayPlusMMA\r\n i18n={i18n}\r\n setNewCTACallback={setNewCTACallback}\r\n />\r\n </ValidatedFixedPanel>\r\n </Collapse>\r\n <div className={advancedSettingsStyles}>\r\n {advancedSettings}\r\n </div>\r\n </div>\r\n <div className={classNames(getClasses('rightStyles'))}>\r\n <div className={classNames(getClasses('nativeAdImagePreviewCarousel'))}>\r\n {adPreview}\r\n </div>\r\n <div>\r\n {validatedImageExperienceWrapper}\r\n </div>\r\n </div>\r\n </div>\r\n </CopilotRepositoryProvider>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nDisplayPlusNativeAdsInternal.propTypes = {\r\n data: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.string,\r\n MobileFinalUrls: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.arrayOf(PropTypes.string),\r\n LongHeadlines: PropTypes.arrayOf(PropTypes.string),\r\n Descriptions: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({}),\r\n videos: PropTypes.shape({}),\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n ImpressionTrackingUrls: PropTypes.string,\r\n VerifiedTrackingSettings: PropTypes.shape({}),\r\n FinalUrlForRecommendation: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n language: PropTypes.string,\r\n }),\r\n CallToActionText: PropTypes.string,\r\n CallToActionAriaText: PropTypes.string,\r\n hotspots: PropTypes.shape({}),\r\n BoostAnchors: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.string,\r\n aid: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n isCanceling: PropTypes.bool.isRequired,\r\n biddingScheme: PropTypes.string,\r\n editingAdId: PropTypes.string,\r\n activity: PropTypes.shape({}),\r\n supportImageFitting: PropTypes.bool,\r\n setAds: PropTypes.func,\r\n};\r\n\r\nDisplayPlusNativeAdsInternal.defaultProps = {\r\n biddingScheme: null,\r\n editingAdId: null,\r\n activity: undefined,\r\n supportImageFitting: false,\r\n setAds: () => { },\r\n};\r\n\r\nexport const DisplayPlusNativeAds = withActivityContext(withBannerService(withScope(DisplayPlusNativeAdsInternal)));\r\n","import { identity, result, has } from 'underscore';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\n\r\nexport const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AdGroup: 'adGroup',\r\n Ad: 'ResponsiveAd',\r\n};\r\n\r\nexport const isBulkWrappedResponse = bulkResult => has(bulkResult, 'entity');\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 mapBulkUpsertErrors = (\r\n errors,\r\n bulkUpsertEntityErrorMap,\r\n errorProcessor = identity,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n) =>\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\r\nexport const modelToViewModelForBulkErrors = (errors, bulkUpsertEntityErrorMap, scenario, i18n, activityLogger) =>\r\n mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, /* errorProcessor */ identity, scenario, i18n, activityLogger);\r\n","import { map, pick, each, object, find, filter } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport {\r\n setMTImageModel,\r\n getFlattenedImageAssetList,\r\n updateAssetsIdsAsync,\r\n} from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport { thirdPartyMeasurementStringToViewModel, getVerifiedTrackingSettingWrite } from '@bingads-webui-campaign-react/third-party-measurement';\r\n\r\nfunction formatIntoTextArrayString(texts) {\r\n let res = '';\r\n map(texts, (textValue = '') => {\r\n // To escape double quotes in the text value to avoid bulkupsert failure\r\n res += `${res === '' ? '' : ','}{\"Text\":\"${textValue.replace(/\"/g, '\\\\\"')}\"}`;\r\n });\r\n return `[${res}]`;\r\n}\r\n\r\nconst formatHotspots = (hotspots) => {\r\n const hotspotsArray = map(hotspots, (hotspot) => {\r\n const hotspotObj = {\r\n Title: hotspot.title,\r\n ActionText: hotspot.actionText,\r\n Description: hotspot.desc,\r\n Uri: hotspot.uri,\r\n Glyph: hotspot.glyph,\r\n Placement: hotspot.placement,\r\n };\r\n return hotspotObj;\r\n });\r\n return hotspotsArray;\r\n};\r\n\r\nconst getProcessedDataAsync = (originalData, imageList, imageOdata, permissions, UiUnsupportedRatios = [], isImageFittingEnabled = false) => {\r\n // for portrait images we need to check if we are in display plus amlify and isamplifyenabled.\r\n // if it is boost campaigns mma v2 should be disabled.\r\n const isBoostCampaign = permissions.dynamic.DisplayPlusAmplify && permissions.IsAmplifyEnabled;\r\n\r\n const flattenedIncludedImageAssetList = getFlattenedImageAssetList(imageList, !isBoostCampaign, !isBoostCampaign);\r\n const imageIndexAsThumbnail = 0;\r\n\r\n return updateAssetsIdsAsync(flattenedIncludedImageAssetList, imageIndexAsThumbnail, !isBoostCampaign, imageOdata)\r\n .then((updates) => {\r\n const originalThumbnailAsset = flattenedIncludedImageAssetList[imageIndexAsThumbnail];\r\n const overrideInfo = updates[imageIndexAsThumbnail];\r\n let imageToGenerateThumbnail;\r\n\r\n if (overrideInfo) {\r\n imageToGenerateThumbnail = originalThumbnailAsset.copyThumbnailLookToNewImage({\r\n id: overrideInfo.id,\r\n src: overrideInfo.bingSrc,\r\n });\r\n } else {\r\n imageToGenerateThumbnail = originalThumbnailAsset;\r\n }\r\n\r\n const portraitImage = find(imageList, items => items.find(item => item.isPortrait));\r\n\r\n setMTImageModel(\r\n originalData,\r\n updates,\r\n map(imageList, imageArray => filter(imageArray, imageObj => imageObj.isIncluded)) /* imageList */,\r\n {\r\n isMultimediaAdinMSANEnabled: !isBoostCampaign,\r\n isMultimediaAd: false,\r\n isMMAV2Enabled: !isBoostCampaign,\r\n isBoostPortraitImageEnabled: isBoostCampaign, // this.isBoostPortraitImageEnabled,\r\n isBoost200x100ImageEnabled: permissions && permissions.IsBoost200x100ImageEnabled, // this.isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled: permissions && permissions.IsBoostNewAspectRatioSupportEnabled, // this.isBoostNewAspectRatioSupportEnabled,\r\n isImageFittingEnabled,\r\n },\r\n UiUnsupportedRatios,\r\n portraitImage && portraitImage[0]\r\n );\r\n\r\n return {\r\n mtModel: originalData,\r\n imageToGenerateThumbnail,\r\n };\r\n });\r\n};\r\n\r\nexport const viewModelToModelForAd = ({\r\n adsViewModel, campaign, adGroup, imageOdata, permissions, isImageFittingEnabled = false,\r\n}, isDeletedEntities = false) => {\r\n // parse the ads\r\n const adViewModel = [];\r\n\r\n let images;\r\n let videos;\r\n\r\n if (adsViewModel.length === 0) {\r\n return Promise.resolve(adViewModel);\r\n }\r\n\r\n const ad = adsViewModel[0];\r\n\r\n if (ad.videos && Array.isArray(ad.videos)) {\r\n videos = ad.videos.map(video => ({\r\n id: video.id,\r\n idString: video.idString,\r\n subType: video.type,\r\n }));\r\n }\r\n\r\n const fields = {\r\n 'Client Id': '0', // `${ad.uid}`,\r\n FinalUrls: ad.FinalUrls,\r\n Videos: JSON.stringify(videos),\r\n Images: JSON.stringify(images),\r\n MobileFinalUrls: ad.MobileFinalUrls,\r\n BusinessName: ad.BusinessName,\r\n Headlines: ad.Headlines ? formatIntoTextArrayString(ad.Headlines) : undefined,\r\n LongHeadlines: ad.LongHeadlines ? formatIntoTextArrayString(ad.LongHeadlines) : undefined,\r\n Descriptions: ad.Descriptions ? formatIntoTextArrayString(ad.Descriptions) : undefined,\r\n TrackingUrlTemplate: ad.TrackingUrlTemplate,\r\n FinalUrlSuffix: ad.FinalUrlSuffix,\r\n UrlCustomParameters: ad.UrlCustomParameters,\r\n ImpressionTrackingUrls: ad.ImpressionTrackingUrls,\r\n HotSpots: JSON.stringify(formatHotspots(ad.hotspots)),\r\n Campaign: pick(campaign, 'Id'),\r\n AdGroup: pick(adGroup, 'Id'),\r\n CallToAction: ad.CallToAction && ad.CallToAction.cta,\r\n CallToActionLanguage: ad.CallToAction && ad.CallToAction.language,\r\n CallToActionText: ad.CallToActionText,\r\n CallToActionAriaText: ad.CallToActionAriaText,\r\n BoostAnchors: ad.BoostAnchors,\r\n ...getVerifiedTrackingSettingWrite(ad.VerifiedTrackingSettings),\r\n };\r\n\r\n // only add call to action if we have the value set.\r\n if (ad.CallToActionAriaText) {\r\n fields.CallToActionAriaText = ad.CallToActionAriaText;\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.Images && ad.Images.ImageList && imageOdata) {\r\n return getProcessedDataAsync(fields, ad.Images.ImageList, imageOdata, permissions, [], isImageFittingEnabled)\r\n .then(({ mtModel }) => {\r\n adViewModel.push(mtModel);\r\n\r\n return adViewModel;\r\n });\r\n }\r\n\r\n adViewModel.push(fields);\r\n return Promise.resolve(adViewModel);\r\n};\r\n\r\n\r\nconst processTextAttribute = (jsonTextAttribute, name) =>\r\n object(JSON.parse(jsonTextAttribute).map((textAttribute, index) => ([`${name}${index}`, textAttribute.Text])));\r\n\r\nexport const bulkModelToViewModelForAd = ({\r\n adsModel,\r\n originalAdsModel,\r\n}) => {\r\n const savedAd = adsModel[0];\r\n\r\n savedAd.Images = originalAdsModel.data.Images;\r\n savedAd.videos = originalAdsModel.data.videos || [];\r\n savedAd.Headlines = savedAd.Headlines ? processTextAttribute(savedAd.Headlines, 'Headline') : undefined;\r\n savedAd.LongHeadlines = savedAd.LongHeadlines ? processTextAttribute(savedAd.LongHeadlines, 'LongHeadline') : undefined;\r\n savedAd.Descriptions = savedAd.Descriptions ? processTextAttribute(savedAd.Descriptions, 'Description') : undefined;\r\n savedAd.VerifiedTrackingSettings = savedAd.VerifiedTrackingData ? thirdPartyMeasurementStringToViewModel(savedAd.VerifiedTrackingData) : undefined;\r\n savedAd.hotspots = originalAdsModel.data.hotspots || [];\r\n savedAd.CallToAction = {\r\n cta: savedAd.CallToAction,\r\n language: savedAd.CallToActionLanguage,\r\n };\r\n\r\n const adViewModel = {\r\n data: savedAd,\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, imageOdata, permissions, isImageFittingEnabled = false,\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([adsViewModel], (ad) => {\r\n if (ad.Images && ad.Images.ImageList) {\r\n // check if the ad has ID\r\n if (ad.Id) {\r\n adsToUpdate.push(ad);\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(ad.Id);\r\n } else {\r\n adsToCreate.push(ad);\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([oldAdsModel], (ad) => {\r\n if (ad.Images && ad.Images.ImageList) {\r\n adsToDelete.push(ad);\r\n }\r\n });\r\n }\r\n\r\n const promises = {\r\n createAds: viewModelToModelForAd({\r\n adsViewModel: adsToCreate, campaign, adGroup, imageOdata, permissions, isImageFittingEnabled,\r\n }),\r\n updateAds: viewModelToModelForAd({\r\n adsViewModel: adsToUpdate, campaign, adGroup, imageOdata, permissions, isImageFittingEnabled,\r\n }),\r\n deleteAds: viewModelToModelForAd({\r\n adsViewModel: adsToDelete, campaign, adGroup, imageOdata, permissions, isImageFittingEnabled,\r\n }, true),\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 const deletedAds = results.deleteAds || [];\r\n\r\n const adsNeededToCreate = createdAds;\r\n\r\n const adsNeededToUpdate = [...updatedAds, ...deletedAds];\r\n\r\n return { adsNeededToCreate, adsNeededToUpdate };\r\n });\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getODataConfig } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\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\n\r\nimport { isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, ERROR_ENTITY } from './common';\r\nimport { bulkModelToViewModelForAd, splitUpdateAndCreateAds, viewModelToModelForAd } from './native-ad';\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\nconst adEDM = edmCampaign.types.resolve('Model.ResponsiveAd');\r\n\r\nconst adResource = new adEDM.ResourceIdentifier();\r\n\r\nconst createData = data => adResource.bulkCreate.bind(adResource)(data);\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\nconst getErrorsPlaceholders = () => ({\r\n systemErrors: [],\r\n serverErrors: [],\r\n});\r\n\r\nexport const deleteAd = ({ ad, campaign, adGroup }) => viewModelToModelForAd({ adsViewModel: ad, campaign, adGroup }, true)\r\n .then(deleteAds => updateData(deleteAds))\r\n .then(result => result, err => err);\r\n\r\nexport const saveAds = ({\r\n ads: adsViewModel,\r\n oldAdsModel,\r\n campaign,\r\n adGroup,\r\n activity = null,\r\n imageOdata = null,\r\n permissions,\r\n}, { scenario, i18n }, { isImageFittingEnabled = false } = {}) => splitUpdateAndCreateAds({\r\n adsViewModel: adsViewModel.data, oldAdsModel, campaign, adGroup, imageOdata, permissions, isImageFittingEnabled,\r\n})\r\n .then(({ adsNeededToCreate, adsNeededToUpdate }) => {\r\n // const adsModel = viewModelToModelForAd({ adsViewModel, campaign, adGroup });\r\n\r\n // const modelToSave = adsModel;\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 promises;\r\n }).then(promises => Promise.props(promises)\r\n .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\r\n const ads = 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 errors,\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: { ...ads },\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\nexport const saveAdsWithMetadata = (data, context) => {\r\n const { serverContext, activityLogger, i18n } = context;\r\n const logger = getLoggerWithoutPageInfo(activityLogger, getLogVersion(), 'NativeAdsAdStep');\r\n const cid = serverContext.CurrentCustomer.Id;\r\n const aid = serverContext.CurrentAccount.Id;\r\n const oDataConfig = getODataConfig(serverContext);\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\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\r\n const imageRepository = createImageRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n logger,\r\n i18n,\r\n activity: activityLogger,\r\n });\r\n\r\n const uploadVideoIfNeeded = ({ ads }) => {\r\n const videoPromises = [];\r\n\r\n if (ads.data.videos && ads.data.videos.length > 0) {\r\n ads.data.videos.forEach((video, index) => {\r\n if (video && !video.id) {\r\n videoPromises.push(uploadVideoMetadata({\r\n videoMetadata: video,\r\n newVideoFromMTObject,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n }).then((v) => {\r\n _.extend(ads.data.videos[index], v);\r\n }));\r\n }\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\n return uploadVideoIfNeeded(data).then(() => saveAds(data, context));\r\n};\r\n\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Radio, RadioGroup, Text } from '@fluentui/react-components';\r\nimport { ContentViewRegular, ImageMultipleRegular, VideoRegular } from '@fluentui/react-icons';\r\n\r\nconst iconSize = 24;\r\n\r\nconst getStyles = () => ({\r\n titleContainer: {\r\n marginBottom: 20,\r\n },\r\n adFormatContainer: {\r\n maxWidth: 530,\r\n marginBottom: 12,\r\n },\r\n radioGroup: {\r\n alignItems: 'stretch !important',\r\n },\r\n radioOption: {\r\n flex: 1,\r\n background: 'white',\r\n margin: 3,\r\n padding: 12,\r\n borderRadius: 4,\r\n border: '1px solid #E1DFDD',\r\n justifyContent: 'start',\r\n\r\n '& .fui-Radio__indicator': {\r\n position: 'absolute',\r\n top: 4,\r\n right: 4,\r\n display: 'none',\r\n\r\n '& svg': {\r\n marginLeft: 1.5,\r\n },\r\n },\r\n\r\n '& .fui-Radio__label': {\r\n flex: 1,\r\n },\r\n\r\n '&.selected .fui-Radio__indicator': {\r\n display: 'block',\r\n },\r\n\r\n '&.selected': {\r\n border: '1px solid #0078D4',\r\n },\r\n },\r\n labelContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n minHeight: 135,\r\n },\r\n label: {\r\n display: 'flex',\r\n fontSize: 16,\r\n marginBottom: 5,\r\n\r\n '& svg': {\r\n paddingRight: 4,\r\n },\r\n },\r\n});\r\n\r\nexport const AdFormat = {\r\n Native: 'Native',\r\n Display: 'Display',\r\n Video: 'Video',\r\n};\r\n\r\nconst OptionConfigs = {\r\n [AdFormat.Native]: {\r\n label: _TL_('Native'),\r\n description: _TL_('Show personalized, responsive, and visually rich ads based on your assets.'),\r\n getIcon: () => <ContentViewRegular fontSize={iconSize} />,\r\n },\r\n [AdFormat.Display]: {\r\n label: _TL_('Display'),\r\n description: _TL_('Showcase eye-catching, customized image ads.'),\r\n getIcon: () => <ImageMultipleRegular fontSize={iconSize} />,\r\n },\r\n [AdFormat.Video]: {\r\n label: _TL_('Video'),\r\n description: _TL_('Engage viewers as they browse the web and watch videos.'),\r\n getIcon: () => <VideoRegular fontSize={iconSize} />,\r\n },\r\n};\r\n\r\nexport const AdFormatOption = ({\r\n value,\r\n onChange,\r\n i18n,\r\n disabled,\r\n showHeader,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n <div className={classes.adFormatContainer}>\r\n {showHeader && (\r\n <div className={classes.titleContainer}>\r\n <h2>{i18n.getString(disabled ? _TL_('Edit ads') : _TL_('Create ads'))}</h2>\r\n <Text>{i18n.getString(_TL_('Show compelling ads to your ideal audience across the Microsoft Advertising Network.'))}</Text>\r\n </div>\r\n )}\r\n <RadioGroup\r\n className={classes.radioGroup}\r\n onChange={(ev, data) => onChange(data.value)}\r\n value={value}\r\n layout=\"horizontal-stacked\"\r\n disabled={disabled}\r\n >\r\n {_.keys(AdFormat).map(key => (\r\n <Radio\r\n className={classNames(classes.radioOption, value === AdFormat[key] && 'selected')}\r\n key={key}\r\n value={AdFormat[key]}\r\n label={\r\n <div className={classes.labelContainer}>\r\n <div className={classes.label}>\r\n {OptionConfigs[AdFormat[key]].getIcon()}\r\n {i18n.getString(OptionConfigs[AdFormat[key]].label)}\r\n </div>\r\n <Text>\r\n {i18n.getString(OptionConfigs[AdFormat[key]].description)}\r\n </Text>\r\n </div>\r\n }\r\n />\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n );\r\n};\r\n\r\nAdFormatOption.propTypes = {\r\n value: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n disabled: PropTypes.bool,\r\n showHeader: PropTypes.bool,\r\n};\r\n\r\nAdFormatOption.defaultProps = {\r\n disabled: false,\r\n showHeader: true,\r\n};\r\n","import React, { useState, useMemo, useEffect, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { noop, get } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport SharedBudgetSwitchView from '@bingads-webui-campaign-legacy/shared-budget/view/shared-budget-switch-editor';\r\nimport Budget from '@bingads-webui-campaign-legacy/budget/view/budget';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedLegacyBidStrategy } from '@bingads-webui-campaign/bid-strategy';\r\nimport types from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\nimport { getBudgetStyles } from '../styles/bid-strategy-styles';\r\n\r\nconst AudienceBudgetBidStrategyInternal = ({\r\n data,\r\n classes,\r\n updateValidation,\r\n campaignType,\r\n campaignSubType,\r\n isEnableMSANDisplayCampaignsEnabled,\r\n isEnableMSANVideoCampaignsEnabled,\r\n setBudgetView,\r\n hideBidStrategy,\r\n activity,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const campaign = useMemo(() => (\r\n isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled ? data : data.campaign\r\n ), [data, isEnableMSANDisplayCampaignsEnabled, isEnableMSANVideoCampaignsEnabled]);\r\n const bidStrategyName = get(data, ['campaign', 'BidStrategyName'], '');\r\n\r\n const [sharedBudgetRef, setSharedBudgetRef] = useState();\r\n\r\n const sharedBudget = useMemo(() => {\r\n const factory = SharedBudgetSwitchView.newFactory(Budget);\r\n\r\n const sharedBudgetView = factory({\r\n accountCurrencyCode: 'USD',\r\n model: undefined,\r\n withRealTimeUpdates: true,\r\n });\r\n\r\n sharedBudgetView.render();\r\n\r\n return sharedBudgetView;\r\n }, []);\r\n\r\n const onBudgetChange = () => {\r\n const budget = sharedBudget.getValues();\r\n const isValid = sharedBudget.validate();\r\n if (activity) {\r\n activity.signal(`onBudgetChange - ${JSON.stringify(budget)} - isValid: ${isValid}}`);\r\n }\r\n updateValidation(isValid ? [] : [i18n.getString(_TL_('Invalid budget'))], { BudgetId: budget && budget.Id, Budget: { Amount: budget && budget.Amount, Id: budget && budget.Id, Type: budget && budget.Type } });\r\n };\r\n\r\n useEffect(() => {\r\n if (setBudgetView && sharedBudget) {\r\n setBudgetView(sharedBudget);\r\n }\r\n }, [sharedBudget, setBudgetView]);\r\n\r\n useEffect(() => {\r\n if (sharedBudgetRef) {\r\n sharedBudgetRef.innerHTML = '';\r\n sharedBudgetRef.append(sharedBudget.el);\r\n\r\n sharedBudget.update(campaign.Budget);\r\n sharedBudget.budgetView.on('budget.updated', onBudgetChange);\r\n sharedBudget.budgetView.on('change', onBudgetChange);\r\n sharedBudget.grid.gridView.on('didUpdate', onBudgetChange);\r\n sharedBudget.viewModel.sharedBudgetSwitch.subscribe(() => {\r\n onBudgetChange();\r\n });\r\n }\r\n\r\n return noop;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [sharedBudgetRef]);\r\n\r\n useEffect(() => {\r\n sharedBudget.viewModel.isCPSSelected(campaign.BiddingScheme.Type === types.costPerSale);\r\n sharedBudget.viewModel.sharedBudgetIsNotAllowedWarning(i18n.getString(_TL_('Shared budget is not allowed if CPS is selected')));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [campaign.BiddingScheme.Type]);\r\n\r\n return (\r\n <div className={classNames(classes.pickerContainer, 'budget-bid-strategy-container')} >\r\n <div className=\".campaign-settings__container vanila-budget\">\r\n <div className={classNames('budget-view')} ref={newRef => setSharedBudgetRef(newRef)} />\r\n </div>\r\n {!hideBidStrategy &&\r\n <div>\r\n <ValidatedLegacyBidStrategy\r\n className=\"vanila-bid-strategy\"\r\n campaignId={campaign.Id}\r\n campaignType={campaignType}\r\n hideBudgetMinRecommendation\r\n campaignSubType={campaignSubType}\r\n validationProps={{\r\n initialValue: campaign.BiddingScheme,\r\n data: campaign,\r\n }}\r\n isCreation\r\n bidStrategyName={bidStrategyName}\r\n i18nNewDesign={i18n}\r\n validateWithBudget\r\n budgetAmount={sharedBudget && sharedBudget.getValues() ? sharedBudget.getValues().Amount : null}\r\n />\r\n </div>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nAudienceBudgetBidStrategyInternal.protoTypes = {\r\n classes: PropTypes.shape({\r\n pickerContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n Budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n Id: PropTypes.number,\r\n Type: PropTypes.string,\r\n }),\r\n BiddingScheme: PropTypes.shape({\r\n Type: PropTypes.string,\r\n BidStrategyId: PropTypes.number,\r\n }),\r\n BidStrategyName: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n campaignSubType: PropTypes.string,\r\n isEnableMSANDisplayCampaignsEnabled: PropTypes.bool,\r\n isEnableMSANVideoCampaignsEnabled: PropTypes.bool,\r\n setBudgetView: PropTypes.func,\r\n hideBidStrategy: PropTypes.bool,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n};\r\n\r\nAudienceBudgetBidStrategyInternal.defaultProps = {\r\n campaignSubType: undefined,\r\n isEnableMSANDisplayCampaignsEnabled: false,\r\n isEnableMSANVideoCampaignsEnabled: false,\r\n setBudgetView: undefined,\r\n hideBidStrategy: false,\r\n activity: undefined,\r\n};\r\n\r\nexport const AudienceBudgetBidStrategy = withCustomValidation(withDefaultStyles(AudienceBudgetBidStrategyInternal, getBudgetStyles));\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 tableStyle,\r\n sharedBudgetGridWrapper,\r\n containerBudgetStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n audienceTargetsSettingsStyles,\r\n criterionSettingCompanyStyles,\r\n audienceCampaignSettingsStyles,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getBudgetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...audienceCampaignSettingsStyles({ palette }),\r\n ...containerBudgetStyle({ palette }),\r\n ...sharedBudgetGridWrapper({ palette }),\r\n ...criterionSettingCompanyStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...audienceTargetsSettingsStyles({ palette }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Stack, Shimmer } from '@fluentui/react';\r\n\r\nexport const SectionShimmer = ({ count }) => (\r\n <Stack tokens={{ childrenGap: 16 }}>\r\n {_.range(count).map(index => (<Shimmer key={index} width={`${100 - ((index % 4) * 25)}%`} />))}\r\n </Stack>\r\n);\r\n\r\nSectionShimmer.propTypes = {\r\n count: PropTypes.number,\r\n};\r\n\r\nSectionShimmer.defaultProps = {\r\n count: 3,\r\n};\r\n","import React, { useEffect, useMemo, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { noop, every, pluck } from 'underscore';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { CompanyNameTargetSetting } from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getCompanyTargetStyles } from './styles/company-target-styles';\r\n\r\nexport const formatCompany = ({ companyNameTargets, i18n }) => {\r\n if (!companyNameTargets || !companyNameTargets.length) {\r\n return i18n.getString(_TL_('Target Companies'));\r\n }\r\n\r\n if (companyNameTargets.length === 1) {\r\n return i18n.getString(_TL_('Targeted: 1 company'));\r\n }\r\n\r\n return i18n.getString(_TL_('Targeted: {{count}} companies'), { count: (companyNameTargets.length) });\r\n};\r\n\r\nconst UnstyledCompanyPicker = (props) => {\r\n const {\r\n classes,\r\n updateValidation,\r\n validationProps,\r\n showExclusion,\r\n } = props;\r\n\r\n const { data: { companyNameTargets, negativeCompanyNameTargets } } = validationProps;\r\n\r\n const [companyAssociationRef, setCompanyAssociationRef] = useState();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const companyAssociationView = useMemo(() => {\r\n const companyView = new CompanyNameTargetSetting({\r\n criterionType: 'CompanyName',\r\n type: 'CompanyName',\r\n showBidOnlyNote: false,\r\n showExclusion,\r\n defaultBidAdjustment: 0,\r\n isForVNext: true,\r\n currentLevelTargetInfo,\r\n });\r\n\r\n companyView.render();\r\n\r\n return companyView;\r\n }, [currentLevelTargetInfo, showExclusion]);\r\n\r\n const onChange = () => {\r\n const updatedItems = companyAssociationView.currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const companyNameTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'CompanyName'))\r\n .map(({ Criterion }) => {\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return CompanyNameCriterion;\r\n });\r\n\r\n const negativeCompanyNameTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'NegativeCompanyName'))\r\n .map(({ Criterion }) => {\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return CompanyNameCriterion;\r\n });\r\n\r\n updateValidation([], { companyNameTargets: companyNameTarget, negativeCompanyNameTargets: negativeCompanyNameTarget });\r\n\r\n if (activity) {\r\n activity.signal(`onCompanyTargetChange - ${JSON.stringify({ companies: companyNameTarget })}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (companyAssociationRef) {\r\n companyAssociationRef.innerHTML = '';\r\n companyAssociationRef.append(companyAssociationView.el);\r\n\r\n currentLevelTargetInfo.off('AdGroupCriterionCompanyNameChanged', onChange);\r\n\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'CompanyName'));\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'NegativeCompanyName'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isCompanyTargetSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return pluck(companyNameTargets, 'Target').includes(CompanyNameCriterion.Target);\r\n }));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isNegativeCompanyTargetSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { CompanyNameCriterion } = Criterion;\r\n\r\n return pluck(negativeCompanyNameTargets, 'Target').includes(CompanyNameCriterion.Target);\r\n }));\r\n\r\n if (companyNameTargets && (currentTargets.length !== companyNameTargets.length || !isCompanyTargetSame)) {\r\n companyNameTargets.forEach((companyTarget) => {\r\n const criterionData = {\r\n ...companyTarget,\r\n Id: companyTarget.Target,\r\n };\r\n\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'CompanyName',\r\n criterionData,\r\n true,\r\n 0,\r\n 0\r\n );\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n\r\n if (negativeCompanyNameTargets && (currentNegativeTargets.length !== negativeCompanyNameTargets.length || !isNegativeCompanyTargetSame)) {\r\n negativeCompanyNameTargets.forEach((companyTarget) => {\r\n const criterionData = {\r\n ...companyTarget,\r\n Id: companyTarget.Target,\r\n };\r\n\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'CompanyName',\r\n criterionData,\r\n false,\r\n 0,\r\n 0\r\n );\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n\r\n currentLevelTargetInfo.on('AdGroupCriterionCompanyNameChanged', onChange);\r\n }\r\n\r\n return noop;\r\n }, [companyAssociationView, companyAssociationRef, companyNameTargets, negativeCompanyNameTargets]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <div className={classNames('company-picker', classes.pickerContainer)} >\r\n <div className={classNames('company-association-view', 'criterion-setting-CompanyName')} ref={newRef => setCompanyAssociationRef(newRef)} />\r\n </div>\r\n );\r\n};\r\n\r\nUnstyledCompanyPicker.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 validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n companyNameTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n negativeCompanyNameTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n showExclusion: PropTypes.bool,\r\n};\r\n\r\nUnstyledCompanyPicker.defaultProps = {\r\n showExclusion: true,\r\n};\r\n\r\nexport const ValidatedCompanyPicker = withDefaultStyles(withCustomValidation(UnstyledCompanyPicker), getCompanyTargetStyles);\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n audienceTargetsSettingsStyles,\r\n criterionSettingCompanyStyles,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getCompanyTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingCompanyStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...audienceTargetsSettingsStyles({ palette }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { noop, every } from 'underscore';\r\nimport { JobFunctionTargetSetting } from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getJobFunctionTargetStyles } from './styles/job-function-target-styles';\r\n\r\nexport const formatJobFunction = ({ jobTargets, i18n }) => {\r\n if (!jobTargets || !jobTargets.length) {\r\n return i18n.getString(_TL_('Target Jobs'));\r\n }\r\n\r\n if (jobTargets.length === 1) {\r\n return i18n.getString(_TL_('Targeted: 1 job'));\r\n }\r\n\r\n return i18n.getString(_TL_('Targeted: {{count}} jobs'), { count: (jobTargets.length) });\r\n};\r\n\r\nconst UnstyledJobFunctionPicker = (props) => {\r\n const {\r\n classes,\r\n updateValidation,\r\n validationProps,\r\n showExclusion,\r\n } = props;\r\n const { data: { jobTargets, negativeJobTargets } } = validationProps;\r\n\r\n const [jobFunctionAssociationRef, setJobFunctionAssociationRef] = useState();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const jobFunctionAssociationView = useMemo(() => {\r\n const jobFunctionView = new JobFunctionTargetSetting({\r\n criterionType: 'JobFunction',\r\n type: 'JobFunction',\r\n showBidOnlyNote: false,\r\n showExclusion,\r\n defaultBidAdjustment: 0,\r\n isForVNext: true,\r\n currentLevelTargetInfo,\r\n });\r\n\r\n jobFunctionView.render();\r\n\r\n return jobFunctionView;\r\n }, [currentLevelTargetInfo, showExclusion]);\r\n\r\n const onChange = () => {\r\n const updatedItems = jobFunctionAssociationView.currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const jobTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'JobFunction'))\r\n .map(({ Criterion }) => {\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return JobFunctionCriterion.Target;\r\n });\r\n\r\n const negativeJobTarget = updatedItems.filter(({ CriterionType }) => (CriterionType === 'NegativeJobFunction'))\r\n .map(({ Criterion }) => {\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return JobFunctionCriterion.Target;\r\n });\r\n\r\n updateValidation([], { jobTargets: jobTarget, negativeJobTargets: negativeJobTarget });\r\n\r\n if (activity) {\r\n activity.signal(`onIndustryTargetChange - ${JSON.stringify({ jobFunction: jobTarget })}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (jobFunctionAssociationRef) {\r\n jobFunctionAssociationRef.innerHTML = '';\r\n jobFunctionAssociationRef.append(jobFunctionAssociationView.el);\r\n\r\n jobFunctionAssociationView.searchView.initializeSearchDataTask.then(() => {\r\n currentLevelTargetInfo.off('AdGroupCriterionJobFunctionChanged', onChange);\r\n\r\n const allJobTargets = jobFunctionAssociationView.searchView.searchResultView.items.map(item => item);\r\n\r\n if (jobTargets && jobTargets.length > 0) {\r\n const selectedJobTargets = allJobTargets.filter(({ id }) => jobTargets.includes(id));\r\n\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'JobFunction'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return jobTargets.includes(JobFunctionCriterion.Target);\r\n }));\r\n\r\n if (currentTargets.length !== selectedJobTargets.length || !isSame) {\r\n selectedJobTargets.forEach((data) => {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'JobFunction',\r\n data,\r\n true,\r\n 0,\r\n 0\r\n );\r\n\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n\r\n if (negativeJobTargets && negativeJobTargets.length > 0) {\r\n const selectedNegativeJobTargets = allJobTargets.filter(({ id }) => negativeJobTargets.includes(id));\r\n\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'NegativeJobFunction'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { JobFunctionCriterion } = Criterion;\r\n\r\n return negativeJobTargets.includes(JobFunctionCriterion.Target);\r\n }));\r\n\r\n if (currentNegativeTargets.length !== selectedNegativeJobTargets.length || !isSame) {\r\n selectedNegativeJobTargets.forEach((data) => {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'JobFunction',\r\n data,\r\n false,\r\n 0,\r\n 0\r\n );\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n }).then(() => currentLevelTargetInfo.on('AdGroupCriterionJobFunctionChanged', onChange));\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionJobFunctionChanged', onChange);\r\n };\r\n }\r\n\r\n return noop;\r\n }, [jobFunctionAssociationRef, jobTargets, negativeJobTargets]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <div className={classNames('job-function-picker', classes.pickerContainer)} >\r\n <div className={classNames('job-function-association-view', 'criterion-setting-JobFunction')} ref={newRef => setJobFunctionAssociationRef(newRef)} />\r\n </div>\r\n );\r\n};\r\n\r\nUnstyledJobFunctionPicker.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 validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n jobTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n negativeJobTargets: PropTypes.arrayOf(PropTypes.shape([])),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n showExclusion: PropTypes.bool,\r\n};\r\n\r\nUnstyledJobFunctionPicker.defaultProps = {\r\n showExclusion: true,\r\n};\r\n\r\nexport const ValidatedJobFunctionPicker = withDefaultStyles(withCustomValidation(UnstyledJobFunctionPicker), getJobFunctionTargetStyles);\r\n\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n audienceTargetsSettingsStyles,\r\n criterionSettingJobFunctionStyles,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getJobFunctionTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingJobFunctionStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...audienceTargetsSettingsStyles({ palette }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import React, { useEffect, useMemo, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { flatten, noop, every } from 'underscore';\r\nimport { IndustryTargetSetting } from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getIndustryTargetStyles } from './styles/industry-target-styles';\r\n\r\nexport const formatIndustry = ({ industry, i18n }) => {\r\n if (!industry || !industry.length) {\r\n return i18n.getString(_TL_('Target Industries'));\r\n }\r\n\r\n if (industry.length === 1) {\r\n return i18n.getString(_TL_('Targeted: 1 industry'));\r\n }\r\n\r\n return i18n.getString(_TL_('Targeted: {{count}} industries'), { count: (industry.length) });\r\n};\r\n\r\n\r\nconst UnstyledIndustryPicker = (props) => {\r\n const {\r\n classes,\r\n updateValidation,\r\n validationProps,\r\n showExclusion,\r\n } = props;\r\n\r\n const { data: { industry, negativeIndustry } } = validationProps;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const [industryAssociationRef, setIndustryAssociationRef] = useState();\r\n\r\n const currentLevelTargetInfo = useMemo(() => (\r\n new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: true,\r\n initAudienceAssociationView: false,\r\n })), []);\r\n\r\n const industryAssociationView = useMemo(() => {\r\n const industryView = new IndustryTargetSetting({\r\n criterionType: 'Industry',\r\n type: 'Industry',\r\n showBidOnlyNote: false,\r\n showExclusion,\r\n defaultBidAdjustment: 0,\r\n isForVNext: true,\r\n currentLevelTargetInfo,\r\n });\r\n\r\n industryView.render();\r\n\r\n return industryView;\r\n }, [currentLevelTargetInfo, showExclusion]);\r\n\r\n const onChange = () => {\r\n const updatedItems = industryAssociationView.currentLevelTargetInfo.getSnapshot(false);\r\n\r\n const industryTargets = updatedItems.filter(({ CriterionType }) => (CriterionType === 'Industry'))\r\n .map(({ Criterion }) => {\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return IndustryCriterion.Target;\r\n });\r\n\r\n const negativeIndustryTargets = updatedItems.filter(({ CriterionType }) => (CriterionType === 'NegativeIndustry'))\r\n .map(({ Criterion }) => {\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return IndustryCriterion.Target;\r\n });\r\n\r\n updateValidation([], { industry: industryTargets, negativeIndustry: negativeIndustryTargets });\r\n\r\n if (activity) {\r\n activity.signal(`onIndustryTargetChange - ${JSON.stringify({ industry: industryTargets })}`);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (industryAssociationRef) {\r\n industryAssociationRef.innerHTML = '';\r\n industryAssociationRef.append(industryAssociationView.el);\r\n\r\n industryAssociationView.searchView.searchTreeInitializationPromise.then(() => {\r\n currentLevelTargetInfo.off('AdGroupCriterionIndustryChanged', onChange);\r\n\r\n const industryTargets = industryAssociationView.searchView.treeView.node.children.map((child) => {\r\n const { children } = child;\r\n\r\n const innerChildren = children.map(innerChild => innerChild.data);\r\n\r\n return [...innerChildren];\r\n });\r\n\r\n const flatIndustryTargets = flatten(industryTargets);\r\n\r\n if (industry && industry.length > 0) {\r\n const selectedIndustries = flatIndustryTargets.filter(({ Id }) => industry.includes(Id));\r\n\r\n const currentTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'Industry'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return industry.includes(IndustryCriterion.Target);\r\n }));\r\n\r\n if (currentTargets.length !== selectedIndustries.length || !isSame) {\r\n selectedIndustries.forEach((data) => {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'Industry',\r\n data,\r\n true,\r\n 0,\r\n 0\r\n );\r\n\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n\r\n if (negativeIndustry && negativeIndustry.length > 0) {\r\n const selectedNegativeIndustries = flatIndustryTargets.filter(({ Id }) => negativeIndustry.includes(Id));\r\n\r\n const currentNegativeTargets = currentLevelTargetInfo.getSnapshot(false).filter(({ CriterionType }) => (CriterionType === 'NegativeIndustry'));\r\n\r\n // check if the current targets are the same as the selected targets\r\n const isSame = every(currentNegativeTargets, ((target) => {\r\n const { Criterion } = target;\r\n\r\n const { IndustryCriterion } = Criterion;\r\n\r\n return negativeIndustry.includes(IndustryCriterion.Target);\r\n }));\r\n\r\n if (currentNegativeTargets.length !== selectedNegativeIndustries.length || !isSame) {\r\n selectedNegativeIndustries.forEach((data) => {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'Industry',\r\n data,\r\n false,\r\n 0,\r\n 0\r\n );\r\n\r\n currentLevelTargetInfo.createAsync(criterion);\r\n });\r\n }\r\n }\r\n }).then(() => currentLevelTargetInfo.on('AdGroupCriterionIndustryChanged', onChange));\r\n\r\n return () => {\r\n currentLevelTargetInfo.off('AdGroupCriterionIndustryChanged', onChange);\r\n };\r\n }\r\n return noop;\r\n }, [industryAssociationRef, industry, negativeIndustry]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <div className={classNames('industry-picker crud-audience-adgroup audience-target-settings-container', classes.pickerContainer)} >\r\n <div className={classNames('industry-association-view', 'criterion-setting-Industry')} ref={newRef => setIndustryAssociationRef(newRef)} />\r\n </div>\r\n );\r\n};\r\n\r\nUnstyledIndustryPicker.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 validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n industry: PropTypes.arrayOf(PropTypes.shape([])),\r\n negativeIndustry: PropTypes.arrayOf(PropTypes.shape([])),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n showExclusion: PropTypes.bool,\r\n};\r\n\r\nUnstyledIndustryPicker.defaultProps = {\r\n showExclusion: true,\r\n};\r\n\r\nexport const ValidatedIndustryPicker = withDefaultStyles(withCustomValidation(UnstyledIndustryPicker), getIndustryTargetStyles);\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 tableStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n audienceTargetsSettingsStyles,\r\n criterionSettingIndustryStyles,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const getIndustryTargetStyles = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n },\r\n pickerContainer: {\r\n ...criterionSettingIndustryStyles({ palette }, { targetGridWidth: 816 }),\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...audienceTargetsSettingsStyles({ palette }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...tableStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n '& .statusEnabled_icon::before': {\r\n color: '#107c10',\r\n content: '\"\\\\ECCC\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusPaused_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#323130',\r\n content: '\"\\\\F6B0\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .statusExcluded_icon::before': { // Todo: find icons for status disabled etc.\r\n color: '#A80000',\r\n content: '\"\\\\E733\"',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n});\r\n","import React, { useMemo, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack, Toggle } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\n\r\nconst Title = ({ titleKey }) => {\r\n const i18n = useContext(I18nContext);\r\n const titleText = i18n.getString(titleKey);\r\n\r\n return (\r\n <Stack verticalAlign=\"center\" horizontal tokens={{ childrenGap: 8 }}>\r\n <Label className=\"collapse-title\" >\r\n {titleText}\r\n <HelpPopup\r\n topic=\"pop_BA_PredictiveTargeting_OptimizedDisabled\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: titleText })}\r\n />\r\n </Label>\r\n </Stack>\r\n );\r\n};\r\n\r\nTitle.propTypes = {\r\n titleKey: PropTypes.string.isRequired,\r\n};\r\n\r\nconst PredictiveTargetingControlHeaderInternal = ({\r\n validationProps,\r\n updateValidation,\r\n onToggleEnabledChanged,\r\n campaignSubType,\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n let { UseOptimizedTargeting } = data;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = (e, checked) => {\r\n updateValidation([], { UseOptimizedTargeting: checked });\r\n\r\n if (activity) {\r\n activity.signal(`onPredectiveTargetingChanged - isPredTargetingEnabled: ${UseOptimizedTargeting}`);\r\n }\r\n };\r\n\r\n const isEnabled = useMemo(() => {\r\n const doesAdGroupHaveAudienceTargeted = data.audiences && data.audiences.length > 0;\r\n const doesAdGroupHaveCompanyNameTarget = (data.companyNameTargets && data.companyNameTargets.length > 0) || (data.negativeCompanyNameTargets && data.negativeCompanyNameTargets.length > 0);\r\n const doesAdGroupHaveJobFunctionTarget = (data.jobTargets && data.jobTargets.length > 0) || (data.negativeJobTargets && data.negativeJobTargets.length > 0);\r\n const doesAdGroupHaveIndustryTarget = (data.industry && data.industry.length > 0) || (data.negativeIndustry && data.negativeIndustry.length > 0);\r\n const doesAdGroupHaveAgeTarget = data.ageRanges && data.ageRanges.length < 6;\r\n const doesAdGroupHaveGenderTarget = data.genderTypes && data.genderTypes.length < 3;\r\n const doesAdGroupHaveDeviceTarget = data.deviceTypes && data.deviceTypes.length < 3;\r\n\r\n const isVideoCampaign = campaignSubType === CampaignSubTypes.BrandAwarenessVideoAds;\r\n\r\n return doesAdGroupHaveAudienceTargeted || doesAdGroupHaveCompanyNameTarget ||\r\n doesAdGroupHaveJobFunctionTarget || doesAdGroupHaveIndustryTarget ||\r\n doesAdGroupHaveAgeTarget || doesAdGroupHaveGenderTarget ||\r\n (isVideoCampaign && EnableMSANVideoCampaigns && doesAdGroupHaveDeviceTarget);\r\n }, [data, EnableMSANVideoCampaigns, campaignSubType]);\r\n\r\n // if no targets and use optimized targeting is disabled it, enable it.\r\n if (!isEnabled && !UseOptimizedTargeting) {\r\n if (EnableMSANDisplayCampaigns || EnableMSANVideoCampaigns) {\r\n UseOptimizedTargeting = true;\r\n }\r\n updateValidation([], { UseOptimizedTargeting: true });\r\n }\r\n\r\n useEffect(() => {\r\n onToggleEnabledChanged(isEnabled);\r\n }, [isEnabled, onToggleEnabledChanged]);\r\n\r\n return (\r\n <Stack verticalAlign=\"center\" horizontal tokens={{ childrenGap: 8 }}>\r\n <Toggle\r\n inlineLabel={false}\r\n onChange={onChange}\r\n checked={UseOptimizedTargeting}\r\n disabled={!isEnabled}\r\n styles={{\r\n root: {\r\n marginBottom: 0,\r\n },\r\n }}\r\n />\r\n <Title titleKey={_TL_('Predictive targeting')} />\r\n </Stack>\r\n );\r\n};\r\n\r\nPredictiveTargetingControlHeaderInternal.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n UseOptimizedTargeting: PropTypes.bool,\r\n audiences: PropTypes.shape([]).isRequired,\r\n companyNameTargets: PropTypes.shape([]).isRequired,\r\n negativeCompanyNameTargets: PropTypes.shape([]).isRequired,\r\n jobTargets: PropTypes.shape([]).isRequired,\r\n negativeJobTargets: PropTypes.shape([]).isRequired,\r\n industry: PropTypes.shape([]).isRequired,\r\n negativeIndustry: PropTypes.shape([]).isRequired,\r\n ageRanges: PropTypes.shape([]).isRequired,\r\n genderTypes: PropTypes.shape([]).isRequired,\r\n deviceTypes: PropTypes.shape([]).isRequired,\r\n }),\r\n }).isRequired,\r\n onToggleEnabledChanged: PropTypes.func.isRequired,\r\n campaignSubType: PropTypes.string.isRequired,\r\n EnableMSANDisplayCampaigns: PropTypes.bool.isRequired,\r\n EnableMSANVideoCampaigns: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport const PredictiveTargetingControlHeader = withCustomValidation(PredictiveTargetingControlHeaderInternal);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport DataTrending from './media/data-trending.svg';\r\n\r\n\r\nconst PredictiveTargetingDescription = ({ i18n }) => (\r\n <div>\r\n {i18n.getString(_TL_('Predictive targeting allows us to optimize your ad reach based on your targeting preferences. You can customize predictive targeting by setting up targeting preferences below.'))}\r\n  <a className=\"HelpTopic\" href=\"#!\" query=\"help:app54818\">{i18n.getString(_TL_('Learn more'))}</a>\r\n </div>\r\n);\r\n\r\nPredictiveTargetingDescription.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const PredictiveTargetingHeader = ({ data }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { UseOptimizedTargeting } = data;\r\n\r\n return (\r\n <>\r\n <Stack>\r\n <Stack horizontal tokens={{ childrenGap: 14 }}>\r\n <img src={DataTrending} alt={i18n.getString(_TL_('Predictive targeting logo'))} />\r\n <Stack verticalAlign=\"center\" tokens={{ childrenGap: 14 }}>\r\n <Label className=\"collapse-title\" isActive>\r\n {UseOptimizedTargeting && i18n.getString(_TL_('Predictive targeting is enabled'))}\r\n { !UseOptimizedTargeting && i18n.getString(_TL_('Predictive targeting is not set up for this campaign')) }\r\n <HelpPopup\r\n topic=\"pop_BA_PredictiveTargeting_OptimizedDisabled\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: 'Predictive Targeting' })}\r\n />\r\n </Label>\r\n <div>\r\n <PredictiveTargetingDescription i18n={i18n} />\r\n </div>\r\n </Stack>\r\n </Stack>\r\n </Stack>\r\n </>\r\n );\r\n};\r\n\r\nPredictiveTargetingHeader.propTypes = {\r\n data: PropTypes.shape({\r\n UseOptimizedTargeting: PropTypes.bool,\r\n }).isRequired,\r\n};\r\n\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSinglePlacementLayouts } from '@bingads-webui-campaign-react/ad-placement-factory';\r\nimport { evaluateAdCustomizers } from '@bingads-webui-campaign/ad-customizers-next';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getDomain } from '@bingads-webui/url-util';\r\nimport { combineDescriptions } from '@bingads-webui-campaign-react/ad-common';\r\nimport { getPreviewStyles } from './styles';\r\n\r\nconst adType = 'DynamicSearchAd';\r\n\r\nconst DSAPreviewGroupType = 'dynamicSearchAd';\r\n\r\nconst DynamicSearchAdPreviewUAPLUnstyled = ({\r\n classes,\r\n data: {\r\n Text,\r\n TextPart2,\r\n DisplayUrl,\r\n Path1,\r\n Path2,\r\n },\r\n domain,\r\n}) => {\r\n const [description, setDescription] = useState('');\r\n const [urlPath1, setUrlPath1] = useState('');\r\n const [urlPath2, setUrlPath2] = useState('');\r\n\r\n const urlDomain = useMemo(() => getDomain(DisplayUrl) || domain, [DisplayUrl, domain]);\r\n const displayUrl = useMemo(() => `${urlDomain}${urlPath1}${urlPath2}`, [urlDomain, urlPath1, urlPath2]);\r\n const finalUrl = useMemo(() => `https://${displayUrl}`, [displayUrl]);\r\n\r\n const [{ SinglePlacementLayout }] = useSinglePlacementLayouts({\r\n groupType: DSAPreviewGroupType,\r\n placementFilterPredicate: tmp => tmp.type === adType,\r\n });\r\n\r\n useEffect(() => {\r\n evaluateAdCustomizers({\r\n adType,\r\n field: 'Descriptions',\r\n text: combineDescriptions(Text, TextPart2),\r\n }).then((evaluatedText) => {\r\n setDescription(evaluatedText);\r\n });\r\n }, [Text, TextPart2]);\r\n\r\n useEffect(() => {\r\n evaluateAdCustomizers({\r\n adType,\r\n field: 'Path1',\r\n text: Path1,\r\n }).then((evaluatedText) => {\r\n setUrlPath1(evaluatedText ? `/${evaluatedText}` : '');\r\n });\r\n }, [Path1]);\r\n\r\n useEffect(() => {\r\n evaluateAdCustomizers({\r\n adType,\r\n field: 'Path2',\r\n text: Path2,\r\n }).then((evaluatedText) => {\r\n setUrlPath2(evaluatedText ? `/${evaluatedText}` : '');\r\n });\r\n }, [Path2]);\r\n\r\n const adData = useMemo(() => ({\r\n description,\r\n finalUrl,\r\n displayUrl,\r\n }), [description, displayUrl, finalUrl]);\r\n\r\n return (\r\n <div className={classes.adPreviewContainer}>\r\n <SinglePlacementLayout adData={adData} />\r\n </div>\r\n );\r\n};\r\n\r\nDynamicSearchAdPreviewUAPLUnstyled.propTypes = {\r\n classes: PropTypes.shape({\r\n adPreviewContainer: PropTypes.string,\r\n }).isRequired,\r\n data: PropTypes.shape({\r\n Text: PropTypes.string,\r\n TextPart2: PropTypes.string,\r\n DisplayUrl: PropTypes.string,\r\n Path1: PropTypes.string,\r\n Path2: PropTypes.string,\r\n }),\r\n domain: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nDynamicSearchAdPreviewUAPLUnstyled.defaultProps = {\r\n data: {},\r\n domain: '',\r\n};\r\n\r\nexport const DynamicSearchAdPreviewUAPL =\r\n withDefaultStyles(DynamicSearchAdPreviewUAPLUnstyled, getPreviewStyles);\r\n","export const getPreviewStyles = () => ({\r\n adPreviewContainer: {\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Label } from '@fluentui/react-components';\r\nimport {\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n MessageBar,\r\n MessageBarBody,\r\n MessageBarTitle\r\n} from '@fluentui/react-message-bar';\r\nimport { orComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { DynamicSearchAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { ValidatedTextFieldWithAdCustomizer } from '@bingads-webui-campaign-react/responsive-search-ad-editor';\r\nimport { ValidatedUrlPath } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { withError } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { useAdCustomizer } from './use-ad-customizer';\r\nimport AdTextImg from '../media/ad-text.svg';\r\n\r\nconst pathProps = orComp(propertyIs('Path1'), propertyIs('Path2'));\r\nconst ServerValidatedUrlPath = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedUrlPath, { filter: pathProps }));\r\n\r\nconst AdTextInternal = ({\r\n i18n,\r\n expand,\r\n data,\r\n domain,\r\n permissions,\r\n scope,\r\n ...rest\r\n}) => {\r\n const {\r\n Text,\r\n TextPart2,\r\n DisplayUrl,\r\n Path1,\r\n Path2,\r\n } = data;\r\n\r\n const { campaignId, adGroupId } = scope;\r\n\r\n useAdCustomizer({\r\n campaignId,\r\n adGroupId,\r\n i18n,\r\n permissions,\r\n });\r\n\r\n return (\r\n <ValidatedPanel\r\n key=\"ad-text\"\r\n title={<TextTitle titleKey={_TL_('Ad text')} topicKey=\"pop_TBD\" icon={AdTextImg} />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'ad-text',\r\n }}\r\n {...rest}\r\n >\r\n <div className=\"ad-text-panel\">\r\n <div className=\"final-url\">\r\n <div className=\"field-label\">\r\n <Label weight=\"semibold\">\r\n {i18n.getString(_TL_('Final URL'))}\r\n </Label>\r\n <HelpPopup\r\n topic=\"pop_BA_NewAdCreate_FinalURL\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about Final URL'))}\r\n />\r\n </div>\r\n <div className=\"field-value\">\r\n {i18n.getString(_TL_('Dynamically selected landing page'))}\r\n </div>\r\n </div>\r\n <div className=\"ad-title\">\r\n <div className=\"field-label\">\r\n <Label weight=\"semibold\">\r\n {i18n.getString(_TL_('Ad title'))}\r\n </Label>\r\n <HelpPopup\r\n topic=\"pop_BA_CampaignCreate_Ads_AdTitle\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about Ad title'))}\r\n />\r\n </div>\r\n <div className=\"field-value\">\r\n {i18n.getString(_TL_('Dynamically generated headline'))}\r\n </div>\r\n </div>\r\n <div className=\"ad-text\">\r\n <div className=\"field-label\">\r\n <Label weight=\"semibold\">\r\n {i18n.getString(_TL_('Ad text 1'))}\r\n </Label>\r\n <HelpPopup\r\n topic=\"pop_BA_NewAdCreate_AdText\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about Ad text 1'))}\r\n />\r\n </div>\r\n <div className=\"field-value\">\r\n <ValidatedTextFieldWithAdCustomizer\r\n className=\"input-ad-text\"\r\n i18n={i18n}\r\n adType=\"DynamicSearchAd\"\r\n containerSelector=\".dynamic-search-ad-container\"\r\n validationProps={{\r\n data,\r\n field: 'Text',\r\n schema: DynamicSearchAd,\r\n }}\r\n configProps={{\r\n id: 'Text',\r\n key: 'Descriptions',\r\n placeholder: i18n.getString(_TL_('Enter ad text')),\r\n title: Text,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"ad-text-2\">\r\n <div className=\"field-label\">\r\n <Label weight=\"semibold\">\r\n {i18n.getString(_TL_('Ad text 2'))}\r\n </Label>\r\n <HelpPopup\r\n topic=\"pop_BA_NewAdCreate_AdText2\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about Ad text 2'))}\r\n />\r\n </div>\r\n <div className=\"field-value\">\r\n <ValidatedTextFieldWithAdCustomizer\r\n className=\"input-ad-text-2\"\r\n i18n={i18n}\r\n adType=\"DynamicSearchAd\"\r\n containerSelector=\".dynamic-search-ad-container\"\r\n validationProps={{\r\n data,\r\n field: 'TextPart2',\r\n schema: DynamicSearchAd,\r\n }}\r\n configProps={{\r\n id: 'TextPart2',\r\n key: 'Descriptions',\r\n placeholder: i18n.getString(_TL_('Enter ad text')),\r\n title: TextPart2,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"ad-text-disclaimer\">\r\n <MessageBar className=\"message-bar\">\r\n <MessageBarBody>\r\n <MessageBarTitle>{i18n.getString(_TL_('Note'))}</MessageBarTitle>\r\n <LearnMoreLink\r\n topic=\"app54695\"\r\n text={i18n.getString(_TL_('In addition to your Ad texts, we will generate dynamic search ad text.'))}\r\n linkText={i18n.getString(_TL_('Learn more'))}\r\n />\r\n </MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n <div className=\"ad-path\">\r\n <div className=\"field-label\">\r\n <Label weight=\"semibold\">\r\n {i18n.getString(_TL_('Path'))}\r\n </Label>\r\n <HelpPopup\r\n topic=\"pop_BA_NewAdCreate_DSA_Path\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about Path'))}\r\n />\r\n </div>\r\n <div className=\"field-value\">\r\n <ServerValidatedUrlPath\r\n i18n={i18n}\r\n validationProps={{ data: { Path1, Path2, FinalUrls: [DisplayUrl || domain] } }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </ValidatedPanel>\r\n );\r\n};\r\n\r\nAdTextInternal.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n data: PropTypes.shape({\r\n Text: PropTypes.string,\r\n TextPart2: PropTypes.string,\r\n DisplayUrl: PropTypes.string,\r\n Path1: PropTypes.string,\r\n Path2: PropTypes.string,\r\n }),\r\n permissions: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n campaignId: PropTypes.string,\r\n adGroupId: PropTypes.string,\r\n }).isRequired,\r\n domain: PropTypes.string,\r\n onDataChange: PropTypes.func.isRequired,\r\n expand: PropTypes.func.isRequired,\r\n};\r\n\r\nAdTextInternal.defaultProps = {\r\n data: {\r\n Text: '',\r\n TextPart2: '',\r\n DisplayUrl: '',\r\n Path1: '',\r\n Path2: '',\r\n },\r\n domain: '',\r\n};\r\n\r\nexport const AdText = withControlErrorHandling(withUnvalidatedControlErrors(withError(AdTextInternal)));\r\n","import { useContext } from 'react';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { initializeAdCustomizer } from '@bingads-webui-campaign/ad-customizers-next';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsDataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\n\r\nexport const useAdCustomizer = ({\r\n campaignId,\r\n adGroupId,\r\n i18n,\r\n permissions,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n initializeAdCustomizer({\r\n deps: {\r\n i18n,\r\n config,\r\n instrumentation,\r\n permissions,\r\n edmCampaign,\r\n jsDataCampaign,\r\n timeZone: config.get('AccountTimeZone'),\r\n scope: {\r\n campaignId: Number(campaignId),\r\n adGroupId: Number(adGroupId),\r\n },\r\n showAdCustomizers: true,\r\n IsRSAIffPopupEnabledFromDeps: true,\r\n },\r\n adType: 'DynamicSearchAd',\r\n });\r\n};\r\n","export const getStyles = () => ({\r\n container: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '16px',\r\n },\r\n editor: {\r\n width: '600px',\r\n minWidth: '600px',\r\n\r\n '& .ad-text-panel': {\r\n '& > div + div': {\r\n marginTop: '16px',\r\n },\r\n\r\n '& .field-label': {\r\n padding: '5px 0',\r\n },\r\n\r\n '& .text-input-container': {\r\n width: 'auto',\r\n },\r\n\r\n '& .url-path-container > label': {\r\n display: 'none',\r\n },\r\n },\r\n\r\n '& .error': {\r\n color: '#A80000',\r\n },\r\n },\r\n preview: {\r\n\r\n },\r\n});\r\n","import React, { useCallback, useContext, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { extend, get } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport {\r\n Collapse,\r\n collapseExpander,\r\n useCollapseState,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\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 { DynamicSearchAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { URLOptionsSection } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { testUurl, uurlLevels } from '@bingads-webui-component-legacy/upgraded-url/service/testUurl';\r\nimport { DynamicSearchAdPreviewUAPL } from '@bingads-webui-campaign-react/dynamic-search-ad-preview-uapl';\r\n\r\nimport { AdText } from './ad-text';\r\nimport { getStyles } from './style';\r\n\r\nexport const DynamicSearchAdEditor = ({\r\n ad,\r\n onAdChanged,\r\n domain,\r\n permissions,\r\n scope,\r\n alwaysShowError,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { Token } = serverContext;\r\n\r\n const [cachedAd, setCachedAd] = useState(get(ad, 'data', {}));\r\n\r\n const {\r\n TrackingUrlTemplate, FinalUrlSuffix, UrlCustomParameters,\r\n } = cachedAd;\r\n\r\n const [\r\n allSections,\r\n expandedSections,\r\n setExpandedSections,\r\n ] = useCollapseState(\r\n ['ad-text', 'advanced-url-options'] /* all sections */,\r\n ['ad-text'] /* initially expanded sections */\r\n );\r\n\r\n const settingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setExpandedSections }),\r\n [setExpandedSections]\r\n );\r\n\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate,\r\n FinalUrlSuffix,\r\n UrlCustomParameters,\r\n }), [FinalUrlSuffix, TrackingUrlTemplate, UrlCustomParameters]);\r\n\r\n const urlOptionsDetails = useRef(urlOptions);\r\n urlOptionsDetails.current = urlOptions;\r\n\r\n const triggerTestUurl = useCallback((fn, originalView) => {\r\n extend(originalView, {\r\n isInline: false,\r\n level: uurlLevels.Campaign,\r\n });\r\n const params = urlOptionsDetails.current;\r\n const options = {\r\n apiInLog: 'advancedSettingsUrlOptions/uurlTest',\r\n };\r\n testUurl(fn, originalView, params, scope, options);\r\n }, [scope]);\r\n\r\n const onValidate = useCallback((result) => {\r\n const validatedAd = { ...cachedAd, ...result.data };\r\n setCachedAd(validatedAd);\r\n onAdChanged({ ...result, data: validatedAd });\r\n }, [cachedAd, onAdChanged]);\r\n\r\n return (\r\n <div className={classNames('dynamic-search-ad-container', classes.container)}>\r\n <div className={classNames('dynamic-search-ad-editor', classes.editor)}>\r\n <ValidationGroup\r\n validationProps={{\r\n schema: DynamicSearchAd,\r\n onValidate,\r\n data: cachedAd,\r\n i18n: legacyI18n,\r\n alwaysShowError,\r\n }}\r\n >\r\n <Collapse allPanelItems={allSections} checkItems skipItemsTypeCheck activeKeys={expandedSections} setActiveKeys={setExpandedSections}>\r\n <AdText\r\n key=\"ad-text\"\r\n expand={settingsExpand}\r\n i18n={i18n}\r\n data={cachedAd}\r\n domain={domain}\r\n permissions={permissions}\r\n scope={scope}\r\n onDataChange={onAdChanged}\r\n />\r\n <URLOptionsSection\r\n key=\"advanced-url-options\"\r\n expand={settingsExpand}\r\n trackingUrlTemplate={TrackingUrlTemplate}\r\n finalUrlSuffix={FinalUrlSuffix}\r\n urlCustomParameters={UrlCustomParameters}\r\n token={Token}\r\n triggerTestUurl={triggerTestUurl}\r\n />\r\n </Collapse>\r\n </ValidationGroup>\r\n </div>\r\n <div className={classNames('dynamic-search-ad-preview', classes.preview)}>\r\n <DynamicSearchAdPreviewUAPL\r\n key=\"dynamic-search-ad\"\r\n data={cachedAd}\r\n domain={domain}\r\n i18n={i18n}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nDynamicSearchAdEditor.propTypes = {\r\n ad: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n isValid: PropTypes.bool,\r\n }),\r\n domain: PropTypes.string,\r\n onAdChanged: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n customerId: PropTypes.string,\r\n accountId: PropTypes.string,\r\n campaignId: PropTypes.string,\r\n adGroupId: PropTypes.string,\r\n }).isRequired,\r\n alwaysShowError: PropTypes.bool,\r\n};\r\n\r\nDynamicSearchAdEditor.defaultProps = {\r\n ad: {\r\n data: {},\r\n isValid: false,\r\n },\r\n domain: '',\r\n alwaysShowError: false,\r\n};\r\n","/* eslint-disable react/no-array-index-key */\r\nimport React, { useCallback, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { TextItem, ImageChooser } from '@bingads-webui-campaign-react/asset-library-creative-components';\r\nimport {\r\n DefaultButton,\r\n} from '@bingads-webui-react/fabric-control';\r\n\r\nexport const MetaDataEditor = ({\r\n metaData,\r\n i18n,\r\n cid,\r\n aid,\r\n oDataConfig,\r\n finalUrl,\r\n assetLibraryConfig,\r\n onTextListChange,\r\n onChangeImage,\r\n disableGenerate,\r\n handleGenerate,\r\n textErrorMessages,\r\n}) => {\r\n const [textList, setTextList] = React.useState();\r\n\r\n const onTextListUpdate = useCallback((str, index) => {\r\n const newTextList = [...textList];\r\n newTextList[index] = str;\r\n setTextList(newTextList);\r\n onTextListChange(newTextList);\r\n }, [onTextListChange, textList]);\r\n\r\n useEffect(() => {\r\n if (metaData && metaData.text && metaData.images) {\r\n setTextList(metaData.text);\r\n }\r\n }, [metaData]);\r\n\r\n const imageSrc = useMemo(() => (metaData && metaData.newImage && metaData.newImage.url) || '', [metaData]);\r\n\r\n return (\r\n <div className=\"meta-data-editor\">\r\n {\r\n textList && textList.length > 0 && textList.map((text, index) => (\r\n <div key={index}>\r\n <TextItem\r\n i18n={i18n}\r\n text={text}\r\n updateText={(str) => { onTextListUpdate(str, index); }}\r\n errorMessage={(textErrorMessages && textErrorMessages[index]) || ''}\r\n title={i18n.getString(_TL_('Text {{index}}'), { index: index + 1 })}\r\n showHelpPopup\r\n helpTopic=\"pop_BA_VideoAdsCopilot_Text\"\r\n />\r\n </div>\r\n ))\r\n }\r\n {\r\n imageSrc &&\r\n <ImageChooser\r\n currentImage={imageSrc}\r\n cid={cid}\r\n aid={aid}\r\n oDataConfig={oDataConfig}\r\n finalUrl={finalUrl}\r\n onChangeImage={onChangeImage}\r\n assetLibraryConfig={assetLibraryConfig}\r\n i18n={i18n}\r\n showHelpPopup\r\n helpTopic=\"pop_BA_VideoAdsCopilot_Image\"\r\n />\r\n }\r\n <DefaultButton\r\n styles={{ root: { marginTop: '24px' } }}\r\n iconProps={{ iconName: 'Send' }}\r\n onClick={handleGenerate}\r\n className=\"generate-video-button\"\r\n text={i18n.getString(_TL_('Generate'))}\r\n disabled={disableGenerate}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nMetaDataEditor.propTypes = {\r\n metaData: PropTypes.shape({\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n images: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n assetLibraryConfig: PropTypes.shape({}).isRequired,\r\n onChangeImage: PropTypes.func.isRequired,\r\n onTextListChange: PropTypes.func.isRequired,\r\n disableGenerate: PropTypes.bool.isRequired,\r\n handleGenerate: PropTypes.func.isRequired,\r\n textErrorMessages: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nMetaDataEditor.defaultProps = {\r\n textErrorMessages: undefined,\r\n};\r\n","export const getVideoSettingsEditorStyles = () => ({\r\n videoSettingsEditor: {\r\n '& .plus-button-container': {\r\n marginTop: 16,\r\n '& .item-title span': {\r\n fontWeight: 600,\r\n },\r\n '& .add-image-button': {\r\n marginTop: 8,\r\n width: 'auto',\r\n height: 'auto',\r\n '& span': {\r\n width: 106,\r\n border: '1px dashed #c8c6c4',\r\n height: 76,\r\n borderRadius: 6,\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { IconButton, Text, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { ImageContainer, TextItem } from '@bingads-webui-campaign-react/asset-library-creative-components';\r\n\r\nimport { getVideoSettingsEditorStyles } from './style';\r\n\r\nexport const VideoSettingsEditor = ({\r\n videoSettings,\r\n setVideoSettings,\r\n i18n,\r\n onLoadingLogo,\r\n onChangeLogo,\r\n newLogoDataObject,\r\n handleGenerate,\r\n disableGenerate,\r\n businessNameErrorMessage,\r\n}) => {\r\n const businessName = useMemo(() => {\r\n if (videoSettings && videoSettings.updating && videoSettings.updating.businessName) {\r\n return videoSettings.updating.businessName.text;\r\n }\r\n\r\n return '';\r\n }, [videoSettings]);\r\n\r\n const currentLogo = useMemo(() => {\r\n if (videoSettings && videoSettings.updating && videoSettings.updating.logo) {\r\n return videoSettings.updating.logo.url;\r\n }\r\n\r\n return '';\r\n }, [videoSettings]);\r\n\r\n useEffect(() => {\r\n if (newLogoDataObject && newLogoDataObject.url) {\r\n setVideoSettings(prev => ({\r\n ...prev,\r\n updating: {\r\n ...prev.updating,\r\n logo: {\r\n url: newLogoDataObject.url,\r\n display: true,\r\n },\r\n },\r\n }));\r\n }\r\n }, [newLogoDataObject, setVideoSettings]);\r\n\r\n const onVideoSettingsChanged = useCallback((metaData) => {\r\n setVideoSettings({\r\n ...videoSettings,\r\n updating: {\r\n ...videoSettings.updating,\r\n ...metaData,\r\n },\r\n });\r\n }, [setVideoSettings, videoSettings]);\r\n\r\n const onBusinessNameChange = useCallback((str) => {\r\n onVideoSettingsChanged({\r\n businessName: {\r\n text: str,\r\n display: str !== '',\r\n },\r\n });\r\n }, [onVideoSettingsChanged]);\r\n\r\n const onEdit = useCallback(() => {\r\n // setDisplayEdit(false);\r\n onChangeLogo();\r\n }, [onChangeLogo]);\r\n\r\n const onDelete = useCallback(() => {\r\n onVideoSettingsChanged({\r\n logo: {\r\n url: '',\r\n display: false,\r\n },\r\n });\r\n }, [onVideoSettingsChanged]);\r\n\r\n const classes = useDefaultStyles(getVideoSettingsEditorStyles);\r\n\r\n return (\r\n <div className={classNames(classes.videoSettingsEditor, 'video-settings-editor')}>\r\n <TextItem\r\n title={i18n.getString(_TL_('Business Name'))}\r\n i18n={i18n}\r\n text={businessName}\r\n updateText={onBusinessNameChange}\r\n errorMessage={businessNameErrorMessage}\r\n ariaLabel={i18n.getString(_TL_('Business Name Text Input'))}\r\n />\r\n {\r\n currentLogo &&\r\n <ImageContainer\r\n onLoadingImage={onLoadingLogo}\r\n currentImage={currentLogo}\r\n title={i18n.getString(_TL_('Logo'))}\r\n i18n={i18n}\r\n displayEdit\r\n onEdit={onEdit}\r\n displayDelete\r\n onDelete={onDelete}\r\n />\r\n }\r\n {\r\n !currentLogo &&\r\n <div className=\"plus-button-container\">\r\n <div className=\"item-title\">\r\n <Text variant=\"smallPlus\" >{i18n.getString(_TL_('Choose a logo'))}</Text>\r\n </div>\r\n <IconButton iconProps={{ iconName: 'Add' }} className={classNames('add-image-button')} onClick={onEdit} ariaLabel={i18n.getString(_TL_('Choose A Logo Button'))} />\r\n </div>\r\n }\r\n\r\n <DefaultButton\r\n styles={{ root: { marginTop: '24px' } }}\r\n iconProps={{ iconName: 'Send' }}\r\n onClick={handleGenerate}\r\n className=\"generate-video-button\"\r\n text={i18n.getString(_TL_('Generate'))}\r\n disabled={disableGenerate}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nVideoSettingsEditor.propTypes = {\r\n videoSettings: PropTypes.shape({\r\n updating: PropTypes.shape({\r\n businessName: PropTypes.shape({\r\n text: PropTypes.string,\r\n }),\r\n logo: PropTypes.shape({\r\n url: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n setVideoSettings: PropTypes.func.isRequired,\r\n disableGenerate: PropTypes.bool.isRequired,\r\n handleGenerate: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onLoadingLogo: PropTypes.func,\r\n onChangeLogo: PropTypes.func,\r\n newLogoDataObject: PropTypes.shape({\r\n url: PropTypes.string,\r\n }),\r\n};\r\n\r\nVideoSettingsEditor.defaultProps = {\r\n videoSettings: {},\r\n onLoadingLogo: () => {},\r\n onChangeLogo: () => {},\r\n newLogoDataObject: {},\r\n};\r\n","import { extensionEditorStyles } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getVideoEditorStyles = (_, { palette = {} }) => ({\r\n header: {\r\n display: 'absolute', // remove the header from original rendering flow\r\n height: '60px',\r\n },\r\n videoEditor: {\r\n '& .ms-Panel-contentInner': {\r\n height: '100%',\r\n '& .ms-Panel-scrollableContent': {\r\n overflowY: 'hidden',\r\n height: '100%',\r\n '& .ms-Panel-content': {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n paddingLeft: '0px',\r\n paddingRight: '0px',\r\n paddingBottom: '0px',\r\n },\r\n },\r\n },\r\n '& .ms-Panel-commands': {\r\n position: 'absolute',\r\n width: '100%',\r\n background: 'transparent',\r\n '& .ms-Panel-header': {\r\n paddingLeft: '32px',\r\n },\r\n },\r\n '& $top': {\r\n '& $leftPanel': {\r\n '& $leftPanelTop': {\r\n },\r\n '& $leftPanelMiddle': {\r\n '& $tabs': {\r\n },\r\n '& $metadata': {\r\n },\r\n },\r\n '& $leftPanelBottom': {\r\n },\r\n },\r\n '& $rightPanel': {\r\n },\r\n },\r\n '& $bottom': {\r\n },\r\n },\r\n leftPanelTop: {\r\n height: '60px',\r\n flexShrink: 0,\r\n },\r\n leftPanelMiddle: {\r\n marginLeft: '28px',\r\n display: 'flex',\r\n flexGrow: 1,\r\n maxHeight: 'calc(100% - 60px)',\r\n overflowY: 'auto',\r\n },\r\n tabs: {\r\n width: '102px',\r\n paddingRight: '16px',\r\n borderRight: '1px solid #DFDFDF',\r\n boxSizing: 'content-box',\r\n paddingLeft: '4px',\r\n },\r\n videoSettings: {\r\n '& .item-title': {\r\n marginBottom: '8px',\r\n '& span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n '& .video-settings-content': {\r\n width: 102,\r\n height: 60,\r\n border: '1px solid #d1d1d1',\r\n borderRadius: '4px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n marginBottom: '16px',\r\n '& .icon': {\r\n fontSize: 18,\r\n color: '#242424',\r\n },\r\n '&.selected': {\r\n outlineColor: '#0078d4',\r\n outlineStyle: 'solid',\r\n },\r\n },\r\n\r\n },\r\n metadata: {\r\n width: '432px',\r\n paddingLeft: '16px',\r\n display: 'none',\r\n '&.selected': {\r\n display: 'block',\r\n },\r\n },\r\n leftPanelBottom: {\r\n height: '24px',\r\n },\r\n leftPanel: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '600px',\r\n },\r\n rightPanel: {\r\n width: '675px',\r\n paddingLeft: '32px',\r\n paddingRight: '32px',\r\n borderLeft: '1px solid #DFDFDF',\r\n backgroundColor: palette.neutralLighterAlt || '#FAF9F8',\r\n paddingTop: '52px',\r\n },\r\n top: {\r\n flexGrow: 1,\r\n display: 'flex',\r\n maxHeight: 'calc(100% - 64px)',\r\n },\r\n bottom: {\r\n height: '64px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n borderTop: '1px solid #DFDFDF',\r\n paddingLeft: '32px',\r\n flexShrink: 0,\r\n '& .apply-button': {\r\n marginRight: '8px',\r\n },\r\n },\r\n});\r\n\r\nexport const getGlobalLogoPickerStyles = (_, { palette = {} }) => ({\r\n '@global': {\r\n ...extensionEditorStyles({ palette }),\r\n },\r\n});\r\n","\r\nexport const getScenePickerStyles = (_, { palette = {} }) => ({\r\n scenePicker: {\r\n '& .item-title': {\r\n '& span': {\r\n fontWeight: 600,\r\n },\r\n marginBottom: 8,\r\n },\r\n '& .scene': {\r\n '& .scene-decorator': {\r\n borderRadius: 6,\r\n '& .scene-box': {\r\n overflow: 'hidden',\r\n '&.selected': {\r\n outlineColor: palette.themePrimary || '#0078d4',\r\n outlineStyle: 'solid',\r\n },\r\n width: 102,\r\n padding: 1,\r\n height: 60,\r\n borderRadius: 6,\r\n },\r\n '& img': {\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n borderRadius: 6,\r\n },\r\n },\r\n '& .scene-index-block': {\r\n marginTop: 4,\r\n marginBottom: 16,\r\n '& span': {\r\n verticalAlign: 'middle',\r\n lineHeight: '20px',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n Text,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { getScenePickerStyles } from './styles';\r\n\r\n\r\nconst Title = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n <div className=\"item-title\">\r\n <Text variant=\"smallPlus\" >{i18n.getString(_TL_('Scenes'))}</Text>\r\n <HelpPopupInline topic=\"pop_BA_VideoAdsCopilot_Scenes\" />\r\n </div>\r\n );\r\n};\r\n\r\nconst Scene = ({\r\n scene, sceneId, onSceneSelected, selectedSceneId,\r\n}) => {\r\n const clickFunc = useCallback(() => {\r\n onSceneSelected({ scene, id: sceneId });\r\n }, [onSceneSelected, scene, sceneId]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.keyCode === keyCode.Enter) {\r\n clickFunc();\r\n }\r\n }, [clickFunc]);\r\n\r\n const {\r\n keyFrame,\r\n } = scene;\r\n\r\n const isSelected = sceneId === selectedSceneId;\r\n\r\n return (\r\n <div className={classNames('scene')}>\r\n <div\r\n className={classNames('scene-decorator')}\r\n onClick={clickFunc}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={onKeyDown}\r\n >\r\n <div className={classNames('scene-box', isSelected ? 'selected' : '')}>\r\n <img src={keyFrame.url} alt=\"scene\" />\r\n </div>\r\n </div>\r\n <div className={classNames('scene-index-block')}>\r\n <Text variant=\"medium\" >{`${sceneId + 1}`}</Text>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nScene.propTypes = {\r\n scene: PropTypes.shape({}).isRequired,\r\n onSceneSelected: PropTypes.func.isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n sceneId: PropTypes.number.isRequired,\r\n};\r\n\r\nexport const ScenePickerView = ({\r\n scenes, onSceneSelected, selectedSceneId,\r\n}) => {\r\n const classes = useDefaultStyles(getScenePickerStyles);\r\n\r\n return (\r\n <div className={classNames(classes.scenePicker, 'scene-picker')}>\r\n <Title />\r\n {scenes.map(scene => (<Scene\r\n key={scene.id}\r\n scene={scene.effective}\r\n sceneId={scene.id}\r\n onSceneSelected={onSceneSelected}\r\n selectedSceneId={selectedSceneId}\r\n />))}\r\n </div>\r\n );\r\n};\r\n\r\nScenePickerView.propTypes = {\r\n scenes: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onSceneSelected: PropTypes.func.isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n};\r\n\r\nScenePickerView.defaultProps = {};\r\n","export const getPreviewStyles = (_, { palette = {} }) => ({\r\n preview: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .loading-placeholder': {\r\n flexGrow: 1,\r\n borderRadius: '6px',\r\n background: palette.neutralLight || '#EDEBE9',\r\n },\r\n '& .spinner-box': {\r\n marginTop: 16,\r\n marginBottom: 16,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n '& .spinner-text': {\r\n marginLeft: 8,\r\n fontSize: 16,\r\n fontStyle: 'normal',\r\n fontWeight: 400,\r\n lineHeight: '22px',\r\n color: palette.neutralSecondary || '#605E5C',\r\n },\r\n },\r\n '& .panel-switch': {\r\n display: 'flex',\r\n '& .panel-button': {\r\n height: '40px',\r\n width: '44px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n marginRight: '16px',\r\n '&.selected': {\r\n borderBottom: `2px solid ${palette.themePrimary || '#0078d4'}`,\r\n '& span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n },\r\n },\r\n '& .scene-panel': {\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n maxHeight: 'calc(100% - 72px)',\r\n '& img': {\r\n width: '100%',\r\n borderRadius: 6,\r\n maxHeight: '100%',\r\n objectFit: 'contain',\r\n },\r\n },\r\n '& .video-panel': {\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n '& .video-placeholder': {\r\n width: '100%',\r\n color: '#ffffff',\r\n height: '400px',\r\n borderRadius: 6,\r\n overflow: 'hidden',\r\n '& div': {\r\n boxSizing: 'border-box',\r\n },\r\n },\r\n '& .video-wrapper': {\r\n width: '100%',\r\n '&.hidden': {\r\n display: 'none',\r\n },\r\n '& .video-container': {\r\n width: '100%',\r\n '& .video-previewer-root': {\r\n '& .time': {\r\n display: 'flex',\r\n marginLeft: '16px',\r\n marginRight: '12px',\r\n fontSize: '12px',\r\n '& span.divider': {\r\n marginLeft: '4px',\r\n marginRight: '4px',\r\n color: palette.neutralSecondary || 'rgba(0, 0, 0, 0.54)',\r\n },\r\n '& span.totalTime': {\r\n color: palette.neutralSecondary || 'rgba(0, 0, 0, 0.54)',\r\n },\r\n },\r\n backgroundColor: 'transparent',\r\n marginTop: '24px',\r\n '& svg': {\r\n fill: '#424242',\r\n },\r\n '& i[data-icon-name]': {\r\n height: '24px',\r\n },\r\n '& i[data-icon-name=\"videoUnmute\"]': {\r\n height: '20px',\r\n },\r\n '& .ms-Slider-thumb, .ms-Slider-thumb:active, .ms-Slider-thumb:hover': {\r\n backgroundColor: '#238ADA',\r\n border: 'none',\r\n boxShadow: '1px 1px 1px #D2D1D1,-1px 1px 1px #D2D1D1,1px -1px 1px #D2D1D1,-1px -1px 1px #D2D1D1',\r\n },\r\n '& .ms-Slider': {\r\n marginRight: '8px',\r\n },\r\n '& .ms-Slider-active': {\r\n backgroundColor: '#238ADA',\r\n },\r\n '& .ms-Slider-inactive': {\r\n backgroundColor: '#DAD9D8',\r\n },\r\n },\r\n },\r\n },\r\n '& video': {\r\n width: '100%',\r\n borderRadius: 6,\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 },\r\n },\r\n '& .message-bar': {\r\n marginBottom: '16px',\r\n },\r\n },\r\n});\r\n","import { useState } from 'react';\r\n\r\nexport const panelNames = {\r\n scene: 'scene',\r\n video: 'video',\r\n};\r\n\r\nexport const usePreviewState = () => {\r\n const [currentPanel, setCurrentPanel] = useState('scene');\r\n const isScenePanel = currentPanel === panelNames.scene;\r\n\r\n return {\r\n currentPanel,\r\n setCurrentPanel,\r\n isScenePanel,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nconst keyframeTemplateList = [\r\n {\r\n TemplateId: '00000001-0000-0000-0000-000000000000',\r\n TemplateName: 'Template 8 Scene 1',\r\n Version: '1.0',\r\n Width: 1280,\r\n Height: 720,\r\n TemplateFileName: 'template8_keyframe1.html',\r\n Image: [\r\n {\r\n AspectRatio: '16:9',\r\n MinHeight: 360,\r\n },\r\n ],\r\n Text: [\r\n {\r\n MaxLengthInChar: 20,\r\n },\r\n {\r\n MaxLengthInChar: 36,\r\n },\r\n ],\r\n },\r\n {\r\n TemplateId: '00000001-0000-0000-0000-000000000001',\r\n TemplateName: 'Template 8 Scene 2',\r\n Version: '1.0',\r\n Width: 1280,\r\n Height: 720,\r\n TemplateFileName: 'template8_keyframe2.html',\r\n Image: [\r\n {\r\n AspectRatio: '16:9',\r\n MinHeight: 360,\r\n },\r\n ],\r\n Text: [\r\n {\r\n MaxLengthInChar: 20,\r\n },\r\n {\r\n MaxLengthInChar: 36,\r\n },\r\n ],\r\n },\r\n {\r\n TemplateId: '00000001-0000-0000-0000-000000000002',\r\n TemplateName: 'Template 8 Scene 3',\r\n Version: '1.0',\r\n Width: 1280,\r\n Height: 720,\r\n TemplateFileName: 'template8_keyframe3.html',\r\n Image: [\r\n {\r\n AspectRatio: '16:9',\r\n MinHeight: 360,\r\n },\r\n ],\r\n Text: [\r\n {\r\n MaxLengthInChar: 25,\r\n },\r\n {\r\n MaxLengthInChar: 40,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nconst getActiveTemplate = templateId => _.findWhere(keyframeTemplateList, { TemplateId: templateId });\r\n\r\nexport const getTextSizeLimitation = (templateId) => {\r\n const activeTemplate = getActiveTemplate(templateId);\r\n if (activeTemplate && activeTemplate.Text) {\r\n return activeTemplate.Text.map(text => text.MaxLengthInChar);\r\n }\r\n return [];\r\n};\r\n\r\nexport const getImageSizeLimitation = (templateId) => {\r\n const activeTemplate = getActiveTemplate(templateId);\r\n if (activeTemplate && activeTemplate.Image) {\r\n return activeTemplate.Image.map((image) => {\r\n const minHeight = image.MinHeight;\r\n const aspectRatio = image.AspectRatio.split(':');\r\n const minWidth = minHeight * (aspectRatio[0] / aspectRatio[1]);\r\n\r\n return [minWidth, minHeight];\r\n });\r\n }\r\n return [];\r\n};\r\n\r\nexport const MaxBusinessNameLength = 25;\r\n\r\nexport const loadImagePromise = (src, mock) => {\r\n const image = new Image();\r\n image.src = src;\r\n return new Promise((resolve) => {\r\n image.onload = () => {\r\n // if the actual image is 404, it will return a placeholder image which width and height are 80\r\n // todo: investigate if there is a better way to handle this\r\n if (image.width === 80 && image.height === 80 && !mock) {\r\n resolve('failed');\r\n } else {\r\n resolve('success');\r\n }\r\n };\r\n image.onerror = () => {\r\n if (!mock) {\r\n resolve('failed');\r\n } else {\r\n resolve('success');\r\n }\r\n };\r\n });\r\n};\r\n","import React, { useContext, useCallback, useState, useMemo, Fragment, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n Spinner,\r\n Text,\r\n MessageBar,\r\n MessageBarType,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport _, { isEmpty } from 'underscore';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ItemPlaceholderBoxView,\r\n videoIcon,\r\n} from '@bingads-webui-campaign-react/asset-library-components';\r\nimport { Video } from '@bingads-webui-campaign-react/video';\r\n\r\nimport { getPreviewStyles } from './styles';\r\nimport { panelNames } from './state';\r\nimport { loadImagePromise } from '../util';\r\n\r\nconst PanelButton = ({ panel, currentPanel, switchPanel }) => {\r\n const {\r\n name,\r\n text,\r\n } = panel;\r\n\r\n const clickFunc = useCallback(() => {\r\n switchPanel(name);\r\n }, [name, switchPanel]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.keyCode === keyCode.Enter) {\r\n clickFunc();\r\n }\r\n }, [clickFunc]);\r\n\r\n const isSelected = name === currentPanel;\r\n\r\n return (\r\n <div\r\n className={classNames('panel-button', { selected: isSelected })}\r\n onClick={clickFunc}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={onKeyDown}\r\n >\r\n <Text variant=\"medium\" >{text}</Text>\r\n </div>\r\n );\r\n};\r\n\r\nPanelButton.propTypes = {\r\n panel: PropTypes.shape({}).isRequired,\r\n currentPanel: PropTypes.string.isRequired,\r\n switchPanel: PropTypes.func.isRequired,\r\n};\r\n\r\nconst Switch = ({\r\n currentPanel, switchPanel,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const panels = [\r\n { name: panelNames.scene, text: i18n.getString(_TL_('Scene')) },\r\n { name: panelNames.video, text: i18n.getString(_TL_('Video')) },\r\n ];\r\n\r\n return (\r\n <div className=\"panel-switch\">\r\n {panels.map(panel => (<PanelButton\r\n key={panel.name}\r\n panel={panel}\r\n currentPanel={currentPanel}\r\n switchPanel={switchPanel}\r\n />))}\r\n </div>\r\n );\r\n};\r\n\r\nSwitch.propTypes = {\r\n currentPanel: PropTypes.string.isRequired,\r\n switchPanel: PropTypes.func.isRequired,\r\n};\r\n\r\nconst ScenePanel = ({ scene, setGenerateError }) => {\r\n const {\r\n keyFrame,\r\n } = scene;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n useEffect(() => {\r\n if (keyFrame && keyFrame.url) {\r\n loadImagePromise(keyFrame.url, false).then((result) => {\r\n if (result === 'failed') {\r\n setGenerateError(i18n.getString(_TL_('The scene\\'s image failed to load. Select Generate to update the video with a new scene.')));\r\n } else {\r\n setGenerateError(undefined);\r\n }\r\n });\r\n }\r\n }, [i18n, keyFrame, setGenerateError]);\r\n return (\r\n <div className=\"scene-panel\">\r\n {keyFrame && keyFrame.url && <img src={keyFrame.url} alt=\"scene\" />}\r\n </div>\r\n );\r\n};\r\n\r\nScenePanel.propTypes = {\r\n scene: PropTypes.shape({}).isRequired,\r\n setGenerateError: PropTypes.func.isRequired,\r\n};\r\n\r\nconst PlaceHolderBoxViewFooterConfig = {\r\n text: {\r\n summary: _TL_('Your video is currently loading.'),\r\n },\r\n};\r\n\r\nconst VideoPanel = ({ video }) => {\r\n const i18n = useContext(I18nContext);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const footerProps = useMemo(() => {\r\n const localizedTextFields = _.mapObject(\r\n PlaceHolderBoxViewFooterConfig.text,\r\n text => i18n.getString(text)\r\n );\r\n\r\n return {\r\n ...localizedTextFields,\r\n };\r\n }, [i18n]);\r\n\r\n const notReady = isLoading;\r\n\r\n const {\r\n url,\r\n } = video;\r\n\r\n return (\r\n <div className=\"video-panel\">\r\n {notReady &&\r\n <ItemPlaceholderBoxView\r\n className=\"video-placeholder\"\r\n footerProps={footerProps}\r\n mainViewIcon={videoIcon}\r\n mainViewIconLabel={i18n.getString(_TL_('Video'))}\r\n />}\r\n <div className={classNames('video-wrapper', notReady ? 'hidden' : '')}>\r\n <Video\r\n showTime\r\n onVideoLoaded={() => setIsLoading(false)}\r\n i18n={i18n}\r\n ariaLabel={i18n.getString(_TL_('Generated Video'))}\r\n src={url}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst LoadingBlocker = ({ videoGenerated }) => {\r\n const i18n = useContext(I18nContext);\r\n const loadingText = videoGenerated === 0 || videoGenerated === 10 ? _TL_('Generating a new video...') : _TL_('Generating a new scene...');\r\n return (\r\n <Fragment>\r\n <div className=\"loading-placeholder\" />\r\n <div className=\"spinner-box\">\r\n <Spinner />\r\n <span className=\"spinner-text\">{i18n.getString(loadingText)}</span>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst Panels = ({\r\n currentPanel, switchPanel, isScenePanel, scene, video, videoGenerated, sceneGenerated, generateError, setGenerateError,\r\n}) => {\r\n const renderPreview = useCallback(() => {\r\n if (isScenePanel && !isEmpty(scene)) {\r\n if (sceneGenerated === 0) {\r\n return <LoadingBlocker videoGenerated={videoGenerated} />;\r\n }\r\n return <ScenePanel scene={scene} setGenerateError={setGenerateError} />;\r\n }\r\n if (videoGenerated === 0 || videoGenerated === 10) {\r\n return <LoadingBlocker videoGenerated={videoGenerated} />;\r\n }\r\n return <VideoPanel video={video} />;\r\n }, [isScenePanel, scene, sceneGenerated, video, videoGenerated, setGenerateError]);\r\n\r\n return (\r\n <Fragment>\r\n {!isEmpty(scene) && <Switch currentPanel={currentPanel} switchPanel={switchPanel} />}\r\n {renderPreview()}\r\n <div className=\"message-bar\">\r\n {\r\n generateError &&\r\n <MessageBar\r\n messageBarType={MessageBarType.error}\r\n isMultiline={false}\r\n onDismiss={() => setGenerateError(undefined)}\r\n dismissButtonAriaLabel=\"Close\"\r\n >\r\n {generateError}\r\n </MessageBar>\r\n }\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\n\r\nPanels.propTypes = {\r\n currentPanel: PropTypes.string.isRequired,\r\n switchPanel: PropTypes.func.isRequired,\r\n isScenePanel: PropTypes.bool.isRequired,\r\n scene: PropTypes.shape({}).isRequired,\r\n video: PropTypes.shape({}).isRequired,\r\n videoGenerated: PropTypes.number.isRequired,\r\n sceneGenerated: PropTypes.number.isRequired,\r\n generateError: PropTypes.string,\r\n setGenerateError: PropTypes.func.isRequired,\r\n};\r\n\r\nPanels.defaultProps = {\r\n generateError: undefined,\r\n};\r\n\r\nexport const PreviewView = ({\r\n scene, video, videoGenerated, sceneGenerated, currentPanel, switchPanel, isScenePanel, generateError, setGenerateError,\r\n}) => {\r\n const classes = useDefaultStyles(getPreviewStyles);\r\n return (\r\n <div className={classNames(classes.preview, 'preview')}>\r\n <Panels\r\n currentPanel={currentPanel}\r\n switchPanel={switchPanel}\r\n isScenePanel={isScenePanel}\r\n scene={scene}\r\n video={video}\r\n sceneGenerated={sceneGenerated}\r\n videoGenerated={videoGenerated}\r\n generateError={generateError}\r\n setGenerateError={setGenerateError}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nPreviewView.propTypes = {\r\n scene: PropTypes.shape({}),\r\n video: PropTypes.shape({}).isRequired,\r\n currentPanel: PropTypes.string.isRequired,\r\n switchPanel: PropTypes.func.isRequired,\r\n isScenePanel: PropTypes.bool.isRequired,\r\n videoGenerated: PropTypes.number.isRequired,\r\n sceneGenerated: PropTypes.number.isRequired,\r\n generateError: PropTypes.string,\r\n setGenerateError: PropTypes.func.isRequired,\r\n};\r\n\r\nPreviewView.defaultProps = {\r\n scene: {},\r\n generateError: undefined,\r\n};\r\n\r\n","import Promise from 'bluebird';\r\nimport { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { isEqual, omit, some, keys, compact } from 'underscore';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { getParameter, getDomain } from '@bingads-webui/url-util';\r\nimport { getImageSizeLimitation, getTextSizeLimitation, MaxBusinessNameLength, loadImagePromise } from './util';\r\nimport { usePreviewState, panelNames } from './preview/state';\r\n\r\n// for testing\r\nconst isSelenium = getParameter('isselenium');\r\nconst isLocal = getDomain(window.location.href) === 'localhost';\r\nconst mock = isSelenium === 'true' || isLocal;\r\n\r\nconst useRecommendations = ({ copilotDataService }) => {\r\n const { editVideoAdsAssetRecommendations, fetchVideoKeyFrameRecommendations } = copilotDataService;\r\n\r\n const generateVideo = ({ video, scenes, videoSettings }) => {\r\n const {\r\n template,\r\n } = video;\r\n const {\r\n templateId,\r\n audio,\r\n } = template;\r\n const { logo, businessName } = videoSettings;\r\n const newVideoMetaData = {\r\n template: {\r\n templateId,\r\n logo,\r\n businessName,\r\n audio,\r\n scenes: scenes.map(scene => ({\r\n text: scene.text,\r\n images: scene.images,\r\n })),\r\n },\r\n };\r\n const ads = newVideoMetaData;\r\n\r\n return editVideoAdsAssetRecommendations(ads, mock)\r\n .then((res) => {\r\n if (res.data && res.data.ads && res.data.ads.length > 0) {\r\n return res.data.ads[0];\r\n }\r\n return Promise.reject(res);\r\n });\r\n };\r\n\r\n const generateScene = ({ logo, businessName, scene }) => {\r\n const newSceneMetaData = {\r\n text: scene.text,\r\n images: scene.images,\r\n keyFrame: {\r\n templateId: scene.keyFrame.templateId,\r\n },\r\n };\r\n\r\n const requestData = {\r\n logo,\r\n businessName,\r\n scene: newSceneMetaData,\r\n };\r\n\r\n return fetchVideoKeyFrameRecommendations(requestData, mock)\r\n .then((res) => {\r\n if (res && res.data && res.data.scene) {\r\n return res.data.scene;\r\n }\r\n return Promise.reject(res);\r\n });\r\n };\r\n\r\n return {\r\n generateVideo,\r\n generateScene,\r\n };\r\n};\r\n\r\n// even the same scene, the keyFrame url could be different.\r\nconst isEqualScene = (scene1, scene2) => isEqual(omit(scene1, 'keyFrame'), omit(scene2, 'keyFrame'));\r\nconst isSceneChanged = scene => (scene.effective ? !isEqualScene(scene.updating, scene.effective) : !isEqualScene(scene.original, scene.updating));\r\nconst isVideoSettingsChanged = videoSettings => !isEqual(videoSettings.effective, videoSettings.updating);\r\nconst isVideoChanged = (scenes, videoSettings) => scenes.some(scene => isSceneChanged(scene)) || isVideoSettingsChanged(videoSettings);\r\n\r\n// For the scene related state, we could save them into a single scene object, and then use the id to locate the scene object.\r\n// Text, Image, KeyFrame are the main scene properties that could be changed. (KeyFrame is from the API call. Text and Image are also included in the API calls.)\r\n// Original, Updating and Effective are for checking if the scene has been changed.\r\n// For the video, we could save the video URL and it's related scenes.\r\n// To check if the video could be generated, we could check if the scenes have been changed.\r\n// If the scenes have been changed, we could generate the video.\r\n// If the scenes are not changed, we could apply the video and it's related scenes (if we want to save the metadata).\r\n\r\n// videoMetaData is the original video.\r\nexport const useEditVideoAdsViewState = ({\r\n videoMetaData,\r\n dataService,\r\n copilotDataService,\r\n onApply,\r\n setIsOpen,\r\n logger,\r\n i18n,\r\n newImageDataObject,\r\n newLogoDataObject,\r\n saveVideoWhenApply,\r\n isCTV,\r\n}) => {\r\n const {\r\n uploadVideoMetadata,\r\n } = dataService;\r\n\r\n const {\r\n generateScene,\r\n generateVideo,\r\n } = useRecommendations({\r\n copilotDataService,\r\n });\r\n\r\n const [scenes, setScenes] = useState([]);\r\n const [selectedSceneId, setSelectedSceneId] = useState(-1); // Used to locate teh scene with id\r\n const [isApplying, setIsApplying] = useState(false); // Used to show the applying status\r\n const [video, setVideo] = useState({});\r\n const [originalVideo, setOriginalVideo] = useState(videoMetaData.url);\r\n const [videoSettings, setVideoSettings] = useState({}); // Used to store the video settings [logo, businessName]\r\n const [sceneGenerated, setSceneGenerated] = useState(1);\r\n const [videoGenerated, setVideoGenerated] = useState(1);\r\n const [videoScenesCache, setVideoScenesCache] = useState([]);\r\n const [generateError, setGenerateError] = useState(undefined); // Used to show the error message\r\n const [haveEmptyImage, setHaveEmptyImage] = useState(false);\r\n const [newImageObject, setNewImageObject] = useState(newImageDataObject);\r\n\r\n const {\r\n currentPanel,\r\n isScenePanel,\r\n setCurrentPanel,\r\n } = usePreviewState();\r\n\r\n useEffect(() => {\r\n if (videoMetaData) {\r\n // initialization from the video metadata\r\n const { scenes: scenesInner = [], logo, businessName } = videoMetaData && videoMetaData.template;\r\n const scenesWithIds = scenesInner.map((scene, index) => ({\r\n original: scene,\r\n updating: scene, // Used to keep track of the scene changes (the react view will modify this part)\r\n effective: scene, // Assume, we've already generated the scene\r\n id: index,\r\n newImage: { url: scene.images[0], id: '' },\r\n }));\r\n\r\n setScenes(scenesWithIds);\r\n setSelectedSceneId(-1);\r\n setOriginalVideo(videoMetaData.url);\r\n setVideo({\r\n ...videoMetaData,\r\n scenes: scenesWithIds,\r\n });\r\n const videoSettingsInner = {\r\n logo,\r\n businessName,\r\n };\r\n setVideoSettings({\r\n original: videoSettingsInner,\r\n updating: videoSettingsInner,\r\n effective: videoSettingsInner,\r\n });\r\n if (isCTV) {\r\n logger.logTrace('CTV Copilot video editor: editor panel opened');\r\n } else {\r\n logger.logTrace('OLV Copilot video editor: editor panel opened');\r\n }\r\n }\r\n }, [logger, videoMetaData]);\r\n\r\n const generateNewVideo = useCallback((scenesInCall, isSwitchFromScene) => {\r\n if (isSwitchFromScene) {\r\n setVideoGenerated(10);\r\n } else {\r\n setVideoGenerated(0);\r\n }\r\n setGenerateError(undefined);\r\n\r\n return generateVideo({ scenes: scenesInCall.map(scene => scene.updating), video, videoSettings: videoSettings.updating }).then((newVideoMetaData) => {\r\n const { scenes: scenesInner = [], logo, businessName } = newVideoMetaData && newVideoMetaData.template;\r\n const scenesWithIds = scenesInCall.map((scene, index) => ({\r\n ...scene,\r\n effective: scenesInner[index],\r\n updating: scenesInner[index],\r\n id: index,\r\n }));\r\n\r\n setScenes(scenesWithIds);\r\n setVideo({\r\n ...newVideoMetaData,\r\n scenes: scenesWithIds,\r\n });\r\n const newVideoSettings = { logo, businessName };\r\n setVideoSettings({\r\n ...videoSettings,\r\n effective: newVideoSettings,\r\n updating: newVideoSettings,\r\n });\r\n setVideoGenerated(1);\r\n setVideoScenesCache([]);\r\n if (isCTV) {\r\n logger.logTrace('CTV Copilot video editor: video generated');\r\n } else {\r\n logger.logTrace('OLV Copilot video editor: video generated');\r\n }\r\n return {\r\n ...newVideoMetaData,\r\n scenes: scenesWithIds,\r\n msg: 'success',\r\n };\r\n }).catch((error) => {\r\n const { errors } = error;\r\n if (errors && errors[0] && errors[0].message) {\r\n setGenerateError(errors[0].message);\r\n } else {\r\n setGenerateError(i18n.getString(_TL_('Copilot has failed to generate a new video. Please try again later.')));\r\n }\r\n setVideoGenerated(-1);\r\n return {\r\n msg: 'failed',\r\n };\r\n });\r\n }, [generateVideo, video, videoSettings, logger, i18n]);\r\n\r\n const delayedVideoGeneration = useCallback(() => {\r\n if (videoScenesCache.length > 0) {\r\n const promise = generateNewVideo(videoScenesCache, true);\r\n return promise;\r\n }\r\n return Promise.resolve({ ...video, msg: 'success' });\r\n }, [generateNewVideo, video, videoScenesCache]);\r\n\r\n const selectedScene = useMemo(() => scenes && scenes.find(scene => scene.id === selectedSceneId), [scenes, selectedSceneId]) || {\r\n original: {},\r\n updating: {},\r\n effective: {},\r\n id: -1,\r\n };\r\n\r\n const onSceneSelected = useCallback((scene) => {\r\n setSelectedSceneId(scene.id);\r\n }, []);\r\n\r\n const onScenesUpdated = useCallback((updatedScenes) => {\r\n setScenes(updatedScenes);\r\n }, []);\r\n\r\n const onVideoSettingsSelected = useCallback(() => {\r\n setSelectedSceneId(-1);\r\n }, []);\r\n\r\n const handleGenerateVideo = useCallback(() => {\r\n generateNewVideo(scenes, false);\r\n }, [generateNewVideo, scenes]);\r\n\r\n const generateNewScene = useCallback(({ scene, videoLevelMetaData }) => {\r\n if (isSceneChanged(scene)) {\r\n return generateScene({\r\n scene: scene.updating,\r\n logo: videoLevelMetaData.logo,\r\n businessName: videoLevelMetaData.businessName,\r\n });\r\n }\r\n return scene.effective ? Promise.resolve(scene.effective) : Promise.resolve(scene.original);\r\n }, [generateScene]);\r\n\r\n const handleGenerateScene = useCallback(() => {\r\n setSceneGenerated(0);\r\n setGenerateError(undefined);\r\n\r\n // As user could switch between the scenes, we need to generate all the scenes.\r\n Promise.all(scenes.map(scene => generateNewScene({ scene, videoLevelMetaData: videoSettings.updating }))).then((newScenes) => {\r\n const copyScenes = Array.from(scenes);\r\n const newScenesWithIds = newScenes.map((newScene, index) => {\r\n const co = copyScenes[index];\r\n copyScenes[index] = {\r\n ...co,\r\n effective: {\r\n ...newScene,\r\n },\r\n updating: { ...newScene },\r\n };\r\n return copyScenes[index];\r\n });\r\n setScenes(newScenesWithIds);\r\n setVideoScenesCache(newScenesWithIds);\r\n setVideoSettings({\r\n ...videoSettings,\r\n effective: videoSettings.updating,\r\n });\r\n setSceneGenerated(1);\r\n logger.logTrace('Copilot video editor: scene generated');\r\n }).catch((error) => {\r\n const { errors } = error;\r\n if (errors && errors[0] && errors[0].message) {\r\n setGenerateError(errors[0].message);\r\n } else {\r\n setGenerateError(i18n.getString(_TL_('Copilot has failed to generate a new scene. Please try again later.')));\r\n }\r\n setSceneGenerated(-1);\r\n });\r\n }, [scenes, generateNewScene, videoSettings, logger, i18n]);\r\n\r\n const handleGenerate = useCallback(() => {\r\n logger.logTrace('Copilot video editor: generate button clicked');\r\n if (isScenePanel && !isVideoSettingsChanged(videoSettings)) {\r\n // Preserve the data for video because user might switch from scene to video panel and edit the scene at the same time.\r\n handleGenerateScene();\r\n } else {\r\n if (sceneGenerated !== 0) {\r\n handleGenerateScene();\r\n }\r\n handleGenerateVideo();\r\n }\r\n }, [logger, isScenePanel, videoSettings, handleGenerateScene, sceneGenerated, handleGenerateVideo]);\r\n\r\n const handleApply = useCallback(() => {\r\n setIsApplying(true);\r\n delayedVideoGeneration().then((data) => {\r\n const {\r\n msg,\r\n url: newVideoUrl,\r\n scenes: newScenes,\r\n } = data;\r\n if (msg === 'failed') {\r\n // will stay on the panel and show the error message\r\n setIsApplying(false);\r\n return;\r\n }\r\n if (originalVideo !== newVideoUrl) {\r\n // should apply and close the panel\r\n const savedImages = newScenes.map((scene) => {\r\n // image already saved to asset library\r\n if (scene.newImage && scene.newImage.id) {\r\n return scene.newImage;\r\n }\r\n return null;\r\n });\r\n if (saveVideoWhenApply) {\r\n uploadVideoMetadata({\r\n videoMetadata: omit(data, 'msg'), savedImages: compact(savedImages), savedLogo: newLogoDataObject, newVideoFromMTObject,\r\n })\r\n .then((appliedVideoWithId) => {\r\n onApply(appliedVideoWithId);\r\n setIsOpen(false);\r\n setIsApplying(false);\r\n logger.logTrace('Copilot video editor: video applied');\r\n })\r\n .catch(() => {\r\n setIsApplying(false);\r\n setGenerateError(i18n.getString(_TL_('We\\'re unable to save the video. Please try again later.')));\r\n });\r\n } else {\r\n const newVideo = {\r\n ...omit(data, 'msg'),\r\n savedMaterial: {\r\n savedImages: compact(savedImages),\r\n savedLogo: newLogoDataObject,\r\n },\r\n };\r\n onApply(newVideo);\r\n setIsOpen(false);\r\n setIsApplying(false);\r\n logger.logTrace('Copilot video editor: video applied');\r\n }\r\n } else {\r\n setIsOpen(false);\r\n setIsApplying(false);\r\n }\r\n }).catch(() => {\r\n setIsApplying(false);\r\n });\r\n }, [delayedVideoGeneration, i18n, logger, newLogoDataObject, onApply, originalVideo, saveVideoWhenApply, setIsOpen, uploadVideoMetadata]);\r\n\r\n const switchPanel = useCallback((panel) => {\r\n setCurrentPanel(panel);\r\n if (panelNames.video === panel && videoGenerated !== 0 && videoGenerated !== 10 && videoScenesCache.length > 0) {\r\n generateNewVideo(videoScenesCache, true);\r\n }\r\n }, [generateNewVideo, setCurrentPanel, videoGenerated, videoScenesCache]);\r\n\r\n const textErrorMessages = useMemo(() => {\r\n const errorMessages = {};\r\n scenes.forEach((scene) => {\r\n errorMessages[scene.id] = [];\r\n const updatingText = scene.updating.text;\r\n const maxLengthOfText = getTextSizeLimitation(scene.updating.keyFrame.templateId);\r\n updatingText.forEach((text, index) => {\r\n if (text.length > maxLengthOfText[index]) {\r\n errorMessages[scene.id].push(i18n.getString(_TL_('Value cannot be longer than {{maxLength}} characters'), { maxLength: maxLengthOfText[index] }));\r\n } else if (text.length === 0) {\r\n errorMessages[scene.id].push(i18n.getString(_TL_('Required field')));\r\n } else {\r\n errorMessages[scene.id].push('');\r\n }\r\n });\r\n });\r\n\r\n return errorMessages;\r\n }, [i18n, scenes]);\r\n\r\n const haveTextError = useMemo(() => {\r\n const haveErrorInScenes = [];\r\n if (textErrorMessages) {\r\n keys(textErrorMessages).forEach((key) => {\r\n haveErrorInScenes.push(some(textErrorMessages[key]));\r\n });\r\n }\r\n return some(haveErrorInScenes);\r\n }, [textErrorMessages]);\r\n\r\n const textErrorForSelectedScene = useMemo(() => textErrorMessages[selectedSceneId], [selectedSceneId, textErrorMessages]);\r\n\r\n const businessNameErrorMessage = useMemo(() => {\r\n const businessName = videoSettings && videoSettings.updating && videoSettings.updating.businessName;\r\n if (businessName && businessName.text && businessName.text.length > MaxBusinessNameLength) {\r\n return i18n.getString(_TL_('Value cannot be longer than {{maxLength}} characters'), { maxLength: MaxBusinessNameLength });\r\n }\r\n return '';\r\n }, [i18n, videoSettings]);\r\n\r\n useEffect(() => {\r\n if (newImageDataObject && newImageDataObject.url) {\r\n setNewImageObject(newImageDataObject);\r\n }\r\n }, [newImageDataObject]);\r\n\r\n useEffect(() => {\r\n setNewImageObject(undefined);\r\n }, [selectedSceneId]);\r\n\r\n useEffect(() => {\r\n if (newImageObject && newImageObject.url) {\r\n setScenes(prevScenes => prevScenes.map((scene) => {\r\n if (scene.id === selectedSceneId) {\r\n return {\r\n ...scene,\r\n updating: {\r\n ...scene.updating,\r\n images: [newImageDataObject.url],\r\n },\r\n newImage: newImageDataObject,\r\n };\r\n }\r\n return scene;\r\n }));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [newImageObject, newImageDataObject]);\r\n\r\n useEffect(() => {\r\n const allImages = [];\r\n if (scenes.length > 0) {\r\n scenes.forEach((scene) => {\r\n allImages.push(...scene.updating.images);\r\n });\r\n }\r\n if (videoSettings && videoSettings.updating && videoSettings.updating.logo && videoSettings.updating.logo.display) {\r\n allImages.push(videoSettings.updating.logo.url);\r\n }\r\n const loadImagePromises = allImages.map(img => loadImagePromise(img, mock));\r\n\r\n Promise.all(loadImagePromises).then((results) => {\r\n if (results.includes('failed')) {\r\n setHaveEmptyImage(true);\r\n } else {\r\n setHaveEmptyImage(false);\r\n }\r\n });\r\n }, [scenes, videoSettings]);\r\n\r\n const disableGenerate = useMemo(() =>\r\n sceneGenerated === 0\r\n || videoGenerated === 0 || videoGenerated === 10\r\n || !(isVideoChanged(scenes, videoSettings))\r\n || haveTextError\r\n || businessNameErrorMessage !== ''\r\n || haveEmptyImage, [businessNameErrorMessage, haveEmptyImage, haveTextError, sceneGenerated, scenes, videoGenerated, videoSettings]);\r\n\r\n // If user modified the scenes and did not click the generate button, we could not apply the button.\r\n const disableApply = useMemo(() => sceneGenerated === 0 || videoGenerated === 0 || videoGenerated === 10\r\n || isVideoChanged(scenes, videoSettings), [sceneGenerated, scenes, videoGenerated, videoSettings]);\r\n\r\n const minSizeOfImage = useMemo(() => {\r\n if (selectedScene && selectedScene.updating && selectedScene.updating.keyFrame) {\r\n return getImageSizeLimitation(selectedScene.updating.keyFrame.templateId);\r\n }\r\n return [];\r\n }, [selectedScene]);\r\n\r\n return {\r\n video,\r\n setVideo,\r\n selectedSceneId,\r\n setSelectedSceneId,\r\n scenes,\r\n onSceneSelected,\r\n setScenes,\r\n selectedScene,\r\n onScenesUpdated,\r\n sceneGenerated,\r\n videoGenerated,\r\n disableApply,\r\n disableGenerate,\r\n isApplying,\r\n handleGenerate,\r\n handleApply,\r\n currentPanel,\r\n isScenePanel,\r\n switchPanel,\r\n generateError,\r\n setGenerateError,\r\n setNewImageObject,\r\n textErrorForSelectedScene,\r\n minSizeOfImage,\r\n onVideoSettingsSelected,\r\n videoSettings,\r\n setVideoSettings,\r\n businessNameErrorMessage,\r\n };\r\n};\r\n","import React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n DefaultButton, PrimaryButton, Panel, PanelType,\r\n Overlay, Text, Icon,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { findParentElementWithClass } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { MetaDataEditor } from './meta-data-editor';\r\nimport { VideoSettingsEditor } from './video-settings-editor';\r\nimport { getVideoEditorStyles } from './styles';\r\nimport { ScenePickerView } from './scene-picker/view';\r\nimport { PreviewView } from './preview/view';\r\nimport { useEditVideoAdsViewState } from './state';\r\n\r\n\r\nexport const EditVideoAdsView = ({\r\n onApply,\r\n isOpen,\r\n setIsOpen,\r\n videoMetaData,\r\n cid,\r\n aid,\r\n oDataConfig,\r\n finalUrl,\r\n assetLibraryConfig,\r\n dataService,\r\n copilotDataService,\r\n onChangeImage,\r\n newImageDataObject,\r\n onChangeLogo,\r\n newLogoDataObject,\r\n logger,\r\n saveVideoWhenApply,\r\n isCTV,\r\n}) => {\r\n const classes = useDefaultStyles(getVideoEditorStyles);\r\n const i18n = useContext(I18nContext);\r\n const {\r\n disableApply,\r\n disableGenerate,\r\n handleGenerate,\r\n selectedSceneId,\r\n onSceneSelected,\r\n scenes,\r\n selectedScene,\r\n onScenesUpdated,\r\n video,\r\n currentPanel,\r\n switchPanel,\r\n isScenePanel,\r\n sceneGenerated,\r\n videoGenerated,\r\n isApplying,\r\n handleApply,\r\n generateError,\r\n setGenerateError,\r\n textErrorForSelectedScene,\r\n minSizeOfImage,\r\n onVideoSettingsSelected,\r\n videoSettings,\r\n setVideoSettings,\r\n businessNameErrorMessage,\r\n } = useEditVideoAdsViewState({\r\n videoMetaData,\r\n dataService,\r\n copilotDataService,\r\n onApply,\r\n setIsOpen,\r\n logger,\r\n i18n,\r\n newImageDataObject,\r\n newLogoDataObject,\r\n saveVideoWhenApply,\r\n isCTV,\r\n });\r\n\r\n const handleTextListChange = useCallback((textList) => {\r\n const updatedScenes = scenes.map((scene) => {\r\n if (scene.id === selectedSceneId) {\r\n return {\r\n ...scene,\r\n updating: {\r\n ...scene.updating,\r\n text: textList,\r\n },\r\n };\r\n }\r\n return scene;\r\n });\r\n onScenesUpdated(updatedScenes);\r\n }, [scenes, selectedSceneId, onScenesUpdated]);\r\n\r\n const onDismiss = useCallback((evt) => {\r\n const target = evt && evt.currentTarget;\r\n const panelElem = findParentElementWithClass(target, classes.videoEditor);\r\n if (panelElem || evt.key === 'Escape') {\r\n setIsOpen(false);\r\n logger.logTrace('Copilot video editor: Panel dismissed');\r\n }\r\n }, [classes.videoEditor, logger, setIsOpen]);\r\n\r\n return (\r\n <Panel\r\n className={classNames('asset-library-video-editor-view', classes.videoEditor)}\r\n headerText={i18n.getString(_TL_('Edit your video'))}\r\n isOpen={isOpen}\r\n type={PanelType.custom}\r\n onDismiss={onDismiss}\r\n customWidth=\"1275px\"\r\n layerProps={{\r\n styles: {\r\n root: {\r\n zIndex: 900,\r\n },\r\n },\r\n }}\r\n styles={{\r\n root: {\r\n top: 60,\r\n },\r\n main: {\r\n overflowY: 'hidden',\r\n },\r\n }}\r\n >\r\n {isApplying && (\r\n <Overlay styles={{ root: { zIndex: 1 } }}>\r\n <AssetLibrarySpinner className=\"page-load-spinner\" useCustomSize />\r\n </Overlay>\r\n )}\r\n <div className={classNames(classes.top, 'view-top')}>\r\n <div className={classNames(classes.leftPanel, 'left-panel')}>\r\n <div className={classNames(classes.leftPanelTop, 'left-panel-top')}>\r\n <div />\r\n </div>\r\n <div className={classNames(classes.leftPanelMiddle, 'left-panel-middle')}>\r\n <div className={classNames(classes.tabs, 'tabs')}>\r\n <div className={classNames(classes.videoSettings, 'video-settings')}>\r\n <div className=\"item-title\">\r\n <Text variant=\"smallPlus\" >{i18n.getString(_TL_('Video settings'))}</Text>\r\n </div>\r\n <div className={classNames('video-settings-content', selectedSceneId === -1 && 'selected')} aria-label={i18n.getString(_TL_('Video Settings Button'))} onClick={onVideoSettingsSelected} onKeyDown={() => {}} tabIndex={0} role=\"button\">\r\n <Icon iconName=\"Settings\" className=\"icon\" />\r\n </div>\r\n </div>\r\n {\r\n scenes &&\r\n <ScenePickerView\r\n scenes={scenes}\r\n selectedSceneId={selectedSceneId}\r\n onSceneSelected={onSceneSelected}\r\n />\r\n }\r\n </div>\r\n {\r\n scenes.length > 0 && scenes.map((scene) => {\r\n const isSelected = scene.id === selectedSceneId;\r\n return (\r\n <div className={classNames(classes.metadata, 'metadata', isSelected && 'selected')} key={scene.id}>\r\n {\r\n scene && scene.updating &&\r\n <MetaDataEditor\r\n metaData={{ ...scene.updating, newImage: scene.newImage }}\r\n i18n={i18n}\r\n cid={cid}\r\n aid={aid}\r\n oDataConfig={oDataConfig}\r\n finalUrl={finalUrl}\r\n assetLibraryConfig={assetLibraryConfig}\r\n onChangeImage={() => onChangeImage(minSizeOfImage[0])}\r\n onTextListChange={handleTextListChange}\r\n handleGenerate={handleGenerate}\r\n disableGenerate={disableGenerate}\r\n textErrorMessages={textErrorForSelectedScene}\r\n />\r\n }\r\n </div>\r\n );\r\n })\r\n }\r\n <div className={classNames(classes.metadata, 'metadata', selectedSceneId === -1 && 'selected')}>\r\n {\r\n selectedSceneId === -1 &&\r\n <VideoSettingsEditor\r\n videoSettings={videoSettings}\r\n setVideoSettings={setVideoSettings}\r\n i18n={i18n}\r\n onLoadingLogo={() => {}}\r\n onChangeLogo={onChangeLogo}\r\n newLogoDataObject={newLogoDataObject}\r\n disableGenerate={disableGenerate}\r\n handleGenerate={handleGenerate}\r\n businessNameErrorMessage={businessNameErrorMessage}\r\n />\r\n }\r\n </div>\r\n </div>\r\n <div className={classNames(classes.leftPanelBottom, 'left-panel-bottom')}>\r\n <div />\r\n </div>\r\n </div>\r\n <div className={classNames(classes.rightPanel, 'right-panel')}>\r\n <PreviewView // display the keyFrame and the video\r\n scene={selectedScene.effective}\r\n video={video}\r\n sceneGenerated={sceneGenerated}\r\n videoGenerated={videoGenerated}\r\n currentPanel={currentPanel}\r\n switchPanel={switchPanel}\r\n isScenePanel={isScenePanel}\r\n generateError={generateError}\r\n setGenerateError={setGenerateError}\r\n />\r\n </div>\r\n </div>\r\n <div className={classNames(classes.bottom, 'view-bottom')}>\r\n <div className=\"button-container\">\r\n <PrimaryButton\r\n className=\"apply-button\"\r\n text={i18n.getString(_TL_('Apply'))}\r\n onClick={handleApply}\r\n disabled={disableApply}\r\n />\r\n <DefaultButton\r\n className=\"cancel-button\"\r\n text={i18n.getString(_TL_('Cancel'))}\r\n onClick={() => {\r\n setIsOpen(false);\r\n logger.logTrace('Copilot video editor: Cancel button clicked');\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </Panel>);\r\n};\r\n\r\nEditVideoAdsView.propTypes = {\r\n onApply: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n videoMetaData: PropTypes.shape({\r\n images: PropTypes.arrayOf(PropTypes.string),\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n assetLibraryConfig: PropTypes.shape({}).isRequired,\r\n dataService: PropTypes.shape({}).isRequired,\r\n copilotDataService: PropTypes.shape({}).isRequired,\r\n onChangeImage: PropTypes.func.isRequired,\r\n newImageDataObject: PropTypes.shape({\r\n url: PropTypes.string,\r\n }),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n onChangeLogo: PropTypes.func.isRequired,\r\n newLogoDataObject: PropTypes.shape({\r\n url: PropTypes.string,\r\n }),\r\n saveVideoWhenApply: PropTypes.bool,\r\n isCTV: PropTypes.bool,\r\n};\r\n\r\nEditVideoAdsView.defaultProps = {\r\n newImageDataObject: {},\r\n newLogoDataObject: {},\r\n saveVideoWhenApply: false,\r\n isCTV: false,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport React, { useMemo, useContext, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { omit, find } from 'underscore';\r\n\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AddImageWrapper } from '@bingads-webui-campaign-react/asset-library-creative-components';\r\nimport { getAssetSourceOptions, CSMLAssetSource } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { AddImageContainer as AddLogoContainer } from '@bingads-webui-campaign-react/image-experience';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { getImageValidationErrorMessage } from '@bingads-webui-campaign/image-experience-utils';\r\n\r\nimport { getAddImageConfig, VIEWS } from '@bingads-webui-campaign-react/add-media-panel-crud-ad';\r\nimport { useWebsiteSuggestion } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { instrumentationScenarios } from '@bingads-webui-campaign/ad-creator-tools-instrumentation';\r\n\r\nimport { EditVideoAdsView } from './view';\r\nimport { getGlobalLogoPickerStyles } from './styles';\r\n\r\nexport const VideoEditorWithAddImageWrapperImp = ({\r\n assetLibraryConfig,\r\n dataService,\r\n copilotDataService,\r\n i18n,\r\n initialView,\r\n isAssetLibraryAIGCMVPEnabled,\r\n isLiteLandingPageEnabled,\r\n logger,\r\n assetLibraryUserPreferences,\r\n assetLibraryAccountPreferences,\r\n ianaTimeZone,\r\n onApply,\r\n isOpen,\r\n setIsOpen,\r\n videoMetaData,\r\n cid,\r\n aid,\r\n oDataConfig,\r\n finalUrl,\r\n permissions,\r\n isCTV,\r\n ...rest\r\n}) => {\r\n const [showAddImagePanel, setShowAddImagePanel] = useState(false);\r\n const [newImageDataObject, setNewImageDataObject] = useState({});\r\n const [minSizeOfImage, setMinSizeOfImage] = useState([0, 0]);\r\n const [aspectRatioOption, setAspectRatioOption] = useState(constants.defaultAspectRatioOption);\r\n const [showAddLogoPanel, setShowAddLogoPanel] = useState(false);\r\n const [newLogoDataObject, setNewLogoDataObject] = useState({});\r\n\r\n assetLibraryConfig.assetLibraryUserPreferences = assetLibraryUserPreferences;\r\n assetLibraryConfig.assetLibraryAccountPreferences = assetLibraryAccountPreferences;\r\n assetLibraryConfig.logger = logger;\r\n assetLibraryConfig.ianaTimeZone = ianaTimeZone;\r\n assetLibraryConfig.onImageAddError = (e) => {\r\n const errorCode = e && e.errors && e.errors[0] && e.errors[0].Code;\r\n const errorMessage = getImageValidationErrorMessage({ message: errorCode }, i18n);\r\n return errorMessage;\r\n };\r\n\r\n const addMediaConfig = useMemo(() => {\r\n let config = getAddImageConfig({ isAssetLibraryAIGCMVPEnabled, isLiteLandingPageEnabled, hideStockImage: true });\r\n if (!permissions.IsSocialMediaImagesEnabled) {\r\n config = omit(config, VIEWS.SocialMedia);\r\n }\r\n return config;\r\n }, [isAssetLibraryAIGCMVPEnabled, isLiteLandingPageEnabled, permissions.IsSocialMediaImagesEnabled]);\r\n\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid, aid, oDataConfig,\r\n }), [aid, cid, oDataConfig]);\r\n\r\n const onSelectLogo = useCallback((images) => {\r\n const selectedImage = find(images, image => image.isIncluded);\r\n setNewLogoDataObject({ url: selectedImage.src, id: selectedImage.id });\r\n setShowAddLogoPanel(false);\r\n }, []);\r\n\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const createScenario = instrumentation.copilotVideoEditorScenario.create();\r\n const activity = createScenario.imageSuggestion.create();\r\n\r\n const adCreatorScenario = instrumentationScenarios.CopilotVideoAd;\r\n\r\n const {\r\n suggestionState,\r\n suggestionPoller,\r\n } = useWebsiteSuggestion({\r\n oDataConfig,\r\n adContext: { // Use the ad context to compose the API request url\r\n advertiserCustomerId: cid,\r\n accountId: aid,\r\n },\r\n instrumentation,\r\n logActivity: activity.trace,\r\n permissions,\r\n fullUrl: finalUrl,\r\n adCreatorScenario,\r\n });\r\n\r\n const { suggestion = {} } = suggestionState;\r\n\r\n const preDefinedAssetSources = useMemo(() => {\r\n const assetOptions = getAssetSourceOptions(i18n);\r\n const assetOptionsWithoutShutterstock = assetOptions.filter(option => option.key !== CSMLAssetSource.Shutterstock);\r\n const assetOptionsKeys = assetOptionsWithoutShutterstock.map(option => option.key);\r\n return assetOptionsKeys;\r\n }, [i18n]);\r\n\r\n const preDefinedFilter = useMemo(() => `AssetSourceType in (${preDefinedAssetSources.map(s => `'${s}'`).join(',')})`, [preDefinedAssetSources]);\r\n\r\n return (\r\n <div className=\"video-editor-with-add-image-wrapper\">\r\n <EditVideoAdsView\r\n onApply={onApply}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n videoMetaData={videoMetaData}\r\n cid={cid}\r\n aid={aid}\r\n oDataConfig={oDataConfig}\r\n finalUrl={finalUrl}\r\n dataService={dataService}\r\n copilotDataService={copilotDataService}\r\n logger={logger}\r\n onChangeImage={(minSize) => {\r\n setShowAddImagePanel(true);\r\n setMinSizeOfImage(minSize);\r\n }}\r\n newImageDataObject={newImageDataObject}\r\n assetLibraryConfig={assetLibraryConfig}\r\n onChangeLogo={() => setShowAddLogoPanel(true)}\r\n newLogoDataObject={newLogoDataObject}\r\n isCTV={isCTV}\r\n />\r\n <AddImageWrapper\r\n addMediaConfig={addMediaConfig}\r\n assetLibraryConfig={assetLibraryConfig}\r\n dataService={dataService}\r\n i18n={i18n}\r\n initialView={VIEWS.LandingPage}\r\n isAssetLibraryAIGCMVPEnabled={isAssetLibraryAIGCMVPEnabled}\r\n logger={logger}\r\n setNewImageDataObject={setNewImageDataObject}\r\n showAddImagePanel={showAddImagePanel}\r\n setShowAddImagePanel={setShowAddImagePanel}\r\n imageExperienceProps={{\r\n suggestion,\r\n suggestionPoller,\r\n finalUrl,\r\n finalUrlProtocol: 'https://',\r\n onUpdateFinalUrl: () => {},\r\n onUpdateFinalUrlPrefix: () => {},\r\n isMultimediaAd: false,\r\n isDisplayAds: true,\r\n }}\r\n cid={cid}\r\n aid={aid}\r\n minSize={minSizeOfImage}\r\n disabledAssetSources={[CSMLAssetSource.Shutterstock]}\r\n {...rest}\r\n />\r\n <AddLogoContainer\r\n isImageSelectorDisplayed={showAddLogoPanel}\r\n onSelectedImagesSet={onSelectLogo}\r\n onImageSelectionCanceled={() => setShowAddLogoPanel(false)}\r\n imageType={null}\r\n i18n={i18n}\r\n perfMarker={rest.perfMarker}\r\n isForVNext\r\n isMultimediaAd\r\n isAudienceAd={false}\r\n cid={cid}\r\n aid={aid}\r\n isStockPhotoEnabled\r\n oDataConfig={oDataConfig}\r\n isLazyLoadEnabled\r\n permissions={permissions}\r\n isMultimediaAdinMSANEnabled={false}\r\n staticImagePath=\"\"\r\n imageList={[]}\r\n maxUploadNum={1}\r\n imageOption={constants.imageOptionKeys.Logo}\r\n imageOptions={[constants.imageOptionKeys.Logo]}\r\n setImageOption={() => {}}\r\n aspectRatioOption={aspectRatioOption}\r\n setAspectRatioOption={setAspectRatioOption}\r\n suggestion={suggestion}\r\n suggestionPoller={suggestionPoller}\r\n isAdCreatorEnabled\r\n isFinalUrlImageRetrievalEnabled\r\n isLogoEnabled\r\n mediaRepository={mediaRepository}\r\n onUpdateFinalUrlPrefix={() => {}}\r\n onUpdateFinalUrl={() => {}}\r\n finalUrl={finalUrl}\r\n finalUrlProtocol=\"https://\"\r\n defaultSelectedPill={0}\r\n adCreatorScenario={adCreatorScenario}\r\n isThumbsUpDownEnabled={false}\r\n isTestEnv={false}\r\n activityLogger={activity}\r\n recommendationStockImages={[]}\r\n hideStockPillControl\r\n preDefinedFilter={preDefinedFilter}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nVideoEditorWithAddImageWrapperImp.propTypes = {\r\n assetLibraryConfig: PropTypes.shape({\r\n activityLogger: PropTypes.shape({}),\r\n }).isRequired,\r\n dataService: PropTypes.shape({}).isRequired,\r\n copilotDataService: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n initialView: PropTypes.string.isRequired,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool.isRequired,\r\n isLiteLandingPageEnabled: PropTypes.bool.isRequired,\r\n logger: PropTypes.shape({}).isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({}).isRequired,\r\n assetLibraryAccountPreferences: PropTypes.shape({}).isRequired,\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n onApply: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n videoMetaData: PropTypes.shape({\r\n images: PropTypes.arrayOf(PropTypes.string),\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n isCTV: PropTypes.bool,\r\n};\r\n\r\nVideoEditorWithAddImageWrapperImp.defaultProps = {\r\n isCTV: false,\r\n};\r\n\r\nexport const VideoEditorWithAddImageWrapper = withDefaultStyles(VideoEditorWithAddImageWrapperImp, getGlobalLogoPickerStyles);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n withAssetLibraryServicesLoaded,\r\n withCopilotDataServiceLoaded,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { FolderAssetType } from '@bingads-webui-campaign-react/asset-library-model';\r\n\r\nimport { VideoEditorWithAddImageWrapper } from './video-editor-with-add-image-wrapper';\r\n\r\nconst VideoEditorWithDataServices = withCopilotDataServiceLoaded(withAssetLibraryServicesLoaded(VideoEditorWithAddImageWrapper, { loggerTag: 'Asset Library Tab' }));\r\n\r\nexport const CopilotVideoEditor = (props) => {\r\n const {\r\n assetLibraryConfig,\r\n permissions,\r\n isAADUser,\r\n isLiteLandingPageEnabled,\r\n isOpen,\r\n setIsOpen,\r\n videoMetaData,\r\n onApply,\r\n cid,\r\n aid,\r\n finalUrl,\r\n perfMarker,\r\n i18n,\r\n isCTV,\r\n } = props;\r\n\r\n // todo: don't pilot AAD user for now, remove this check after the feature is GAed\r\n const isAssetLibraryAIGCMVPEnabled = !isAADUser;\r\n\r\n const {\r\n timeZone,\r\n preferencesService,\r\n activityLogger,\r\n oDataConfig,\r\n dateFormat,\r\n } = assetLibraryConfig;\r\n\r\n return (\r\n isOpen ?\r\n <VideoEditorWithDataServices\r\n accountTimeZone={timeZone}\r\n preferenceService={preferencesService}\r\n activity={activityLogger}\r\n assetLibraryConfig={assetLibraryConfig}\r\n oDataConfig={oDataConfig}\r\n allowedAssetType={FolderAssetType.Image}\r\n isAssetLibraryAIGCMVPEnabled={isAssetLibraryAIGCMVPEnabled}\r\n isLiteLandingPageEnabled={isLiteLandingPageEnabled}\r\n dateFormat={dateFormat}\r\n permissions={permissions}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n videoMetaData={videoMetaData}\r\n onApply={onApply}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrl}\r\n perfMarker={perfMarker}\r\n i18n={i18n}\r\n isCTV={isCTV}\r\n /> : null\r\n );\r\n};\r\n\r\nCopilotVideoEditor.propTypes = {\r\n assetLibraryConfig: PropTypes.shape({\r\n timeZone: PropTypes.number,\r\n preferencesService: PropTypes.shape({}),\r\n activityLogger: PropTypes.shape({}),\r\n oDataConfig: PropTypes.shape({}),\r\n dateFormat: PropTypes.string,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n videoMetaData: PropTypes.shape().isRequired,\r\n onApply: PropTypes.func.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n isAADUser: PropTypes.bool,\r\n isLiteLandingPageEnabled: PropTypes.bool,\r\n isCTV: PropTypes.bool,\r\n};\r\n\r\nCopilotVideoEditor.defaultProps = {\r\n isLiteLandingPageEnabled: false,\r\n isAADUser: false,\r\n isCTV: false,\r\n};\r\n","import { isArray, isEmpty, negate, some } from 'underscore';\r\n\r\n/**\r\n * @typedef {Object} EntityAndParentID\r\n * @property {string|number} EntityID Entity ID\r\n * @property {string|number} ParentID Parent Entity ID\r\n */\r\n\r\n\r\n/**\r\n * @typedef {Object} AppealBaseOptions\r\n * @property {number} cid Customer ID\r\n * @property {number} aid Account ID\r\n * @property {Object} permissions Permissions\r\n */\r\n\r\nconst isValidEntityAndParentID = entityAndParentID =>\r\n entityAndParentID && entityAndParentID.EntityID && entityAndParentID.ParentID;\r\n\r\n\r\nclass AppealBase {\r\n constructor(options) {\r\n this.options = options;\r\n }\r\n}\r\n\r\nexport class AppealByIDsForParentEntity extends AppealBase {\r\n /**\r\n * Initialized AppealByIDsForParentEntity\r\n * @param {AppealBaseOptions} options options\r\n * @param {number|string} parentId parent entity ID\r\n * @param {Array<number|string>} ids array of entity IDs\r\n */\r\n constructor(options, parentId, ids) {\r\n super(options);\r\n if (!parentId) {\r\n throw new Error('parentId is required');\r\n }\r\n if (!isArray(ids) || isEmpty(ids)) {\r\n throw new Error('ids is required and must be an array');\r\n }\r\n this.parentId = parentId;\r\n this.ids = ids;\r\n }\r\n}\r\n\r\nexport class AppealAllForParentEntity extends AppealBase {\r\n constructor(options, parentId) {\r\n super(options);\r\n if (!parentId) {\r\n throw new Error('parentId is required');\r\n }\r\n this.parentId = parentId;\r\n }\r\n\r\n createAppealParamsWithIDs(ids) {\r\n return new AppealByIDsForParentEntity(this.options, this.parentId, ids);\r\n }\r\n}\r\n\r\nexport class AppealByIDs extends AppealBase {\r\n /**\r\n * Initialized AppealByIDs\r\n * @param {AppealBaseOptions} options options\r\n * @param {Array<EntityAndParentID>} ids array of entity+parent entity IDs\r\n */\r\n constructor(options, ids) {\r\n super(options);\r\n if (!isArray(ids) || isEmpty(ids) || some(ids, negate(isValidEntityAndParentID))) {\r\n throw new Error('ids is required and must be an array of EntityAndParentID');\r\n }\r\n this.ids = ids;\r\n }\r\n}\r\n\r\nexport class AppealAllByFilter extends AppealBase {\r\n constructor(options, filter) {\r\n super(options);\r\n if (!filter) {\r\n throw new Error('filter is required');\r\n }\r\n this.filter = filter;\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport * as utilities from '@bingads-webui-campaign-legacy/editorial-appeal/utilities';\r\nimport { AppealAllForParentEntity, AppealByIDsForParentEntity } from './params';\r\n\r\nexport { isAppealableStatus } from '@bingads-webui-campaign-legacy/editorial-appeal/utilities';\r\n\r\nconst toType = obj =>\r\n ({})\r\n .toString.call(obj) // returns \"[object Type]\"\r\n .substring(8, obj.length - 1); // returns \"Type\"\r\n\r\nconst assertInputs = (appealParams) => {\r\n if (!appealParams) {\r\n throw new Error('appealParams is required');\r\n }\r\n if (!(appealParams instanceof AppealByIDsForParentEntity) && !(appealParams instanceof AppealAllForParentEntity)) {\r\n // TODO: see TODOs\r\n throw new Error(`appealParams must be an instance of AppealByIDsForParentEntity, AppealAllForParentEntity. ${toType(appealParams)} is not supported`);\r\n }\r\n};\r\n\r\nconst processRejectReasonsFromOdata = (controller, permissions) =>\r\n odataResponse => (odataResponse.Errors ?\r\n Promise.reject(odataResponse.Errors) :\r\n utilities.processRejectReasonsFromOdata(odataResponse, controller, permissions));\r\n\r\n/**\r\n * @typedef {Object} AggregatedRejectReasons\r\n * @property {Array<number>} appealIds array of entity IDs that can be appealed\r\n * @property {Array<AppealData>} appealData array of appeal data\r\n * @property {boolean} appealData.Appeal whether the entity has been appealed(?)\r\n * @property {string} appealData.Justification justification for appeal\r\n * @property {boolean} appealData.IsAppealable whether the entity can be appealed\r\n * @property {Array<string>} appealData.RejectedReasons array of rejection reasons\r\n * @property {Array<string>} appealData.RejectedTerms array of rejection terms\r\n * @property {string} appealData.EntityType entity type\r\n */\r\n\r\nconst resolveAppealParams = (appealParams) => {\r\n const {\r\n getEditorialReasonsByIDsForParentEntity, getAllEntitiesForParentEntity,\r\n } = appealParams.options;\r\n let getEditorialReasons;\r\n let appealParamsPromise;\r\n if (appealParams instanceof AppealByIDsForParentEntity ||\r\n appealParams instanceof AppealAllForParentEntity) {\r\n getEditorialReasons = getEditorialReasonsByIDsForParentEntity;\r\n\r\n if (appealParams instanceof AppealAllForParentEntity) {\r\n appealParamsPromise = getAllEntitiesForParentEntity(appealParams)\r\n .then(appealParams.createAppealParamsWithIDs.bind(appealParams));\r\n } else {\r\n appealParamsPromise = Promise.resolve(appealParams);\r\n }\r\n } // TODO: add support for AppealByIDs and AppealAllByFilter when needed\r\n\r\n return Promise.props({ getEditorialReasons, appealParams: appealParamsPromise });\r\n};\r\n\r\n/**\r\n * Fetches and aggregates editorial rejections for given entities\r\n * @param {AppealByIDsForParentEntity|AppealAllForParentEntity|AppealByIDs|AppealAllByFilter} appealParams Customer ID\r\n * @returns {Promise<AggregatedRejectReasons>} a promise that resolves to an object of aggregated reject reasons\r\n */\r\nconst getAppealRejections = ({ appealParams, getEditorialReasons }) => {\r\n const {\r\n permissions,\r\n controller,\r\n } = appealParams.options;\r\n\r\n return Promise.resolve(appealParams)\r\n .then(getEditorialReasons)\r\n .then(processRejectReasonsFromOdata(controller, permissions));\r\n};\r\n\r\nexport const editorialAppealAggregator = (appealParams) => {\r\n assertInputs(appealParams);\r\n return Promise.resolve(appealParams)\r\n .then(resolveAppealParams)\r\n .then(getAppealRejections);\r\n};\r\n\r\nexport const requestAppeal = (appealParams, appealData, appealIds) => {\r\n const {\r\n requestAppealAllForParentEntity,\r\n requestAppealByIDsForParentEntity,\r\n } = appealParams.options;\r\n let requestAppealFunc;\r\n if (appealParams instanceof AppealByIDsForParentEntity) {\r\n requestAppealFunc = requestAppealByIDsForParentEntity;\r\n } else if (appealParams instanceof AppealAllForParentEntity) {\r\n requestAppealFunc = requestAppealAllForParentEntity;\r\n } // TODO: add support for AppealByIDs and AppealAllByFilter when needed\r\n\r\n return requestAppealFunc(appealParams, appealData, appealIds);\r\n};\r\n","import { first } from 'underscore';\r\nimport React, { useCallback, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton, PrimaryButton, Panel, PanelType, Stack } from '@fluentui/react';\r\nimport { LegacyEditorialAppealRequestForm, LegacyInlineErrorView } from '@bingads-webui-campaign-react/legacy-editorial-appeal-request-form';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeStyles, fabricPanelFixStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst PANEL_WIDTH = 784;\r\n\r\nexport const panelStylesProp = {\r\n footer: {\r\n ...fabricPanelFixStyle().footer,\r\n },\r\n commands: {\r\n zIndex: 1,\r\n },\r\n content: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n};\r\n\r\nconst getStyles = (components, theme = {}) => ({\r\n uiBlockerAdapter: {\r\n ...mergeStyles(\r\n { theme },\r\n components.reactUIBlockerStyle(theme.palette, 'rgba(255, 255, 255, 0.4)'),\r\n {\r\n '& .react-block-ui-none, & .react-block-ui': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden', // to not extend to the content, but shrink to flex-parent\r\n },\r\n },\r\n {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden',\r\n }\r\n ),\r\n },\r\n});\r\n\r\nexport const EditorialAppealRequestPanel = ({\r\n i18n, onSave, onCancel, title, appealDataPromise,\r\n}) => {\r\n const [appealData, setAppealData] = useState(null);\r\n const [appealIds, setAppealIds] = useState([]);\r\n const [isBusy, setIsBusy] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n\r\n const handleAppealData = useCallback((aggregatedRejectReasons) => {\r\n setAppealData(first(aggregatedRejectReasons.appealData));\r\n setAppealIds(aggregatedRejectReasons.appealIds);\r\n }, []);\r\n const handleAppealDataError = useCallback(() => {\r\n setHasError(true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n setIsBusy(true);\r\n setAppealData(null);\r\n setAppealIds([]);\r\n setHasError(false);\r\n appealDataPromise.then(handleAppealData).catch(handleAppealDataError).finally(() => setIsBusy(false));\r\n }, [appealDataPromise, handleAppealData, handleAppealDataError]);\r\n\r\n const [editorialAppealFormData, setEditorialAppealFormData] = useState();\r\n const [isEditorialAppealFormDataValid, setIsEditorialAppealFormDataValid] = useState(false);\r\n const onEditorialAppealChange = useCallback((data, isValid) => {\r\n setEditorialAppealFormData(data);\r\n setIsEditorialAppealFormDataValid(isValid);\r\n }, []);\r\n\r\n const onSaveClick = useCallback(() => {\r\n onSave(editorialAppealFormData, appealIds);\r\n }, [onSave, editorialAppealFormData, appealIds]);\r\n\r\n const onCancelClick = useCallback(() => {\r\n onCancel();\r\n }, [onCancel]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n <Stack className=\"editorial-appeal-request-form-panel-buttons\" horizontal tokens={{ childrenGap: 8 }}>\r\n <Stack.Item key=\"btn-add\">\r\n <PrimaryButton className=\"btn-add\" onClick={onSaveClick} disabled={hasError || !isEditorialAppealFormDataValid}>\r\n {i18n.getString(_TL_('Request exception'))}\r\n </PrimaryButton>\r\n </Stack.Item>\r\n <Stack.Item key=\"btn-cancel\">\r\n <DefaultButton className=\"btn-cancel\" onClick={onCancelClick}>\r\n {i18n.getString(_TL_('Cancel'))}\r\n </DefaultButton>\r\n </Stack.Item>\r\n </Stack>\r\n ), [i18n, onSaveClick, onCancelClick, hasError, isEditorialAppealFormDataValid]);\r\n\r\n\r\n return (\r\n <Panel\r\n className={classNames('editorial-appeal-request-form-panel', classes.uiBlockerAdapter)}\r\n headerText={title}\r\n closeButtonAriaLabel={i18n.getString(_TL_('Close'))}\r\n isOpen\r\n onDismiss={onCancelClick}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom\r\n type={PanelType.custom}\r\n customWidth={PANEL_WIDTH}\r\n styles={panelStylesProp}\r\n >\r\n <UiBlocker\r\n blocking={isBusy}\r\n loadingText={i18n.getString(_TL_('Loading...'))}\r\n >\r\n {hasError &&\r\n <LegacyInlineErrorView />\r\n }\r\n {!hasError && appealData &&\r\n <LegacyEditorialAppealRequestForm\r\n appealTitle={i18n.getString(_TL_('These asset groups do not meet Microsoft Advertising policies. If you feel your content falls within policy, please submit an appeal and we will happily review the content again.'))}\r\n appealData={appealData}\r\n appealIds={appealIds}\r\n onChange={onEditorialAppealChange}\r\n />\r\n }\r\n </UiBlocker>\r\n </Panel>\r\n );\r\n};\r\n\r\nEditorialAppealRequestPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n title: PropTypes.string.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n appealDataPromise: PropTypes.shape({\r\n then: PropTypes.func.isRequired,\r\n catch: PropTypes.func.isRequired,\r\n finally: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nEditorialAppealRequestPanel.defaultProps = {\r\n};\r\n","// It's placeholder for event delegator in new UI, will add event process function later\r\nexport class EventDelegator {\r\n on() {}\r\n\r\n trigger() {}\r\n\r\n off() {}\r\n}\r\n","\r\nimport { getTheme } from '@fluentui/react';\r\n\r\nconst { palette } = getTheme();\r\n\r\nconst IMAGE_DIM = {\r\n width: 96,\r\n height: 68,\r\n marginRight: 8,\r\n};\r\n\r\nconst paddleWidth = 32;\r\n\r\n// 680 px\r\nconst maxWidthOfUrlField =\r\n (6 * (IMAGE_DIM.width + IMAGE_DIM.marginRight)) + ((paddleWidth * 2) - IMAGE_DIM.marginRight);\r\n\r\nexport const getExtensionImagesControlStyles = () => ({\r\n carouselParent: { maxWidth: maxWidthOfUrlField },\r\n viewAllPlacementsButton: {\r\n right: 20,\r\n position: 'absolute',\r\n color: palette.themePrimary,\r\n '&:active': {\r\n color: palette.themePrimary,\r\n },\r\n },\r\n reCropButton: {\r\n marginRight: 8,\r\n },\r\n});\r\n","import { UAPPlacementTypeAlias as EPT } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\nconst imageExtConfigAll = {\r\n placementConfig: [{\r\n placementSetName: 'imageExtensionConfigAll',\r\n placementTypes: [\r\n EPT.ImageExt.BingDesktopSingleImage,\r\n EPT.ImageExt.BingDesktopMultiImage, // multi-image placement\r\n EPT.ImageExt.BingMobileMultiImage, // multi-image placement\r\n EPT.ImageExt.WideImage,\r\n EPT.ImageExt.MSEdgeSingleCarousel,\r\n EPT.ImageExt.MSEdgeMediumHeadline,\r\n EPT.ImageExt.MSNSingleCarousel,\r\n EPT.ImageExt.MSNMediumHeadline,\r\n EPT.ImageExt.MSNInArticle,\r\n EPT.ImageExt.MSNSmallHeadline,\r\n EPT.ImageExt.SquareImage,\r\n EPT.ImageExt.MSNDoubleCarousel,\r\n ],\r\n }],\r\n};\r\n\r\nconst imageExtConfigAllV2 = {\r\n placementConfig: [{\r\n placementSetName: 'imageExtensionConfigAll',\r\n placementTypes: [\r\n EPT.ImageExt.BingDesktopSingleImage,\r\n EPT.ImageExt.BingDesktopMultiImage, // multi-image placement\r\n EPT.ImageExt.BingMobileMultiImage, // multi-image placement\r\n EPT.ImageExt.MSEdgeMediumHeadline,\r\n EPT.ImageExt.MSEdgeMobile,\r\n EPT.ImageExt.MMAV2MSNRiver,\r\n EPT.ImageExt.MMAV2MSNSingleCarousel,\r\n EPT.ImageExt.MSEdgeSingleCarousel,\r\n EPT.ImageExt.MSNMediumHeadline,\r\n EPT.ImageExt.MSNInArticle,\r\n EPT.ImageExt.MSNSmallHeadline,\r\n EPT.ImageExt.MSNDoubleCarousel,\r\n ],\r\n }],\r\n};\r\n\r\nconst imageExtConfigSingleImage = {\r\n placementConfig: [{\r\n placementSetName: 'imageExtensionConfigSingle',\r\n placementTypes: [\r\n EPT.ImageExt.BingDesktopSingleImage,\r\n EPT.ImageExt.WideImage,\r\n EPT.ImageExt.MSEdgeSingleCarousel,\r\n EPT.ImageExt.MSEdgeMediumHeadline,\r\n EPT.ImageExt.MSNSingleCarousel,\r\n EPT.ImageExt.MSNMediumHeadline,\r\n EPT.ImageExt.MSNInArticle,\r\n EPT.ImageExt.MSNSmallHeadline,\r\n EPT.ImageExt.SquareImage,\r\n EPT.ImageExt.MSNDoubleCarousel,\r\n ],\r\n }],\r\n};\r\n\r\nconst imageExtConfigSingleImageV2 = {\r\n placementConfig: [{\r\n placementSetName: 'imageExtensionConfigSingle',\r\n placementTypes: [\r\n EPT.ImageExt.BingDesktopSingleImage,\r\n EPT.ImageExt.MSEdgeMediumHeadline,\r\n EPT.ImageExt.MSEdgeMobile,\r\n EPT.ImageExt.MMAV2MSNRiver,\r\n EPT.ImageExt.MMAV2MSNSingleCarousel,\r\n EPT.ImageExt.MSEdgeSingleCarousel,\r\n EPT.ImageExt.MSNMediumHeadline,\r\n EPT.ImageExt.MSNInArticle,\r\n EPT.ImageExt.MSNSmallHeadline,\r\n EPT.ImageExt.MSNDoubleCarousel,\r\n ],\r\n }],\r\n};\r\n\r\nconst imageExtConfigAllMultiImage = {\r\n placementConfig: [{\r\n placementSetName: 'imageExtensionConfigMulti',\r\n placementTypes: [\r\n EPT.ImageExt.BingDesktopMultiImage,\r\n EPT.ImageExt.BingMobileMultiImage,\r\n ],\r\n }],\r\n};\r\n\r\nexport const getUnifiedAdPreviewConfig = ({ eligibleLayout, isAdPreviewRefreshEnabled }) => {\r\n if (eligibleLayout === 'Multi') {\r\n return imageExtConfigAllMultiImage;\r\n }\r\n if (eligibleLayout === 'Single') {\r\n return isAdPreviewRefreshEnabled ? imageExtConfigSingleImageV2 : imageExtConfigSingleImage;\r\n }\r\n return isAdPreviewRefreshEnabled ? imageExtConfigAllV2 : imageExtConfigAll;\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { ThemeProvider } from 'react-jss';\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ImageExperience,\r\n PreviewCarousel,\r\n UnifiedPreviewCarousel,\r\n ImageExperienceImage,\r\n constants,\r\n} from '@bingads-webui-campaign-react/image-experience';\r\nimport {\r\n SuggestionPoller,\r\n SuggestionStatus,\r\n mapSuggestionResponseToState,\r\n MediaRepository,\r\n} from '@bingads-webui-campaign/media-repository';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport {\r\n getAdCreatorInstrumentation,\r\n instrumentationScenarios,\r\n} from '@bingads-webui-campaign/ad-creator-tools-instrumentation';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { getExtensionImagesControlStyles } from './styles';\r\nimport { getUnifiedAdPreviewConfig } from './get-unified-ad-preview-config';\r\n\r\nexport class ExtensionImagesControlBase extends React.PureComponent {\r\n static propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n parseDecimal: PropTypes.func.isRequired,\r\n }).isRequired,\r\n genericImage: PropTypes.string.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 }),\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n imageList: PropTypes.arrayOf(PropTypes.instanceOf(ImageExperienceImage)).isRequired,\r\n text: PropTypes.string,\r\n url: PropTypes.string,\r\n eligibleLayouts: PropTypes.string,\r\n onImageListChanged: PropTypes.func,\r\n isForVNext: PropTypes.bool,\r\n isStockPhotoEnabled: PropTypes.bool,\r\n isImageFittingEnabled: PropTypes.bool,\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }),\r\n staticImagePath: PropTypes.string,\r\n permissions: PropTypes.shape({\r\n IsStockPhotoFilterEnabled: PropTypes.bool,\r\n dynamic: PropTypes.shape({ ImageExtensionsEnhancements: PropTypes.bool, AdPreviewRefresh: PropTypes.bool }),\r\n }),\r\n newI18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }),\r\n recommendation: PropTypes.objectOf(PropTypes.any),\r\n readOnly: PropTypes.bool,\r\n instrumentation: PropTypes.shape({}),\r\n preferencesService: PropTypes.shape({}),\r\n subscribeToUrlChanged: PropTypes.func,\r\n setFullUrl: PropTypes.func,\r\n setError: PropTypes.func,\r\n classes: PropTypes.shape({\r\n carouselParent: PropTypes.string,\r\n viewAllPlacementsButton: PropTypes.string,\r\n reCropButton: PropTypes.string,\r\n }),\r\n setImageControlSetText: PropTypes.func,\r\n setImageControlsValidate: PropTypes.func,\r\n setImageControlSetEligibleLayout: PropTypes.func,\r\n };\r\n\r\n static defaultProps = {\r\n perfMarker: {\r\n willFetchFile: _.noop,\r\n willInit: _.noop,\r\n willFetchData: _.noop,\r\n willRender: _.noop,\r\n done: _.noop,\r\n createChild: _.noop,\r\n },\r\n text: '',\r\n url: '',\r\n eligibleLayouts: '',\r\n onImageListChanged: _.noop,\r\n isForVNext: false,\r\n isStockPhotoEnabled: false,\r\n isImageFittingEnabled: false,\r\n oDataConfig: null,\r\n staticImagePath: null,\r\n permissions: {},\r\n newI18n: PropTypes.shape({\r\n getString: _.noop,\r\n }),\r\n recommendation: {},\r\n readOnly: false,\r\n instrumentation: {},\r\n preferencesService: {},\r\n subscribeToUrlChanged: _.noop,\r\n setFullUrl: _.noop,\r\n setError: _.noop,\r\n classes: {},\r\n setImageControlSetText: _.noop,\r\n setImageControlsValidate: _.noop,\r\n setImageControlSetEligibleLayout: _.noop,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.perfMarker = props.perfMarker;\r\n this.newI18n = this.props.newI18n;\r\n this.oldI18n = mergeI18n(\r\n window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/audience-campaign'),\r\n this.newI18n\r\n );\r\n\r\n this.defaultPreviewFields = {\r\n shortHeadline: props.i18n.getString('Image_Extension_Ad_Preview_Default_ShortHeadline'),\r\n longHeadline: props.i18n.getString('Image_Extension_Ad_Preview_Default_LongHeadline'),\r\n description: props.i18n.getString('Image_Extension_Ad_Preview_Default_Description'),\r\n businessName: props.i18n.getString('Image_Extension_Ad_Preview_Default_BusinessName'),\r\n url: 'https://example.com',\r\n };\r\n\r\n this.state = {\r\n imageList: this.props.imageList,\r\n previewTexts: this.getPreviewTexts(props.text, props.url),\r\n errors: [],\r\n ...mapSuggestionResponseToState(SuggestionStatus.EmptyURL),\r\n protocol: 'https://',\r\n eligibleLayout: this.props.eligibleLayouts,\r\n };\r\n\r\n this.previewCarouselRef = React.createRef();\r\n\r\n if (this.props.permissions.dynamic.ImageExtensionsEnhancements) {\r\n this.props.subscribeToUrlChanged(this.finalUrlChanged.bind(this));\r\n }\r\n // set the theme in the constructor because it shouldn't be instantiated on every re-render\r\n // setting this in ThemeProvider wrapper caused generation of a new panel class name\r\n this.theme = { components: ComponentSettings, core: ThemeFluent };\r\n\r\n this.props.setImageControlSetText(this.setText.bind(this));\r\n\r\n this.props.setImageControlsValidate(this.validate.bind(this));\r\n\r\n this.props.setImageControlSetEligibleLayout(this.setEligibleLayout.bind(this));\r\n\r\n let adCreatorInstrumentation = {};\r\n try {\r\n adCreatorInstrumentation = getAdCreatorInstrumentation(\r\n this.props.instrumentation,\r\n this.adCreatorScenario,\r\n this.props.permissions\r\n ) || {};\r\n // eslint-disable-next-line no-empty\r\n } catch (e) {}\r\n\r\n if (this.props.permissions.dynamic.ImageExtensionsEnhancements) {\r\n this.suggestionPoller = new SuggestionPoller({\r\n cid: props.cid,\r\n aid: props.aid,\r\n oDataConfig: props.oDataConfig,\r\n jobCompleteCallback: this.onPollingSuggestionCompleted.bind(this),\r\n logger: adCreatorInstrumentation.websiteSuggestionActivity,\r\n });\r\n }\r\n\r\n const { cid, aid, oDataConfig } = this.props;\r\n this.mediaRepository = new MediaRepository({ cid, aid, oDataConfig });\r\n\r\n this.enableAdPreviewLibrary = _.get(props.permissions.dynamic, 'AdPreviewLibrarySearchMMA', false);\r\n\r\n const activityLogger = adCreatorInstrumentation.editImageActivity;\r\n if (activityLogger) {\r\n activityLogger.signal('image extension panel open', 'image extension');\r\n }\r\n this.adCreatorInstrumentation = adCreatorInstrumentation;\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.suggestionPoller) {\r\n this.suggestionPoller.cancel();\r\n }\r\n }\r\n\r\n onPollingSuggestionCompleted(response, isSubdomainScraping) {\r\n if (response.error) {\r\n // error handling section\r\n this.setState(mapSuggestionResponseToState(SuggestionStatus.ServerError, response));\r\n } else {\r\n this.setState(mapSuggestionResponseToState(\r\n SuggestionStatus.FetchSucceed,\r\n response,\r\n isSubdomainScraping\r\n ));\r\n }\r\n }\r\n\r\n onImageListUpdated = (imageList) => {\r\n this.setState({\r\n cropImage: null,\r\n replaceImage: null,\r\n imageList,\r\n });\r\n\r\n this.validate(imageList);\r\n\r\n this.props.onImageListChanged(imageList);\r\n };\r\n\r\n onImagePreviewRequested = (type) => {\r\n this.previewCarouselRef.current.setPreviewIndexByType(type);\r\n };\r\n\r\n onUpdateFinalUrlPrefix = (ev, newPrefix) => {\r\n this.setState({ protocol: newPrefix.text });\r\n };\r\n\r\n onUpdateFinalUrl = (ev) => {\r\n // const newUrl = ev && ev.target && ev.target.value;\r\n const newUrl = ev.target.value;\r\n const newUrlWithProtocol = this.state.protocol + newUrl;\r\n this.finalUrlChanged(newUrlWithProtocol);\r\n this.props.setFullUrl(newUrlWithProtocol);\r\n };\r\n\r\n onImageCropCancelled = () => {\r\n this.setState({\r\n cropImage: null,\r\n });\r\n };\r\n\r\n onImageReplaceCancelled = () => {\r\n this.setState({\r\n replaceImage: null,\r\n });\r\n };\r\n\r\n setAddNewImageCallback = (callback) => {\r\n this.setState({ addImageCallback: callback });\r\n };\r\n\r\n setOpenAddImageCallback = (callback) => {\r\n this.setState({ openAddImageCallback: callback });\r\n };\r\n\r\n setErrors(errorMessages) {\r\n this.setState({\r\n errors: errorMessages,\r\n });\r\n }\r\n\r\n setText(newText) {\r\n this.setState({\r\n previewTexts: this.getPreviewTexts(newText, this.state.url),\r\n });\r\n }\r\n\r\n setEligibleLayout(newEligibleLayout) {\r\n this.setState({\r\n eligibleLayout: newEligibleLayout,\r\n });\r\n }\r\n\r\n getPreviewTexts(text) {\r\n const processedText = _.isString(text) ? text.trim() : null;\r\n\r\n return {\r\n shortHeadline: this.defaultPreviewFields.shortHeadline,\r\n longHeadline: this.defaultPreviewFields.longHeadline,\r\n description: this.defaultPreviewFields.description,\r\n businessName: this.defaultPreviewFields.businessName,\r\n url: this.defaultPreviewFields.url,\r\n extensionHeadline: processedText,\r\n };\r\n }\r\n\r\n finalUrlChanged = (newUrlWithProtocol) => {\r\n let newState = {};\r\n if (!isValidUrl(newUrlWithProtocol)) {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.InvalidURL);\r\n this.props.setError(this.props.i18n.getString('API_ErrorNumber_2611'));\r\n } else {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.FetchInProgress);\r\n this.props.setError('');\r\n }\r\n\r\n this.setState(\r\n _.extend({ url: newUrlWithProtocol }, newState),\r\n () => {\r\n if (isValidUrl(newUrlWithProtocol)) {\r\n this.fetchSuggestions(newUrlWithProtocol);\r\n }\r\n }\r\n );\r\n };\r\n\r\n fetchSuggestions = _.debounce((url) => {\r\n this.suggestionPoller.cancel();\r\n const minimumSize = constants.getMinimumSizeForImage(null);\r\n this.suggestionPoller.getLandingPageSuggestions({\r\n landingPageUrl: url,\r\n minimumResolution: {\r\n width: minimumSize[0],\r\n height: minimumSize[1],\r\n },\r\n });\r\n }, 1000);\r\n\r\n validate(imageList) {\r\n const imageListToValidate = imageList || this.state.imageList;\r\n const errors = [];\r\n\r\n if (imageListToValidate.length === 0) {\r\n errors.push(this.props.i18n.getString('ImageAdExtensionV2_ImagesRequired'));\r\n } else {\r\n const typesPresent = _.map(\r\n imageListToValidate,\r\n imageExperienceImage => imageExperienceImage.type\r\n );\r\n const typesMissing = _.difference(constants.imageTypesWithOrder, typesPresent);\r\n\r\n if (typesMissing.length > 0) {\r\n const typeMissingStrings = _.map(\r\n typesMissing,\r\n type => this.props.i18n.getString(constants.aspectRatios[type].stringKey)\r\n );\r\n\r\n const errMsg = `${this.props.i18n.getString('ImageAdExtensionV2_MissingPartialImages')} ${typeMissingStrings.join(', ')}`;\r\n\r\n errors.push(errMsg);\r\n }\r\n }\r\n\r\n this.setState({\r\n errors,\r\n });\r\n\r\n return errors.length === 0;\r\n }\r\n\r\n render() {\r\n const enhancedImageExperienceProps =\r\n this.props.permissions.dynamic.ImageExtensionsEnhancements ? {\r\n onUpdateFinalUrl: this.onUpdateFinalUrl,\r\n onUpdateFinalUrlPrefix: this.onUpdateFinalUrlPrefix,\r\n suggestion: this.state.suggestion,\r\n suggestionPoller: this.suggestionPoller,\r\n finalUrl: this.state.url,\r\n finalUrlProtocol: this.state.protocol,\r\n setAddNewImageCallback: this.setAddNewImageCallback,\r\n setOpenAddImageCallback: this.setOpenAddImageCallback,\r\n cropImage: this.state.cropImage,\r\n onImageCropCancelled: this.onImageCropCancelled,\r\n onImageReplaceCancelled: this.onImageReplaceCancelled,\r\n replaceImage: this.state.replaceImage,\r\n } : {};\r\n const enhancedPreviewCarouselProps =\r\n this.props.permissions.dynamic.ImageExtensionsEnhancements ? {\r\n onCropImage: (imgObj) => {\r\n this.setState({\r\n cropImage: imgObj,\r\n });\r\n },\r\n onReplaceImage: (imgObj) => {\r\n this.setState({\r\n replaceImage: imgObj,\r\n });\r\n },\r\n customClasses: {\r\n viewAllPlacementsButton: this.props.classes.viewAllPlacementsButton,\r\n reCropButton: this.props.classes.reCropButton,\r\n },\r\n } : {};\r\n if (this.props.permissions.dynamic.ImageExtensionsEnhancements && $('.suggestion-carousel').length > 0) {\r\n ReactDOM.render(\r\n <ThemeProvider theme={this.theme}>\r\n <UiBlocker\r\n blocking={this.state.blockCarousel}\r\n loadingText={this.props.i18n.getString('Loading')}\r\n >\r\n {this.state.imageList.length === 0 &&\r\n <ImageSuggestionCarousel\r\n customClasses={{\r\n carouselParent: this.props.classes.carouselParent,\r\n }}\r\n isLoading={!!this.state.suggestion.inProgress}\r\n images={this.state.carousel.images || []}\r\n i18n={this.props.newI18n}\r\n isEmpty={this.state.carousel.isError}\r\n messageInfo={this.state.carousel.message}\r\n onSelectImage={(imageSource, index) => {\r\n const { websiteSuggestionCarouselActivity } =\r\n getAdCreatorInstrumentation(\r\n this.props.instrumentation,\r\n this.adCreatorScenario\r\n );\r\n\r\n websiteSuggestionCarouselActivity.trace(`CarouselImageSelected: ${index};`);\r\n\r\n this.setState({ blockCarousel: true });\r\n this.state.addImageCallback(imageSource)\r\n .then((error = {}) => {\r\n if (error && error.errorMessage) {\r\n this.setState({\r\n carousel: {\r\n ...this.state.carousel,\r\n message: {\r\n type: MessageBarType.error,\r\n message: error.errorMessage,\r\n },\r\n },\r\n });\r\n }\r\n return Promise.resolve();\r\n })\r\n .finally(() => {\r\n this.setState({ blockCarousel: false });\r\n });\r\n this.setState({\r\n carousel: {\r\n ...this.state.carousel,\r\n images: _.reject(this.state.carousel.images, (val, ind) => ind === index),\r\n },\r\n });\r\n }}\r\n onSelectSeeAll={() => this.state.openAddImageCallback()}\r\n />\r\n }\r\n </UiBlocker>\r\n </ThemeProvider>,\r\n $('.suggestion-carousel')[0]\r\n );\r\n }\r\n\r\n const isAdPreviewRefreshEnabled = this.props.permissions.dynamic.AdPreviewRefresh;\r\n const PreviewCarouselComponent = this.enableAdPreviewLibrary ? UnifiedPreviewCarousel : PreviewCarousel;\r\n const adPreviewConfig = getUnifiedAdPreviewConfig({ eligibleLayout: this.state.eligibleLayout, isAdPreviewRefreshEnabled });\r\n\r\n return (\r\n <ThemeProvider theme={this.theme}>\r\n <div className=\"extension-images-control\">\r\n <I18nContext.Provider value={this.newI18n}>\r\n <InstrumentationContext.Provider value={this.props.instrumentation}>\r\n <ImageExperience\r\n cid={this.props.cid}\r\n aid={this.props.aid}\r\n i18n={this.oldI18n}\r\n mediaRepository={this.mediaRepository}\r\n imageList={this.state.imageList}\r\n perfMarker={this.perfMarker}\r\n onImageListUpdated={this.onImageListUpdated}\r\n onImagePreviewRequested={this.onImagePreviewRequested}\r\n extensionHeadline={this.state.previewTexts.extensionHeadline}\r\n isImageAdExtensionMode\r\n genericImage={this.props.genericImage}\r\n isForVNext={this.props.isForVNext}\r\n oDataConfig={this.props.oDataConfig}\r\n isStockPhotoEnabled={this.props.isStockPhotoEnabled}\r\n staticImagePath={this.props.staticImagePath}\r\n permissions={this.props.permissions}\r\n recommendation={this.props.recommendation}\r\n readOnly={this.props.readOnly}\r\n adCreatorScenario={instrumentationScenarios.default}\r\n instrumentation={this.props.instrumentation}\r\n preferencesService={this.props.preferencesService}\r\n isFinalUrlImageRetrievalEnabled={\r\n this.props.permissions.dynamic.ImageExtensionsEnhancements\r\n }\r\n isImageExtensionsEnhancementsEnabled={\r\n this.props.permissions.dynamic.ImageExtensionsEnhancements\r\n }\r\n activityLogger={this.adCreatorInstrumentation && this.adCreatorInstrumentation.editImageActivity}\r\n {...enhancedImageExperienceProps}\r\n enableUnifiedAdPreview={this.enableAdPreviewLibrary}\r\n adPreviewConfig={adPreviewConfig}\r\n isImageFittingEnabled={this.props.isImageFittingEnabled}\r\n isAdPreviewRefreshEnabled={isAdPreviewRefreshEnabled}\r\n />\r\n </InstrumentationContext.Provider>\r\n {\r\n this.state.errors.map(errMsg => (\r\n <div\r\n className=\"error\"\r\n key={errMsg}\r\n >\r\n {errMsg}\r\n </div>\r\n ))\r\n }\r\n <PreviewCarouselComponent\r\n ref={this.previewCarouselRef}\r\n imageList={this.state.imageList}\r\n previewTexts={this.state.previewTexts}\r\n eligibleLayout={this.state.eligibleLayout}\r\n i18n={this.props.i18n}\r\n genericImage={this.props.genericImage}\r\n isImageAdExtensionMode\r\n isForVNext={this.props.isForVNext}\r\n totalImageListCount={this.state.imageList.length}\r\n isImageExtensionsEnhancementsEnabled={\r\n this.props.permissions.dynamic.ImageExtensionsEnhancements\r\n }\r\n instrumentation={this.props.instrumentation}\r\n {...enhancedPreviewCarouselProps}\r\n adPreviewConfig={adPreviewConfig}\r\n enableUnifiedAdPreview={this.enableAdPreviewLibrary}\r\n isImageFittingEnabled={this.props.isImageFittingEnabled}\r\n permissions={this.props.permissions}\r\n />\r\n </I18nContext.Provider>\r\n </div>\r\n </ThemeProvider>\r\n );\r\n }\r\n}\r\n\r\nexport const ExtensionImagesControl =\r\n withDefaultStyles(ExtensionImagesControlBase, getExtensionImagesControlStyles);\r\n\r\n","// / The whole file is basically copied from typescript repo.\r\n\r\nexport function fail(message?: string) {\r\n const isProduction = true;\r\n if (isProduction) return;\r\n failInDebug(message);\r\n}\r\n\r\nexport function failInDebug(message?: string): never {\r\n // eslint-disable-next-line no-debugger\r\n debugger;\r\n const e = new Error(message ? `Debug Failure. ${message}` : \"Debug Failure.\");\r\n throw e;\r\n}\r\n\r\n\r\nexport function assert(expression: unknown, message?: string, verboseDebugInfo?: string | (() => string)): asserts expression {\r\n if (!expression) {\r\n // eslint-disable-next-line no-param-reassign\r\n message = message ? `False expression: ${message}` : \"False expression.\";\r\n if (verboseDebugInfo) {\r\n // eslint-disable-next-line no-param-reassign\r\n message += `\\r\\nVerbose Debug Information: ${typeof verboseDebugInfo === \"string\" ? verboseDebugInfo : verboseDebugInfo()}`;\r\n }\r\n fail(message);\r\n }\r\n}\r\n\r\nexport function assertEqual<T>(a: T, b: T, msg?: string, msg2?: string): void {\r\n if (a !== b) {\r\n // eslint-disable-next-line no-nested-ternary\r\n const message = msg ? msg2 ? `${msg} ${msg2}` : msg : \"\";\r\n fail(`Expected ${a} === ${b}. ${message}`);\r\n }\r\n}\r\n\r\nexport function assertLessThan(a: number, b: number, msg?: string): void {\r\n if (a >= b) {\r\n fail(`Expected ${a} < ${b}. ${msg || \"\"}`);\r\n }\r\n}\r\n\r\nexport function assertLessThanOrEqual(a: number, b: number): void {\r\n if (a > b) {\r\n fail(`Expected ${a} <= ${b}`);\r\n }\r\n}\r\n\r\nexport function assertGreaterThanOrEqual(a: number, b: number): void {\r\n if (a < b) {\r\n fail(`Expected ${a} >= ${b}`);\r\n }\r\n}\r\n\r\nexport function assertIsDefined<T>(value: T, message?: string): asserts value is NonNullable<T> {\r\n if (value === undefined || value === null) {\r\n fail(message);\r\n }\r\n}\r\n\r\nexport function assertNever(member: never, message = \"Assert never:\"): never {\r\n const detail = JSON.stringify(member);\r\n return failInDebug(`${message} ${detail}`);\r\n}\r\n","import React from 'react';\r\nimport { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport { SideNavigation } from '@bingads-webui-fluent-component/navigation';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '85px',\r\n flexShrink: 0,\r\n },\r\n tab: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n\r\n '& span.side-navigation-item-text': {\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 3,\r\n WebkitBoxOrient: 'vertical',\r\n ...shorthands.overflow('hidden'),\r\n wordBreak: 'break-word',\r\n hyphens: 'auto',\r\n },\r\n '&.side-navigation-item-button:hover, &.side-navigation-item-button:focus': {\r\n '& > span': { color: tokens.colorNeutralForeground3BrandHover },\r\n },\r\n },\r\n});\r\n\r\nexport const Navigation = ({ items }) => {\r\n const classes = useStyles();\r\n return (\r\n <div className={classes.container}>\r\n <SideNavigation\r\n items={items}\r\n mode={2}\r\n className={classes.tab}\r\n reserveSelectedTabSpace={false}\r\n config={{ selectionMode: 2 }}\r\n />\r\n </div>\r\n );\r\n};\r\n","/* istanbul ignore file */\r\nimport React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Body1,\r\n Caption1Strong,\r\n Input,\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\nimport { ColorPalette } from '@bingads-webui-campaign-react/ads-color-picker';\r\n\r\nconst useColorPickerStyles = makeStyles({\r\n root: {\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: tokens.spacingHorizontalSNudge,\r\n },\r\n label: {\r\n display: 'inline-block',\r\n marginBottom: tokens.spacingVerticalM,\r\n },\r\n colorPreview: {\r\n width: '36px',\r\n height: '36px',\r\n ...shorthands.padding(\r\n tokens.spacingVerticalXXS,\r\n tokens.spacingHorizontalXXS\r\n ),\r\n ...shorthands.borderStyle('solid'),\r\n ...shorthands.borderWidth(tokens.strokeWidthThin),\r\n ...shorthands.borderColor(tokens.colorNeutralStroke2),\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n },\r\n colorInput: {\r\n ...shorthands.flex(1),\r\n ...typographyStyles.body1,\r\n },\r\n});\r\n\r\nexport const ColorPicker = ({\r\n i18n,\r\n label,\r\n color,\r\n className,\r\n onChangeColor,\r\n}) => {\r\n const classes = useColorPickerStyles();\r\n const labelId = label || 'color-picker-name';\r\n const [colorState, setColorState] = React.useState(color);\r\n\r\n useEffect(() => {\r\n setColorState(color);\r\n }, [color]);\r\n\r\n const onUpdateColor = useCallback((_name, value) => {\r\n const colorValue = value ? value.hex : `#${_name}`;\r\n onChangeColor(colorValue);\r\n }, [onChangeColor]);\r\n\r\n const onChange = useCallback((_e, data) => {\r\n setColorState(`#${data.value}`);\r\n // update color if it's valid hex code\r\n if (/^[0-9A-Fa-f]{6}$/.test(data.value)) {\r\n onChangeColor(`#${data.value}`);\r\n }\r\n }, [onChangeColor]);\r\n\r\n return (\r\n <div\r\n className={mergeClasses(\r\n 'display-ads-color-picker',\r\n classes.root,\r\n className\r\n )}\r\n >\r\n {label && (\r\n <Caption1Strong className={classes.label} aria-label={label}>\r\n {label}\r\n </Caption1Strong>\r\n )}\r\n <div className={classes.container}>\r\n <ColorPalette\r\n showTooltipOnSelect\r\n i18n={i18n}\r\n key={labelId}\r\n colorData={{\r\n Name: labelId,\r\n Color: color,\r\n HexCode: `#${color.replace('#', '')}`,\r\n }}\r\n isDuplicate\r\n hideCaption\r\n palletteBoxSize=\"44px\"\r\n paletteColorSize=\"36px\"\r\n updateColor={onUpdateColor}\r\n />\r\n <Input\r\n maxLength={6}\r\n defaultValue={colorState.replace('#', '')}\r\n value={colorState.replace('#', '')}\r\n aria-labelledby=\"color-picker\"\r\n contentBefore={<Body1 size={400}>#</Body1>}\r\n onChange={onChange}\r\n className={mergeClasses('color-input', classes.colorInput)}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nColorPicker.propTypes = {\r\n i18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n label: PropTypes.string,\r\n className: PropTypes.string,\r\n color: PropTypes.string.isRequired,\r\n onChangeColor: PropTypes.func,\r\n};\r\n\r\nColorPicker.defaultProps = {\r\n label: null,\r\n className: '',\r\n onChangeColor: () => {},\r\n};\r\n","export const callToActionOptions = [\r\n _TL_('Custom Text'),\r\n _TL_('Act Now'),\r\n _TL_('Apply Now'),\r\n _TL_('Bet Now'),\r\n _TL_('Bid Now'),\r\n _TL_('Book A Car'),\r\n _TL_('Book Hotel'),\r\n _TL_('Book Now'),\r\n _TL_('Build Now'),\r\n _TL_('Buy Now'),\r\n _TL_('Chat Now'),\r\n _TL_('Compare'),\r\n _TL_('Contact Us'),\r\n _TL_('Dealers'),\r\n _TL_('Directions'),\r\n _TL_('Donate'),\r\n _TL_('Download'),\r\n _TL_('Email Now'),\r\n _TL_('Enroll Now'),\r\n _TL_('File Now'),\r\n _TL_('Find Job'),\r\n _TL_('Find Store'),\r\n _TL_('Free Play'),\r\n _TL_('Free Quote'),\r\n _TL_('Free Trial'),\r\n _TL_('Get Coupon'),\r\n _TL_('Get Deals'),\r\n _TL_('Get Demo'),\r\n _TL_('Get Offer'),\r\n _TL_('Get Quote'),\r\n _TL_('Go To Demo'),\r\n _TL_('Join Now'),\r\n _TL_('Learn More'),\r\n _TL_('Listen Now'),\r\n _TL_('Log In'),\r\n _TL_('Order Now'),\r\n _TL_('Play Game'),\r\n _TL_('Play Now'),\r\n _TL_('Post Job'),\r\n _TL_('Register'),\r\n _TL_('Renew Now'),\r\n _TL_('Rent A Car'),\r\n _TL_('Rent Now'),\r\n _TL_('Reorder'),\r\n _TL_('Reserve'),\r\n _TL_('Save Now'),\r\n _TL_('Schedule'),\r\n _TL_('See Demo'),\r\n _TL_('See Menu'),\r\n _TL_('See Models'),\r\n _TL_('See Offer'),\r\n _TL_('See Offers'),\r\n _TL_('See Sale'),\r\n _TL_('Sell Now'),\r\n _TL_('Shop Now'),\r\n _TL_('Showtimes'),\r\n _TL_('Sign In'),\r\n _TL_('Sign Up'),\r\n _TL_('Start Now'),\r\n _TL_('Subscribe'),\r\n _TL_('Switch Now'),\r\n _TL_('Test Drive'),\r\n _TL_('Try Now'),\r\n _TL_('View Cars'),\r\n _TL_('View Demo'),\r\n _TL_('Visit Plans'),\r\n _TL_('Visit Store'),\r\n _TL_('Vote Now'),\r\n _TL_('Watch'),\r\n _TL_('Watch More'),\r\n _TL_('Watch Now'),\r\n];\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Label } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport {\r\n Caption1Strong,\r\n Combobox,\r\n makeStyles,\r\n mergeClasses,\r\n Option,\r\n} from '@fluentui/react-components';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\n\r\nimport { callToActionOptions } from './constants';\r\n\r\nconst useCallToActionStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n label: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n select: {\r\n width: '100%',\r\n },\r\n input: {\r\n width: '100%',\r\n },\r\n customTextContainer: {\r\n '& .text-input-container': {\r\n width: '100%',\r\n },\r\n },\r\n});\r\n\r\nexport const CallToAction = ({\r\n cta,\r\n i18n,\r\n label,\r\n inlinePopup,\r\n labelAction,\r\n placeholder,\r\n onChangeCta,\r\n withCustomText,\r\n ctaValidations,\r\n helpTopic,\r\n helpLabel,\r\n}) => {\r\n const classes = useCallToActionStyles();\r\n const selectedOptions = withCustomText ? callToActionOptions : callToActionOptions.slice(1);\r\n const isCustomTextOptionSelected = cta && (cta === callToActionOptions[0] || !callToActionOptions.includes(cta));\r\n const [customInputText, setCustomInputText] = React.useState(isCustomTextOptionSelected ? cta : '');\r\n\r\n const handleSelect = (_ev, data) => {\r\n if (data && data.optionText) onChangeCta(data.optionText);\r\n };\r\n\r\n const handleInput = ({ data }) => {\r\n setCustomInputText(data.callToAction);\r\n };\r\n\r\n const ctaSchema = useMemo(() => ({\r\n type: 'object',\r\n properties: {\r\n callToAction: {\r\n type: 'string',\r\n maxLength: ctaValidations.maxLength,\r\n minLength: ctaValidations.minLength || 0,\r\n },\r\n },\r\n }), [ctaValidations.maxLength, ctaValidations.minLength]);\r\n\r\n return (\r\n <div className={mergeClasses('display-ads-call-to-action', classes.root)}>\r\n <div className={mergeClasses('display-ads-call-to-action-label', classes.label)}>\r\n {label &&\r\n <Label>\r\n { label }\r\n { helpTopic && (\r\n <HelpPopupInline\r\n topic={helpTopic}\r\n aria-label={helpLabel}\r\n />\r\n )}\r\n </Label>}\r\n {labelAction}\r\n </div>\r\n <Combobox\r\n onSelect={handleSelect}\r\n inlinePopup={inlinePopup}\r\n placeholder={placeholder}\r\n className={mergeClasses('display-ads-call-to-action-select', classes.select)}\r\n value={isCustomTextOptionSelected ? i18n.getString(callToActionOptions[0]) : i18n.getString(cta)}\r\n selectedOptions={\r\n isCustomTextOptionSelected ? [callToActionOptions[0]] : [cta]\r\n }\r\n onOptionSelect={handleSelect}\r\n >\r\n {selectedOptions.map(option => (\r\n <Option\r\n key={option}\r\n value={option}\r\n id={option.replace(/\\s/g, '-').toLowerCase()}\r\n >\r\n {i18n.getString(option)}\r\n </Option>\r\n ))}\r\n </Combobox>\r\n {isCustomTextOptionSelected && (\r\n <div className={mergeClasses('display-ads-call-to-action-input', classes.customTextContainer)}>\r\n <RemainingCharsValidatedTextField\r\n value={customInputText}\r\n validationProps={{\r\n onValidate: handleInput,\r\n field: 'callToAction',\r\n schema: ctaSchema,\r\n alwaysShowError: true,\r\n }}\r\n onRenderLabel={() => (\r\n <Label>\r\n <Caption1Strong>{i18n.getString(_TL_('Custom action text'))}</Caption1Strong>\r\n </Label>)}\r\n onBlur={() => customInputText && onChangeCta(customInputText)}\r\n i18n={i18n}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nCallToAction.propTypes = {\r\n i18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n label: PropTypes.string,\r\n cta: PropTypes.string,\r\n ctaValidations: PropTypes.shape({\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n }),\r\n inlinePopup: PropTypes.bool,\r\n labelAction: PropTypes.node,\r\n placeholder: PropTypes.string,\r\n onChangeCta: PropTypes.func,\r\n withCustomText: PropTypes.bool,\r\n helpTopic: PropTypes.string,\r\n helpLabel: PropTypes.string,\r\n};\r\n\r\nCallToAction.defaultProps = {\r\n label: null,\r\n cta: null,\r\n ctaValidations: {\r\n minLength: 0,\r\n maxLength: 20,\r\n },\r\n inlinePopup: false,\r\n placeholder: null,\r\n labelAction: null,\r\n withCustomText: true,\r\n onChangeCta: () => {},\r\n helpTopic: null,\r\n helpLabel: null,\r\n};\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { TextEditStyle16Regular } from '@fluentui/react-icons';\r\n\r\nexport const TextFormattingButton = ({ i18n, onClick }) => (\r\n <Button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n className=\"display-ads-text-formatting-button\"\r\n icon={<TextEditStyle16Regular />}\r\n onClick={onClick}\r\n >\r\n {i18n.getString(_TL_('Text formatting'))}\r\n </Button>\r\n);\r\n\r\nTextFormattingButton.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTextFormattingDialogueStyles = makeStyles({\r\n containerWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n minWidth: '282px',\r\n ...shorthands.padding(\r\n tokens.spacingVerticalL,\r\n tokens.spacingHorizontalNone\r\n ),\r\n ...shorthands.margin('-24px', '-16px'),\r\n },\r\n container: {\r\n width: '100%',\r\n ...shorthands.flex(1),\r\n },\r\n backButton: {\r\n justifyContent: 'flex-start',\r\n paddingLeft: 0,\r\n },\r\n header: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: tokens.spacingHorizontalXS,\r\n paddingBottom: tokens.spacingVerticalL,\r\n },\r\n content: {\r\n ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalMNudge),\r\n paddingTop: tokens.spacingVerticalL,\r\n },\r\n fontSelectorHeader: {\r\n display: 'block',\r\n paddingBottom: tokens.spacingVerticalXS,\r\n },\r\n fontSelect: {\r\n minWidth: 'auto',\r\n maxWidth: '100%',\r\n '& > input': {\r\n maxWidth: '100%',\r\n },\r\n },\r\n fontWeightSelect: {\r\n minWidth: 'auto',\r\n maxWidth: '100%',\r\n '& > input': {\r\n maxWidth: '100%',\r\n },\r\n },\r\n fontContainer: {\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(172px, 1fr))',\r\n gridGap: tokens.spacingHorizontalS,\r\n },\r\n contentDivider: {\r\n display: 'inline-flex',\r\n marginTop: tokens.spacingVerticalXL,\r\n },\r\n});\r\n","/* istanbul ignore file */ // Callback function expected to be tested again, will be fixed in a separate PR\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ArrowLeft16Regular } from '@fluentui/react-icons';\r\nimport {\r\n Button,\r\n Caption1Strong,\r\n Divider,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n FontsFamilySelector,\r\n FontsWeightSelector,\r\n} from '@bingads-webui-campaign-react/fonts-selector';\r\n\r\nimport { ColorPicker } from '../color-picker';\r\nimport { useTextFormattingDialogueStyles } from './styles';\r\n\r\nconst overrideFontWeights = [\r\n { key: 'Normal', text: _TL_('Normal') },\r\n { key: 'Bold', text: _TL_('Bold') },\r\n];\r\n\r\nexport const TextFormattingDialogue = ({\r\n i18n,\r\n onToggleBack,\r\n onFormatText,\r\n isUsedForButton,\r\n textFormatOptions,\r\n hideColorFormatting,\r\n}) => {\r\n const {\r\n font,\r\n color,\r\n weight,\r\n // backgroundColor,\r\n } = textFormatOptions || {};\r\n const classes = useTextFormattingDialogueStyles();\r\n\r\n const onChangeFont = (value) => {\r\n onFormatText({ ...textFormatOptions, font: value });\r\n };\r\n\r\n const onChangeWeight = (value) => {\r\n onFormatText({ ...textFormatOptions, weight: value });\r\n };\r\n\r\n const onChangeColor = (value) => {\r\n onFormatText({ ...textFormatOptions, color: value });\r\n };\r\n\r\n // TODO: Uncomment this when the feature is ready\r\n // const onChangeButtonColor = (value) => {\r\n // onFormatText({ ...textFormatOptions, backgroundColor: value });\r\n // };\r\n\r\n return (\r\n <div\r\n className={mergeClasses(\r\n 'display-ads-text-formatting-dialogue',\r\n classes.containerWrapper\r\n )}\r\n >\r\n <div className={classes.container}>\r\n <div\r\n className={mergeClasses(\r\n 'text-formatting-dialogue-header',\r\n classes.header\r\n )}\r\n >\r\n <Button\r\n appearance=\"transparent\"\r\n icon={<ArrowLeft16Regular />}\r\n onClick={onToggleBack}\r\n >\r\n {i18n.getString(_TL_('Back'))}\r\n </Button>\r\n </div>\r\n <Divider appearance=\"strong\" />\r\n <div\r\n className={mergeClasses(\r\n 'text-formatting-dialogue-content',\r\n classes.content\r\n )}\r\n >\r\n <Caption1Strong className={classes.fontSelectorHeader}>{i18n.getString(_TL_('Styles'))}</Caption1Strong>\r\n <div className={classes.fontContainer}>\r\n <FontsFamilySelector\r\n i18n={i18n}\r\n value={font}\r\n onChange={onChangeFont}\r\n selectClassName={classes.fontSelect}\r\n />\r\n <FontsWeightSelector\r\n i18n={i18n}\r\n value={weight}\r\n onChange={onChangeWeight}\r\n overrideFontWeights={overrideFontWeights}\r\n selectClassName={classes.fontWeightSelect}\r\n />\r\n </div>\r\n {!hideColorFormatting && (\r\n <>\r\n <Divider appearance=\"strong\" className={classes.contentDivider} />\r\n <ColorPicker\r\n i18n={i18n}\r\n color={color}\r\n onChangeColor={onChangeColor}\r\n label={i18n.getString(isUsedForButton ? _TL_('Button color') : _TL_('Text color'))}\r\n />\r\n {/* TODO: Uncomment thi when feature is ready */}\r\n {/* {isUsedForButton && (\r\n <ColorPicker\r\n i18n={i18n}\r\n color={backgroundColor}\r\n onChangeColor={onChangeButtonColor}\r\n label={i18n.getString(_TL_('Button color'))}\r\n />\r\n )} */}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nTextFormattingDialogue.propTypes = {\r\n i18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n onToggleBack: PropTypes.func.isRequired,\r\n isUsedForButton: PropTypes.bool,\r\n hideColorFormatting: PropTypes.bool,\r\n textFormatOptions: PropTypes.shape({\r\n font: PropTypes.string,\r\n color: PropTypes.string,\r\n weight: PropTypes.string,\r\n })\r\n .isRequired,\r\n onFormatText: PropTypes.func.isRequired,\r\n};\r\n\r\nTextFormattingDialogue.defaultProps = {\r\n isUsedForButton: false,\r\n hideColorFormatting: false,\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\nimport { helpbuttonStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const useDefaultContainerStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: '16px',\r\n },\r\n});\r\n\r\nexport const getStyles = (_, core) => ({\r\n collapseContainer: {\r\n '& .helpbutton': {\r\n ...helpbuttonStyle(core)['.helpbutton'],\r\n marginBottom: '4px',\r\n display: 'inline-block',\r\n },\r\n '& .helpbutton::before': helpbuttonStyle(core)['.helpbutton::before'],\r\n },\r\n});\r\n","import { getTextAssetCollectionConfig } from '@bingads-webui-campaign-react/pmax-text-input';\r\n\r\nconst collectionConfig = {\r\n headlines: {\r\n labelText: _TL_('Short headline'),\r\n placeholderText: _TL_('Enter your short headline'),\r\n fieldName: 'short-headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your short headline'),\r\n deleteButtonLabel: _TL_('Remove short headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 1,\r\n errorMessage: _TL_('At least one short headlines are required'),\r\n helpPopupTopic: 'pop_BA_DisplayTemplate_Headline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended short headlines'),\r\n inlineRecommendationsHelpTopicKey:\r\n 'pop_BA_Recommendations_Pmax_Shortheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about short headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_(\"You've reached the maximum number of short headlines. Please remove one short headline if you'd like to add this recommended short headline.\"),\r\n duplicateErrorMessage: _TL_('Duplicate short headlines are not allowed'),\r\n },\r\n longHeadlines: {\r\n labelText: _TL_('Long headline'),\r\n placeholderText: _TL_('Enter your long headline'),\r\n fieldName: 'long-headline',\r\n singleAssetValidationPropsField: 'LongHeadline',\r\n validationPropsField: 'LongHeadlines',\r\n addButtonText: _TL_('Add long headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your long headline'),\r\n deleteButtonLabel: _TL_('Remove long headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 1,\r\n errorMessage: _TL_('At least one long headline is required'),\r\n helpPopupTopic: 'pop_BA_DisplayTemplate_Headline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about long headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended long headlines'),\r\n inlineRecommendationsHelpTopicKey:\r\n 'pop_BA_Recommendations_Pmax_Longheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel:\r\n _TL_('Click to learn more about long headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip:\r\n _TL_(\"You've reached the maximum number of long headlines. Please remove one long headline if you'd like to add this recommended long headline.\"),\r\n duplicateErrorMessage: _TL_('Duplicate long headlines are not allowed'),\r\n },\r\n descriptions: {\r\n labelText: _TL_('Description'),\r\n placeholderText: _TL_('Enter a description'),\r\n fieldName: 'description',\r\n singleAssetValidationPropsField: 'Description',\r\n validationPropsField: 'Descriptions',\r\n addButtonText: _TL_('Add description'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 1,\r\n errorMessage: _TL_('At least one description is required'),\r\n helpPopupTopic: 'pop_BA_DisplayTemplate_Description',\r\n helpPopupAriaLabel: _TL_('Click to learn more about descriptions'),\r\n inlineRecommendationsTitle: _TL_('Recommended descriptions'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Descriptions',\r\n inlineRecommendationsHelpTopicAriaLabel:\r\n _TL_('Click to learn more about descriptions recommendations'),\r\n inlineRecommendationsDisabledItemTooltip:\r\n _TL_('You’ve reached the maximum number of descriptions. Please remove one description if you’d like to add this recommended description.'),\r\n duplicateErrorMessage: _TL_('Duplicate descriptions are not allowed'),\r\n\r\n },\r\n};\r\n\r\nexport const getLongHeadlineAssetCollectionConfig = i18n => getTextAssetCollectionConfig('longHeadlines', i18n, collectionConfig);\r\n\r\nexport const getDescriptionAssetCollectionConfig = i18n => getTextAssetCollectionConfig('descriptions', i18n, collectionConfig);\r\n\r\nexport const getShortHeadlineAssetCollectionConfig = i18n => getTextAssetCollectionConfig('headlines', i18n, collectionConfig);\r\n\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport {\r\n Body1,\r\n Button,\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nconst useTextAssetPlaceholderStyles = makeStyles({\r\n root: {\r\n width: '100%',\r\n ...shorthands.borderStyle('solid'),\r\n ...shorthands.border(tokens.strokeWidthThin),\r\n ...shorthands.borderWidth(tokens.strokeWidthThin),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n ...shorthands.borderColor(tokens.colorNeutralStrokeAccessible),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n rowGap: tokens.spacingVerticalS,\r\n ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalM),\r\n\r\n '& > span': {\r\n textAlign: 'center',\r\n },\r\n },\r\n});\r\n\r\nexport const TextAssetPlaceholder = ({ i18n, placeholder, onEdit }) => {\r\n const classes = useTextAssetPlaceholderStyles();\r\n\r\n return (\r\n <div className={mergeClasses('display-ads-text-assets-placeholder', classes.root)}>\r\n <Body1>\r\n {placeholder\r\n ? i18n.getString(placeholder)\r\n : i18n.getString(_TL_('Multiple options, editing will override for all texts'))}\r\n </Body1>\r\n <Button size=\"small\" onClick={onEdit}>{i18n.getString(_TL_('Click to edit'))}</Button>\r\n </div>\r\n );\r\n};\r\n\r\nTextAssetPlaceholder.propTypes = {\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n placeholder: PropTypes.string,\r\n onEdit: PropTypes.func,\r\n};\r\n\r\nTextAssetPlaceholder.defaultProps = {\r\n placeholder: '',\r\n onEdit: () => {},\r\n};\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { TextAssetCollectionWithRecommendations } from '@bingads-webui-campaign-react/pmax-text-input';\r\n\r\nimport { getLongHeadlineAssetCollectionConfig } from '../../configs';\r\nimport { TextFormattingButton } from '../../../text-formatting-button';\r\nimport { TextAssetPlaceholder } from '../text-assets-placeholder';\r\n\r\nexport const LongHeadlineAssetCollection = React.memo((props) => {\r\n const {\r\n i18n,\r\n className,\r\n isOptional,\r\n placeholder,\r\n isMultipleOptions,\r\n onFocusTextAsset,\r\n onDeleteTextAsset,\r\n onResetTextAssets,\r\n onApplyRecommendation,\r\n onToggleTextFormatting,\r\n setAddNewLongHeadlinesCallback,\r\n enableCopilotRecommendations,\r\n } = props;\r\n const addNewLongHeadlinesCallback = useRef(noop);\r\n const longHeadlineAssetCollectionConfig = getLongHeadlineAssetCollectionConfig(i18n);\r\n\r\n useEffect(() => {\r\n if (setAddNewLongHeadlinesCallback) {\r\n setAddNewLongHeadlinesCallback(() => (recommendations, replaceExistingAssets) => {\r\n addNewLongHeadlinesCallback.current(\r\n recommendations,\r\n replaceExistingAssets\r\n );\r\n });\r\n }\r\n }, [setAddNewLongHeadlinesCallback]);\r\n\r\n return (\r\n <div className={mergeClasses('long-headline-asset-collection', className)}>\r\n <TextAssetCollectionWithRecommendations\r\n {...longHeadlineAssetCollectionConfig}\r\n i18n={i18n}\r\n renderInlineCopilot\r\n showAddButton={false}\r\n isOptional={isOptional}\r\n showDeleteButton={false}\r\n withDeleteIconDisabled\r\n replaceMode\r\n hideAddAllSuggestionsButton\r\n enableCustomizer={false}\r\n placeholderText={placeholder ? i18n.getString(placeholder) : ''}\r\n withInlineRecommendations={!isMultipleOptions}\r\n onFocusTextAsset={onFocusTextAsset}\r\n onDeleteTextAsset={onDeleteTextAsset}\r\n onApplyRecommendation={onApplyRecommendation}\r\n enableCopilotRecommendations={enableCopilotRecommendations}\r\n setAddTextAssetCallback={(callback) => {\r\n addNewLongHeadlinesCallback.current = callback;\r\n }}\r\n labelAction={\r\n <TextFormattingButton i18n={i18n} onClick={onToggleTextFormatting} />\r\n }\r\n overrideInputNode={\r\n isMultipleOptions ? (\r\n <TextAssetPlaceholder\r\n i18n={i18n}\r\n onEdit={() => onResetTextAssets('longHeadline')}\r\n />\r\n ) : null\r\n }\r\n />\r\n </div>\r\n );\r\n});\r\n\r\nLongHeadlineAssetCollection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n className: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n isMultipleOptions: PropTypes.bool,\r\n onResetTextAssets: PropTypes.func,\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n onFocusTextAsset: PropTypes.func,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n onToggleTextFormatting: PropTypes.func,\r\n setAddNewLongHeadlinesCallback: PropTypes.func,\r\n};\r\n\r\nLongHeadlineAssetCollection.defaultProps = {\r\n className: '',\r\n placeholder: '',\r\n isOptional: false,\r\n isMultipleOptions: false,\r\n setAddNewLongHeadlinesCallback: null,\r\n enableCopilotRecommendations: true,\r\n onFocusTextAsset: noop,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n onToggleTextFormatting: noop,\r\n onResetTextAssets: noop,\r\n};\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { TextAssetCollectionWithRecommendations } from '@bingads-webui-campaign-react/pmax-text-input';\r\n\r\nimport { getShortHeadlineAssetCollectionConfig } from '../../configs';\r\nimport { TextFormattingButton } from '../../../text-formatting-button';\r\nimport { TextAssetPlaceholder } from '../text-assets-placeholder';\r\n\r\nexport const ShortHeadlineAssetCollection = React.memo((props) => {\r\n const {\r\n i18n,\r\n className,\r\n isOptional,\r\n placeholder,\r\n isMultipleOptions,\r\n onFocusTextAsset,\r\n onDeleteTextAsset,\r\n onResetTextAssets,\r\n onApplyRecommendation,\r\n onToggleTextFormatting,\r\n enableCopilotRecommendations,\r\n setAddNewShortHeadlinesCallback,\r\n } = props;\r\n const addNewShortHeadlineCallback = useRef(noop);\r\n const shortHeadlineAssetCollectionConfig = getShortHeadlineAssetCollectionConfig(i18n);\r\n\r\n useEffect(() => {\r\n if (setAddNewShortHeadlinesCallback) {\r\n setAddNewShortHeadlinesCallback(() => (recommendations, replaceExistingAssets) => {\r\n addNewShortHeadlineCallback.current(\r\n recommendations,\r\n replaceExistingAssets\r\n );\r\n });\r\n }\r\n }, [setAddNewShortHeadlinesCallback]);\r\n\r\n return (\r\n <div className={mergeClasses('short-headline-asset-collection', className)}>\r\n <TextAssetCollectionWithRecommendations\r\n {...shortHeadlineAssetCollectionConfig}\r\n i18n={i18n}\r\n renderInlineCopilot\r\n showAddButton={false}\r\n isOptional={isOptional}\r\n showDeleteButton={false}\r\n withDeleteIconDisabled\r\n replaceMode\r\n hideAddAllSuggestionsButton\r\n enableCustomizer={false}\r\n placeholderText={placeholder ? i18n.getString(placeholder) : ''}\r\n withInlineRecommendations={!isMultipleOptions}\r\n onFocusTextAsset={onFocusTextAsset}\r\n onDeleteTextAsset={onDeleteTextAsset}\r\n onApplyRecommendation={onApplyRecommendation}\r\n enableCopilotRecommendations={enableCopilotRecommendations}\r\n setAddTextAssetCallback={(callback) => {\r\n addNewShortHeadlineCallback.current = callback;\r\n }}\r\n labelAction={\r\n <TextFormattingButton i18n={i18n} onClick={onToggleTextFormatting} />\r\n }\r\n overrideInputNode={\r\n isMultipleOptions ? (\r\n <TextAssetPlaceholder\r\n i18n={i18n}\r\n onEdit={() => onResetTextAssets('shortHeadline')}\r\n />\r\n ) : null\r\n }\r\n />\r\n </div>\r\n );\r\n});\r\n\r\nShortHeadlineAssetCollection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n className: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n enableCustomizer: PropTypes.bool,\r\n isMultipleOptions: PropTypes.bool,\r\n onResetTextAssets: PropTypes.func,\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n onFocusTextAsset: PropTypes.func,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n onToggleTextFormatting: PropTypes.func,\r\n setAddNewShortHeadlinesCallback: PropTypes.func,\r\n};\r\n\r\nShortHeadlineAssetCollection.defaultProps = {\r\n className: '',\r\n placeholder: '',\r\n isOptional: false,\r\n enableCustomizer: false,\r\n isMultipleOptions: false,\r\n enableCopilotRecommendations: true,\r\n setAddNewShortHeadlinesCallback: null,\r\n onFocusTextAsset: noop,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n onToggleTextFormatting: noop,\r\n onResetTextAssets: noop,\r\n};\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { TextAssetCollectionWithRecommendations } from '@bingads-webui-campaign-react/pmax-text-input';\r\n\r\nimport { getDescriptionAssetCollectionConfig } from '../../configs';\r\nimport { TextFormattingButton } from '../../../text-formatting-button';\r\nimport { TextAssetPlaceholder } from '../text-assets-placeholder';\r\n\r\nexport const DescriptionAssetCollection = React.memo((props) => {\r\n const {\r\n i18n,\r\n className,\r\n isOptional,\r\n placeholder,\r\n isMultipleOptions,\r\n onFocusTextAsset,\r\n onDeleteTextAsset,\r\n onResetTextAssets,\r\n onApplyRecommendation,\r\n onToggleTextFormatting,\r\n enableCopilotRecommendations,\r\n setAddNewDescriptionCallback,\r\n } = props;\r\n const addNewHeadlinesCallback = useRef(noop);\r\n const descriptionAssetCollectionConfig = getDescriptionAssetCollectionConfig(i18n);\r\n\r\n useEffect(() => {\r\n if (setAddNewDescriptionCallback) {\r\n setAddNewDescriptionCallback(() => (recommendations) => {\r\n addNewHeadlinesCallback.current(recommendations);\r\n });\r\n }\r\n }, [setAddNewDescriptionCallback]);\r\n\r\n return (\r\n <div className={mergeClasses('description-asset-collection', className)}>\r\n <TextAssetCollectionWithRecommendations\r\n {...descriptionAssetCollectionConfig}\r\n i18n={i18n}\r\n renderInlineCopilot\r\n showAddButton={false}\r\n isOptional={isOptional}\r\n showDeleteButton={false}\r\n withDeleteIconDisabled\r\n replaceMode\r\n hideAddAllSuggestionsButton\r\n placeholderText={placeholder ? i18n.getString(placeholder) : ''}\r\n enableCustomizer={false}\r\n withInlineRecommendations={!isMultipleOptions}\r\n onFocusTextAsset={onFocusTextAsset}\r\n onDeleteTextAsset={onDeleteTextAsset}\r\n onApplyRecommendation={onApplyRecommendation}\r\n enableCopilotRecommendations={enableCopilotRecommendations}\r\n setAddTextAssetCallback={(callback) => {\r\n addNewHeadlinesCallback.current = callback;\r\n }}\r\n labelAction={\r\n <TextFormattingButton i18n={i18n} onClick={onToggleTextFormatting} />\r\n }\r\n overrideInputNode={\r\n isMultipleOptions ? (\r\n <TextAssetPlaceholder\r\n i18n={i18n}\r\n onEdit={() => onResetTextAssets('description')}\r\n />\r\n ) : null\r\n }\r\n />\r\n </div>\r\n );\r\n});\r\n\r\nDescriptionAssetCollection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n className: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n isMultipleOptions: PropTypes.bool,\r\n onResetTextAssets: PropTypes.func,\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n onFocusTextAsset: PropTypes.func,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n onToggleTextFormatting: PropTypes.func,\r\n setAddNewDescriptionCallback: PropTypes.func,\r\n disableCopilot: PropTypes.bool.isRequired,\r\n};\r\n\r\nDescriptionAssetCollection.defaultProps = {\r\n className: '',\r\n placeholder: '',\r\n isOptional: false,\r\n isMultipleOptions: false,\r\n setAddNewDescriptionCallback: null,\r\n enableCopilotRecommendations: true,\r\n onFocusTextAsset: noop,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n onToggleTextFormatting: noop,\r\n onResetTextAssets: noop,\r\n};\r\n","export const assetName = {\r\n longHeadline: 'LongHeadline',\r\n description: 'Description',\r\n shortHeadline: 'ShortHeadline',\r\n callToAction: 'CTA',\r\n background: 'Background',\r\n} as const;\r\n\r\nexport const defaultTextFormattingOptions = {\r\n font: '',\r\n weight: '',\r\n color: '',\r\n} as const;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport {\r\n Divider,\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nimport {\r\n ShortHeadlineAssetCollection,\r\n DescriptionAssetCollection,\r\n LongHeadlineAssetCollection,\r\n} from './index';\r\nimport { assetName } from '../../../constants';\r\n\r\nconst useTextAssetCollectionStyles = makeStyles({\r\n root: {\r\n maxWidth: '432px',\r\n },\r\n textAssetStyle: {\r\n '& .text-assets-collection-container': {\r\n width: '100%',\r\n },\r\n },\r\n textDivider: {\r\n ...shorthands.margin(tokens.spacingVerticalL, 0),\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst TextAssetCollectionWithCoPilotInternal = (props) => {\r\n const {\r\n i18n,\r\n disableCopilot,\r\n onResetTextAssets,\r\n shortHeadlineValidations,\r\n longHeadlineValidations,\r\n descriptionValidations,\r\n fetchRecommendationAssets,\r\n setAddNewDescriptionCallback,\r\n setAddNewLongHeadlinesCallback,\r\n setAddNewShortHeadlinesCallback,\r\n onChangeTextAssetFormattingSection,\r\n cancelFetchRecommendationAssetsJob,\r\n } = props;\r\n\r\n const classes = useTextAssetCollectionStyles();\r\n\r\n const longHeadlineAssetCollection = useMemo(\r\n () => (\r\n <LongHeadlineAssetCollection\r\n i18n={i18n}\r\n className={!longHeadlineValidations.display? classes.hide : ''}\r\n isOptional={false}\r\n featureName=\"displayPlus\"\r\n onResetTextAssets={onResetTextAssets}\r\n enableCopilotRecommendations={!disableCopilot}\r\n placeholder={longHeadlineValidations.placeholder}\r\n isMultipleOptions={longHeadlineValidations.isMultipleOptions}\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n setAddNewLongHeadlinesCallback={setAddNewLongHeadlinesCallback}\r\n cancelFetchRecommendationAssetsJob={\r\n cancelFetchRecommendationAssetsJob\r\n }\r\n onToggleTextFormatting={() =>\r\n onChangeTextAssetFormattingSection(assetName.longHeadline)\r\n }\r\n />\r\n ),\r\n [\r\n i18n,\r\n classes.hide,\r\n disableCopilot,\r\n onResetTextAssets,\r\n longHeadlineValidations,\r\n fetchRecommendationAssets,\r\n setAddNewLongHeadlinesCallback,\r\n onChangeTextAssetFormattingSection,\r\n cancelFetchRecommendationAssetsJob,\r\n ]\r\n );\r\n\r\n const shortHeadlineAssetCollection = useMemo(\r\n () => (\r\n <ShortHeadlineAssetCollection\r\n i18n={i18n}\r\n className={!shortHeadlineValidations.display? classes.hide : ''}\r\n isOptional={false}\r\n featureName=\"displayPlus\"\r\n onResetTextAssets={onResetTextAssets}\r\n enableCopilotRecommendations={!disableCopilot}\r\n placeholder={shortHeadlineValidations.placeholder}\r\n isMultipleOptions={shortHeadlineValidations.isMultipleOptions}\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n setAddNewShortHeadlinesCallback={setAddNewShortHeadlinesCallback}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n onToggleTextFormatting={() =>\r\n onChangeTextAssetFormattingSection(assetName.shortHeadline)\r\n }\r\n />\r\n ),\r\n [\r\n i18n,\r\n classes.hide,\r\n disableCopilot,\r\n onResetTextAssets,\r\n shortHeadlineValidations,\r\n fetchRecommendationAssets,\r\n setAddNewShortHeadlinesCallback,\r\n onChangeTextAssetFormattingSection,\r\n cancelFetchRecommendationAssetsJob,\r\n ]\r\n );\r\n\r\n const descriptionAssetCollection = useMemo(\r\n () => (\r\n <DescriptionAssetCollection\r\n i18n={i18n}\r\n className={!descriptionValidations.display? classes.hide : ''}\r\n isOptional={false}\r\n featureName=\"displayPlus\"\r\n onResetTextAssets={onResetTextAssets}\r\n enableCopilotRecommendations={!disableCopilot}\r\n placeholder={descriptionValidations.placeholder}\r\n isMultipleOptions={descriptionValidations.isMultipleOptions}\r\n fetchRecommendationAssets={fetchRecommendationAssets}\r\n setAddNewDescriptionCallback={setAddNewDescriptionCallback}\r\n cancelFetchRecommendationAssetsJob={cancelFetchRecommendationAssetsJob}\r\n onToggleTextFormatting={() =>\r\n onChangeTextAssetFormattingSection(assetName.description)\r\n }\r\n />\r\n ),\r\n [\r\n i18n,\r\n classes.hide,\r\n disableCopilot,\r\n onResetTextAssets,\r\n descriptionValidations,\r\n fetchRecommendationAssets,\r\n setAddNewDescriptionCallback,\r\n onChangeTextAssetFormattingSection,\r\n cancelFetchRecommendationAssetsJob,\r\n ]\r\n );\r\n\r\n return (\r\n <div\r\n className={mergeClasses(\r\n 'display-template-text-asset-collection',\r\n classes.root\r\n )}\r\n >\r\n <div\r\n className={mergeClasses(\r\n 'text-asset-collections',\r\n classes.textAssetStyle\r\n )}\r\n >\r\n {shortHeadlineValidations.display && <Divider appearance=\"strong\" className={classes.textDivider} />}\r\n {shortHeadlineAssetCollection}\r\n {longHeadlineValidations.display && <Divider appearance=\"strong\" className={classes.textDivider} />}\r\n {longHeadlineAssetCollection}\r\n {descriptionValidations.display && <Divider appearance=\"strong\" className={classes.textDivider} />}\r\n {descriptionAssetCollection}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nTextAssetCollectionWithCoPilotInternal.propTypes = {\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n shortHeadlineValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n longHeadlineValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n descriptionValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n onResetTextAssets: PropTypes.func.isRequired,\r\n disableCopilot: PropTypes.bool.isRequired,\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n setAddNewLongHeadlinesCallback: PropTypes.func.isRequired,\r\n setAddNewDescriptionCallback: PropTypes.func.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n onChangeTextAssetFormattingSection: PropTypes.func.isRequired,\r\n};\r\n\r\nTextAssetCollectionWithCoPilotInternal.defaultProps = {\r\n shortHeadlineValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 30,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n longHeadlineValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 90,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n descriptionValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 90,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n};\r\n\r\nexport const TextAssetCollectionWithCoPilot = TextAssetCollectionWithCoPilotInternal;\r\n","/* istanbul ignore file */\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { debounce } from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getStyles, useDefaultContainerStyles } from './styles';\r\nimport { TextAssetCollectionWithCoPilot } from './components';\r\n\r\nexport const TextAssetCollectionWithRecommendations = (props) => {\r\n const {\r\n url,\r\n i18n,\r\n campaignId,\r\n serverContext,\r\n shortHeadline,\r\n longHeadline,\r\n description,\r\n onChangeTexts,\r\n shortHeadlineValidations,\r\n longHeadlineValidations,\r\n descriptionValidations,\r\n } = props;\r\n const classes = useDefaultContainerStyles();\r\n const helpButtonStyles = useDefaultStyles(getStyles);\r\n const { CurrentLocale: locale } = serverContext;\r\n\r\n const updatedDescriptionSchema = useMemo(() => Object.keys(AssetGroup.properties.Descriptions.schema.properties).reduce((acc, key) => {\r\n const value = AssetGroup.properties.Descriptions.schema.properties[key];\r\n if (key.includes('Description')) {\r\n const updatedValue = {\r\n ...value,\r\n minLength: descriptionValidations.minLength || 0,\r\n maxLength: descriptionValidations.maxLength,\r\n };\r\n return {\r\n ...acc,\r\n [key]: updatedValue,\r\n };\r\n }\r\n return {\r\n ...acc,\r\n [key]: value,\r\n };\r\n }, {}), [descriptionValidations.maxLength, descriptionValidations.minLength]);\r\n\r\n const updatedHeadlineSchema = useMemo(() => Object.keys(AssetGroup.properties.Headlines.schema.properties).reduce((acc, key) => {\r\n const value = AssetGroup.properties.Headlines.schema.properties[key];\r\n if (key.includes('Headline')) {\r\n const updatedValue = {\r\n ...value,\r\n minLength: shortHeadlineValidations.minLength || 0,\r\n maxLength: shortHeadlineValidations.maxLength,\r\n };\r\n return {\r\n ...acc,\r\n [key]: updatedValue,\r\n };\r\n }\r\n return {\r\n ...acc,\r\n [key]: value,\r\n };\r\n }, {}), [shortHeadlineValidations.maxLength, shortHeadlineValidations.minLength]);\r\n\r\n const updatedLongHeadlineSchema = useMemo(() => Object.keys(AssetGroup.properties.LongHeadlines.schema.properties).reduce((acc, key) => {\r\n const value = AssetGroup.properties.LongHeadlines.schema.properties[key];\r\n if (key.includes('LongHeadline')) {\r\n const updatedValue = {\r\n ...value,\r\n minLength: longHeadlineValidations.minLength || 0,\r\n maxLength: longHeadlineValidations.maxLength,\r\n };\r\n return {\r\n ...acc,\r\n [key]: updatedValue,\r\n };\r\n }\r\n return {\r\n ...acc,\r\n [key]: value,\r\n };\r\n }, {}), [longHeadlineValidations.maxLength, longHeadlineValidations.minLength]);\r\n\r\n const updatedAssetGroup = useMemo(\r\n () => ({\r\n ...AssetGroup,\r\n properties: {\r\n ...AssetGroup.properties,\r\n Description: {\r\n ...AssetGroup.properties.Description,\r\n maxLength: descriptionValidations.maxLength,\r\n },\r\n Descriptions: {\r\n ...AssetGroup.properties.Descriptions,\r\n schema: {\r\n ...AssetGroup.properties.Descriptions.schema,\r\n properties: {\r\n ...AssetGroup.properties.Descriptions.schema.properties,\r\n ...updatedDescriptionSchema,\r\n },\r\n },\r\n },\r\n Headline: {\r\n ...AssetGroup.properties.Headline,\r\n maxLength: shortHeadlineValidations.maxLength,\r\n },\r\n Headlines: {\r\n ...AssetGroup.properties.Headlines,\r\n schema: {\r\n ...AssetGroup.properties.Headlines.schema,\r\n properties: {\r\n ...AssetGroup.properties.Headlines.schema.properties,\r\n ...updatedHeadlineSchema,\r\n },\r\n },\r\n },\r\n LongHeadline: {\r\n ...AssetGroup.properties.LongHeadline,\r\n maxLength: longHeadlineValidations.maxLength,\r\n },\r\n LongHeadlines: {\r\n ...AssetGroup.properties.LongHeadlines,\r\n schema: {\r\n ...AssetGroup.properties.LongHeadlines.schema,\r\n properties: {\r\n ...AssetGroup.properties.LongHeadlines.schema.properties,\r\n ...updatedLongHeadlineSchema,\r\n },\r\n },\r\n },\r\n },\r\n }),\r\n [\r\n shortHeadlineValidations.maxLength,\r\n descriptionValidations.maxLength,\r\n longHeadlineValidations.maxLength,\r\n updatedHeadlineSchema,\r\n updatedDescriptionSchema,\r\n updatedLongHeadlineSchema,\r\n ]\r\n );\r\n\r\n const onChangeTextsDebounced = useMemo(() => debounce(\r\n textAssets => onChangeTexts(textAssets),\r\n 1000\r\n ), [onChangeTexts]);\r\n\r\n const handleValidate = ({\r\n data,\r\n isDirty,\r\n isValid,\r\n messages,\r\n }) => {\r\n const {\r\n Headlines,\r\n IsOptional,\r\n Descriptions,\r\n LongHeadlines,\r\n } = data;\r\n const updatedTextAssets = {\r\n isOptional: IsOptional,\r\n isDirty,\r\n isValid,\r\n messages,\r\n };\r\n const newShortHeadline = Headlines ? Headlines.Headline0 || '' : '';\r\n if (!shortHeadlineValidations.isMultipleOptions &&\r\n shortHeadline !== newShortHeadline) {\r\n updatedTextAssets.shortHeadline = newShortHeadline;\r\n }\r\n\r\n const newLongHeadline = LongHeadlines ? LongHeadlines.LongHeadline0 || '' : '';\r\n if (!longHeadlineValidations.isMultipleOptions &&\r\n longHeadline !== newLongHeadline) {\r\n updatedTextAssets.longHeadline = newLongHeadline;\r\n }\r\n\r\n const newDescription = Descriptions ? Descriptions.Description0 || '' : '';\r\n if (!descriptionValidations.isMultipleOptions\r\n && description !== newDescription) {\r\n updatedTextAssets.description = newDescription;\r\n }\r\n\r\n onChangeTextsDebounced(updatedTextAssets);\r\n };\r\n\r\n const handleReset = (key) => {\r\n const updatedTextAssets = {\r\n ...(key === 'shortHeadline' ? { shortHeadline: '' } : {}),\r\n ...(key === 'description' ? { description: '' } : {}),\r\n ...(key === 'longHeadline' ? { longHeadline: '' } : {}),\r\n };\r\n onChangeTexts(updatedTextAssets);\r\n };\r\n\r\n return (\r\n <div className={mergeClasses('display-template-text-asset-collection-container', classes.container, helpButtonStyles.collapseContainer)}>\r\n <ValidationGroup\r\n validationProps={{\r\n schema: updatedAssetGroup,\r\n onValidate: handleValidate,\r\n data: {\r\n FinalUrlForRecommendation: url,\r\n Headlines: {\r\n Headline0: shortHeadline,\r\n },\r\n LongHeadlines: {\r\n LongHeadline0: longHeadline,\r\n },\r\n Descriptions: {\r\n Description0: description,\r\n },\r\n },\r\n i18n,\r\n }}\r\n >\r\n <CopilotRepositoryProvider\r\n finalUrl={url}\r\n locale={locale}\r\n enableLogoAndCTA\r\n campaignId={campaignId}\r\n recommendationType=\"DisplayAd\"\r\n serverContext={serverContext}\r\n >\r\n <TextAssetCollectionWithCoPilot onResetTextAssets={handleReset} {...props} />\r\n </CopilotRepositoryProvider>\r\n </ValidationGroup>\r\n </div>\r\n );\r\n};\r\n\r\nTextAssetCollectionWithRecommendations.propTypes = {\r\n isAudienceAd: PropTypes.bool,\r\n url: PropTypes.string.isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n shortHeadline: PropTypes.string,\r\n longHeadline: PropTypes.string,\r\n description: PropTypes.string,\r\n shortHeadlineValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n longHeadlineValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n descriptionValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n serverContext: PropTypes.shape({\r\n CurrentLocale: PropTypes.string.isRequired,\r\n }).isRequired,\r\n disableCopilot: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n onChangeTexts: PropTypes.func.isRequired,\r\n onChangeTextAssetFormattingSection: PropTypes.func.isRequired,\r\n};\r\n\r\nTextAssetCollectionWithRecommendations.defaultProps = {\r\n isAudienceAd: false,\r\n shortHeadline: '',\r\n longHeadline: '',\r\n description: '',\r\n shortHeadlineValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 30,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n longHeadlineValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 90,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n descriptionValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 90,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const getskeletonStyles = makeStyles({\r\n row: {\r\n display: 'flex',\r\n ...shorthands.gap('8px'),\r\n flexWrap: 'wrap',\r\n },\r\n item: {\r\n height: '55px',\r\n width: '55px',\r\n backgroundColor: tokens.colorNeutralStencil1,\r\n },\r\n});\r\n\r\n\r\nexport const useStyles = makeStyles({\r\n displayColorPicker: {\r\n '& .helpbutton': {\r\n display: 'inline',\r\n },\r\n },\r\n colorPalette: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n ...shorthands.margin(tokens.spacingVerticalM, 0, 0, 0),\r\n },\r\n item: {\r\n height: '55px',\r\n width: '55px',\r\n backgroundColor: tokens.colorNeutralStencil1,\r\n },\r\n helpButton: {\r\n marginLeft: tokens.spacingHorizontalSNudge,\r\n },\r\n titleContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n});\r\n","/* istanbul ignore file */ // not fully implemented yet\r\nimport React, { useMemo } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { ColorPalette, ColorAddButton, useCheckDuplicateColor } from '@bingads-webui-campaign-react/ads-color-picker';\r\nimport { Body1Strong, mergeClasses, Skeleton, SkeletonItem } from '@fluentui/react-components';\r\nimport { useStyles, getskeletonStyles } from './style';\r\nimport {\r\n AdsStudioDisplayColorPickerProps\r\n} from './type';\r\n\r\n\r\nconst ListSkeleton = () => {\r\n const classes = getskeletonStyles();\r\n return (\r\n <Skeleton className={classes.row}>\r\n <SkeletonItem className={classes.item} />\r\n <SkeletonItem className={classes.item} />\r\n </Skeleton>\r\n );\r\n};\r\n\r\n// WILL CHANGE ID ONCE DATA START COMING FROM API\r\nexport const AdsStudioDisplayColorPicker: React.FC<AdsStudioDisplayColorPickerProps> = React.memo(({\r\n title,\r\n isLoading,\r\n i18n,\r\n color,\r\n helpTopic,\r\n helpLabel,\r\n paletteData = [],\r\n maxColors = 2,\r\n onUpdate,\r\n onDelete,\r\n}) => {\r\n const totalColors = paletteData.length;\r\n const classes = useStyles();\r\n const renderHelpBubble = useMemo(() => (\r\n <div className={classes.helpButton}>\r\n { helpTopic && (\r\n <HelpButton\r\n topic={helpTopic}\r\n aria-label={helpLabel}\r\n />\r\n )}\r\n </div>\r\n ), [classes.helpButton, helpLabel, helpTopic]);\r\n const { isDuplicate, onUpdateColor } = useCheckDuplicateColor({ paletteData, allowDuplicates: false, onUpdate });\r\n\r\n return (\r\n <div\r\n className={mergeClasses('display_color_picker', classes.displayColorPicker)}\r\n >\r\n <div className={classes.titleContainer}>\r\n <Body1Strong>{title}</Body1Strong>\r\n {renderHelpBubble}\r\n </div>\r\n {isLoading ?\r\n <ListSkeleton /> :\r\n <div className={mergeClasses('color_palette', classes.colorPalette)}>\r\n {paletteData.map(colorData => (\r\n colorData && <ColorPalette paletteColorSize=\"36px\" palletteBoxSize=\"42px\" hideCaption isDuplicate={isDuplicate} showEditBtn={!(colorData as any).isBrandKitColor} i18n={i18n} defaultSelected={colorData.HexCode === color} key={colorData.Name} colorData={colorData} onDelete={((colorData as any).isBrandKitColor || totalColors === 1) ? null : onDelete} updateColor={onUpdate} />\r\n ))}\r\n {(totalColors < maxColors) && <ColorAddButton paletteColorSize=\"36px\" palletteBoxSize=\"42px\" isDuplicate={isDuplicate} i18n={i18n} totalColors={totalColors} updateColor={onUpdateColor} />}\r\n </div>\r\n }\r\n </div>\r\n );\r\n});\r\n","/* istanbul ignore file */\r\nimport React, { useCallback, useContext, useMemo, useRef, useState } from 'react';\r\nimport { get } from 'underscore';\r\nimport {\r\n ActivityContext,\r\n ScenarioContext,\r\n} from '@bingads-webui-react/hoc-with-signal';\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 {\r\n getUrlPrefixAndDestination,\r\n getUpdatedFullUrlOnPrefixUpdate,\r\n getUpdatedFullUrlOnTextUpdate,\r\n validateAdUrl,\r\n} from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport {\r\n useAssetLibraryImagePicker,\r\n useWebsiteSuggestion,\r\n} from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { UploadImageWrapperProps } from './type';\r\n\r\nexport const UploadImageWrapper = ({\r\n preferenceService,\r\n i18n,\r\n serverContext,\r\n aid,\r\n cid,\r\n maxLimit,\r\n elementType,\r\n isBrandKit,\r\n onSelectImages,\r\n oDataConfig,\r\n minSizeConfig,\r\n panelSubtitle,\r\n panelTitle,\r\n permissions,\r\n instrumentation,\r\n perfMarker,\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n disabledAssetSources,\r\n}: UploadImageWrapperProps) => {\r\n const ref = useRef<any>([]);\r\n const onNewImageSelected = useCallback(\r\n (images) => {\r\n setDisplayImagePicker(false);\r\n const imageData = Array.isArray(images) ? images.map(image => (Array.isArray(image) ? image[0] : image)) : images;\r\n // TODO: THIS IS SHORT SOLUTION TO HANDLE UPLOAD IMAGE FROM COMPUTER, WILL REMOVE THIS\r\n if (ref.current.length === 0) {\r\n ref.current = imageData;\r\n } else if (Array.isArray(images) && imageData.length > 0) { ref.current.push(imageData[0]); }\r\n onSelectImages(ref.current, elementType);\r\n },\r\n [setDisplayImagePicker, onSelectImages, elementType]\r\n );\r\n\r\n const activity = useContext(ActivityContext) as { signal: (message: string) => void };\r\n const scenario = useContext(ScenarioContext) as { name: string };\r\n const [privateUrl, setPrivateUrl] = useState('');\r\n\r\n const url = privateUrl || 'https://';\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 { suggestionState, suggestionPoller } = useWebsiteSuggestion({\r\n oDataConfig,\r\n adContext: {\r\n advertiserCustomerId: get(serverContext, ['CurrentCustomer', 'Id']),\r\n accountId: aid,\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 // headlines: [],\r\n // descriptions: [],\r\n });\r\n\r\n const updateUrl = (evt) => {\r\n const { value } = evt.target;\r\n const newUrl = getUpdatedFullUrlOnTextUpdate(urlPrefixValue, value);\r\n setPrivateUrl(newUrl);\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 setPrivateUrl(newUrl);\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 onImageSelected,\r\n onImagesSelected,\r\n customMediaSourceConfig,\r\n } = useAssetLibraryImagePicker({\r\n cid: get(serverContext, ['CurrentCustomer', 'Id']),\r\n aid: aid.toString(),\r\n oDataConfig,\r\n onNewImageSelected,\r\n i18n,\r\n permissions,\r\n isDisplayAds: true,\r\n isBrandKit,\r\n });\r\n const emptyFinalUrl = !url || url === `${urlPrefixValue}://`;\r\n return (\r\n <AddImageCrudAdComponent\r\n isOpen={displayImagePicker}\r\n setIsOpen={(newOpen) => {\r\n setDisplayImagePicker(newOpen);\r\n if (!newOpen) {\r\n clearImagePickerError();\r\n }\r\n }}\r\n panelSubtitle={panelSubtitle}\r\n panelTitle={panelTitle}\r\n uploadImage={uploadImage}\r\n processUploadedImage={processUploadedImage}\r\n minSize={minSizeConfig || minSize}\r\n showPromotionBanner={false}\r\n isStockImageEnabled={false}\r\n maxUploadNum={maxLimit}\r\n imageExperienceProps={{\r\n suggestion: get(suggestionState, ['suggestion']),\r\n suggestionPoller,\r\n finalUrl: emptyFinalUrl ? '' : url,\r\n finalUrlProtocol: `${urlPrefixValue}://`,\r\n onUpdateFinalUrl: updateUrl,\r\n onUpdateFinalUrlPrefix: updateUrlPrefix,\r\n isMultimediaAd: false,\r\n imageOption: constants.defaultImageOption,\r\n // todo: what to add here\r\n isDisplayAds: true,\r\n isBrandKit,\r\n }}\r\n addImageByUrl={addImageByUrl}\r\n managedViewSelectionState={selectedMediaPanelSource}\r\n updateManagedViewSelectionState={setSelectedMediaPanelSource}\r\n assetLibraryConfig={{\r\n cid: cid.toString(),\r\n aid: aid.toString(),\r\n oDataConfig,\r\n dateFormat: get(serverContext, ['CurrentUser', 'CultureDateTimeFormat', 'ShortDatePattern']),\r\n timeZone: get(serverContext, ['CurrentUser', 'TimeZone']),\r\n preferencesService: preferenceService,\r\n activityLogger: activity,\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError: e => setImagePickerError(e),\r\n enableStockMultipleSelection: true,\r\n enableWebsiteMultipleSelection: true,\r\n }}\r\n i18n={i18n}\r\n cid={cid}\r\n aid={aid}\r\n errorMessage={imagePickerError}\r\n imageType={null}\r\n customMediaSourceConfig={customMediaSourceConfig}\r\n perfMarker={perfMarker}\r\n permissions={permissions}\r\n isAADUser={get(serverContext, ['IsAADUser'])}\r\n creativeEditorProps={null}\r\n serverContext={serverContext}\r\n disabledAssetSources={disabledAssetSources}\r\n />\r\n );\r\n};\r\n\r\nexport const UploadImage = withInstrumentation(UploadImageWrapper);\r\n","/* istanbul ignore file */\r\nimport _ from 'underscore';\r\nimport { getFormattedImage } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { getCenterCroppedSettings } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { getContrastRatio } from 'a11y-contrast-color';\r\nimport {\r\n AdSize,\r\n AdProps,\r\n TemplateConfig,\r\n TemplateConfigs,\r\n DisplayAds,\r\n AssetName,\r\n State,\r\n AssetProperties,\r\n TextAssetsFormatting,\r\n TextFormattingOption,\r\n BrandKitFont,\r\n} from './types';\r\nimport { assetName as textAssetName } from './constants';\r\n\r\nexport const applyZoom = (length: number, zoomValue: string) => {\r\n const zoom = parseInt(zoomValue.replace('%', ''), 10) / 100;\r\n return Math.round(length * zoom);\r\n};\r\n\r\n// TODO: after MVP, if more sizes are supported they should be added here\r\nexport const sizeCategories = {\r\n Horizontal: ['970x250', '728x90', '320x50'],\r\n Vertical: ['160x600', '300x600'],\r\n Square: ['300x250'],\r\n};\r\n\r\nexport const aspectRatioLogoMapping = {\r\n '1.91:1': 'landscape',\r\n '1:1': 'square',\r\n '4:1': 'landscape',\r\n};\r\n// TODO: WILL ADD CONFIG HERE\r\nexport const imageAspectRatioConfig = {\r\n '1.91:1': { type: 'Image191x100', minCropSize: [152, 80] },\r\n '1:1': { type: 'Image1x1', minCropSize: [80, 80] },\r\n '4:1': { type: 'Image4x1', minCropSize: [320, 80] },\r\n};\r\nexport const getCropSetting = (image: any, aspectRatio) => {\r\n if (!aspectRatio || !image) {\r\n return {};\r\n }\r\n const cropSettings = getCenterCroppedSettings({\r\n SourceWidth: image.width,\r\n SourceHeight: image.height,\r\n SourceX: 0,\r\n SourceY: 0,\r\n }, aspectRatio);\r\n return cropSettings;\r\n};\r\n\r\nexport const mapBrandKitImagesToDisplayAd = (brandKitImage, logoConfig: { aspectRatio: string } | null = null) => {\r\n if (!brandKitImage) {\r\n return {};\r\n }\r\n const data: any = {\r\n isBrandKitImage: true,\r\n url: brandKitImage.Src,\r\n assetId: brandKitImage.Id,\r\n imageSize: {\r\n width: brandKitImage.width || brandKitImage.CropWidth,\r\n height: brandKitImage.height || brandKitImage.CropHeight,\r\n },\r\n };\r\n if (logoConfig) {\r\n data.cropSetting = [{\r\n aspectRatio: logoConfig.aspectRatio,\r\n sourceHeight: brandKitImage.CropHeight,\r\n sourceWidth: brandKitImage.CropWidth,\r\n sourceX: brandKitImage.CropX,\r\n sourceY: brandKitImage.CropY,\r\n }]\r\n }\r\n return data;\r\n};\r\nexport function getImageAssetConfigs(templateConfigs, targetSizes, assetType) {\r\n let display = false;\r\n let displayBackground= false;\r\n const apectRatioSet: Set<any> = new Set();\r\n targetSizes.forEach((size) => {\r\n const ad = templateConfigs[size];\r\n if (ad?.[assetType] && ad[assetType].display) {\r\n display = true;\r\n apectRatioSet.add(ad[assetType].aspectRatio);\r\n }\r\n if (ad?.background && ad.background.display) {\r\n displayBackground = true;\r\n }\r\n });\r\n return {\r\n display,\r\n displayBackground,\r\n apectRatioSet,\r\n };\r\n}\r\nexport const filterBrandKitLogos = (brandKit, aspectRatio) => {\r\n const logoAspectRatio = aspectRatioLogoMapping[aspectRatio];\r\n if (!logoAspectRatio || !brandKit?.logos?.length) {\r\n return [];\r\n }\r\n const brandkitLogos = brandKit.logos.filter((logo) => logo.ImageType === logoAspectRatio);\r\n return brandkitLogos;\r\n};\r\n\r\nexport const getBrandKitFilterLogos = (brandKit, templateConfigs) => {\r\n const size = Object.keys(templateConfigs)?.[0];\r\n const aspectRatio = templateConfigs[size]?.logo?.aspectRatio;\r\n const filterLogos = filterBrandKitLogos(brandKit, aspectRatio);\r\n return { filterLogos, aspectRatio };\r\n};\r\nexport const addBrandKitToRecommendedAssets = (recommendedAssets, brandKit, templateConfigs) => {\r\n if (!brandKit) {\r\n return recommendedAssets;\r\n }\r\n const { filterLogos, aspectRatio } = getBrandKitFilterLogos(brandKit, templateConfigs);\r\n\r\n const theme = {\r\n images: [],\r\n logo: [],\r\n };\r\n const assets = recommendedAssets || {\r\n themesImages: [],\r\n themesLogos: [],\r\n headlines: [],\r\n longHeadlines: [],\r\n descriptions: [],\r\n imageAssets: [],\r\n logo: [],\r\n cta: [],\r\n color: [],\r\n };\r\n assets.themesImages = assets.themes || [];\r\n assets.themesLogos = [];\r\n if (assets?.logo?.length > 0) {\r\n assets.themesLogos.push({\r\n name: _TL_('Recommended Logos'),\r\n images: [...assets.logo],\r\n });\r\n }\r\n if (brandKit?.images?.length > 0) {\r\n assets.imageAssets = [...brandKit.images.map((image) => ({ ...mapBrandKitImagesToDisplayAd(image), ...getFormattedImage({ Url: image.Src }) })), ...assets.imageAssets];\r\n theme.images = brandKit.images.map((image) => ({ ...mapBrandKitImagesToDisplayAd(image), ...getFormattedImage({ Url: image.Src }) }));\r\n }\r\n // pick one square or landscape image for logo\r\n if (filterLogos?.length > 0) {\r\n assets.logo = [...filterLogos.map((logo) => ({ ...mapBrandKitImagesToDisplayAd(logo, { aspectRatio }), ...getFormattedImage({ Url: logo.Src }) })), ...assets.logo];\r\n theme.logo = filterLogos.map((logo) => ({ ...mapBrandKitImagesToDisplayAd(logo, { aspectRatio }), ...getFormattedImage({ Url: logo.Src }) }));\r\n }\r\n if (brandKit?.palettes?.length > 0) {\r\n assets.color = brandKit.palettes.map((palette) => ({ ...palette, isBrandKitColor: true }));\r\n }\r\n\r\n assets.themesImages.push({\r\n name: _TL_('Brand Kit'),\r\n images: [...theme.images],\r\n });\r\n assets.themesLogos.push({\r\n name: _TL_('Brand Kit'),\r\n images: [...theme.logo],\r\n });\r\n return assets;\r\n};\r\n\r\nexport const getAdSizeCategory = (size: AdSize) => Object.keys(sizeCategories)\r\n .find(category => sizeCategories[category].includes(size)) || 'Other';\r\n\r\nexport const getAdConfig = (ad: AdProps, templateConfig: TemplateConfig) => ({\r\n template: {\r\n ..._.pick(templateConfig, 'templateId', 'templateName', 'version', 'style'),\r\n ...((templateConfig.shortHeadline && templateConfig.shortHeadline.display)? { shortHeadline: _.pick(ad.shortHeadline, 'text') }: {}),\r\n ...((templateConfig.longHeadline && templateConfig.longHeadline.display)? { longHeadline: _.pick(ad.longHeadline, 'text') }: {}),\r\n ...((templateConfig.description && templateConfig.description.display)? { description: _.pick(ad.description, 'text') }: {}),\r\n ...((templateConfig.cta && templateConfig.cta.display)? { cta: _.pick(ad.cta, 'text') }: {}),\r\n ...((templateConfig.image && templateConfig.image.display)? { image: _.pick(ad.image, 'url', 'cropSetting') }: {}),\r\n ...((templateConfig.logo && templateConfig.logo.display)? { logo: _.pick(ad.logo, 'url', 'cropSetting') }: {}),\r\n ...((templateConfig.color && templateConfig.color)? { color: ad.color }: {}),\r\n assetProperties: ad.assetProperties,\r\n background: ad.background,\r\n },\r\n});\r\n\r\n// get ads configs to get ad images\r\nexport const getAdConfigs = (displayAds: DisplayAds, templateConfigs: TemplateConfigs) => {\r\n const ads = Object.keys(displayAds).map((size) => {\r\n const ad = displayAds[size];\r\n const templateConfig = templateConfigs[size];\r\n\r\n return getAdConfig(ad, templateConfig);\r\n });\r\n\r\n return ads;\r\n};\r\n\r\n// get text assets formatting config for a given asset\r\nexport const getTextFormattingOptions = (\r\n displayAds: State['displayAds'],\r\n targetSizes: State['targetSizes'],\r\n prop: AssetName\r\n) => {\r\n const textFormattingColorOptions: Set<any> = new Set();\r\n const textFormattingFontOptions: Set<any> = new Set();\r\n const textFormattingWeightOptions: Set<any> = new Set();\r\n\r\n targetSizes.forEach((size) => {\r\n const ad = displayAds[size];\r\n\r\n if (!ad?.assetProperties) return;\r\n\r\n const selectedColor = ad.assetProperties.find(({ assetName, assetProperty }) =>\r\n assetName === prop && assetProperty === 'Color')?.value;\r\n if (selectedColor) {\r\n textFormattingColorOptions.add(selectedColor);\r\n }\r\n\r\n const selectedFont = ad.assetProperties.find(({ assetName, assetProperty }) =>\r\n assetName === prop && assetProperty === 'FontFamily')?.value;\r\n if (selectedFont) {\r\n textFormattingFontOptions.add(selectedFont);\r\n }\r\n\r\n const selectedWeight = ad.assetProperties.find(({ assetName, assetProperty }) =>\r\n assetName === prop && assetProperty === 'FontWeight')?.value;\r\n if (selectedWeight) {\r\n textFormattingWeightOptions.add(selectedWeight);\r\n }\r\n });\r\n\r\n return {\r\n font: {\r\n value:\r\n textFormattingFontOptions.size === 1\r\n ? Array.from(textFormattingFontOptions)[0] || ''\r\n : '',\r\n options: Array.from(textFormattingFontOptions),\r\n isMultiple: textFormattingFontOptions.size > 1,\r\n },\r\n weight: {\r\n value:\r\n textFormattingWeightOptions.size === 1\r\n ? Array.from(textFormattingWeightOptions)[0] || ''\r\n : '',\r\n options: Array.from(textFormattingWeightOptions),\r\n isMultiple: textFormattingWeightOptions.size > 1,\r\n },\r\n color: {\r\n value:\r\n textFormattingColorOptions.size === 1\r\n ? Array.from(textFormattingColorOptions)[0] || ''\r\n : '',\r\n options: Array.from(textFormattingColorOptions),\r\n isMultiple: textFormattingColorOptions.size > 1,\r\n },\r\n };\r\n};\r\n\r\nexport const getAllTextFormattingOptions = (\r\n displayAds: State['displayAds'],\r\n targetSizes: State['targetSizes']\r\n): TextAssetsFormatting => {\r\n const shortHeadlineFormattingOptions = getTextFormattingOptions(\r\n displayAds,\r\n targetSizes,\r\n 'ShortHeadline'\r\n );\r\n const longHeadlineFormattingOptions = getTextFormattingOptions(\r\n displayAds,\r\n targetSizes,\r\n 'LongHeadline'\r\n );\r\n const descriptionFormattingOptions = getTextFormattingOptions(\r\n displayAds,\r\n targetSizes,\r\n 'Description'\r\n );\r\n const callToActionFormattingOptions = getTextFormattingOptions(\r\n displayAds,\r\n targetSizes,\r\n 'CTA'\r\n );\r\n\r\n return {\r\n [textAssetName.shortHeadline]: {\r\n font: shortHeadlineFormattingOptions.font.value,\r\n color: shortHeadlineFormattingOptions.color.value,\r\n weight: shortHeadlineFormattingOptions.weight.value,\r\n },\r\n [textAssetName.longHeadline]: {\r\n font: longHeadlineFormattingOptions.font.value,\r\n color: longHeadlineFormattingOptions.color.value,\r\n weight: longHeadlineFormattingOptions.weight.value,\r\n },\r\n [textAssetName.description]: {\r\n font: descriptionFormattingOptions.font.value,\r\n color: descriptionFormattingOptions.color.value,\r\n weight: descriptionFormattingOptions.weight.value,\r\n },\r\n [textAssetName.callToAction]: {\r\n font: callToActionFormattingOptions.font.value,\r\n color: callToActionFormattingOptions.color.value,\r\n weight: callToActionFormattingOptions.weight.value,\r\n },\r\n };\r\n};\r\n\r\nexport const getTransformedAssetProperties = (formatConfig: TextFormattingOption, section: AssetName): AssetProperties[] => {\r\n const assetProperties: AssetProperties[] = [];\r\n const { font, color, weight } = formatConfig;\r\n\r\n if (font) {\r\n assetProperties.push({\r\n assetName: section,\r\n assetProperty: 'FontFamily',\r\n value: font,\r\n });\r\n }\r\n\r\n if (color) {\r\n assetProperties.push({\r\n assetName: section,\r\n assetProperty: 'Color',\r\n value: color,\r\n });\r\n }\r\n\r\n if (weight) {\r\n assetProperties.push({\r\n assetName: section,\r\n assetProperty: 'FontWeight',\r\n value: weight,\r\n });\r\n }\r\n\r\n return assetProperties;\r\n};\r\n\r\nexport const getAssetPropertiesFromBrandKitFonts = (brandKitFonts: BrandKitFont[]) : AssetProperties[] => {\r\n const assetProperties: AssetProperties[] = [];\r\n\r\n brandKitFonts.forEach(({ Typeface, Weight, TextAssetType }) => {\r\n const assetName = TextAssetType === 'CallToAction' ? 'CTA' : TextAssetType;\r\n if (Typeface) {\r\n assetProperties.push({\r\n assetName,\r\n value: Typeface,\r\n assetProperty: 'FontFamily',\r\n });\r\n }\r\n\r\n if (Weight) {\r\n assetProperties.push({\r\n assetName,\r\n value: Weight,\r\n assetProperty: 'FontWeight',\r\n });\r\n }\r\n });\r\n\r\n return assetProperties;\r\n};\r\n\r\nexport const getNewAssetProperties = (assetProperties: AssetProperties[], payload: AssetProperties[]) => {\r\n const newAssetProperties = [...assetProperties];\r\n\r\n payload.forEach((newProp) => {\r\n const index = newAssetProperties.findIndex(({ assetName, assetProperty }) =>\r\n assetName === newProp.assetName && assetProperty === newProp.assetProperty);\r\n\r\n if (index === -1) {\r\n newAssetProperties.push(newProp);\r\n } else {\r\n newAssetProperties[index] = newProp;\r\n }\r\n });\r\n\r\n return newAssetProperties;\r\n};\r\n\r\nexport const getColorContrastRatio = (foregrounds: string[], background: string) => {\r\n const hexToRgb = (hex: string): [number, number, number] | null => {\r\n // convert shorthand (ex '123') to full (ex '112233')\r\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n const hexCopy = hex.replace(shorthandRegex, (m, r, g, b) => `${r}${r}${g}${g}${b}${b}`);\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexCopy);\r\n\r\n return result\r\n ? [\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16),\r\n ]\r\n : null;\r\n };\r\n\r\n const ratios : number[] = [];\r\n foregrounds.forEach((foreground) => {\r\n const rgb1 = hexToRgb(foreground);\r\n const rgb2 = hexToRgb(background);\r\n\r\n if (rgb1 && rgb2) {\r\n // range of 0 to 21, 4.5 being the minumum for readability\r\n ratios.push(getContrastRatio(rgb1, rgb2));\r\n } else {\r\n ratios.push(0);\r\n }\r\n });\r\n\r\n if (_.some(ratios, ratio => ratio < 4.5)) {\r\n return 0;\r\n }\r\n\r\n let sum = 0;\r\n ratios.forEach((element) => {\r\n sum += element;\r\n });\r\n\r\n return sum / ratios.length;\r\n};\r\n","/* istanbul ignore file */ // not fully implemented yet\r\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\r\nimport { Divider, makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport {\r\n ScenarioContext,\r\n} from '@bingads-webui-react/hoc-with-signal';\r\nimport { getImageDetailAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { MediaEditorPanel } from '@bingads-webui-campaign-react/media-editor-panel';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { RecommendedImage } from '@bingads-webui-campaign-react/display-recommended-image';\r\nimport { CSMLAssetSource } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { AdsStudioDisplayColorPicker } from './background-asset';\r\nimport { UploadImage } from './upload-image';\r\nimport { ActionPaneProps } from './type';\r\nimport { imageAspectRatioConfig } from '../utils';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n divider: {\r\n ...shorthands.margin(tokens.spacingVerticalL, 0),\r\n },\r\n});\r\n\r\ntype payloadType = {url: string, cropSetting: {[key: string]: any}}\r\n// TODO: DATA WILL CHANGE ONCE WE HAVE DATA COMING FROM BACKEND\r\nconst ActionPane: React.FC<ActionPaneProps> = ({\r\n i18n,\r\n permissions,\r\n cid,\r\n aid,\r\n oDataConfig,\r\n isAssetsLoading,\r\n serverContext = {},\r\n preferenceService,\r\n perfMarker,\r\n imagesUrl,\r\n logosUrl,\r\n images,\r\n logos,\r\n actionPanelDisplayData,\r\n onImageChange,\r\n onLogoChange,\r\n backgroundColors,\r\n onBackgroundColorChange,\r\n recommendedAssets,\r\n showRecommendationsBanner,\r\n}) => {\r\n const scenario = useContext(ScenarioContext);\r\n const [editPanel, setEditPanel] = useState(false);\r\n const [assetType, setAssetType] = useState('');\r\n const [internalEffectSettings, setEffectSettings] = useState(null);\r\n const classes = useStyles();\r\n // const [internalCropSetting, setCropSetting] = useState(null);\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const imageAssets = recommendedAssets?.imageAssets || [];\r\n const logoAssets = recommendedAssets?.logo || [];\r\n const themesImages = recommendedAssets?.themesImages || [];\r\n const themesLogos = recommendedAssets?.themesLogos || [];\r\n const maxColorsLimit = (recommendedAssets?.color?.length || 0) + 1;\r\n const selectedColor = useMemo(() => {\r\n if (backgroundColors && backgroundColors.size === 1) {\r\n return backgroundColors.values().next().value;\r\n }\r\n return '';\r\n }, [backgroundColors]);\r\n\r\n // show brandkit and display ads selected color\r\n const paletteData = useMemo(() => {\r\n const data = Array.from(recommendedAssets?.color || []);\r\n backgroundColors.forEach((key) => {\r\n if (!data.some(color => color.HexCode === key) && key) {\r\n data.push({ HexCode: key, Name: key });\r\n }\r\n });\r\n return data;\r\n }, [recommendedAssets?.color, backgroundColors]);\r\n // TODO: CHANGE THIS TO USE DATA COMING FROM BACKEND\r\n\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid, aid, oDataConfig,\r\n }), [aid, cid, oDataConfig]);\r\n\r\n const onDeleteColor = useCallback((ev) => {\r\n const { colorid } = ev.currentTarget.dataset;\r\n let data = Array.from(recommendedAssets?.color || []);\r\n data = data.filter(color => color.Name !== colorid);\r\n if (data.length > 0) {\r\n onBackgroundColorChange((data[0])?.HexCode);\r\n }\r\n }, [onBackgroundColorChange, recommendedAssets?.color]);\r\n\r\n const handleAssetChange = useCallback((payload, type = '', keepCropSettings = false) => {\r\n if (type === 'logo' || assetType === 'logo') {\r\n onLogoChange(payload);\r\n } else {\r\n onImageChange(payload, keepCropSettings);\r\n }\r\n }, [assetType, onImageChange, onLogoChange]);\r\n\r\n\r\n const onReplacePreview = useCallback((ev) => {\r\n const { type } = ev.currentTarget.dataset;\r\n setDisplayImagePicker(true);\r\n setAssetType(type);\r\n }, [setDisplayImagePicker]);\r\n\r\n const onDismissEditPanel = useCallback(() => {\r\n setEditPanel(false);\r\n setAssetType('');\r\n }, []);\r\n\r\n\r\n const onSelectRecommendedImage = (data, type) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { fullUrl, index } = data;\r\n getImageDetailAsync(fullUrl).then(({ naturalWidth, naturalHeight }) => {\r\n let assetData = imageAssets[index];\r\n if (type === 'logo') {\r\n assetData = logoAssets[index];\r\n }\r\n const payload = {\r\n url: fullUrl,\r\n assetId: assetData.assetId,\r\n imageSize: {\r\n width: naturalWidth,\r\n height: naturalHeight,\r\n },\r\n };\r\n if (assetData.isBrandKitImage && assetData.cropSetting) {\r\n (payload as any).cropSetting = assetData.cropSetting;\r\n }\r\n handleAssetChange(payload, type);\r\n });\r\n };\r\n const onAddImages = (imageData, type) => {\r\n const image = imageData[0];\r\n const payload = {\r\n url: image?.src || image?.image?.src,\r\n imageSize: {\r\n width: image?.width || image?.image?.width,\r\n height: image?.height || image?.image?.height,\r\n },\r\n assetId: image?.id || image?.image?.id,\r\n };\r\n handleAssetChange(payload, type);\r\n };\r\n const onBackgroundChange = (color, colorObj) => {\r\n onBackgroundColorChange(colorObj.str);\r\n };\r\n\r\n const imageUrl = useMemo(() => {\r\n if (imagesUrl && imagesUrl.size === 1) {\r\n return imagesUrl.values().next().value;\r\n }\r\n return '';\r\n }, [imagesUrl]);\r\n\r\n const logoUrl = useMemo(() => {\r\n if (logosUrl && logosUrl.size === 1) {\r\n return logosUrl.values().next().value;\r\n }\r\n return '';\r\n }, [logosUrl]);\r\n\r\n const imageAspectRatio = useMemo(() => {\r\n if (actionPanelDisplayData.imageAspectRatio.size === 1) {\r\n return actionPanelDisplayData.imageAspectRatio.values().next().value;\r\n }\r\n return '';\r\n }, [actionPanelDisplayData]);\r\n\r\n const logoAspectRatio = useMemo(() => {\r\n if (actionPanelDisplayData && actionPanelDisplayData.logoAspectRatio.size === 1) {\r\n return actionPanelDisplayData.logoAspectRatio.values().next().value;\r\n }\r\n return '';\r\n }, [actionPanelDisplayData]);\r\n\r\n const baseImage = useMemo(() => {\r\n let data = images?.[0];\r\n let aspectRatio = imageAspectRatio;\r\n if (assetType === 'logo') {\r\n aspectRatio = logoAspectRatio;\r\n data = logos?.[0];\r\n }\r\n const cropSetting = data?.cropSetting?.[0];\r\n return {\r\n Src: data?.url,\r\n AltText: i18n.getString(_TL_('template image')),\r\n Height: data?.imageSize?.height,\r\n Type: imageAspectRatioConfig[aspectRatio]?.type,\r\n Width: data?.imageSize?.width,\r\n CropSetting: {\r\n SourceWidth: cropSetting?.sourceWidth ?? cropSetting?.SourceWidth ?? data?.imageSize?.width,\r\n SourceHeight: cropSetting?.sourceHeight ?? cropSetting?.SourceHeight ?? data?.imageSize?.height,\r\n SourceX: cropSetting?.sourceX ?? cropSetting?.SourceX ?? 0,\r\n SourceY: cropSetting?.sourceY ?? cropSetting?.SourceY ?? 0,\r\n },\r\n };\r\n }, [assetType, imageAspectRatio, images, logoAspectRatio, logos]);\r\n const onEditPreview = useCallback((ev) => {\r\n const { type } = ev.currentTarget.dataset;\r\n let data = [...images];\r\n if (type === 'logo') {\r\n data = [...logos];\r\n }\r\n if (data?.[0]?.imageSize?.width && data?.[0]?.imageSize?.height) {\r\n setAssetType(type);\r\n setEditPanel(true);\r\n return;\r\n }\r\n getImageDetailAsync(data?.[0]?.url).then(({ naturalWidth, naturalHeight }) => {\r\n data[0].imageSize = { width: naturalWidth, height: naturalHeight };\r\n setAssetType(type);\r\n setEditPanel(true);\r\n });\r\n }, [images, logos]);\r\n\r\n const hideEditPreviewBtnImage = !logoAspectRatio;\r\n const hideCropImage = !imageAspectRatio;\r\n const minCropSize = assetType === 'logo' ? imageAspectRatioConfig[logoAspectRatio]?.minCropSize : imageAspectRatioConfig[imageAspectRatio]?.minCropSize;\r\n const isMultpleImages = imagesUrl && imagesUrl.size > 1;\r\n const isMultpleLogos = logosUrl && logosUrl.size > 1;\r\n const onSaveEditImage = useCallback((effectSettings) => {\r\n setEffectSettings(effectSettings);\r\n // setCropSetting(cropSettings);\r\n setEditPanel(false);\r\n setAssetType('');\r\n const payload: payloadType | {} = {};\r\n let keepCropSettings = false;\r\n if (effectSettings?.effectSettings?.effectSrc) {\r\n (payload as payloadType).url = effectSettings.effectSettings?.effectSrc;\r\n keepCropSettings = true;\r\n }\r\n if (effectSettings?.cropSettings && (assetType === 'logo' || !hideCropImage)) {\r\n (payload as payloadType).cropSetting = [effectSettings.cropSettings];\r\n }\r\n if (Object.keys(payload).length > 0) {\r\n handleAssetChange(payload, '', keepCropSettings);\r\n }\r\n }, [assetType, handleAssetChange, hideCropImage, images, logos]);\r\n\r\n return (\r\n <div className=\"action-pane\">\r\n {(actionPanelDisplayData.displayLogo && showRecommendationsBanner) &&\r\n <Divider appearance=\"strong\" className={classes.divider} />}\r\n {actionPanelDisplayData.displayLogo && <RecommendedImage\r\n i18n={i18n}\r\n maxUploadNum={1}\r\n previewImage={logoUrl}\r\n hideEditPreviewBtn={hideEditPreviewBtnImage}\r\n isMultiplePreview={isMultpleLogos}\r\n recommendedImages={logoAssets || []}\r\n isLoading={isAssetsLoading}\r\n uiBlocking={false}\r\n type=\"logo\"\r\n helpTopic=\"pop_BA_DisplayTemplate_Logo\"\r\n helpLabel=\"Learn more about logos\"\r\n themes={themesLogos || []}\r\n seeAllPanelTitle={i18n.getString(_TL_('Recommended logos'))}\r\n onEditPreviewImage={onEditPreview}\r\n onReplacePreviewImage={onReplacePreview}\r\n recommendedLoadingText={i18n.getString(_TL_('Loading'))}\r\n title={i18n.getString(_TL_('Logo'))}\r\n recommendationTitle={i18n.getString(_TL_('Recommended logos'))}\r\n onSelectRecommendedImage={onSelectRecommendedImage}\r\n seeAllLinkText={_TL_('View all')}\r\n showViewAllInHeader\r\n />}\r\n {editPanel && <MediaEditorPanel\r\n isOpen={editPanel}\r\n onDismiss={onDismissEditPanel}\r\n onApply={onSaveEditImage}\r\n disableCrop={hideCropImage}\r\n isLogo={assetType === 'logo'}\r\n permissions={permissions}\r\n hasRightRail={false}\r\n effectSettings={internalEffectSettings}\r\n cropSettings={baseImage.CropSetting}\r\n // onManualCropImage={onManualCropImage}\r\n // onManualCropLogo={onManualCropLogo}\r\n minCropSize={minCropSize}\r\n baseImage={baseImage}\r\n mediaRepository={mediaRepository}\r\n adCreatorScenario={{\r\n scenarioName: `${(scenario as any).name}AdCreation`,\r\n scenarioValue: `${(scenario as any).name}AdCreation`,\r\n }}\r\n />}\r\n {displayImagePicker && (\r\n <UploadImage\r\n displayImagePicker={displayImagePicker}\r\n setDisplayImagePicker={setDisplayImagePicker}\r\n selectedMediaPanelSource={selectedMediaPanelSource}\r\n setSelectedMediaPanelSource={setSelectedMediaPanelSource}\r\n permissions={permissions}\r\n i18n={i18n}\r\n maxLimit={1}\r\n preferenceService={preferenceService}\r\n serverContext={serverContext}\r\n aid={aid}\r\n cid={cid}\r\n onSelectImages={onAddImages}\r\n oDataConfig={oDataConfig}\r\n perfMarker={perfMarker}\r\n elementType={assetType}\r\n disabledAssetSources={[CSMLAssetSource.Shutterstock]}\r\n />\r\n )}\r\n {(actionPanelDisplayData.displayImage && (showRecommendationsBanner || actionPanelDisplayData.displayLogo)) &&\r\n <Divider appearance=\"strong\" className={classes.divider} />}\r\n {actionPanelDisplayData.displayImage && <RecommendedImage\r\n i18n={i18n}\r\n maxUploadNum={1}\r\n previewImage={imageUrl}\r\n helpTopic=\"pop_BA_DisplayTemplate_Image\"\r\n helpLabel=\"Learn more about images\"\r\n recommendedImages={imageAssets || []}\r\n isLoading={isAssetsLoading}\r\n uiBlocking={false}\r\n type=\"image\"\r\n isMultiplePreview={isMultpleImages}\r\n themes={themesImages || []}\r\n seeAllPanelTitle={_TL_('Recommended images')}\r\n onEditPreviewImage={onEditPreview}\r\n onReplacePreviewImage={onReplacePreview}\r\n recommendedLoadingText={i18n.getString(_TL_('Loading'))}\r\n title={i18n.getString(_TL_('Image'))}\r\n recommendationTitle={_TL_('Recommended images')}\r\n onSelectRecommendedImage={onSelectRecommendedImage}\r\n seeAllLinkText={_TL_('View all')}\r\n showViewAllInHeader\r\n />}\r\n { actionPanelDisplayData.displayBackground && <Divider appearance=\"strong\" className={classes.divider} />}\r\n {actionPanelDisplayData.displayBackground &&\r\n <AdsStudioDisplayColorPicker\r\n i18n={i18n}\r\n maxColors={maxColorsLimit}\r\n helpTopic=\"pop_BA_DisplayAds_Color\"\r\n helpLabel=\"Learn more about background colors\"\r\n onDelete={onDeleteColor}\r\n paletteData={paletteData}\r\n isLoading={isAssetsLoading}\r\n color={selectedColor}\r\n onUpdate={onBackgroundChange}\r\n title={i18n.getString(_TL_('Background color'))}\r\n />\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nexport const ActionPaneComp = withInstrumentation(ActionPane);\r\n","import {\r\n makeStyles,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n finalUrlContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& > div': {\r\n columnGap: tokens.spacingHorizontalSNudge,\r\n },\r\n },\r\n copilotBanner: {\r\n paddingTop: tokens.spacingVerticalS,\r\n paddingBottom: tokens.spacingVerticalL,\r\n },\r\n finalUrlInput: {\r\n '> span.fui-Input': {\r\n minWidth: '100px',\r\n },\r\n },\r\n});\r\n","/* istanbul ignore file */ // not fully implemented yet\r\nimport React, { useCallback, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { IFinalUrl } from './types';\r\nimport { useStyles } from './style';\r\n\r\nexport const FinalUrl = ({\r\n i18n,\r\n finalUrl,\r\n setFinalUrl,\r\n}: IFinalUrl) => {\r\n const classes = useStyles();\r\n const [localFinalUrl, setLocalFinalUrl] = React.useState(finalUrl);\r\n const [inputErrors, setInputErrors] = React.useState([]);\r\n\r\n const activity = useContext(ActivityContext) as any;\r\n const handleSetFinalUrl = useCallback((errors, value) => {\r\n setInputErrors(errors);\r\n setLocalFinalUrl(value);\r\n }, []);\r\n\r\n const notifyFinalURLchange = useCallback(() => {\r\n if (_.isEmpty(inputErrors)) {\r\n setFinalUrl(localFinalUrl);\r\n activity.signal(`[DisplayAdsEditor] ${localFinalUrl}`);\r\n }\r\n }, [inputErrors, localFinalUrl, setFinalUrl, activity]);\r\n\r\n const handleKeyUp = useCallback((e) => {\r\n const { key } = e;\r\n if (key === 'Enter') {\r\n notifyFinalURLchange();\r\n }\r\n }, [notifyFinalURLchange]);\r\n\r\n return (\r\n <UrlInputFluent\r\n containerClassName={classes.finalUrlInput}\r\n i18n={i18n}\r\n url={localFinalUrl}\r\n onChange={handleSetFinalUrl}\r\n additionalProperties={{ onBlur: notifyFinalURLchange, onKeyUp: handleKeyUp }}\r\n />\r\n );\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport _ from 'underscore';\r\nimport {\r\n getFormattedImage,\r\n getFormattedThemeForApplying,\r\n} from '@bingads-webui-campaign-react/copilot-common';\r\nimport {\r\n State,\r\n TemplateConfig,\r\n AdPropType,\r\n AdSize,\r\n Color,\r\n AssetProperties,\r\n} from './types';\r\nimport {\r\n getNewAssetProperties,\r\n addBrandKitToRecommendedAssets,\r\n filterBrandKitLogos,\r\n mapBrandKitImagesToDisplayAd,\r\n sizeCategories,\r\n getAssetPropertiesFromBrandKitFonts,\r\n getBrandKitFilterLogos,\r\n getColorContrastRatio,\r\n} from './utils';\r\n\r\nexport enum ActionTypes {\r\n updateAssetPropertyAndColor = 'UPDATE_ASSET_PROPERTIES_AND_COLOR',\r\n updateShortHeadLine = 'UPDATE_SHORT_EADLINE',\r\n updateLongHeadLine = 'UPDATE_LONG_HEADLINE',\r\n updateDescription = 'UPDATE_DESCRIPTION',\r\n updateCallToAction = 'UPDATE_CALL_TO_ACTION',\r\n updateImage = 'UPDATE_IMAGE',\r\n updateLogo = 'UPDATE_LOGO',\r\n updateAssetLoading = 'UPDATE_ASSET_LOADING',\r\n updateBackground = 'UPDATE_BACKGROUND',\r\n updateTargetSizes = 'UPDATE_TARGET_SIZES',\r\n updateColor = 'UPDATE_COLOR',\r\n updateAdImages = 'UPDATE_AD_IMAGES',\r\n setData = 'SET_BRAND_KIT_DATA',\r\n updateFinalUrl = 'UPDATE_FINAL_URL',\r\n updateBrandKit = 'UPDATE_BRAND_KIT',\r\n updateAds = 'UPDATE_ADS',\r\n updateRecommendedAssetsWithBrandKit = 'UPDATE_RECOMMENDED_ASSETS_WITH_BRAND_KIT',\r\n updateRecommendedAssets = 'UPDATE_RECOMMENDED_ASSETS',\r\n}\r\n\r\nexport interface Action {\r\n type: ActionTypes;\r\n payload?: any;\r\n options?: any;\r\n}\r\n\r\nfunction propApplicable(sizeConfig: TemplateConfig, prop: AdPropType) {\r\n // TODO: handle all the cases\r\n if (prop === 'color') {\r\n return sizeConfig.color;\r\n }\r\n if (prop === 'assetProperties') {\r\n return true;\r\n }\r\n return sizeConfig[prop] && sizeConfig[prop].display;\r\n}\r\n\r\nfunction updateRecommendedAssetsWithBrandKitData(state: State, payload) {\r\n const { recommendedAssets, templateConfigs } = state;\r\n const newState = { ...state };\r\n newState.brandKit = payload;\r\n const assets = addBrandKitToRecommendedAssets(recommendedAssets, payload, templateConfigs);\r\n newState.recommendedAssets = assets;\r\n return newState;\r\n}\r\n\r\nfunction updateAdsWithBrandKit(state: State, payload) {\r\n const { targetSizes, templateConfigs } = state;\r\n const newState = { ...state };\r\n newState.brandKit = payload;\r\n\r\n const currentColors = Object.values(newState?.displayAds).map(displayAd => displayAd.color).flat();\r\n const currentColor = [...new Set(currentColors.map(o => JSON.stringify(o)))].map(s => JSON.parse(s))\r\n\r\n let highestColor: string;\r\n\r\n if (payload?.palettes?.length > 0) {\r\n let colorRatio = 0;\r\n const textColors : string[] = [];\r\n const textColorStrings = ['ShortHeadlinse', 'LongHeadline', 'Description'];\r\n currentColor?.forEach(colorObject => {\r\n if (textColorStrings?.findIndex(name => name === colorObject.elementName) !== -1) {\r\n textColors.push(colorObject.color);\r\n }\r\n })\r\n\r\n if (textColors.length > 0) {\r\n for (let i = 0; i < payload?.palettes?.length; i += 1) {\r\n const color = payload.palettes[i].HexCode;\r\n const ratio = getColorContrastRatio(textColors, color);\r\n\r\n if (ratio >= 4.5 && ratio > colorRatio) {\r\n highestColor = color;\r\n colorRatio = ratio;\r\n }\r\n }\r\n }\r\n }\r\n\r\n targetSizes.forEach((size) => {\r\n const aspectRatioLogo = templateConfigs[size]?.logo?.aspectRatio ?? '';\r\n\r\n if (templateConfigs[size] && propApplicable(templateConfigs[size], 'image')) {\r\n if (payload?.images?.length > 0) {\r\n const displayImage = mapBrandKitImagesToDisplayAd(payload.images[0]);\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n image: displayImage,\r\n },\r\n };\r\n }\r\n }\r\n\r\n if (templateConfigs[size] && propApplicable(templateConfigs[size], 'logo')) {\r\n const filterLogos = filterBrandKitLogos(payload, aspectRatioLogo);\r\n if (filterLogos?.length > 0) {\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n logo: mapBrandKitImagesToDisplayAd(filterLogos[0], { aspectRatio: aspectRatioLogo }),\r\n },\r\n };\r\n }\r\n }\r\n\r\n if (templateConfigs[size] && propApplicable(templateConfigs[size], 'color') && currentColor) {\r\n const backgroundIndex = currentColor?.findIndex(color => color.elementName === 'Background') ?? -1;\r\n\r\n if (payload?.palettes?.length > 0 && backgroundIndex !== -1) {\r\n const newColors = [...currentColor];\r\n newColors[backgroundIndex] = {\r\n ...currentColor[backgroundIndex],\r\n color: highestColor,\r\n };\r\n\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n color: newColors,\r\n },\r\n };\r\n }\r\n }\r\n\r\n if (templateConfigs[size] && propApplicable(templateConfigs[size], 'assetProperties')) {\r\n const updatedAssetProperties = getAssetPropertiesFromBrandKitFonts(payload.fonts);\r\n const newAssetProperties = getNewAssetProperties(\r\n newState.displayAds[size]?.assetProperties || [],\r\n updatedAssetProperties\r\n );\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n assetProperties: newAssetProperties,\r\n },\r\n };\r\n }\r\n });\r\n\r\n if (state.recommendedAssets || !state.finalUrl) {\r\n const assets = addBrandKitToRecommendedAssets(state.recommendedAssets, payload, state.templateConfigs);\r\n newState.recommendedAssets = assets;\r\n }\r\n\r\n return newState;\r\n}\r\n\r\nfunction updateAdProp(state: State, payload, prop: AdPropType, options?: any) {\r\n const { targetSizes, templateConfigs } = state;\r\n const newState = { ...state };\r\n targetSizes.forEach((size) => {\r\n if (templateConfigs[size] && propApplicable(templateConfigs[size], prop)) {\r\n if (prop === 'image' || prop === 'logo') {\r\n const { cropSetting } = payload;\r\n const { keepCropSettings = false } = options || {};\r\n const newPayload = {\r\n ...newState.displayAds[size]?.[prop],\r\n ...payload,\r\n cropSetting: keepCropSettings\r\n ? newState.displayAds[size]?.[prop]?.cropSetting\r\n : cropSetting,\r\n };\r\n if (!keepCropSettings && !cropSetting) delete newPayload.cropSetting;\r\n // REMOVE CROP SETTING IF NOT IN PAYLOAD\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n [prop]: newPayload,\r\n },\r\n };\r\n } else if (prop === 'background') {\r\n const currentColor = newState.displayAds[size]?.color;\r\n if (currentColor) {\r\n const index = currentColor.findIndex(color => color.elementName === 'Background');\r\n if (index !== -1) {\r\n const newColors = [...currentColor];\r\n newColors[index] = {\r\n ...currentColor[index],\r\n color: payload,\r\n };\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n color: newColors,\r\n },\r\n };\r\n }\r\n }\r\n } else if (\r\n prop === 'cta' ||\r\n prop === 'shortHeadline' ||\r\n prop === 'longHeadline' ||\r\n prop === 'description'\r\n ) {\r\n const maxLength = templateConfigs[size][prop] ? templateConfigs[size][prop].maxLengthInChar : null;\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n [prop]: {\r\n ...(newState.displayAds[size]?.[prop] || {}),\r\n text: maxLength ? payload.text.slice(0, maxLength) : payload.text,\r\n },\r\n },\r\n };\r\n } else if (prop === 'assetProperties') {\r\n const newAssetProperties = getNewAssetProperties(\r\n newState.displayAds[size]?.assetProperties || [],\r\n payload\r\n );\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n assetProperties: newAssetProperties,\r\n },\r\n };\r\n } else {\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n [prop]: payload,\r\n },\r\n };\r\n }\r\n }\r\n });\r\n\r\n return newState;\r\n}\r\n\r\nfunction updateColors(state: State, payload: Color) {\r\n const newState = { ...state };\r\n const { targetSizes, templateConfigs } = state;\r\n\r\n targetSizes.forEach((size) => {\r\n if (templateConfigs[size] && templateConfigs[size].color) {\r\n const currentColors = newState.displayAds[size]?.color || [];\r\n const updatedColors = [...currentColors];\r\n const index = currentColors.findIndex(color => color.elementName === payload.elementName);\r\n if (index === -1) {\r\n updatedColors.push({\r\n ...payload,\r\n editable: true,\r\n suffix: '',\r\n } as Color);\r\n } else {\r\n updatedColors[index] = {\r\n ...updatedColors[index],\r\n ...payload,\r\n };\r\n }\r\n newState.displayAds = {\r\n ...newState.displayAds,\r\n [size]: {\r\n ...newState.displayAds[size],\r\n color: updatedColors,\r\n },\r\n };\r\n }\r\n });\r\n\r\n return newState;\r\n}\r\n\r\nfunction updateAssetPropertiesAndColor(\r\n state: State,\r\n payload: {\r\n assetProperties?: AssetProperties[];\r\n color?: Color;\r\n }\r\n) {\r\n let newState = { ...state };\r\n if (payload.assetProperties) {\r\n newState = updateAdProp(newState, payload.assetProperties, 'assetProperties');\r\n }\r\n if (payload.color) {\r\n newState = updateColors(newState, payload.color);\r\n }\r\n return newState;\r\n}\r\n\r\n\r\nfunction updateWithRecommendedAssets(state: State, assetsResponse, prop, options) {\r\n if (!assetsResponse || _.isEmpty(Object.keys(assetsResponse))) {\r\n return {\r\n ...state,\r\n isAssetsLoading: false,\r\n };\r\n }\r\n const {\r\n RecommendedAssets: {\r\n Themes,\r\n ShortHeadlines = [],\r\n LongHeadlines = [],\r\n Descriptions = [],\r\n ImageAssets = [],\r\n },\r\n Logo,\r\n Cta,\r\n } = assetsResponse;\r\n let newState = {\r\n ...state,\r\n isAssetsLoading: false,\r\n };\r\n let assets = {\r\n themes: _.map(Themes, getFormattedThemeForApplying),\r\n headlines: ShortHeadlines,\r\n longHeadlines: LongHeadlines,\r\n descriptions: Descriptions,\r\n imageAssets: _.map(ImageAssets, getFormattedImage),\r\n logo: _.map(Logo ? [{ Url: Logo }] : [], getFormattedImage),\r\n cta: Cta,\r\n };\r\n if (state.brandKit) {\r\n // check brandkit data is available or not.\r\n assets = addBrandKitToRecommendedAssets(assets, state.brandKit, state.templateConfigs);\r\n }\r\n newState[prop] = assets;\r\n const { hasUpdateTemplate } = options || {};\r\n // NOTE: We are also updating logo/image assets field with recommended assets only on first load\r\n if (hasUpdateTemplate && !state.brandKit?.images?.length) {\r\n const imageUrl = assets.imageAssets && assets.imageAssets.length > 0 ? assets.imageAssets[0].fullUrl : null;\r\n if (imageUrl) {\r\n newState = updateAdProp(newState, { url: imageUrl, imageSize: {} }, 'image');\r\n }\r\n }\r\n\r\n const { filterLogos } = getBrandKitFilterLogos(state.brandKit, state.templateConfigs);\r\n const logoUrl = hasUpdateTemplate && !filterLogos?.length && assets.logo && assets.logo.length > 0 ? assets.logo[0].fullUrl : null;\r\n if (logoUrl) {\r\n newState = updateAdProp(newState, { url: logoUrl, imageSize: {} }, 'logo');\r\n }\r\n // NOTE: We are also updating text assets field with recommended assets\r\n const recommendedHeadlineText = hasUpdateTemplate && assets.headlines && assets.headlines.length > 0 ? assets.headlines[0].Text : null;\r\n if (recommendedHeadlineText) {\r\n newState = updateAdProp(newState, { text: recommendedHeadlineText }, 'shortHeadline');\r\n }\r\n\r\n const recommendedLongHeadlineText = hasUpdateTemplate && assets.longHeadlines && assets.longHeadlines.length > 0 ? assets.longHeadlines[0].Text : null;\r\n if (recommendedLongHeadlineText) {\r\n newState = updateAdProp(newState, { text: recommendedLongHeadlineText }, 'longHeadline');\r\n }\r\n\r\n const recommendedDescriptionText = hasUpdateTemplate && assets.descriptions && assets.descriptions.length > 0 ? assets.descriptions[0].Text : null;\r\n if (recommendedDescriptionText) {\r\n newState = updateAdProp(newState, { text: recommendedDescriptionText }, 'description');\r\n }\r\n\r\n const recommendedCtaText = hasUpdateTemplate && assets.cta && assets.cta.length > 0 ? assets.cta[0].Text : null;\r\n if (recommendedCtaText) {\r\n newState = updateAdProp(newState, { text: recommendedCtaText }, 'cta');\r\n }\r\n\r\n return newState;\r\n}\r\n\r\nfunction filterSizes(state: State, filter: string | AdSize) {\r\n const newState = { ...state };\r\n if (filter === 'All sizes') {\r\n newState.targetSizes = [...state.adSizes];\r\n } else if (filter in sizeCategories) {\r\n newState.targetSizes = sizeCategories[filter];\r\n } else if (state.adSizes.includes(filter as AdSize)) {\r\n newState.targetSizes = [filter as AdSize];\r\n }\r\n newState.filter = filter;\r\n return newState;\r\n}\r\n\r\nexport function reducer(state: State, action) {\r\n const { type, payload, options } = action;\r\n\r\n switch (type) {\r\n case ActionTypes.updateTargetSizes:\r\n return filterSizes(state, payload);\r\n case ActionTypes.updateAssetPropertyAndColor:\r\n return updateAssetPropertiesAndColor(state, payload);\r\n case ActionTypes.updateFinalUrl:\r\n return {\r\n ...state,\r\n finalUrl: payload,\r\n };\r\n case ActionTypes.updateRecommendedAssets:\r\n return updateWithRecommendedAssets(state, payload, 'recommendedAssets', options);\r\n case ActionTypes.updateShortHeadLine:\r\n return updateAdProp(state, payload, 'shortHeadline');\r\n case ActionTypes.updateLongHeadLine:\r\n return updateAdProp(state, payload, 'longHeadline');\r\n case ActionTypes.updateDescription:\r\n return updateAdProp(state, payload, 'description');\r\n case ActionTypes.updateCallToAction:\r\n return updateAdProp(state, payload, 'cta');\r\n case ActionTypes.updateImage:\r\n return updateAdProp(state, payload, 'image', options);\r\n case ActionTypes.updateLogo:\r\n return updateAdProp(state, payload, 'logo');\r\n case ActionTypes.updateBackground:\r\n return updateAdProp(state, payload, 'background');\r\n case ActionTypes.updateAssetLoading:\r\n return {\r\n ...state,\r\n isAssetsLoading: payload,\r\n };\r\n case ActionTypes.updateRecommendedAssetsWithBrandKit:\r\n return updateRecommendedAssetsWithBrandKitData(state, payload);\r\n case ActionTypes.updateColor:\r\n return updateColors(state, payload);\r\n case ActionTypes.updateAds:\r\n return {\r\n ...state,\r\n adImages: {\r\n ...state.adImages,\r\n ...payload.adImages,\r\n },\r\n displayAds: {\r\n ...state.displayAds,\r\n ...payload.displayAds,\r\n },\r\n };\r\n case ActionTypes.updateBrandKit:\r\n return updateAdsWithBrandKit(state, payload);\r\n case ActionTypes.updateAdImages:\r\n return {\r\n ...state,\r\n adImages: {\r\n ...state.adImages,\r\n ...payload,\r\n },\r\n };\r\n case ActionTypes.setData:\r\n return {\r\n ...state,\r\n ...payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","/* istanbul ignore file */ // not fully implemented yet\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useReducer,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { reducer, Action } from './reducer';\r\nimport { State, AdSize, DisplayAds, TemplateConfig, AdImages } from './types';\r\n\r\ninterface Context {\r\n dispatch: React.Dispatch<Action>;\r\n state: State;\r\n}\r\n\r\nexport const DisplayAdsContext = createContext<Context>({} as Context);\r\nexport const useDisplayAdsContext = () => useContext(DisplayAdsContext);\r\n\r\nconst getImageData = (image) => {\r\n if (!image) {\r\n return image;\r\n }\r\n const newImage = { ...image };\r\n if (image.cropSetting && !Array.isArray(image.cropSetting)) {\r\n const value = newImage.cropSetting;\r\n newImage.cropSetting = value[0] ? [value[0]] : [value];\r\n }\r\n return newImage;\r\n};\r\n\r\n// when we save metadata for display ad image, color is serialized as an object.\r\n// convert to array if needed.\r\nconst getColorArray = (color) => {\r\n if (!color) {\r\n return [];\r\n }\r\n\r\n const returnArray: any[] = [];\r\n let colorArray;\r\n if (Array.isArray(color)) {\r\n colorArray = color;\r\n }\r\n\r\n colorArray = Object.values(color);\r\n\r\n colorArray.forEach((colorValue) => {\r\n returnArray.push({ ...colorValue });\r\n });\r\n\r\n return returnArray;\r\n};\r\n\r\nconst getSerializedObjectAsArray = (object: any[] | Record<string, any>) => {\r\n if (!object) return [];\r\n if (Array.isArray(object)) return object;\r\n return Object.values(object);\r\n};\r\n\r\nfunction initialState({ templateData, finalUrl }) {\r\n const { displayAdsTemplateDetails } = templateData;\r\n const filter = 'All sizes';\r\n const isAssetsLoading = false;\r\n const targetSizes: AdSize[] =[];\r\n const adSizes: AdSize[] = [];\r\n const displayAds: DisplayAds = {};\r\n const defaultAssets: DisplayAds = {};\r\n const templateConfigs: { [size in AdSize]?: TemplateConfig } = {};\r\n const adImages: AdImages = {};\r\n const templateId2Size: { [templateId: string]: AdSize } = {};\r\n const recommendedAssets = null;\r\n displayAdsTemplateDetails.forEach((templateSizeDetails) => {\r\n const { templateConfig, displayAd } = templateSizeDetails;\r\n const sizeKey : AdSize = `${templateConfig.width}x${templateConfig.height}` as AdSize;\r\n targetSizes.push(sizeKey);\r\n adSizes.push(sizeKey);\r\n displayAds[sizeKey] = {\r\n shortHeadline: { ...displayAd.template.shortHeadline },\r\n longHeadline: { ...displayAd.template.longHeadline },\r\n description: { ...displayAd.template.description },\r\n cta: { ...displayAd.template.cta },\r\n image: templateConfig?.image?.display ? getImageData(displayAd.template.image): {},\r\n logo: templateConfig?.logo?.display ? getImageData(displayAd.template.logo): {},\r\n background: templateConfig?.image?.display ? { ...displayAd.template.background }: {},\r\n color: getColorArray(displayAd.template.color),\r\n assetProperties: getSerializedObjectAsArray(displayAd.template.assetProperties),\r\n };\r\n defaultAssets[sizeKey] = {\r\n shortHeadline: { ...displayAd.template.shortHeadline },\r\n longHeadline: { ...displayAd.template.longHeadline },\r\n description: { ...displayAd.template.description },\r\n cta: { ...displayAd.template.cta },\r\n image: getImageData(displayAd.template.image),\r\n logo: getImageData(displayAd.template.logo),\r\n background: { ...displayAd.template.background },\r\n color: getColorArray(displayAd.template.color),\r\n assetProperties: getSerializedObjectAsArray(displayAd.template.assetProperties),\r\n };\r\n templateConfigs[sizeKey] = templateConfig;\r\n adImages[sizeKey] = {\r\n url: displayAd.url,\r\n width: templateConfig.width,\r\n height: templateConfig.height,\r\n };\r\n templateId2Size[templateConfig.templateId] = sizeKey;\r\n });\r\n\r\n return {\r\n finalUrl,\r\n targetSizes,\r\n adSizes,\r\n displayAds,\r\n defaultAssets,\r\n templateConfigs,\r\n adImages,\r\n recommendedAssets,\r\n filter,\r\n isAssetsLoading,\r\n templateId2Size,\r\n };\r\n}\r\n\r\nexport const DisplayAdsProvider = ({\r\n children,\r\n templateData,\r\n finalUrl,\r\n}) => {\r\n const [state, dispatch] = useReducer(reducer, { templateData, finalUrl }, initialState);\r\n const context = {\r\n state,\r\n dispatch,\r\n };\r\n return (\r\n <DisplayAdsContext.Provider value={context}>\r\n {children}\r\n </DisplayAdsContext.Provider>\r\n );\r\n};\r\n\r\nDisplayAdsProvider.displayName = 'DisplayAdsProvider';\r\nDisplayAdsProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n templateData: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string,\r\n};\r\n\r\nDisplayAdsProvider.defaultProps = {\r\n finalUrl: '',\r\n};\r\n","/* istanbul ignore file */ // not fully implemented yet\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport { Label } from '@fluentui/react-components';\r\nimport {\r\n BannerServiceProvider,\r\n CopilotRecommendationBanner,\r\n CopilotRepositoryProvider,\r\n CopilotThemesRecommendationDialog,\r\n} from '@bingads-webui/inline-copilot';\r\nimport { useRecommendations } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport PropTypes from 'prop-types';\r\nimport { useStyles } from './style';\r\nimport { FinalUrl } from './final-url';\r\nimport { DisplayAdsContext } from '../../context';\r\nimport { ActionTypes } from '../../reducer';\r\n\r\nexport const RecommendationsBanner = (props) => {\r\n const {\r\n i18n,\r\n serverContext,\r\n perfMarker,\r\n finalUrl,\r\n setFinalUrl,\r\n handleOnFetchSucceeded,\r\n aid,\r\n cid,\r\n permissions,\r\n instrumentation,\r\n } = props;\r\n const classes = useStyles();\r\n const [showCopilotDialog, setShowCopilotDialog] = useState(false);\r\n const [lastFetchedUrl, setLastFetchedUrl] = useState('');\r\n const {\r\n dispatch,\r\n } = useContext(DisplayAdsContext);\r\n const {\r\n CurrentLocale: locale,\r\n } = serverContext;\r\n\r\n const {\r\n handleCopilotBannerFetchSucceeded,\r\n } = useRecommendations({\r\n cid,\r\n aid,\r\n campaignId: -1,\r\n permissions,\r\n finalUrl,\r\n isDisplayPlus: false,\r\n enableCopilotRecommendations: true,\r\n instrumentation,\r\n isMMA: false,\r\n isSignup: false,\r\n skipBusinessNameRecommendation: true,\r\n });\r\n\r\n const onFetch = useCallback((url) => {\r\n if (lastFetchedUrl !== url) {\r\n dispatch({ type: ActionTypes.updateAssetLoading, payload: true });\r\n }\r\n }, [dispatch, lastFetchedUrl]);\r\n\r\n const onFetchFailed = useCallback(() => {\r\n dispatch({ type: ActionTypes.updateAssetLoading, payload: false });\r\n }, [dispatch]);\r\n\r\n const onFetchSucceeded = useCallback((url, assetsResponse, isRefinedRecommendation = false) => {\r\n const urlChanged = lastFetchedUrl !== url;\r\n const shouldRefreshRecommendations = (urlChanged || isRefinedRecommendation) && !!assetsResponse;\r\n\r\n if (shouldRefreshRecommendations) {\r\n handleOnFetchSucceeded(assetsResponse);\r\n handleCopilotBannerFetchSucceeded(url, assetsResponse);\r\n setLastFetchedUrl(url);\r\n return;\r\n }\r\n\r\n dispatch({ type: ActionTypes.updateAssetLoading, payload: false });\r\n }, [lastFetchedUrl, dispatch, handleOnFetchSucceeded, handleCopilotBannerFetchSucceeded]);\r\n\r\n const handleCopilotDialogClose = useCallback(() => setShowCopilotDialog(false), []);\r\n\r\n const handleFetchAssetsSucceeded = useCallback((url, assetsRecommendationData) => {\r\n onFetchSucceeded(url, assetsRecommendationData, true);\r\n handleCopilotBannerFetchSucceeded(url, assetsRecommendationData);\r\n }, [onFetchSucceeded, handleCopilotBannerFetchSucceeded]);\r\n\r\n const handleRefresh = useCallback(() => setShowCopilotDialog(true), []);\r\n const copyOverrides = {\r\n description: i18n.getString(_TL_('Choose the themes you\\'d like to add to your display template.')),\r\n };\r\n\r\n return (\r\n <CopilotRepositoryProvider\r\n campaignId={-1}\r\n recommendationType=\"Display\"\r\n finalUrl={finalUrl}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker}\r\n locale={locale}\r\n enableLogoAndCTA\r\n >\r\n <BannerServiceProvider>\r\n <div className={classes.finalUrlContainer}>\r\n <Label htmlFor=\"final-url\">{i18n.getString(_TL_('Generate assets from your URL'))}</Label>\r\n <FinalUrl\r\n i18n={i18n}\r\n finalUrl={finalUrl}\r\n setFinalUrl={setFinalUrl}\r\n />\r\n </div>\r\n <CopilotRecommendationBanner\r\n className={classes.copilotBanner}\r\n narrow\r\n isToastEnabled\r\n onRefresh={handleRefresh}\r\n onReset={() => {}}\r\n toastOffset={{ horizontal: 260, vertical: 120 }}\r\n onFetch={onFetch}\r\n shouldFetchRecommendations\r\n onFetchFailed={onFetchFailed}\r\n onFetchSucceeded={onFetchSucceeded}\r\n copyOverrides={copyOverrides}\r\n />\r\n {showCopilotDialog &&\r\n <CopilotThemesRecommendationDialog\r\n open\r\n onClosed={handleCopilotDialogClose}\r\n onFetchAssetsSucceeded={handleFetchAssetsSucceeded}\r\n onApply={() => {}}\r\n />\r\n }\r\n </BannerServiceProvider>\r\n </CopilotRepositoryProvider>\r\n );\r\n};\r\n\r\nRecommendationsBanner.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentLocale: PropTypes.string,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string,\r\n setFinalUrl: PropTypes.func.isRequired,\r\n handleOnFetchSucceeded: PropTypes.func.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nRecommendationsBanner.defaultProps = {\r\n finalUrl: '',\r\n};\r\n","/* istanbul ignore file */ // not fully implemented yet\r\nimport React, { useState, useCallback, useMemo } from 'react';\r\nimport {\r\n Divider,\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Color,\r\n State,\r\n AssetName,\r\n AdjustViewProps,\r\n TextFormattingOption,\r\n} from './types';\r\nimport {\r\n CallToAction,\r\n TextFormattingButton,\r\n TextFormattingDialogue,\r\n TextAssetCollectionWithRecommendations,\r\n} from './components';\r\nimport { assetName } from './constants';\r\nimport { ActionPaneComp } from './action-pane';\r\nimport {\r\n getImageAssetConfigs,\r\n getAllTextFormattingOptions,\r\n getTransformedAssetProperties,\r\n} from './utils';\r\nimport { RecommendationsBanner } from '../src/components/recommendations-banner/index';\r\n\r\nconst useStyles = makeStyles({\r\n textCollection: {},\r\n textDivider: {\r\n ...shorthands.margin(tokens.spacingVerticalL, 0),\r\n },\r\n container: {\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n maxHeight: '100%',\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n ...shorthands.overflow('auto', 'hidden'),\r\n display: 'flex',\r\n ...shorthands.padding(\r\n tokens.spacingVerticalSNudge,\r\n tokens.spacingHorizontalSNudge\r\n ),\r\n boxShadow: tokens.shadow4,\r\n\r\n '& > div.adjust-content': {\r\n width: '320px',\r\n ...shorthands.overflow('hidden', 'auto'),\r\n ...shorthands.padding(\r\n tokens.spacingVerticalXXL,\r\n tokens.spacingHorizontalL\r\n ),\r\n },\r\n },\r\n});\r\n\r\nconst getTextAssets = (\r\n displayAds: State['displayAds'],\r\n targetSizes: State['targetSizes'],\r\n configs: State['templateConfigs'],\r\n prop: 'shortHeadline' | 'longHeadline' | 'description' | 'cta'\r\n) => {\r\n const textAssets: Set<any> = new Set();\r\n let minLength = Number.MAX_SAFE_INTEGER;\r\n let maxLength = 0;\r\n targetSizes.forEach((size) => {\r\n const ad = displayAds[size];\r\n const config = configs[size];\r\n if (config?.[prop]?.display) {\r\n textAssets.add(ad?.[prop]?.text);\r\n if (config[prop].minLengthInChar < minLength) {\r\n minLength = config[prop].minLengthInChar;\r\n }\r\n if (config[prop].maxLengthInChar > maxLength) {\r\n maxLength = config[prop].maxLengthInChar;\r\n }\r\n }\r\n });\r\n\r\n const isMultipleOptions = textAssets.size > 1;\r\n const text = Array.from(textAssets)[0];\r\n\r\n return {\r\n minLength,\r\n maxLength,\r\n isMultipleOptions,\r\n display: textAssets.size > 0,\r\n text: text ? text.slice(0, maxLength) : '',\r\n placeholder: isMultipleOptions\r\n ? _TL_('Multiple options, editing will override for all texts')\r\n : '',\r\n };\r\n};\r\n\r\nexport const AdjustView = ({\r\n onBackgroundColorChange,\r\n onImageChange,\r\n targetSizes,\r\n onLogoChange,\r\n onCtaChange,\r\n onChangeTextAssets,\r\n onAssetPropertiesWithColorChange,\r\n recommendedAssets,\r\n isAssetsLoading,\r\n showRecommendationsBanner,\r\n displayAds,\r\n templateConfigs,\r\n serverContext,\r\n preferenceService,\r\n perfMarker,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n i18n,\r\n permissions,\r\n onFinalUrlChange,\r\n onRecommendedAssetsChange,\r\n instrumentation,\r\n finalUrl,\r\n}: AdjustViewProps) => {\r\n const classes = useStyles();\r\n const [\r\n activeTextFormattingSection,\r\n setActiveTextFormattingSection,\r\n ] = useState<AssetName | null>();\r\n\r\n const handleOnFetchSucceeded = useCallback(\r\n (result) => {\r\n onRecommendedAssetsChange(result);\r\n },\r\n [onRecommendedAssetsChange]\r\n );\r\n\r\n const handleSetFinalUrl = useCallback((copilotUrl) => {\r\n onFinalUrlChange(copilotUrl);\r\n }, [onFinalUrlChange]);\r\n\r\n const actionPanelDisplayData = useMemo(() => {\r\n const {\r\n display: displayImage,\r\n apectRatioSet: imageAspectRatio,\r\n displayBackground,\r\n } = getImageAssetConfigs(templateConfigs, targetSizes, 'image');\r\n const {\r\n display: displayLogo,\r\n apectRatioSet: logoAspectRatio,\r\n } = getImageAssetConfigs(templateConfigs, targetSizes, 'logo');\r\n return {\r\n displayImage,\r\n displayLogo,\r\n displayBackground,\r\n imageAspectRatio,\r\n logoAspectRatio,\r\n };\r\n }, [targetSizes, templateConfigs]);\r\n\r\n const actionPanelPreviewData = useMemo(() => {\r\n const imageUrls: Set<any> = new Set();\r\n const logoUrls: Set<any> = new Set();\r\n const colorsMap: Map<string, any> = new Map();\r\n const imageData: any = [];\r\n const logoData: any = [];\r\n targetSizes.forEach((size) => {\r\n const ad = displayAds[size];\r\n if (ad && ad.image && ad.image.url) {\r\n imageUrls.add(ad.image.url);\r\n imageData.push(ad.image);\r\n }\r\n if (ad && ad.logo && ad.logo.url) {\r\n logoUrls.add(ad.logo.url);\r\n logoData.push(ad.logo);\r\n }\r\n ad?.color?.forEach(({ elementName, editable, color: colorCode }) => {\r\n if (editable) {\r\n if (colorsMap.has(elementName)) {\r\n colorsMap.get(elementName).add(colorCode);\r\n } else {\r\n colorsMap.set(elementName, new Set([colorCode]));\r\n }\r\n }\r\n });\r\n });\r\n return {\r\n imageUrls,\r\n logoUrls,\r\n colorsMap,\r\n imageData,\r\n logoData,\r\n };\r\n }, [displayAds, targetSizes]);\r\n const shortHeadline = useMemo(\r\n () =>\r\n getTextAssets(displayAds, targetSizes, templateConfigs, 'shortHeadline'),\r\n [displayAds, targetSizes, templateConfigs]\r\n );\r\n\r\n const longHeadline = useMemo(\r\n () =>\r\n getTextAssets(displayAds, targetSizes, templateConfigs, 'longHeadline'),\r\n [displayAds, targetSizes, templateConfigs]\r\n );\r\n\r\n const description = useMemo(\r\n () =>\r\n getTextAssets(displayAds, targetSizes, templateConfigs, 'description'),\r\n [displayAds, targetSizes, templateConfigs]\r\n );\r\n\r\n const callToAction = useMemo(\r\n () => getTextAssets(displayAds, targetSizes, templateConfigs, 'cta'),\r\n [displayAds, targetSizes, templateConfigs]\r\n );\r\n\r\n const textFormattingOptions = useMemo(\r\n () => getAllTextFormattingOptions(displayAds, targetSizes),\r\n [displayAds, targetSizes]\r\n );\r\n\r\n const handleChangeSectionAssetFormatting = (\r\n newFormatting: TextFormattingOption,\r\n section: AssetName\r\n ) => {\r\n const updatedAssetProperties = getTransformedAssetProperties(\r\n newFormatting,\r\n section\r\n );\r\n onAssetPropertiesWithColorChange({\r\n assetProperties: updatedAssetProperties,\r\n color: {\r\n color: newFormatting.color,\r\n elementName: section,\r\n } as Color,\r\n });\r\n };\r\n\r\n return (\r\n <aside className={mergeClasses('adjust', classes.container)}>\r\n {activeTextFormattingSection && (\r\n <div className=\"adjust-content\" >\r\n <TextFormattingDialogue\r\n i18n={i18n}\r\n onToggleBack={() => setActiveTextFormattingSection(null)}\r\n textFormatOptions={textFormattingOptions[activeTextFormattingSection]}\r\n hideColorFormatting={activeTextFormattingSection === assetName.callToAction}\r\n onFormatText={(newFormatting: TextFormattingOption) =>\r\n handleChangeSectionAssetFormatting(\r\n newFormatting,\r\n activeTextFormattingSection\r\n )\r\n }\r\n />\r\n </div>\r\n )}\r\n <div\r\n className=\"adjust-content\"\r\n style={{\r\n display: activeTextFormattingSection ? 'none' : 'block',\r\n }}\r\n >\r\n {showRecommendationsBanner &&\r\n <RecommendationsBanner\r\n i18n={i18n}\r\n aid={aid}\r\n cid={cid}\r\n instrumentation={instrumentation}\r\n permissions={permissions}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker}\r\n finalUrl={finalUrl}\r\n setFinalUrl={handleSetFinalUrl}\r\n handleOnFetchSucceeded={handleOnFetchSucceeded}\r\n />\r\n }\r\n <ActionPaneComp\r\n onImageChange={onImageChange}\r\n onLogoChange={onLogoChange}\r\n finalUrl={finalUrl}\r\n isAssetsLoading={isAssetsLoading}\r\n showRecommendationsBanner={showRecommendationsBanner}\r\n recommendedAssets={recommendedAssets}\r\n onBackgroundColorChange={onBackgroundColorChange}\r\n serverContext={serverContext}\r\n preferenceService={preferenceService}\r\n perfMarker={perfMarker}\r\n imagesUrl={actionPanelPreviewData.imageUrls}\r\n logosUrl={actionPanelPreviewData.logoUrls}\r\n aid={aid}\r\n images={actionPanelPreviewData.imageData}\r\n logos={actionPanelPreviewData.logoData}\r\n actionPanelDisplayData={actionPanelDisplayData}\r\n cid={cid}\r\n oDataConfig={oDataConfig}\r\n i18n={i18n}\r\n permissions={permissions}\r\n backgroundColors={actionPanelPreviewData.colorsMap.get('Background')}\r\n />\r\n <div\r\n className={mergeClasses(\r\n 'adjust-text-collection',\r\n classes.textCollection\r\n )}\r\n >\r\n <TextAssetCollectionWithRecommendations\r\n url={finalUrl}\r\n disableCopilot={!finalUrl && !showRecommendationsBanner}\r\n i18n={i18n}\r\n campaignId={cid}\r\n serverContext={serverContext}\r\n onChangeTexts={onChangeTextAssets}\r\n onChangeTextAssetFormattingSection={setActiveTextFormattingSection}\r\n shortHeadline={shortHeadline.text}\r\n longHeadline={longHeadline.text}\r\n description={description.text}\r\n shortHeadlineValidations={shortHeadline}\r\n longHeadlineValidations={longHeadline}\r\n descriptionValidations={description}\r\n />\r\n {callToAction.display && (\r\n <>\r\n <Divider appearance=\"strong\" className={classes.textDivider} />\r\n <CallToAction\r\n i18n={i18n}\r\n cta={callToAction?.text}\r\n onChangeCta={onCtaChange}\r\n ctaValidations={callToAction}\r\n label={i18n.getString(_TL_('Call to action'))}\r\n helpLabel={i18n.getString(_TL_('Click to learn more about call to action'))}\r\n helpTopic=\"pop_BA_AudAds_CTA\"\r\n placeholder={\r\n callToAction.isMultipleOptions\r\n ? i18n.getString(_TL_('Multiple options, editing will override for all texts'))\r\n : i18n.getString(_TL_('Select call to action'))\r\n }\r\n labelAction={\r\n <TextFormattingButton\r\n i18n={i18n}\r\n onClick={() =>\r\n setActiveTextFormattingSection(assetName.callToAction)\r\n }\r\n />\r\n }\r\n />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </aside>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, mergeClasses } from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n },\r\n});\r\n\r\nexport const SizesView = () => {\r\n const classes = useStyles();\r\n return (\r\n <div className={mergeClasses('sizes', classes.container)}>\r\n sizes\r\n </div>\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Button, Divider, makeStyles, mergeClasses, shorthands, tokens } from '@fluentui/react-components';\r\n\r\ninterface FilterBarProps {\r\n i18n: any;\r\n selectionCallback: (selectedItem: string) => void;\r\n}\r\n\r\nconst useStyles = makeStyles({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n flexWrap: 'wrap',\r\n ...shorthands.gap(tokens.spacingHorizontalS),\r\n ...shorthands.padding(tokens.spacingVerticalXXL, tokens.spacingHorizontalXXXL),\r\n },\r\n filterButton: {\r\n height: '32px',\r\n minWidth: '75px',\r\n whiteSpace: 'nowrap',\r\n },\r\n divider: {\r\n flexGrow: 'unset',\r\n },\r\n});\r\n\r\nexport const FilterBar = ({ i18n, selectionCallback }: FilterBarProps) => {\r\n const [selectedFilter, setSelectedFilter] = useState('All sizes');\r\n const filterOptions = [\r\n { value: 'All sizes', text: _TL_('All sizes') },\r\n { value: 'Horizontal', text: _TL_('Horizontal') },\r\n { value: 'Square', text: _TL_('Square') },\r\n { value: 'Vertical', text: _TL_('Vertical') },\r\n ];\r\n const classes = useStyles();\r\n return (\r\n <div className={mergeClasses('preview-filter', classes.row)}>\r\n {filterOptions.map((filter, index) => (\r\n <React.Fragment key={filter.value}>\r\n <Button\r\n onClick={() => {\r\n selectionCallback(filter.value);\r\n setSelectedFilter(filter.value);\r\n }}\r\n appearance={selectedFilter === filter.value ? 'outline' : undefined}\r\n className={mergeClasses(`${filter.value.replace(/\\s+/g, '-')}-filter`, classes.filterButton)}\r\n >\r\n {i18n.getString(filter.text)}\r\n </Button>\r\n {index === 0 && <Divider vertical className={classes.divider} />}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n );\r\n};\r\n","import { shorthands, tokens, makeStyles } from '@fluentui/react-components';\r\n\r\nexport const previewStyles = makeStyles({\r\n previewContainer: {\r\n backgroundColor: 'inherit',\r\n ...shorthands.flex(1, 1, '1px'),\r\n minWidth: '1px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n backButton: {\r\n justifySelf: 'start',\r\n ...shorthands.margin(tokens.spacingVerticalXXL, tokens.spacingHorizontalXXXL),\r\n },\r\n adPreviews: {\r\n ...shorthands.overflow('auto', 'auto'),\r\n paddingLeft: tokens.spacingHorizontalXXXL,\r\n paddingRight: tokens.spacingHorizontalXXXL,\r\n ...shorthands.flex(1, 1, '1px'),\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n row: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'flex-start',\r\n columnGap: tokens.spacingHorizontalL,\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n centered: {\r\n display: 'flex',\r\n justifyContent: 'safe center',\r\n alignItems: 'safe center',\r\n },\r\n editButton: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n opacity: 0,\r\n },\r\n imageContainer: {\r\n position: 'relative',\r\n boxShadow: tokens.shadow2,\r\n '&:hover img, &:focus img': {\r\n filter: 'brightness(0.7)',\r\n },\r\n '&:hover button, &:focus button': {\r\n opacity: 1,\r\n },\r\n ...shorthands.transition('filter', '0.3s', 'ease-in-out'),\r\n ...shorthands.margin('1px'),\r\n },\r\n sizeText: {\r\n ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalNone, tokens.spacingVerticalXS),\r\n },\r\n});\r\n","import React from 'react';\r\nimport {\r\n Dropdown,\r\n Option,\r\n shorthands,\r\n tokens,\r\n makeStyles,\r\n mergeClasses,\r\n DropdownProps,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n zoomDropDown: {\r\n minWidth: '80px',\r\n ...shorthands.margin(tokens.spacingVerticalXXL, tokens.spacingHorizontalNone),\r\n },\r\n});\r\n\r\nexport interface ZoomControlProps {\r\n zoomValue: string;\r\n onZoomSelect: DropdownProps['onOptionSelect'];\r\n i18n: {\r\n getString: (key: string) => string;\r\n };\r\n}\r\n\r\nconst zoomOptions = [\r\n _TL_('75%'),\r\n _TL_('80%'),\r\n _TL_('90%'),\r\n _TL_('100%'),\r\n _TL_('110%'),\r\n _TL_('120%'),\r\n _TL_('125%'),\r\n _TL_('150%'),\r\n _TL_('200%'),\r\n];\r\n\r\nexport const ZoomControl = ({ zoomValue, onZoomSelect, i18n }: ZoomControlProps) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <Dropdown\r\n value={zoomValue}\r\n selectedOptions={[zoomValue]}\r\n onOptionSelect={onZoomSelect}\r\n className={mergeClasses('zoom-control', classes.zoomDropDown)}\r\n appearance=\"filled-darker\"\r\n aria-label={i18n.getString(_TL_('zoom'))}\r\n >\r\n {zoomOptions.map(option => (\r\n <Option key={option} value={option} >\r\n {i18n.getString(option)}\r\n </Option>\r\n ))}\r\n </Dropdown>);\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport {\r\n mergeClasses,\r\n Button,\r\n Body1,\r\n Skeleton,\r\n SkeletonItem,\r\n} from '@fluentui/react-components';\r\nimport { ArrowLeftRegular, EditRegular } from '@fluentui/react-icons';\r\nimport { FilterBar } from './filter-bar';\r\nimport { previewStyles } from './styles';\r\nimport { AdPreViewsProps, AdSize, PreviewImageProps } from '../types';\r\nimport { applyZoom, getAdSizeCategory } from '../utils';\r\nimport { ZoomControl } from './zoom-control';\r\n\r\nconst PreviewImage = ({\r\n image,\r\n adSize,\r\n editEnabled,\r\n editIndividualAdCallback,\r\n i18n,\r\n zoomValue,\r\n}: PreviewImageProps) => {\r\n const classes = previewStyles();\r\n const imageSize = useMemo(() => ({\r\n width: applyZoom(image.width, zoomValue),\r\n height: applyZoom(image.height, zoomValue),\r\n }), [image.width, image.height, zoomValue]);\r\n\r\n const onSelectWithKeyboard = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n editIndividualAdCallback(adSize);\r\n }\r\n };\r\n\r\n if (image.loading === true) {\r\n return (\r\n <div className={mergeClasses('preview-image', classes.container, 'preview-loading')}>\r\n <Skeleton aria-label={i18n.getString(_TL_('Loading Content'))} >\r\n <SkeletonItem style={imageSize} />\r\n </Skeleton>\r\n <Body1 className={classes.sizeText}>\r\n {i18n.getString(_TL_('{{width}} x {{height}} pixels'), { width: image.width, height: image.height })}\r\n </Body1>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={mergeClasses('preview-image', classes.container)}>\r\n {editEnabled ? (\r\n <div\r\n className={classes.imageContainer}\r\n style={imageSize}\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={() => editIndividualAdCallback(adSize)}\r\n onKeyDown={onSelectWithKeyboard}\r\n >\r\n <img\r\n src={image.url}\r\n alt={i18n.getString(_TL_('Preview of ad in size {{size}}'), { size: adSize })}\r\n {...imageSize}\r\n />\r\n <Button\r\n className={classes.editButton}\r\n onClick={() => editIndividualAdCallback(adSize)}\r\n icon={<EditRegular />}\r\n size=\"large\"\r\n aria-label={i18n.getString(_TL_('Edit ad with size {{size}}'), { size: adSize })}\r\n >\r\n {i18n.getString(_TL_('Edit'))}\r\n </Button>\r\n </div>\r\n ):(\r\n <img\r\n src={image.url}\r\n alt={i18n.getString(_TL_('Preview of ad in size {{size}}'), { size: adSize })}\r\n {...imageSize}\r\n />\r\n )}\r\n <Body1 className={classes.sizeText}>\r\n {i18n.getString(_TL_('{{width}} x {{height}} pixels'), { width: image.width, height: image.height })}\r\n </Body1>\r\n </div>\r\n );\r\n};\r\n\r\nexport const AdPreViews = ({\r\n i18n, adImages, targetSizes, isSinglePreviewSelected, editIndividualAdCallback, filterSelectionCallback, zoomValue, onZoomSelect, showPreviewControls,\r\n}: AdPreViewsProps) => {\r\n const classes = previewStyles();\r\n\r\n\r\n // one preview selected\r\n if (isSinglePreviewSelected && targetSizes.length === 1) {\r\n return (\r\n <div className={classes.previewContainer}>\r\n <div className=\"individual-preview-controls\">\r\n <Button\r\n appearance=\"transparent\"\r\n icon={<ArrowLeftRegular />}\r\n onClick={() => filterSelectionCallback('All sizes')}\r\n className={classes.backButton}\r\n >\r\n {i18n.getString(_TL_('All sizes'))}\r\n </Button>\r\n </div>\r\n <div className={mergeClasses('ad-preview', classes.container, classes.adPreviews, classes.centered)}>\r\n <PreviewImage\r\n adSize={targetSizes[0]}\r\n image={adImages[targetSizes[0]]}\r\n editEnabled={false}\r\n editIndividualAdCallback={editIndividualAdCallback}\r\n zoomValue={zoomValue}\r\n i18n={i18n}\r\n />\r\n </div>\r\n </div>\r\n );\r\n } else if (Object.keys(adImages).length === 1) { // only one preview available\r\n return (\r\n <div className={classes.previewContainer}>\r\n {\r\n showPreviewControls &&\r\n <div className={mergeClasses('individual-preview-controls', classes.centered)}>\r\n <ZoomControl\r\n zoomValue={zoomValue}\r\n onZoomSelect={onZoomSelect}\r\n i18n={i18n}\r\n />\r\n </div>\r\n }\r\n <div className={mergeClasses('ad-preview', classes.container, classes.adPreviews, classes.centered)}>\r\n <PreviewImage\r\n adSize={Object.keys(adImages)[0] as AdSize}\r\n image={adImages[Object.keys(adImages)[0]]}\r\n editEnabled={false}\r\n editIndividualAdCallback={editIndividualAdCallback}\r\n zoomValue={zoomValue}\r\n i18n={i18n}\r\n />\r\n </div>\r\n </div>\r\n );\r\n }\r\n // multiple previews\r\n return (\r\n <div className={classes.previewContainer}>\r\n <FilterBar i18n={i18n} selectionCallback={filterSelectionCallback} />\r\n <div className={mergeClasses('ad-preview', classes.container, classes.adPreviews)}>\r\n {/* Horizontal images each get their own row in decreasing width order */}\r\n {targetSizes\r\n .filter(size => getAdSizeCategory(size) === 'Horizontal')\r\n .sort((a, b) => adImages[b].width - adImages[a].width)\r\n .map(size => (\r\n <PreviewImage\r\n key={size}\r\n adSize={size}\r\n image={adImages[size]}\r\n editEnabled\r\n editIndividualAdCallback={editIndividualAdCallback}\r\n zoomValue={zoomValue}\r\n i18n={i18n}\r\n />\r\n ))}\r\n {/* Other images take the same row sorted by aspect ratio */}\r\n <div className={classes.row}>\r\n {targetSizes\r\n .filter(size => getAdSizeCategory(size) !== 'Horizontal')\r\n .sort((a, b) => (adImages[a].width / adImages[a].height) - (adImages[b].width / adImages[b].height))\r\n .map(size => (\r\n <PreviewImage\r\n key={size}\r\n adSize={size}\r\n image={adImages[size]}\r\n editEnabled\r\n editIndividualAdCallback={editIndividualAdCallback}\r\n zoomValue={zoomValue}\r\n i18n={i18n}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState, useContext } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { ZoomControl } from './ad-previews/zoom-control';\r\nimport { DisplayAdsContext } from './context';\r\nimport { getAdConfig } from './utils';\r\n\r\nexport const useStyles = makeStyles({\r\n container: {\r\n height: '44px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n ...shorthands.padding(0, tokens.spacingHorizontalL),\r\n },\r\n saveButton: {\r\n marginLeft: tokens.spacingHorizontalL,\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n\r\nexport const DisplayTemplateSummaryBarControl = ({\r\n i18n,\r\n isSaveDisabled,\r\n zoomValue,\r\n onZoomSelect,\r\n dataService,\r\n saveInNewFolder,\r\n onSaveSuccess,\r\n setIsSaving,\r\n finalUrl,\r\n sourceType,\r\n folderId,\r\n}) => {\r\n const classes = useStyles();\r\n const [summaryBar, setSummaryBar] = useState<HTMLElement| null>(null);\r\n const {\r\n state: {\r\n displayAds,\r\n templateConfigs,\r\n adImages,\r\n },\r\n } = useContext(DisplayAdsContext);\r\n const isSingleAd = useMemo(() => Object.keys(displayAds).length === 1, [displayAds]);\r\n const activity = useContext(ActivityContext) as any;\r\n\r\n const getFolder = useCallback(() => {\r\n if (saveInNewFolder && dataService.createFolder) {\r\n return dataService.createFolder({ folderName: generateNameSuggestionSuffix(i18n.getString(_TL_('Display template'))) });\r\n }\r\n return Promise.resolve(parseInt(folderId, 10) || 'ROOT');\r\n }, [dataService, saveInNewFolder, i18n, folderId]);\r\n\r\n const memoizedImageUpload = useMemo(\r\n () => _.memoize(asset => dataService.uploadImageByUrl(asset), asset => JSON.stringify(asset)),\r\n [dataService]\r\n );\r\n\r\n const memoizedGetImageById = useMemo(\r\n () => _.memoize(asset => dataService.getImageById(asset), asset => JSON.stringify(asset)),\r\n [dataService]\r\n );\r\n\r\n const uploadImageAsset = useCallback((asset) => {\r\n if (!asset || !asset.url) {\r\n return Promise.resolve(null);\r\n }\r\n if (asset.assetId) {\r\n return Promise.resolve({\r\n url: asset.url,\r\n id: asset.assetId,\r\n });\r\n }\r\n return memoizedImageUpload({\r\n imageUrl: asset.url,\r\n folderId: 'ROOT',\r\n }).then(imageId => memoizedGetImageById({ imageId }));\r\n }, [memoizedImageUpload, memoizedGetImageById]);\r\n\r\n const uploadImageAssets = useCallback(({ image, logo }) => Promise.all([\r\n uploadImageAsset(image),\r\n uploadImageAsset(logo),\r\n ]).then(([imageAsset, logoAsset]) => ({\r\n image: imageAsset,\r\n logo: logoAsset,\r\n })), [uploadImageAsset]);\r\n\r\n const save = useCallback(() => {\r\n setIsSaving(true);\r\n getFolder().then((folder) => {\r\n const uploadAssets = Object.keys(displayAds).map((size) => {\r\n const ad = displayAds[size];\r\n const templateConfig = templateConfigs[size];\r\n const adImage = adImages[size];\r\n const adConfig = getAdConfig(ad, templateConfig);\r\n\r\n return uploadImageAssets(ad).then(({ image, logo }) => {\r\n const creativeData = {\r\n ...adConfig,\r\n template: {\r\n ...adConfig.template,\r\n image: {\r\n ...adConfig.template.image,\r\n url: image.url,\r\n },\r\n ...(logo? { logo: { ...adConfig.template.logo, url: logo.url } } : {}),\r\n },\r\n image: image.url,\r\n url: adImage.url,\r\n };\r\n return dataService.addImageWithBaseIdToFolder({\r\n imageSrc: adImage.url,\r\n folderId: folder,\r\n metaData: JSON.stringify(creativeData),\r\n baseId: Number(image.id),\r\n sourceType: sourceType || 'DisplayTemplateGenerated',\r\n });\r\n });\r\n });\r\n\r\n return Promise.all(uploadAssets).then(() => {\r\n if (onSaveSuccess) {\r\n if (activity) {\r\n if (saveInNewFolder) {\r\n activity.signal(`[DisplayAdsEditor] saved display template to folder ${folder} with ${uploadAssets.length}`);\r\n if (finalUrl) {\r\n activity.signal(`[DisplayAdsEditor] saved display template with final url ${finalUrl}`);\r\n } else {\r\n activity.signal('[DisplayAdsEditor] saved display template without final url');\r\n }\r\n } else {\r\n activity.signal('[DisplayAdsEditor] edited display template image');\r\n }\r\n }\r\n onSaveSuccess();\r\n }\r\n }).catch(() => {\r\n // handle error\r\n }).finally(() => {\r\n setIsSaving(false);\r\n });\r\n });\r\n }, [displayAds, templateConfigs, adImages, dataService, uploadImageAssets, getFolder, onSaveSuccess, setIsSaving, finalUrl, activity, saveInNewFolder, sourceType]);\r\n\r\n const customizedContent = useMemo(() => (\r\n <div className={classes.container} >\r\n <ZoomControl\r\n zoomValue={zoomValue}\r\n onZoomSelect={onZoomSelect}\r\n i18n={i18n}\r\n />\r\n <Button\r\n appearance=\"primary\"\r\n className={mergeClasses('save-template-button', classes.saveButton)}\r\n disabled={isSaveDisabled}\r\n onClick={save}\r\n >\r\n {isSingleAd? i18n.getString(_TL_('Save')): i18n.getString(_TL_('Save all sizes')) }\r\n </Button>\r\n </div>\r\n ), [\r\n classes.container,\r\n i18n,\r\n isSaveDisabled,\r\n save,\r\n onZoomSelect,\r\n zoomValue,\r\n classes.saveButton,\r\n isSingleAd,\r\n ]);\r\n\r\n useEffect(() => {\r\n const timer = setInterval(() => {\r\n try {\r\n const summaryBarCustomizeEle = document.getElementById('ad-studio-summary-bar-customize-container');\r\n if (summaryBarCustomizeEle) {\r\n setSummaryBar(summaryBarCustomizeEle);\r\n clearInterval(timer);\r\n }\r\n } catch (error) {\r\n clearInterval(timer);\r\n }\r\n }, 500);\r\n return () => clearInterval(timer);\r\n }, []);\r\n\r\n return (\r\n summaryBar ? createPortal(\r\n customizedContent,\r\n summaryBar\r\n ) : null\r\n );\r\n};\r\n\r\nDisplayTemplateSummaryBarControl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isSaveDisabled: PropTypes.bool,\r\n zoomValue: PropTypes.string.isRequired,\r\n onZoomSelect: PropTypes.func.isRequired,\r\n dataService: PropTypes.shape({\r\n addImageWithBaseIdToFolder: PropTypes.func,\r\n createFolder: PropTypes.func,\r\n uploadImageByUrl: PropTypes.func,\r\n getImageById: PropTypes.func,\r\n }).isRequired,\r\n saveInNewFolder: PropTypes.bool,\r\n onSaveSuccess: PropTypes.func,\r\n setIsSaving: PropTypes.func.isRequired,\r\n finalUrl: PropTypes.string,\r\n sourceType: PropTypes.string,\r\n folderId: PropTypes.string,\r\n};\r\n\r\nDisplayTemplateSummaryBarControl.defaultProps = {\r\n isSaveDisabled: false,\r\n saveInNewFolder: false,\r\n onSaveSuccess: undefined,\r\n finalUrl: undefined,\r\n sourceType: undefined,\r\n folderId: undefined,\r\n};\r\n","\r\n/* istanbul ignore file */ // not fully implemented yet\r\nimport React, { useMemo, useContext, useCallback, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n bundleIcon,\r\n Wand24Regular,\r\n Wand24Filled,\r\n Glance24Regular,\r\n Glance24Filled,\r\n} from '@fluentui/react-icons';\r\n\r\nimport { makeStyles, mergeClasses, tokens, DropdownProps, shorthands } from '@fluentui/react-components';\r\n\r\nimport { UiBlocker } from '@bingads-webui-fluent-component/ui-blocker';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withLoggingContext } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { Navigation } from './side-navigatioin';\r\nimport { AdjustView } from './adjust-view';\r\nimport { SizesView } from './sizes-view';\r\nimport { AdPreViews } from './ad-previews';\r\nimport { DisplayAdsContext, DisplayAdsProvider } from './context';\r\nimport { ActionTypes } from './reducer';\r\nimport { DisplayAdsEditorProps, AdSize } from './types';\r\nimport { DisplayTemplateSummaryBarControl } from './display-template-summary-bar-control';\r\nimport { getAdConfig, getAdConfigs } from './utils';\r\n\r\nconst NavigationIds = {\r\n Adjust: 'Adjust',\r\n Sizes: 'Sizes',\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n backgroundColor: tokens.colorNeutralBackground2Hover,\r\n },\r\n editPanel: {\r\n flexShrink: 0,\r\n ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalS),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n});\r\n\r\nconst Wand = bundleIcon(Wand24Filled, Wand24Regular);\r\nconst Glance = bundleIcon(Glance24Filled, Glance24Regular);\r\n\r\nconst groupedTabs = ({ onClick, i18n, selectedItem }) => [\r\n [\r\n {\r\n id: NavigationIds.Adjust,\r\n key: NavigationIds.Adjust,\r\n text: i18n.getString(_TL_('Adjust')),\r\n icon: Wand,\r\n isSelected: selectedItem === NavigationIds.Adjust,\r\n onClick: () => {\r\n onClick(NavigationIds.Adjust);\r\n },\r\n },\r\n {\r\n id: NavigationIds.Sizes,\r\n key: NavigationIds.Sizes,\r\n text: i18n.getString(_TL_('Sizes')),\r\n icon: Glance,\r\n isSelected: selectedItem === NavigationIds.Sizes,\r\n onClick: () => {\r\n onClick(NavigationIds.Sizes);\r\n },\r\n },\r\n ],\r\n];\r\n\r\nconst cache = {};\r\n\r\nconst DisplayAdsEditorComponent: React.FC<DisplayAdsEditorProps> = ({\r\n i18n,\r\n showNavigation,\r\n displayTemplatesDataService,\r\n showRecommendationsBanner,\r\n hasUpdateBrandKitData,\r\n hasFetchBrandKitData,\r\n containerClassName,\r\n serverContext,\r\n brandKitDataService,\r\n brandkitApiState,\r\n preferenceService,\r\n instrumentation,\r\n perfMarker,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n permissions,\r\n showSummaryBarControl,\r\n dataService,\r\n saveInNewFolder,\r\n onAdChange,\r\n setLoading,\r\n onSaveSuccess,\r\n sourceType,\r\n url,\r\n setDataLoaded,\r\n folderId,\r\n}) => {\r\n const [selectedItem, setSelectedItem] = React.useState(NavigationIds.Adjust);\r\n const [isSinglePreviewSelected, setIsSinglePreviewSelected] = React.useState(false);\r\n const [zoomValue, setZoomValue] = React.useState('100%');\r\n const [loadingImage, setLoadingImage] = React.useState(false);\r\n const [isSaving, setIsSaving] = React.useState(false);\r\n const hasFirstLoadWithAssets = React.useRef(!!url);\r\n const items = useMemo(\r\n () =>\r\n groupedTabs({\r\n onClick: setSelectedItem,\r\n selectedItem,\r\n i18n,\r\n }),\r\n [i18n, selectedItem]\r\n );\r\n const classes = useStyles();\r\n const {\r\n dispatch,\r\n state: {\r\n finalUrl,\r\n displayAds,\r\n templateConfigs,\r\n templateId2Size,\r\n adImages,\r\n isAssetsLoading,\r\n targetSizes,\r\n recommendedAssets,\r\n },\r\n } = useContext(DisplayAdsContext);\r\n const getBrandKits = brandKitDataService?.getBrandKits;\r\n const fetchNewAds = useMemo(() => {\r\n const { editDisplayAdsAssetRecommendations } = displayTemplatesDataService;\r\n return _.memoize(_.throttle(editDisplayAdsAssetRecommendations, 100), params => JSON.stringify(params));\r\n }, [displayTemplatesDataService]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const fetchNewDisplayAds = useCallback(() => {\r\n const ads = getAdConfigs(_.pick(displayAds, targetSizes), templateConfigs);\r\n const loadingAds = targetSizes.reduce((acc, size) => {\r\n acc[size] = {\r\n ...adImages[size],\r\n loading: true,\r\n };\r\n return acc;\r\n }, {});\r\n\r\n dispatch({ type: ActionTypes.updateAdImages, payload: loadingAds });\r\n\r\n const newAdImages = {};\r\n const adsToFetch = ads.filter(ad => !(JSON.stringify(ad) in cache));\r\n ads.forEach((ad) => {\r\n if (JSON.stringify(ad) in cache) {\r\n const sizeKey = templateId2Size[ad.template.templateId] as AdSize;\r\n newAdImages[sizeKey] = cache[JSON.stringify(ad)];\r\n }\r\n });\r\n dispatch({ type: ActionTypes.updateAdImages, payload: newAdImages });\r\n let hasCropSettingsUpdated = false;\r\n if (adsToFetch.length !== 0) {\r\n setLoadingImage(true);\r\n fetchNewAds(adsToFetch).then(({ Ads: generatedDisplayAds }) => {\r\n generatedDisplayAds.forEach((generatedAd) => {\r\n const { url: adUrl, template } = generatedAd;\r\n const sizeKey = templateId2Size[template.templateId] as AdSize;\r\n const config = templateConfigs[sizeKey];\r\n\r\n // update display ads\r\n if (displayAds?.[sizeKey]) {\r\n const imageAdsCropSettings = displayAds[sizeKey].image?.cropSetting;\r\n const logoAdsCropSettings = displayAds[sizeKey].logo?.cropSetting;\r\n const imageCropSettings = template?.image?.cropSetting;\r\n const logoCropSettings = template?.logo?.cropSetting;\r\n if (!imageAdsCropSettings && Array.isArray(imageCropSettings) && imageCropSettings.length > 0 && displayAds[sizeKey].image) {\r\n displayAds[sizeKey].image.cropSetting = imageCropSettings;\r\n hasCropSettingsUpdated = true;\r\n }\r\n if (!logoAdsCropSettings && Array.isArray(logoCropSettings) && logoCropSettings.length > 0 && displayAds[sizeKey].logo) {\r\n displayAds[sizeKey].logo.cropSetting = logoCropSettings;\r\n hasCropSettingsUpdated = true;\r\n }\r\n }\r\n\r\n if (config) {\r\n const { width, height } = config;\r\n newAdImages[sizeKey] = {\r\n url: adUrl,\r\n width,\r\n height,\r\n loading: false,\r\n };\r\n if (displayAds[sizeKey] !== undefined && templateConfigs[sizeKey] !== undefined) {\r\n const params = JSON.stringify(getAdConfig(displayAds[sizeKey], templateConfigs[sizeKey]));\r\n cache[params] = newAdImages[sizeKey];\r\n }\r\n }\r\n });\r\n if (hasCropSettingsUpdated) {\r\n dispatch({ type: ActionTypes.updateAds, payload: { adImages: newAdImages, displayAds } });\r\n } else {\r\n dispatch({ type: ActionTypes.updateAdImages, payload: newAdImages });\r\n }\r\n }).finally(() => {\r\n setLoadingImage(false);\r\n });\r\n }\r\n }, [\r\n dispatch,\r\n displayAds,\r\n targetSizes,\r\n templateConfigs,\r\n templateId2Size,\r\n adImages,\r\n fetchNewAds,\r\n ]);\r\n\r\n const fetchBrandKits = useCallback(async () => {\r\n if (getBrandKits) {\r\n perfMarker.willFetchData();\r\n const { response } = await getBrandKits(aid);\r\n perfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n if (Array.isArray(response) && response.length > 0) {\r\n const brandKit = response[0];\r\n const type = hasUpdateBrandKitData ? ActionTypes.updateBrandKit : ActionTypes.updateRecommendedAssetsWithBrandKit;\r\n dispatch({ type, payload: brandKit });\r\n }\r\n }\r\n }, [getBrandKits, aid, hasUpdateBrandKitData, dispatch, perfMarker, setDataLoaded]);\r\n\r\n useEffect(() => {\r\n fetchNewDisplayAds();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [displayAds]);\r\n\r\n useEffect(() => {\r\n if (onAdChange) {\r\n onAdChange({ displayAds, adImages, templateConfigs });\r\n }\r\n }, [displayAds, onAdChange, adImages, templateConfigs]);\r\n\r\n useEffect(() => {\r\n if (setLoading) {\r\n setLoading(loadingImage);\r\n }\r\n }, [loadingImage, setLoading]);\r\n\r\n const onBackgroundColorChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateBackground, payload: value });\r\n }, [dispatch]);\r\n const onImageChange = useCallback((value, keepCropSettings) => {\r\n dispatch({ type: ActionTypes.updateImage, payload: value, options: { keepCropSettings } });\r\n }, [dispatch]);\r\n const onLogoChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateLogo, payload: value });\r\n }, [dispatch]);\r\n const onLongHeadlineChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateLongHeadLine, payload: { text: value } });\r\n }, [dispatch]);\r\n const onShortHeadlineChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateShortHeadLine, payload: { text: value } });\r\n }, [dispatch]);\r\n const onDescriptionChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateDescription, payload: { text: value } });\r\n }, [dispatch]);\r\n const onCtaChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateCallToAction, payload: { text: value } });\r\n }, [dispatch]);\r\n const onAssetPropertiesWithColorChange = useCallback(\r\n (payload) => {\r\n dispatch({\r\n type: ActionTypes.updateAssetPropertyAndColor,\r\n payload,\r\n });\r\n },\r\n [dispatch]\r\n );\r\n\r\n const updateTextAssets = useCallback((payload) => {\r\n const { description, shortHeadline, longHeadline } = payload;\r\n if (description !== undefined) {\r\n onDescriptionChange(description);\r\n }\r\n if (shortHeadline !== undefined) {\r\n onShortHeadlineChange(shortHeadline);\r\n }\r\n if (longHeadline !== undefined) {\r\n onLongHeadlineChange(longHeadline);\r\n }\r\n }, [onDescriptionChange, onLongHeadlineChange, onShortHeadlineChange]);\r\n\r\n useEffect(() => {\r\n hasFetchBrandKitData && fetchBrandKits();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [hasFetchBrandKitData]);\r\n const filterSelectionCallback = useCallback((selectedFilter) => {\r\n setZoomValue('100%');\r\n setIsSinglePreviewSelected(false);\r\n dispatch({ type: ActionTypes.updateTargetSizes, payload: selectedFilter });\r\n }, [dispatch]);\r\n\r\n const editIndividualAdCallback = useCallback((selectedSize) => {\r\n setIsSinglePreviewSelected(true);\r\n dispatch({ type: ActionTypes.updateTargetSizes, payload: selectedSize });\r\n }, [dispatch]);\r\n const onRecommendedAssetsChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateRecommendedAssets, payload: value, options: { hasUpdateTemplate: hasFirstLoadWithAssets.current } });\r\n hasFirstLoadWithAssets.current = false;\r\n }, [dispatch]);\r\n const onFinalUrlChange = useCallback((value) => {\r\n dispatch({ type: ActionTypes.updateFinalUrl, payload: value });\r\n }, [dispatch]);\r\n\r\n const onZoomSelect: DropdownProps['onOptionSelect'] = (event, data) => {\r\n setZoomValue(data.selectedOptions[0]);\r\n };\r\n const isBrandKitLoading = brandkitApiState?.brandkitLoading;\r\n return (\r\n <>\r\n {showSummaryBarControl && (\r\n <DisplayTemplateSummaryBarControl\r\n i18n={i18n}\r\n onZoomSelect={onZoomSelect}\r\n zoomValue={zoomValue}\r\n isSaveDisabled={loadingImage || isSaving}\r\n dataService={dataService}\r\n saveInNewFolder={saveInNewFolder}\r\n onSaveSuccess={onSaveSuccess}\r\n setIsSaving={setIsSaving}\r\n finalUrl={finalUrl}\r\n sourceType={sourceType}\r\n folderId={folderId}\r\n />\r\n )}\r\n <UiBlocker\r\n blocking={isSaving || isBrandKitLoading}\r\n loadingText={isSaving? i18n.getString(_TL_('Saving...')): i18n.getString(_TL_('loading...'))}\r\n >\r\n <div\r\n className={mergeClasses(\r\n 'display-ads-editor',\r\n classes.container,\r\n containerClassName\r\n )}\r\n >\r\n {showNavigation && <Navigation items={items} />}\r\n <div className={mergeClasses(classes.editPanel)}>\r\n {selectedItem === NavigationIds.Adjust && (\r\n <AdjustView\r\n showRecommendationsBanner={showRecommendationsBanner}\r\n displayAds={displayAds}\r\n targetSizes={targetSizes}\r\n templateConfigs={templateConfigs}\r\n finalUrl={finalUrl}\r\n instrumentation={instrumentation}\r\n i18n={i18n}\r\n onFinalUrlChange={onFinalUrlChange}\r\n onRecommendedAssetsChange={onRecommendedAssetsChange}\r\n onBackgroundColorChange={onBackgroundColorChange}\r\n onImageChange={onImageChange}\r\n onLogoChange={onLogoChange}\r\n onChangeTextAssets={updateTextAssets}\r\n onAssetPropertiesWithColorChange={\r\n onAssetPropertiesWithColorChange\r\n }\r\n onCtaChange={onCtaChange}\r\n permissions={permissions}\r\n aid={aid}\r\n recommendedAssets={recommendedAssets}\r\n cid={cid}\r\n perfMarker={perfMarker}\r\n preferenceService={preferenceService}\r\n oDataConfig={oDataConfig}\r\n serverContext={serverContext}\r\n isAssetsLoading={isAssetsLoading}\r\n />\r\n )}\r\n {selectedItem === NavigationIds.Sizes && <SizesView />}\r\n </div>\r\n <AdPreViews\r\n i18n={i18n}\r\n adImages={adImages}\r\n targetSizes={targetSizes}\r\n isSinglePreviewSelected={isSinglePreviewSelected}\r\n editIndividualAdCallback={editIndividualAdCallback}\r\n filterSelectionCallback={filterSelectionCallback}\r\n zoomValue={zoomValue}\r\n onZoomSelect={onZoomSelect}\r\n showPreviewControls={!showSummaryBarControl}\r\n />\r\n </div>\r\n </UiBlocker>\r\n </>\r\n );\r\n};\r\n\r\nconst DisplayAdsEditorWithContext = (props) => {\r\n const {\r\n templateData,\r\n scenarioName,\r\n activityName,\r\n url,\r\n ...remainingProps\r\n } = props;\r\n\r\n return (\r\n <Scenario name={scenarioName || 'DisplayTemplateEditor'}>\r\n <Activity name={activityName ||'DisplayTemplateEditor'}>\r\n <DisplayAdsProvider templateData={templateData} finalUrl={url}>\r\n <DisplayAdsEditorComponent url={url} {...remainingProps} />\r\n </DisplayAdsProvider>\r\n </Activity>\r\n </Scenario>\r\n );\r\n};\r\n\r\n\r\nexport const DisplayAdsEditor = withLoggingContext(withRecommendationContext(DisplayAdsEditorWithContext));\r\n\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n DrawerBody,\r\n DrawerHeader,\r\n DrawerHeaderTitle,\r\n Drawer,\r\n DrawerFooter,\r\n} from '@fluentui/react-drawer';\r\nimport { Button, makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\nimport {\r\n getLoggerWithoutPageInfo,\r\n createImageRepository,\r\n createFolderRepository\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { UiBlocker } from '@bingads-webui-fluent-component/ui-blocker';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { addCropSettingsToCreativeImage } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\n\r\nimport { DisplayAdsEditor } from './display-ads-editor';\r\nimport { AdProps, DisplayAdsEditorDrawerProps, TemplateConfig } from './types';\r\nimport { getAdConfig } from './utils';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n drawer: {\r\n width: '1270px',\r\n zIndex: 1000,\r\n top: '60px',\r\n },\r\n editorContainer: {\r\n height: '100%',\r\n },\r\n container: {\r\n marginLeft: '-24px',\r\n marginRight: '-24px',\r\n height: '100%',\r\n },\r\n});\r\n\r\nexport const DisplayAdsEditorDrawer = ({\r\n isOpen,\r\n setIsOpen,\r\n i18n,\r\n perfMarker,\r\n permissions,\r\n preferenceService,\r\n oDataConfig,\r\n serverContext,\r\n url,\r\n brandKitDataService,\r\n brandkitApiState,\r\n displayTemplatesDataService,\r\n imageData,\r\n instrumentation,\r\n hasUpdateBrandKitData,\r\n hasFetchBrandKitData,\r\n onApplyCreative,\r\n scenario,\r\n aid,\r\n cid,\r\n sourceType,\r\n} : DisplayAdsEditorDrawerProps) => {\r\n const classes = useStyles();\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n const [templateDetails, setTemplateDetails] = useState<any>(null);\r\n const [loading, setLoading] = React.useState(false);\r\n const [adData, setAdData] = React.useState<any>(null);\r\n const [saving, setSaving] = React.useState(false);\r\n const activity = scenario.createActivity('DisplayAdsEditorDrawer');\r\n const versionForLog = getLogVersion();\r\n const logger = getLoggerWithoutPageInfo(activity, versionForLog, 'DisplayAdsEditorDrawer');\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 useEffect(() => {\r\n setClarityTag({ DisplayAdsEditorDrawer: 'true' });\r\n }, []);\r\n\r\n useEffect(() => {\r\n const parentContainer = ref.current?.parentElement;\r\n if (parentContainer) {\r\n parentContainer.style.zIndex = '1000';\r\n }\r\n }, [ref]);\r\n\r\n\r\n useEffect(() => {\r\n if (!templateDetails &&\r\n imageData &&\r\n imageData.metadata &&\r\n imageData.metadata.template &&\r\n imageData.metadata.template.templateId\r\n ) {\r\n displayTemplatesDataService\r\n .fetchDisplayAdsTemplateDefinition(imageData.metadata.template.templateId)\r\n .then(({ Data: templates }) => {\r\n const latestTemplate = _.max(\r\n templates.displayAdsTemplateDefinitions,\r\n (templateDefinition: any) => Number(templateDefinition.version)\r\n );\r\n setTemplateDetails({\r\n displayAdsTemplateDetails: [\r\n {\r\n templateConfig: latestTemplate,\r\n displayAd: {\r\n ...imageData.metadata,\r\n url: imageData.src || imageData.url,\r\n },\r\n },\r\n ],\r\n });\r\n })\r\n .catch(() => {\r\n // handle error\r\n });\r\n }\r\n }, [imageData.metadata.template.templateId, displayTemplatesDataService, templateDetails, imageData]);\r\n\r\n const uploadImageAsset = useCallback(({ displayAd }) => {\r\n if (!displayAd.image.assetId) {\r\n return folderRepository.addUrlImageToFolder({\r\n imageSrc: displayAd.image.url,\r\n folderId: 'ROOT',\r\n }).then(imageId => imageRepository.getImage(imageId));\r\n }\r\n return Promise.resolve({\r\n url: displayAd.image.url,\r\n id: displayAd.image.assetId,\r\n });\r\n }, [folderRepository, imageRepository]);\r\n\r\n const onSave = useCallback(() => {\r\n const { displayAds, adImages, templateConfigs } = adData;\r\n const displayAd = Object.values(displayAds)[0] as AdProps;\r\n const adImage = Object.values(adImages)[0] as any;\r\n const templateConfig = Object.values(templateConfigs)[0] as TemplateConfig;\r\n const displayAdConfig = getAdConfig(displayAd, templateConfig);\r\n let creativeData;\r\n setSaving(true);\r\n uploadImageAsset({ displayAd }).then((image) => {\r\n creativeData = {\r\n ...displayAdConfig,\r\n template: {\r\n ...displayAdConfig.template,\r\n image: {\r\n ...displayAdConfig.template.image,\r\n url: image.url,\r\n },\r\n },\r\n image: image.url,\r\n url: adImage.url,\r\n };\r\n imageRepository.addCreative({ creativeData, baseId: image.id, sourceType }).then((ids) => {\r\n if (_.isObject(_.first(ids))) {\r\n throw new Error(ids[0].code);\r\n }\r\n\r\n return ids[0];\r\n })\r\n .then(id => imageRepository.getImage(id))\r\n .then(mtObj => addCropSettingsToCreativeImage(mtObj))\r\n .then((imageObj) => {\r\n onApplyCreative({\r\n imageObj,\r\n creativeMeta: {\r\n placement: imageData.metadata.placement,\r\n ...creativeData,\r\n },\r\n });\r\n setIsOpen(false);\r\n activity.trace('DisplayAdsEditorDrawer: save');\r\n })\r\n .finally(() => {\r\n setSaving(false);\r\n });\r\n });\r\n }, [adData, onApplyCreative, setIsOpen, activity, uploadImageAsset, imageRepository, imageData, sourceType]);\r\n\r\n return (\r\n <Drawer\r\n type=\"overlay\"\r\n modalType=\"modal\"\r\n open={isOpen}\r\n position=\"end\"\r\n size=\"large\"\r\n ref={ref}\r\n separator\r\n className={mergeClasses('display-ads-editor-drawer', classes.drawer)}\r\n >\r\n <DrawerHeader>\r\n <DrawerHeaderTitle\r\n action={\r\n <Button\r\n appearance=\"subtle\"\r\n aria-label={i18n.getString(_TL_('Close'))}\r\n icon={<Dismiss24Regular />}\r\n onClick={() => setIsOpen(false)}\r\n />\r\n }\r\n >\r\n {i18n.getString(_TL_('Edit your ad'))}\r\n </DrawerHeaderTitle>\r\n </DrawerHeader>\r\n <DrawerBody>\r\n <div className={classes.container}>\r\n <UiBlocker\r\n blocking={!templateDetails || saving}\r\n loadingText={saving? i18n.getString(_TL_('Saving...')) :i18n.getString(_TL_('Loading...'))}\r\n >\r\n { templateDetails && (\r\n <DisplayAdsEditor\r\n containerClassName={classes.editorContainer}\r\n i18n={i18n}\r\n brandKitDataService={brandKitDataService}\r\n brandkitApiState={brandkitApiState}\r\n hasFetchBrandKitData={hasFetchBrandKitData}\r\n hasUpdateBrandKitData={hasUpdateBrandKitData}\r\n perfMarker={perfMarker}\r\n permissions={permissions}\r\n oDataConfig={oDataConfig}\r\n serverContext={serverContext}\r\n instrumentation={instrumentation}\r\n templateData={templateDetails}\r\n displayTemplatesDataService={displayTemplatesDataService}\r\n preferenceService={preferenceService}\r\n url={url}\r\n aid={aid}\r\n cid={cid}\r\n onAdChange={setAdData}\r\n setLoading={setLoading}\r\n scenarioName=\"DisplayTemplateDrawer\"\r\n activityName=\"DisplayTemplateDrawer\"\r\n />)}\r\n </UiBlocker>\r\n </div>\r\n </DrawerBody>\r\n <DrawerFooter>\r\n <Button\r\n appearance=\"primary\"\r\n disabled={!templateDetails || loading || saving}\r\n onClick={onSave}\r\n >{i18n.getString(_TL_('Save'))}\r\n </Button>\r\n <Button\r\n appearance=\"subtle\"\r\n disabled={saving}\r\n onClick={() => setIsOpen(false)}\r\n >\r\n {i18n.getString(_TL_('Cancel'))}\r\n </Button>\r\n </DrawerFooter>\r\n </Drawer>\r\n );\r\n};\r\n\r\n","import RecommendationsSectionSvg from './recommendations-section.svg';\r\n\r\nexport const RecommendationsSectionIcon = RecommendationsSectionSvg;\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nconst ImagePreviewHeight = '96px';\r\n\r\nexport const useStyles = makeStyles({\r\n displayRecommendedImage: {\r\n '& .image-suggestion-carousel-loading': {\r\n '& .parent-item': {\r\n display: 'flex',\r\n ...shorthands.gap('8px'),\r\n },\r\n '& .item': {\r\n height: '66px',\r\n width: '72px',\r\n },\r\n },\r\n '& .helpbutton': {\r\n display: 'inline',\r\n },\r\n\r\n },\r\n imagePreviewContainer: {\r\n height: ImagePreviewHeight,\r\n position: 'relative',\r\n ...shorthands.margin('12px', 0),\r\n '& .image-preview': {\r\n display: 'flex',\r\n height: '100%',\r\n justifyContent: 'center',\r\n },\r\n backgroundImage: 'linear-gradient(45deg, #EBEBEB 25%, transparent 25%), linear-gradient(-45deg, #EBEBEB 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #EBEBEB 75%), linear-gradient(-45deg, transparent 75%, #EBEBEB 75%)',\r\n backgroundSize: '40px 40px',\r\n backgroundPositionX: '0px, 0px, 20px, -20px',\r\n backgroundPositionY: '0px, 20px, -20px, 0px',\r\n backgroundColor: '#FAFAFA',\r\n },\r\n checkerImage: {\r\n position: 'absolute',\r\n width: '100%',\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n ...shorthands.border('0.5px', 'solid', '#E1E1E1'),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n height: '96px',\r\n left: 0,\r\n right: 0,\r\n backgroundColor: tokens.colorBackgroundOverlay,\r\n },\r\n multipleBtn: {\r\n width: '100%',\r\n display: 'flex',\r\n color: tokens.colorNeutralForeground4,\r\n fontSize: tokens.fontSizeBase200,\r\n flexDirection: 'column',\r\n ...shorthands.border('0.5px', 'solid', '#E1E1E1'),\r\n backgroundColor: tokens.colorNeutralBackground3,\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n },\r\n previewImage: {\r\n display: 'flex',\r\n height: '100%',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n '& img': {\r\n width: '100%',\r\n maxHeight: '100%',\r\n },\r\n },\r\n actionBtns: {\r\n display: 'flex',\r\n position: 'absolute',\r\n ...shorthands.gap('8px'),\r\n bottom: '10px',\r\n left: '50%',\r\n transform: 'translate(-50%, 0)',\r\n '& button': {\r\n ...shorthands.borderRadius(tokens.borderRadiusSmall),\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1),\r\n },\r\n },\r\n helpButton: {\r\n marginLeft: tokens.spacingHorizontalSNudge,\r\n },\r\n titleContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nexport const initialImageContainerLeftMargin = 0;\r\n\r\nconst IMAGE_DIM = {\r\n width: 68,\r\n height: 62,\r\n marginRight: 8,\r\n};\r\nconst PaddleBottomValue = 18;\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\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: IMAGE_DIM.height,\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n display: 'inline-block',\r\n marginLeft: isCollapsible ? imageContainerLeftMargin : 0,\r\n flexGrow: 1,\r\n }),\r\n imageParentContainer: ({ imageParentLeftOffset, numberOfImages }) => ({\r\n display: 'flex',\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 }),\r\n imageClickableContainer: {\r\n display: 'inline',\r\n '& :hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n panel: {},\r\n panelHeading: {\r\n display: 'flex',\r\n marginBottom: '12px',\r\n '& .recommendation-icon': {\r\n width: '14px',\r\n height: '14px',\r\n margin: '0 8px',\r\n },\r\n },\r\n panelTitle: {\r\n flexGrow: 1,\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: 'none',\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: 20,\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: 20,\r\n transform: 'rotate(-180deg)',\r\n },\r\n paddleBtn: {\r\n bottom: PaddleBottomValue,\r\n\r\n },\r\n moreIcon: {\r\n fontSize: '18px',\r\n height: '60px',\r\n width: '33px',\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 color: `${tokens.colorNeutralForeground2BrandSelected} !important`,\r\n },\r\n seeAllInHeader: {\r\n float: 'right',\r\n '& a': {\r\n position: 'static',\r\n fontSize: 12,\r\n paddingRight: 0,\r\n '&:hover, $:acitve, $:focus': {\r\n },\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n parentContainer: {\r\n '& .paddle-right, & .paddle-left': {\r\n width: '20px',\r\n height: '20px',\r\n '& i': {\r\n color: tokens.colorNeutralForeground3,\r\n fontSize: '12px',\r\n },\r\n },\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 marginBottom: 0,\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:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n marginTop: 0,\r\n },\r\n },\r\n '& + .alert-info': {\r\n marginTop: 8,\r\n '& a': {\r\n },\r\n },\r\n },\r\n});\r\n","import React, { memo, useState } from 'react';\r\nimport { EditRegular, ArrowSwapRegular, ImageMultipleRegular } from '@fluentui/react-icons';\r\nimport { Image as FluentImage } from '@bingads-webui-react/fabric-control';\r\nimport { Button, tokens } from '@fluentui/react-components';\r\nimport { useStyles } from './style';\r\nimport { ImagePreviewProps } from './type';\r\n\r\nexport const ImagePreview = memo(({\r\n onEdit,\r\n i18n,\r\n onReplace,\r\n hideEditBtn,\r\n hideReplaceBtn,\r\n previewImage,\r\n isMultiplePreview,\r\n type,\r\n}: ImagePreviewProps) => {\r\n const classes = useStyles();\r\n const [showActionBtn, setShowActionBtn] = useState(false);\r\n const onMouseEnter = () => {\r\n setShowActionBtn(true);\r\n };\r\n const onMouseLeave = () => {\r\n setShowActionBtn(false);\r\n };\r\n const onKeyDown = (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n onMouseEnter();\r\n }\r\n };\r\n return (\r\n <div className={classes.imagePreviewContainer}>\r\n <div\r\n className=\"image-preview\"\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n tabIndex={0}\r\n onKeyDown={onKeyDown}\r\n role=\"button\"\r\n >\r\n {\r\n isMultiplePreview ?\r\n <Button\r\n icon={<ImageMultipleRegular color={tokens.colorNeutralForeground4} />}\r\n size=\"medium\"\r\n data-type={type}\r\n className={classes.multipleBtn}\r\n onClick={onReplace}\r\n >\r\n {i18n.getString(_TL_('Adding a new image will replace all images in every banner size. '))}\r\n </Button>\r\n : <FluentImage className={classes.previewImage} src={previewImage} alt=\"brand-kit\" />\r\n }\r\n {!isMultiplePreview && showActionBtn && <span className={classes.overlay} />}\r\n {!isMultiplePreview && showActionBtn && (\r\n <div className={classes.actionBtns}>\r\n {!hideEditBtn && (\r\n <Button\r\n icon={<EditRegular color={tokens.colorNeutralForeground1} />}\r\n size=\"medium\"\r\n data-type={type}\r\n className=\"edit_btn\"\r\n onClick={onEdit}\r\n />\r\n )}\r\n {!hideReplaceBtn && (\r\n <Button\r\n icon={<ArrowSwapRegular color={tokens.colorNeutralForeground1} />}\r\n size=\"medium\"\r\n data-type={type}\r\n className=\"rep_btn\"\r\n onClick={onReplace}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n});\r\n","import React, { memo, useCallback, useEffect, useRef, useMemo, useState } from 'react';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { Body1Strong, mergeClasses } from '@fluentui/react-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { ImageRecommendationsPanel } from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { RecommendationsSectionIcon } from './asset-images';\r\nimport { getCarouselStyles, getFullyShownImagesCount, initialImageContainerLeftMargin, useStyles } from './style';\r\nimport { DisplayRecommendedImageProps } from './type';\r\nimport { ImagePreview } from './ImagePreview';\r\n\r\nconst DisplayRecommendedImage = memo(({\r\n i18n,\r\n isLoading,\r\n type,\r\n showViewAllInHeader,\r\n seeAllLinkText,\r\n themes,\r\n onSelectRecommendedImage,\r\n recommendationTitle,\r\n title,\r\n seeAllPanelTitle,\r\n recommendedLoadingText,\r\n recommendedImages,\r\n maxUploadNum,\r\n uiBlocking,\r\n previewImage,\r\n helpTopic,\r\n helpLabel,\r\n isRecommendationEmpty = false,\r\n onEditPreviewImage,\r\n onReplacePreviewImage,\r\n hideEditPreviewBtn,\r\n hideReplacePreviewBtn,\r\n isMultiplePreview,\r\n}: DisplayRecommendedImageProps) => {\r\n const [isSuggestionsPanelOpen, setIsSuggestionsPanelOpen] = useState(false);\r\n const [imagesToSuggest, setImagesToSuggest] = useState([]);\r\n const ref = useRef<{ fullUrl: any; index: any; suggestionId: any } | null>(null);\r\n const onSelectSeeAllRecommendedImages = useCallback(() => {\r\n setIsSuggestionsPanelOpen(true);\r\n }, []);\r\n const onDismiss = () => {\r\n setIsSuggestionsPanelOpen(false);\r\n };\r\n const onSelect = (fullUrl, index, suggestionId) => {\r\n onSelectRecommendedImage({ fullUrl, index, suggestionId }, type);\r\n };\r\n const onAdd = (images) => {\r\n onSelectRecommendedImage({ fullUrl: images[0]?.fullUrl, index: ref.current?.index, suggestionId: images[0]?.suggestionId }, type);\r\n };\r\n const onSelectImage = (fullUrl, index, suggestionId) => {\r\n ref.current = { fullUrl, index, suggestionId };\r\n onSelectRecommendedImage({ fullUrl, index, suggestionId }, type);\r\n };\r\n useEffect(() => {\r\n if (recommendedImages) {\r\n const truncatedImages = Array.isArray(recommendedImages) && recommendedImages.slice(0, 10);\r\n setImagesToSuggest(truncatedImages || [] as any);\r\n }\r\n }, [recommendedImages]);\r\n\r\n const classes = useStyles();\r\n\r\n const renderHelpBubble = useMemo(() => (\r\n <div className={classes.helpButton}>\r\n { helpTopic && (\r\n <HelpButton\r\n topic={helpTopic}\r\n aria-label={helpLabel}\r\n />\r\n )}\r\n </div>\r\n ), [classes.helpButton, helpLabel, helpTopic]);\r\n\r\n return (\r\n <div key={type} id={`display-action-pane-recommended-${type}`} className={mergeClasses(classes.displayRecommendedImage, 'display-action-pane-recommended')}>\r\n <div className={classes.titleContainer}>\r\n <Body1Strong>{title}</Body1Strong>\r\n {renderHelpBubble}\r\n </div>\r\n <ImagePreview i18n={i18n} isMultiplePreview={isMultiplePreview} type={type} onEdit={onEditPreviewImage} onReplace={onReplacePreviewImage} previewImage={previewImage} hideEditBtn={hideEditPreviewBtn} hideReplaceBtn={hideReplacePreviewBtn} />\r\n <UiBlocker\r\n blocking={uiBlocking}\r\n loadingText={recommendedLoadingText}\r\n >\r\n <ImageSuggestionCarousel\r\n title={recommendationTitle}\r\n isLoading={isLoading}\r\n showShimmer\r\n images={maxUploadNum > 0 ? imagesToSuggest : []}\r\n i18n={i18n}\r\n icon={RecommendationsSectionIcon}\r\n isEmpty={isRecommendationEmpty}\r\n onSelectImage={onSelect}\r\n onSelectSeeAll={onSelectSeeAllRecommendedImages}\r\n showViewAllInHeader={showViewAllInHeader}\r\n stylingOverrides={{\r\n getCarouselStyles,\r\n getFullyShownImagesCount,\r\n initialImageContainerLeftMargin,\r\n seeAllLinkText,\r\n }}\r\n />\r\n </UiBlocker>\r\n {isSuggestionsPanelOpen &&\r\n <ImageRecommendationsPanel\r\n i18n={i18n}\r\n isMultiSelect={false}\r\n title={seeAllPanelTitle}\r\n showThemes\r\n images={recommendedImages}\r\n themes={themes}\r\n hasMore={false}\r\n maxUploadNum={1}\r\n onAdd={onAdd}\r\n onSelectImage={onSelectImage}\r\n onDismiss={onDismiss}\r\n />\r\n }\r\n </div>\r\n );\r\n});\r\n\r\nexport default DisplayRecommendedImage;\r\n","import { ITreeItem, ITreeIndexes } from './types';\r\n\r\nexport function buildMap(flatTreeItems: Array<ITreeItem>): Map<string, ITreeIndexes> {\r\n const map = new Map();\r\n\r\n flatTreeItems.forEach((item, index, array) => {\r\n const { value, parentValue } = item;\r\n\r\n const ancestor: number[] = [];\r\n // if parent appears before child, then parent will in map already\r\n if (map.has(parentValue)) {\r\n const parent: ITreeIndexes = map.get(parentValue);\r\n ancestor.push(...parent.ancestor);\r\n ancestor.push(parent.index);\r\n\r\n parent.children = [...parent.children, index];\r\n } else if (parentValue) {\r\n // if parent appears after child, then set up parent in map with initial value\r\n map.set(parentValue, { index: null, ancestor: [], children: [index] });\r\n }\r\n\r\n // current value is already in map, then it must be some child's parent\r\n if (map.has(value)) {\r\n const myself: ITreeIndexes = map.get(value);\r\n myself.index = index;\r\n myself.children.forEach((child: number) => {\r\n const childMapValue = map.get(array[child]?.value);\r\n childMapValue?.ancestor.push(index);\r\n });\r\n } else {\r\n // ancestors has been fullfilled when searching for parent\r\n map.set(value, { index, ancestor, children: [] });\r\n }\r\n });\r\n\r\n return map;\r\n}\r\n\r\nfunction defaultFilter(item: ITreeItem, searchQuery: string) {\r\n const { content } = item;\r\n return content.toLowerCase().includes(searchQuery.toLowerCase());\r\n}\r\n\r\nfunction collectChildren(\r\n map: Map<string, ITreeIndexes>,\r\n flatTreeItems: Array<ITreeItem>,\r\n value: string\r\n): Array<number> {\r\n const children: Array<number> = [];\r\n const entry: ITreeIndexes = map.get(value);\r\n if (entry) {\r\n entry.children.forEach((child: number) => {\r\n children.push(child);\r\n\r\n const childValue = flatTreeItems[child]?.value;\r\n children.push(...collectChildren(map, flatTreeItems, childValue));\r\n });\r\n }\r\n return children;\r\n}\r\n\r\nexport function filterTreeItems(\r\n flatTreeItems: Array<ITreeItem>,\r\n map: Map<string, ITreeIndexes>,\r\n searchQuery: string,\r\n filter: (item: ITreeItem, searchQuery: string) => boolean = defaultFilter\r\n): Array<ITreeItem> {\r\n const filteredTreeItemIndexes: Array<number> = [];\r\n\r\n flatTreeItems.forEach((item) => {\r\n const isMatched = filter(item, searchQuery);\r\n\r\n if (isMatched) {\r\n const { value } = item;\r\n const entry: ITreeIndexes = map.get(value);\r\n filteredTreeItemIndexes.push(entry.index);\r\n filteredTreeItemIndexes.push(...entry.ancestor);\r\n filteredTreeItemIndexes.push(...collectChildren(map, flatTreeItems, value));\r\n }\r\n });\r\n\r\n const set = new Set(filteredTreeItemIndexes);\r\n const orderedFilteredIndexes = Array.from(set).sort((a, b) => a - b);\r\n\r\n const filteredTreeItems = [];\r\n orderedFilteredIndexes.forEach((index) => {\r\n filteredTreeItems.push(flatTreeItems[index]);\r\n });\r\n\r\n return filteredTreeItems;\r\n}\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useDropdownTreeStyles = makeStyles({\r\n root: {\r\n position: 'relative',\r\n // 'max-width': '400px',\r\n },\r\n dropdownContent: {\r\n position: 'absolute',\r\n width: '100%',\r\n display: 'block',\r\n zIndex: 1,\r\n maxHeight: '500px',\r\n 'box-sizing': 'border-box',\r\n 'background-color': 'white',\r\n 'border-radius': '4px',\r\n 'box-shadow': '0 0 2px rgba(0,0,0,0.12), 0 8px 16px rgba(0,0,0,0.14)',\r\n ...shorthands.padding('4px'),\r\n ...shorthands.overflow('auto'),\r\n },\r\n branch: {\r\n fontWeight: 600,\r\n },\r\n hideContent: {\r\n display: 'none',\r\n },\r\n noResults: {\r\n ...shorthands.padding('8px'),\r\n 'font-size': '14px',\r\n 'font-weight': '400',\r\n 'line-height': '20px',\r\n color: '#323130',\r\n },\r\n treeItemLayout: {\r\n '& .fui-TreeItemLayout__main': {\r\n ...shorthands.flex(1),\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useCallback, useState, useMemo, useRef, useEffect } from 'react';\r\nimport {\r\n FlatTree,\r\n TreeItem,\r\n TreeItemLayout,\r\n // eslint-disable-next-line camelcase\r\n useHeadlessFlatTree_unstable,\r\n mergeClasses,\r\n Tooltip,\r\n Spinner,\r\n} from '@fluentui/react-components';\r\nimport { ChevronRightRegular, ChevronDownRegular } from '@fluentui/react-icons';\r\nimport { SearchBox, Checkbox } from '@fluentui/react';\r\n\r\nimport { buildMap, filterTreeItems } from './utils';\r\nimport { IDropdownTreeSelectProps, CustomTreeItemProps } from './types';\r\nimport { useDropdownTreeStyles } from './styles';\r\n\r\nconst CustomTreeItem = React.memo(({\r\n flatTreeItem,\r\n checked,\r\n onCheckedChange,\r\n onRenderContent,\r\n styles,\r\n isOpen,\r\n isLoading,\r\n lazyLoadingEnabled,\r\n} : CustomTreeItemProps) => {\r\n const treeItemsProps = flatTreeItem.getTreeItemProps();\r\n const {\r\n content,\r\n allowedCheck,\r\n parentValue,\r\n ...treeItemProps\r\n } = treeItemsProps;\r\n\r\n const itemType = useMemo(() => {\r\n if (lazyLoadingEnabled && treeItemsProps['aria-level'] === 1) {\r\n return 'branch';\r\n }\r\n return treeItemProps.itemType;\r\n }, [lazyLoadingEnabled, treeItemProps.itemType, treeItemsProps]);\r\n\r\n // we have a very weird issue here that the dropdown will close when we click on the icon\r\n // so we need to stop the propagation of the event for some elements\r\n const stopPropagation = useCallback((e) => {\r\n e.stopPropagation();\r\n }, []);\r\n const expandIcon = useMemo(() => {\r\n if (lazyLoadingEnabled && treeItemsProps['aria-level'] === 1) {\r\n if (isLoading) {\r\n return (<Spinner size=\"tiny\" onClick={stopPropagation} />);\r\n } else if (isOpen) {\r\n return (<ChevronDownRegular />);\r\n }\r\n return (<ChevronRightRegular />);\r\n }\r\n\r\n return undefined;\r\n }, [isLoading, isOpen, lazyLoadingEnabled, stopPropagation, treeItemsProps]);\r\n const onChange = useCallback((e, isChecked) => {\r\n onCheckedChange({\r\n key: flatTreeItem.value,\r\n value: isChecked,\r\n content,\r\n parentValue,\r\n });\r\n }, [content, flatTreeItem.value, onCheckedChange, parentValue]);\r\n\r\n return (\r\n <TreeItem {...treeItemProps} itemType={itemType} onClick={stopPropagation}>\r\n <TreeItemLayout\r\n className={styles.treeItemLayout}\r\n expandIcon={expandIcon}\r\n >\r\n {\r\n allowedCheck\r\n ? (\r\n <Checkbox\r\n label={content}\r\n checked={checked}\r\n className=\"ba-dropdown-tree-select-checkbox\"\r\n onChange={onChange}\r\n {...(_.isFunction(onRenderContent) ? { onRenderLabel: () => onRenderContent(flatTreeItem) } : {})}\r\n />\r\n )\r\n : <div className={styles.branch}>{_.isFunction(onRenderContent) ? onRenderContent(flatTreeItem) : content}</div>\r\n }\r\n </TreeItemLayout>\r\n </TreeItem>\r\n );\r\n});\r\n\r\nexport const DropdownTreeSelect = ({\r\n placeholder,\r\n items,\r\n checkedItems,\r\n onChange,\r\n openItems,\r\n onOpenChange,\r\n onRenderContent,\r\n onRenderTooltip,\r\n customFilter,\r\n lazyLoad,\r\n isMultiSelect,\r\n ...restProps\r\n}: IDropdownTreeSelectProps) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const styles = useDropdownTreeStyles();\r\n\r\n const [searchValue, setSearchValue] = useState('');\r\n const [isResultOpen, setIsResultOpen] = useState(false);\r\n const lazyLoadingEnabled = !!lazyLoad;\r\n const [lazyLoadedData, setLazyLoadedData] = useState([]);\r\n const [lazyLoadedParents, setLazyLoadedParents] = useState([]);\r\n\r\n const onChangeSearchValue = useCallback((e, newValue = '') => {\r\n const trimmedValue = newValue.trim();\r\n setSearchValue(trimmedValue);\r\n }, []);\r\n\r\n const itemsToUse = useMemo(() => ([...items, ...lazyLoadedData]), [items, lazyLoadedData]);\r\n const map = useMemo(() => buildMap(itemsToUse), [itemsToUse]);\r\n const filteredTreeItems = useMemo(() => filterTreeItems(itemsToUse, map, searchValue, customFilter), [map, searchValue, itemsToUse, customFilter]);\r\n\r\n const parentsWithChild = useMemo(() => {\r\n if (!lazyLoad) {\r\n return [];\r\n }\r\n return _.chain(itemsToUse)\r\n .map(item => item.parentValue)\r\n .compact()\r\n .uniq()\r\n .value();\r\n }, [itemsToUse, lazyLoad]);\r\n const parentsWithChildOrLoaded = useMemo(() => _.uniq([...parentsWithChild, ...lazyLoadedParents]), [parentsWithChild, lazyLoadedParents]);\r\n const onOpenChangeInternal = useCallback((e, data) => {\r\n onOpenChange(Array.from(data.openItems));\r\n\r\n if (_.isFunction(lazyLoad)) {\r\n const [openedItem] = _.difference([...data.openItems], openItems);\r\n if (openedItem && !_.includes(parentsWithChildOrLoaded, openedItem)) {\r\n lazyLoad(openedItem)\r\n .then((itemChildData) => {\r\n setLazyLoadedData([...lazyLoadedData, ...itemChildData]);\r\n })\r\n .finally(() => {\r\n setLazyLoadedParents([...lazyLoadedParents, openedItem]);\r\n });\r\n }\r\n }\r\n }, [lazyLoad, lazyLoadedData, lazyLoadedParents, onOpenChange, openItems, parentsWithChildOrLoaded]);\r\n\r\n const onItemChecked = useCallback(({\r\n key,\r\n value,\r\n content,\r\n parentValue,\r\n }) => {\r\n if (!isMultiSelect) {\r\n onChange([{\r\n value: key,\r\n parentValue,\r\n content,\r\n }]);\r\n return;\r\n }\r\n\r\n if (value) {\r\n onChange([...checkedItems, key]);\r\n } else {\r\n onChange(checkedItems.filter(item => item !== key));\r\n }\r\n }, [checkedItems, isMultiSelect, onChange]);\r\n\r\n const flatTree = useHeadlessFlatTree_unstable(filteredTreeItems, { openItems, onOpenChange: onOpenChangeInternal });\r\n\r\n useEffect(() => {\r\n const handleBlur = (e: MouseEvent) => {\r\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\r\n setTimeout(() => {\r\n setIsResultOpen(false);\r\n }, 10);\r\n }\r\n };\r\n document.addEventListener('click', handleBlur);\r\n return () => {\r\n document.removeEventListener('click', handleBlur);\r\n };\r\n }, []);\r\n\r\n const showResults = useCallback(() => {\r\n setIsResultOpen(true);\r\n }, []);\r\n\r\n return (\r\n <div className={classNames(styles.root, 'ba-dropdown-tree-select')} ref={containerRef}>\r\n <SearchBox\r\n placeholder={placeholder}\r\n onChange={onChangeSearchValue}\r\n onFocus={showResults}\r\n className={classNames('ba-dropdown-tree-select-search-box')}\r\n />\r\n <div className={classNames('ba-dropdown-tree-select-dropdown', mergeClasses(styles.dropdownContent, !isResultOpen && styles.hideContent))}>\r\n {\r\n filteredTreeItems.length\r\n ? (\r\n <FlatTree {...flatTree.getTreeProps()} aria-label=\"Selection\" {...restProps}>\r\n {\r\n Array.from(flatTree.items(), (flatTreeItem : any) => {\r\n const treeItemsProps = flatTreeItem.getTreeItemProps();\r\n const isOpen = _.includes(openItems, flatTreeItem.value);\r\n const isLoading = isOpen && lazyLoadingEnabled && !_.includes(parentsWithChildOrLoaded, flatTreeItem.value);\r\n\r\n if (treeItemsProps.showTips) {\r\n return (\r\n <Tooltip\r\n key={flatTreeItem.value}\r\n withArrow\r\n positioning=\"below\"\r\n content={_.isFunction(onRenderTooltip) ? onRenderTooltip(treeItemsProps) : null}\r\n relationship=\"description\"\r\n >\r\n <div className=\"custom-tree-item\">\r\n <CustomTreeItem\r\n flatTreeItem={flatTreeItem}\r\n checked={checkedItems.includes(flatTreeItem.value)}\r\n onCheckedChange={onItemChecked}\r\n onRenderContent={onRenderContent}\r\n styles={styles}\r\n isOpen={isOpen}\r\n isLoading={isLoading}\r\n lazyLoadingEnabled={lazyLoadingEnabled}\r\n />\r\n </div>\r\n </Tooltip>\r\n );\r\n }\r\n\r\n return (\r\n <div key={flatTreeItem.value}>\r\n <CustomTreeItem\r\n key={flatTreeItem.value}\r\n flatTreeItem={flatTreeItem}\r\n checked={checkedItems.includes(flatTreeItem.value)}\r\n onCheckedChange={onItemChecked}\r\n onRenderContent={onRenderContent}\r\n styles={styles}\r\n isOpen={isOpen}\r\n isLoading={isLoading}\r\n lazyLoadingEnabled={lazyLoadingEnabled}\r\n />\r\n </div>\r\n );\r\n })\r\n }\r\n </FlatTree>\r\n )\r\n : (<div className={styles.noResults}>no results</div>)\r\n }\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nDropdownTreeSelect.defaultProps = {\r\n placeholder: '',\r\n items: [],\r\n checkedItems: [],\r\n onChange: _.noop,\r\n openItems: [],\r\n onOpenChange: _.noop,\r\n onRenderContent: null,\r\n onRenderTooltip: null,\r\n customFilter: undefined,\r\n isMultiSelect: true,\r\n};\r\n"],"names":["getDateSettingDetails","i18n","startDate","endDate","start","getString","_TL_","dateFormatter","skeleton","end","startFromDate","endToDate","getDayPickerStrings","months","_","map","num","getMonth","style","shortMonths","days","day","getDayOfWeek","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","closeButtonAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","DatePickerBasic","props","label","maxDate","minDate","dateValue","placeholder","ariaLabel","onDateChange","disabled","onFormatDate","className","_jsx","classNames","children","DatePicker","value","Date","calendarProps","calendarDayProps","calendarMonthProps","formatDate","onSelectDate","d","handleDateSelection","strings","defaultProps","undefined","getStyles","__","core","_objectSpread","datePickerStyle","dateSettingContainer","creationCommonStyle","advancedSettingsSectionStyle","toggleButtonStyle","paddingLeft","position","opacity","top","right","width","height","margin","padding","marginRight","verticalAlign","fontWeight","display","alignItems","backgroundColor","color","DateSetting","data","adGroupStatus","onChange","activityLogger","classes","useDefaultStyles","currentDate","useMemo","localDate","toLocaleString","timeZone","toIANATimeZone","TimeZone","getFullYear","getDate","_useState","useState","_useState2","_slicedToArray","savedStartDate","setSavedStartDate","rawStartDate","StartDate","rawEndDate","nextYearDateWithTimeZone","EndDate","hasFixedStartDate","_useState3","_useState4","hasEndDate","setHasEndDate","useCallback","date","onStartDateChange","signal","onEndDateChange","options","key","text","onRenderField","fieldProps","render","_jsxs","onEndDateChoiceChange","ev","option","newChoiceValue","concat","useEffect","classnames","Label","ChoiceGroup","selectedKey","DateSettingWithCustomValidation","_ref","validationProps","updateValidation","validateOnLoad","restProps","_objectWithoutProperties","_excluded","dataSettings","useContext","I18nContext","activity","ActivityContext","isInvalidState","setIsInvalidState","updatedDateSettings","setUpdatedDateSettings","validateDate","_ref2","_ref2$hasFixedStartDa","validationErrors","push","newData","shouldDirty","arguments","length","validationError","JSON","stringify","level","status","ValidatedDateSettingInternal","withError","withCustomValidation","ValidatedDateSetting","container","bid","currency","marginTop","messageBar","DefaultBid","currencyCode","id","getRangeWaring","rest","TextField","PriceModelToRange","EnhancedCpc","ManualCpc","ManualCpv","ManualCpm","DefaultBidWithValidation","withControlErrorHandling","withControlErrors","DefaultBidWithWaring","onValidate","field","Type","serverContext","ServerContext","result","_getBidRange","type","bidCeil","bidFloor","getBidRange","_Fragment","htmlFor","CurrentAccount","CurrencyCode","_defineProperty","schema","properties","minimum","maximum","required","ValidatedDefaultBid","onBidChange","onCountValidate","_result$messages","messages","fieldValue","CustomValidatedDefaultBid","isAutoBidding","bidStrategyType","autoBidding","bidStratetyTypeValue","maximizeConversions","maximizeClicks","maxConversionValue","targetRoas","targetCpa","targetImpressionShare","costPerSale","useStyles","makeStyles","statusList","flexDirection","shorthands","gap","flexWrap","alignContent","progressBar","StatusSection","details","denominator","numerator","filter","item","Status","Active","Math","max","items","StatusPopoverItem","name","ProgressBar","thickness","actionCardsList","card","minWidth","border","borderRadius","iconArea","divider","cardsMessage","cardTitle","overflow","textOverflow","textWrap","cardMessage","cardButton","nameText","footer","justifyContent","ActionCard","cardMsg","onCardButtonClicked","cardButtonText","learnMoreLink","StatusIcon","Body2","Tooltip","content","relationship","Body1","block","Button","onClick","Link","href","target","rel","ActionCards","isSmallScreen","contents","Divider","inset","Caption1","count","SimpleCarousel","Carousel","contentWidth","campaignTitle","campaignMsg","DiagnosticCard","campaignStatusTitle","campaignStatusMsg","responsiveSize","detailsToFix","Title2","STEP_PATHS","FLOWS","AD_TYPES_TO_FLOWS","AdTypes","Display","Video","Native","AudienceVideo","Netflix","WIZARD_TYPES","WIZARD_TYPE_TO_FLOW","FLOWS_TO_FIRST_STEP","isAudienceCampaign","flow","isAudienceCampaignEdit","isCTVCampaignEdit","isDealCampaignEdit","isAudienceAdGroupEdit","isDealAdGroupEdit","isCTVAdGroupEdit","isAudienceAdGroupCreation","isAudienceAdGroupMultiAdCreation","isAudience","isAdGroupCreation","isEdit","isDisplayAdsCampaign","isVideoAdsCampaign","isCTVCampaign","isCTVAdGroupCreation","isDealCampaign","isDealAdGroupCreation","isCTVOrDeal","shouldEnableBidAdjustment","_serverContext$Dynami","DynamicPermissions","EnableMSANDisplayCampaigns","EnableMSANVideoCampaigns","isMSANDisplay","isMSANVideo","Permissions","IsAmplifyEnabled","addSummaryStep","steps","permissions","dynamic","DisplayPlusSummaryPage","getAdGroupPanels","XandrDeviceTarget","DisplayPlusAmplify","Enable1PPlacementTargeting","DeviceTargetingForDisplay","EnableKeywordCustomSegments","MultiAdFormat","InMarketAudienceRedesign","ContentTargeting","PremiumStreaming","GenreTargets","basicOptions","advancedOptions","is1PPlacementEnabled","IsDomesticSimplifiedChineseEnabled","StepHeader","title","description","React","headerStyles","mergeStyles","adPreviewStyles","VideoAds","ads","onDataChange","error","hideFooter","loadClipchampPlayer","_ref2$errors","errors","legacyI18n","buildLegacyI18n","ValidationStringMap","_scope$values","ScopeContext","scope","values","cid","aid","PermissionsContext","perfMarker","PerformanceMarkerContext","currentVideoIndex","setCurrentVideoIndex","saveFailed","useFormService","state","context","useWizardService","_state$context$wizard","wizardData","_state$context$wizard2","campaign","editingAdId","deal","campaignId","Id","currentStates","toStrings","onAdsValidation","results","newAdsData","restResults","newAds","ad","removeEmptyAds","dataPatch","_toConsumableArray","isValid","matchStepState","STEP_STATES","LOADING","SAVING","getBasicSettingsSection","Stack","horizontal","token","childrenGap","UnmappedFormErrors","VideoAdsContainer","biddingScheme","allowCopilotVideoGeneration","dealLoaded","AdPreview","onUpdateCurrentVideoIndex","ActuationGroup","actuationProps","isActive","AttentionBeaconGroup","FormErrorGroup","formErrorProps","showAllValidationErrors","BiddingSchemes","BidTypes","BiddingSchemeToBidType","BudgetTypes","AgeRanges","EighteenToTwentyFive","TwentyFiveToThirtyFive","ThirtyFiveToFifty","FiftyToSixtyFive","SixtyFiveAndAbove","Unknown","GenderTypes","Female","Male","DeviceTypes","Computers","DeviceKeys","Tablets","Smartphones","AdGroupCriterions","Criterion","BidAdjustment","DayTimeCriterion","Day","FromHour","FromMinute","ToHour","ToMinute","CriterionType","BundleLocationCriterions","SelectionStatus","Campaign","OriginalBidAdjustment","LocationCriterion","LocationId","Name","NameTypeCombo","Latitude","Longitude","CountryCode","LocationType","EnclosingLocationIds","LesLocationType","BundleCountries","Country","AdPreviewOverideStylesByKey","imagePreviewHeight","imagePreviewWidth","CampaignGoal","CampaignObjectiveType","whitelistedSchemaPropertyKeys","getConversionGoalsDetails","edmCampaign","Customers","$withKey","Accounts","$makeCall","toPromise","readConversionGoalDetails","then","model","pick","getBiddingScheme","displayPlusCampaignObjective","appConfig","get","localStorage","supportsStorage","set","getDisplayPlusCampaignObjective","ObjectiveIDs","Conversions","goalDetails","IsActiveConversionGoalPresent","getBiddingSchemeForConversions","Consideration","Promise","resolve","Awareness","AdsError","_createClass","message","property","code","_classCallCheck","this","useSkipAdCreationState","_useWizardService","wizardState","wizardSend","send","isSkipAdCreation","WIZARD_EVENTS","UPDATE_WIZARD_DATA","useAdsRepository","saveAsParam","saveAds","defaultCampaign","defaultAdGroup","_useSkipAdCreationSta","_useSkipAdCreationSta2","setSkipAdCreation","_useContext","RecommendationContext","recommendationContext","scenarioContext","ScenarioContext","activityContext","oDataConfig","getODataConfig","imageOdata","ImageOData","logSuggestionsApplied","useCopilotLoggers","isImageFittingEnabled","_len","args","Array","_key","apply","load","isAudienceFlow","DisplayPlusMultipleAds","ids","isDirty","currentPageIndex","getVideoDeal","createSaveCampaignPromise","BiddingScheme","IsBoostPassCampaignGoalEnabled","getGlobalSelectedCampaignObjective","objectiveType","goal","getActualGoalFromCampaignGoal","CampaignObjectiveSetting","CampaignObjectiveSettingType","saveCampaign","scenario","createActivity","createSaveAdGroupPromise","saveCampaignPromise","campaignData","adGroup","campaignMtModel","isDefaultCampaignStepModel","adGroupModelWithConstraintsPromise","modelConstraints","constraintAdGroupModel","saveAdGroup","isDisplayPlus","createAds","saveAdGroupPromise","adsData","_ref3","_ref4","adGroupData","adGroupMtModel","isDefaultAdGroupStepModel","oldAdsModel","adData","isDisplayAdsCampaignFlow","isMultiAdFormatEnabled","createdAd","savedAds","updatedAds","serverErrors","systemErrors","adSubType","AdFormat","DisplayPlusCopilotRecommendations","logCopilotRecommendations","assetGroup","DisplayPlusCopilotAssetGeneration","totalCopilotAds","adD","creativeData","suggestionIds","creativeMeta","recommendationId","catch","save","_ref5","getDaysInTheFuture","numDaysInTheFuture","futureDate","setDate","getTomorrow","DNVBidRecommendations","CampaignTypes","Audience","CampaignSubTypes","AudienceStatic","CPC","USD","ALL","DZD","XCD","ARS","AUD","EUR","BDT","BWP","BRL","BZD","BND","BGN","BYN","XAF","CAD","LKR","CLP","TWD","COP","CRC","HRK","CZK","XOF","DKK","DOP","ETB","GHS","GTQ","HUF","ISK","INR","IDR","JMD","JPY","KZT","KES","KRW","KGS","CHF","MWK","MYR","MVR","MUR","MXN","MNT","MAD","NZD","NGN","NOK","PKR","PEN","PHP","PLN","RUB","RWF","SGD","VND","ZAR","SEK","THB","TOP","TTD","TRY","UGX","MKD","EGP","GBP","TZS","UYU","UZS","ZMW","FJD","HKD","MOP","AZN","BHD","AMD","GEL","ILS","JOD","KWD","LBP","OMR","QAR","SAR","TND","CPM","DisplayAds","BrandAwarenessVideoAds","getBidRecommendationsRange","campaignBidTypeInfo","campaignType","campaignSubType","biddingSchemeType","campaignTypeRecommendations","campaignSubTypeKey","CampaignSubTypeTextMapping","campaignSubTypeRecommendations","biddingSchemeKey","find","toUpperCase","includes","biddingSchemeRecommendations","bidRecommendationsData","bidRecommendation","getBidRecommendations","_cpmBidRange","cpmRange","cpmRecommendation","CpmBid","FloorValue","cpcRange","cpcRecommendation","SearchBid","getInitDeviceTypes","isCTVFlow","Object","keys","Devices","getDealMiniumBid","exchangeRateMapping","getAccountExchangeRateFromLocalStorage","getConvertedCurrencyDealMinimumBid","MinimumBid","Currency","val","getDefaultCampaign","generateNameSuggestionSuffix","Budget","Amount","MinXandrDailyBudgetRangePerCurrency","Languages","Target","CampaignSubType","CampaignType","conversionGoals","originalConversionGoals","goalSelection","goalScopeSelection","Scopes","ACCOUNT","ceil","getDefaultAdGroup","bidRecommendations","VideoViewsCPMBidRange","locationTargets","bidMode","currentLevelSettings","initLocations","peopleInLocation","peopleSearchingForLocation","targetOption","parentLevelSettings","useParentLevel","adSchedules","dayTimeRanges","deviceTypes","initialDeviceTypes","device","criterion","bidAdjustment","ageRanges","initialAgeRanges","genderTypes","initialGenderTypes","audiences","initialAudiences","interests","initialInterests","FrequencyCapSettings","genreTargets","initialGenreTargets","reachEstimation","useVideoAdsRepository","instrumentation","InstrumentationContext","createScenario","versionForLog","getLogVersion","logger","getLoggerWithoutPageInfo","CurrentCustomer","videoRepository","createVideoRepository","folderRepository","createFolderRepository","imageRepository","createImageRepository","_useAdsRepository","videoPromises","forEach","video","uploadVideoMetadata","videoMetadata","newVideoFromMTObject","uploadVideoIfNeeded","compact","appliedVideoAssetIds","idString","adCreatorStyles","currentImageIndex","setCurrentImageIndex","_useImagePicker","useImagePicker","displayImagePicker","setDisplayImagePicker","selectedMediaPanelSource","setSelectedMediaPanelSource","onNewImageSelected","imagePlacements","imagePlacement","imagePlacementsToImage","crops","defaults","FinalUrls","tokens","PopulateImages","DisplayAdsContainer","onUpdateCurrentImageIndex","_getBidRecommendation","useDisplayAdsRepository","isCopilotEnabled","setIsCopilotEnabled","isCopilotRegionRestricted","feature","isRegionRestricted","Activity","DisplayAdsWithCopilot","DisplayAdsWithoutCopilot","footerContainer","columnGap","NativeAdFooter","DefaultButton","SAVE_AND_GOTO","flowFactors","stepId","NAVIGATE_TO","getDefaultBidForCPCBiddingScheme","RecommendCPCBid","formatDecimal","maximumFractionDigits","minimumFractionDigits","_ref$DynamicPermissio","lifetimeBudgetProperties","CampaignLifetimeBudget","UseCampaignLevelDates","getBudgetRange","Daily","Default","TargetSetting","initialIndustryTargets","initialNegativeIndustryTargets","initialJobTargets","initialNegativeJobTargets","initialCompanyNameTargets","initialNegativeCompanyNameTargets","companyNameTargets","negativeCompanyNameTargets","UseOptimizedTargeting","AdRotation","ROTATION_OPTIONS","OPTIMIZED_FOR_CLICKS","_extraPlacementInfo","EPT","Responsive","MSAN","WideImage","previewTitle","previewHeaderTitle","customClassName","disclaimerMessage","editingPlacementType","MSEdgeSingleCarousel","MSNInArticle","MSNSmallHeadline","SquareImage","Outlook","Mobile","Web","Boost","WindowsSpotlight","hideHeaderButtons","DiscoverCard","StartMenu","hasLogo","ActionCenter","Banner","Prong1Prong2Feed","Coachmark","getIndicatorsWidth","placements","_ref$palette","palette","extensionEditorStyles","nativeAdStepShell","nativeAdImagePreviewCarousel","bottom","left","transform","transformations","indicatorsWidth","join","whiteSpace","fontSize","boxSizing","maxWidth","wordWrap","flex","rightStyles","leftStyles","headerStackStyles","imageExperienceStyle","textAssetStyle","businessNameStyle","imageListLoadingContainer","minHeight","paddingTop","imageListErrorContainer","lineHeight","flexGrow","marginLeft","adPreviewPlacementHeader","adPreviewPlacementContainer","borderColor","paddingBottom","textAlign","boxShadow","NativeAdInternal","supportImageFitting","_ref$loadClipchampPla","finalHideFooter","setBiddingScheme","biddingSchemeContext","biddingSchemeRes","useBiddingScheme","stylingProps","component","getClasses","useResponsiveStyles","ValidationGroup","AssetGroup","DisplayPlusNativeAds","isSaving","isCanceling","CANCELING","ScaleUnit","NativeAd","withScope","SingleNativeAdStepShell","stepData","nativeAd","useNativeAdRepository","isVideoAsAnAssetEnabled","VideoAsAnAsset","saveAdsWithMetadata","adThumbailRoot","background","cardPreview","adLabel","WebkitLineClamp","WebkitBoxOrient","header","hoverButtons","rowGap","zIndex","hoverButton","AdThumbnail","onDeleteAdClicked","idx","adTitle","Headlines","Headline0","adId","adDescription","Descriptions","Description0","businessName","BusinessName","adImageUrl","Images","ImageList","src","onEditAdClick","onDeleteAd","deletingAdId","Dialog","Card","tabIndex","CardPreview","alt","CardHeader","Text","weight","CardFooter","shape","icon","EditRegular","DialogTrigger","disableButtonEnhancement","DeleteRegular","DialogSurface","DialogBody","DialogTitle","DialogContent","DialogActions","appearance","useFluentV2Styles","button","addIcon","addNewAdButtonRoot","NativeAdsContainer","fluentV2Styles","updateData","adsToUpdate","deleteAd","adsWithoutDeletedAd","updatedFlow","adIds","wrap","AddRegular","MultiAdsStepShell","useMultipleNativeAdsRepository","odata","DependencyResolver","odataCallerFormatter","targets","host","path","request","customHeader","getEstimation","url","payload","post","getValueWithUnit","unit","isNumber","has","unitValueMap","None","Thousand","Million","Billion","EstimationMeter","low","high","estimationLow","setEstimationLow","estimationHigh","setEstimationHigh","valLow","valHigh","HorizontalBarChart","chartData","horizontalBarChartdata","x","y","barHeight","hideTooltip","hideLabels","styles","chart","chartTitle","root","getReachEstimateStyles","reachEstimateControl","marginBottom","estimateHelpContent","estimateNote","panel","white","panelBody","reachEstimateTitle","impressionsCountMessage","convertToLocalStyle","helpbuttonStyle","impressionsCount","meterContainer","specificMeter","broadMeter","audienceSpecificLabel","audienceBroadLabel","arrow","impreAndClicksOptions","noDecimalOptions","formatBigDecimal","formatBigNumber","KEY","formatEstimation","estimationAudienceUnit","chartContainer","spacingVerticalMNudge","ReachEstimationBreakdown","ageOnlyEstimation","genderOnlyEstimation","locationOnlyEstimation","audienceOnlyEstimation","interestOnlyEstimation","_React$useState","_React$useState2","openItems","setOpenItems","estimations","ageEstimation","genderEstimation","locationEstimation","audienceEstimation","interestEstimation","yAxisCalloutData","sort","a","b","estimation","legend","Accordion","onToggle","_event","multiple","collapsible","AccordionItem","AccordionHeader","AccordionPanel","variant","barChartCustomData","dataPoint","displayName","titleReach","titleImpression","getEstValsAndText","est","estImpressionsHighVal","High","Value","estImpressionsHighUnit","Unit","estImpressionsHigh","estImpressionsLowVal","Low","estImpressionsLowUnit","estImpressionsLow","ReachEstimate","estimationData","isLoading","pricingModel","isImpressionTooSpecific","privacyResult","isCampaignCreationPlannerIntegrationEnabled","showImpressions","hasAudienceRemarketingList","showBreakdown","audienceSize","showPanel","estimatedReach","setEstimatedReach","_useState5","_useState6","estimatedReachLow","setEstimatedReachLow","_useState7","_useState8","estimatedReachText","setEstimatedReachText","_useState9","_useState10","estimatedImpression","setEstimatedImpression","_useState11","_useState12","estimatedImpressionLow","setEstimatedImpressionLow","_useState13","_useState14","estimatedImpressionText","setEstimatedImpressionText","_useState15","_useState16","errorMessage","setErrorMessage","updateEstimatesOnMeter","_getEstValsAndText","EstImpression","_getEstValsAndText2","estImpressionText","estImpressionLow","estImpressionHigh","estimationText","_getEstValsAndText3","EstAudienceSize","_getEstValsAndText4","estReachText","estReachLow","estReachHigh","errMessage","Spinner","size","SpinnerSize","large","ariaLive","labelPosition","HelpPopup","topic","topicKey","MessageBar","messageBarType","MessageBarType","warning","isMultiline","validatedReachEstimate","getLocationIds","bundleCountries","_locationTargets$curr","currentLocations","c","reduce","locationIds","cl","getRadiusCriterions","radiusTargets","CenterLatitude","RadiusCriterion","CenterLongitude","Radius","getExcludedLocationIds","_locationTargets$curr2","getAudienceCriterionIds","_ref7","isArray","audienceIds","audience","AudienceId","getInterestIds","_ref8","getExcludedInterestIds","_ref9","getOtherAudienceIds","_ref10","getExcludedOtherAudienceIds","_ref11","getAudienceIds","_ref12","getExcludedAudienceIds","_ref13","getAgeRanges","_ref14","ar","AgeRangesCampaignToAdInsight","getDevices","_ref15","campaignBiddingScheme","dealDetails","BidStrategyToDevices","getAdSchedule","_ref16","adSchedulesBulkUpsert","_a$Criterion$DayTimeC","StartHour","EndHour","formatReachEstimateData","_ref17","campaignSubtype","Age","Includes","Gender","Device","Location","Excludes","RadiusTargets","timeZoneMapper","getAccountIANATimeZone","isXandrDisplayAdsCampaign","CampaignSubTypeMapping","areCriterionTargetsSet","negativeTargets","isTargetSet","targetSetting","isEditFlow","getTargetSettingsFromCriterions","targetSettings","isTargetSetCompanyName","isTargetSetJobFunction","jobTargets","negativeJobTargets","isTargetSetIndustry","industry","negativeIndustry","isTargetSetAudience","getTargetsFromAdgroupModel","age","gender","location","Company","company","Industry","JobFunction","TargetingEstimation","types","audienceUsePrivacyCheck","_ref2$adGroup","_ref2$campaign","audienceCriterion","AudienceType","otherParams","AutoTargeting","CampaignBiddingStrategy","BidStrategy","getOtherParams","_useMemo","targetsForAudienceSize","bidKeyToSend","bidValue","Bid","Number","DailyBudget","_useMemo2","targetsForAudienceSizeEstimation","targetsForAudienceKPIEstimation","interestOnlyTargets","otherAudienceOnlyTargets","subTypes","_useTargetingEstimati","campaignSubTypes","urlBase","audienceEstimationUrl","audienceSizeEstimationUrl","privacyCheckUrl","setIsLoading","setData","setIsImpressionTooSpecific","setPrivacyResult","setAudienceSize","setAgeOnlyEstimation","setGenderOnlyEstimation","setLocationOnlyEstimation","_useState17","_useState18","setAudienceOnlyEstimation","_useState19","_useState20","setInterestOnlyEstimation","defaultPrivacyCheckResult","CheckResult","getAudienceReachEstimation","getAgeOnlyEstimation","getGenderOnlyEstimation","getLocationOnlyEstimation","getAudienceOnlyEstimation","getInterestOnlyEstimation","audienceSizeEstimation","audiencePrivacyCheck","ageOnly","genderOnly","locationOnly","audienceOnly","interestOnly","IsImpressionTooSpecific","err","finally","useTargetingEstimationCaller","_useTargetingEstimati2","isRecommendationDataLoading","estClick","EstClick","estCTR","EstCTR","estSpend","EstSpend","estAvgCPC","EstAvgCPC","dashColor","PredictiveTargetingDescription","query","PredictiveTargetingHeader","DataTrending","SectionShimmer","index","Shimmer","getCollapsiblePanelStyles","components","theme","borderBottom","themePrimary","themeDarker","textDecoration","getAdGroupStyles","collapsiblePanel","toggle","alignSelf","adgroupShell","adgroupOptions","estimationPart","estimationPartEditFlow","hide","Title","titleKey","titleText","PredictiveTargetingControlHeaderInternal","onToggleEnabledChanged","alwaysDisabled","isEnabled","doesAdGroupHaveAudienceTargeted","doesAdGroupHaveInterestTargeted","doesAdGroupHaveCompanyNameTarget","doesAdGroupHaveJobFunctionTarget","doesAdGroupHaveIndustryTarget","doesAdGroupHaveAgeTarget","doesAdGroupHaveGenderTarget","doesAdGroupHaveDeviceTarget","isVideoCampaign","Toggle","inlineLabel","e","checked","PredictiveTargetingControlHeader","formatPlacements","BoostAdunitIds","Productivity","adUnitIds","PlacementDataMapping","productivityIcon","HomePages","homePagesIcon","Games","thematicBundleIcon","placementsIdMap","placementsOptionStyle","renderPlacements","iconSectionStyle","iconSectionDisabled","iconSectionChecked","iconSection","placementCard","titleStyle","subheaderStyle","ValidatedPlacementsFunctionPicker","initialSelectedPlacements","placement","initialSelectedAdUnitIds","i","setSelectedKey","selectedPlacements","setSelectedPlacements","selectedAdUnitIds","setSelectedAdUnitIds","placementsDisabledStates","setPlacementsDisabledStates","savedSelectedPlacements","savedSelectedAdUnitIds","newPlacementsDisabledStates","onChangeAllSpecific","handlePlacementOnChange","isChecked","currentId","currentAdUnitIds","newSelectedPlacements","newSelectedAdUnitIds","placementsAllSpecificChoiceGroup","CampaignOData","call","currentAccount","PlacementExclusionLists","oolist","severeWarning","itemStyle","Url","placementsCheckboxes","currentItemStyle","itemStyleDisabled","itemStyleChecked","checkedState","disabledState","Checkbox","boxSide","onRenderLabel","AdSchedule","isCreate","hideUseCampaignSetting","showBidAdjustmentColumn","setAdScheduleViewCallback","isDateSettingsDisplayed","_ref3$adSchedules","campaignAdSchedules","ValidatedLegacyDateSetting","ValidatedLegacyAdSchedule","isCreation","hideMinuteOptions","entity","setAdScheduleView","campaignDayTimeRanges","TARGET_OPTIONS","freeze","BID_ONLY","TARGET_AND_BID","TARGET_OPTIONS_TO_TEXT","TARGET_OPTIONS_TO_DESCRIPTION","TargetItems","TargetOrBidSelector","styleClass","isInitialized","setIsInitialized","areTargetsLoaded","areTargetsSet","Field","RadioGroup","Radio","ValidatedTargetOrBidSelector","ValidatedAudiencePickerWithAudienceInfo","shouldHide","onAudienceTargetInfoChange","isAudienceCreationWorkflow","campaignGoal","boostConversionBasedSegmentEnabled","hideCustomSegmentsOption","currentLevelTargetInfo","AudienceTargetInfo","resourceName","isForVNext","initAudienceAssociationView","getAudienceTargetErrors","audienceList","customerMatchList","chain","excludeCustomerMatchList","includeCustomerMatchList","updatedItems","getSnapshot","off","currentTargets","isSame","every","on","destroyTargetTypeAsync","sortBy","_audience$Criterion3","newCriterion","createAsync","isEmpty","hydratedAudiences","_audience$Criterion2","_getPreExistingBids","_audience$Criterion","BidMultiplier","existingAudience","getPreExistingBids","stopPropagation","ValidatedAudiencePicker","noop","ValidatedAudiencePickerWithBidAdjustment","withBidAdjustment","typeToValidationKey","allAvailableSelection","initialSelection","selection","selectionWithBidAdjustment","DeviceCampaign","ValidatedBidAdjustment","bidAdjustmentRef","setBidAdjustmentRef","hasBidValueChanged","setHasBidValueChanged","getBidAdjustmentStyles","_props$data","criterionType","_props$readOnly","readOnly","_props$criterionLevel","criterionLevel","_props$isAudienceEdit","isAudienceEdit","view","bidAdjustmentGridview","criterionTypes","supportCashbackSettings","showExclusion","readonly","validationKey","childElementCount","innerHTML","append","el","negativeSelection","difference","currentNegativeTargets","targetKey","isTargetSame","TypeCriterion","isNegativeTargetSame","updatedCriterion","initialSelectionBidAdjustment","accumulator","currentValue","updatedValue","currentBidAdjustment","criterionList","finalizedBid","criterionBid","RemovedDeviceBidAdjustment","AddedDeviceBidAdjustment","getTargetCriterion","propKey","adGroupViewModel","campaignViewModel","negativeCriterionList","negSelection","overrideType","destroyAllAsync","createMultipleAsync","pickerContainer","ref","newRef","CustomAdapter","AdapterFactory","defaultValue","valueToInject","functionToInject","convertEventToValue","event","ValidatedLevelSwitch","withValidation","Switch","ValidatedAudienceInterestsWithAudienceInfo","interest","ValidatedAudienceInterests","ValidatedAudienceInterestsWithBidAdjustment","getPanelErrorProps","needsAttention","TargetingPreferencesInternal","adScheduleView","optimizedTargetingEnabled","setOptimizedTargetingEnabled","isDeviceCampaignToggleVisible","setIsDeviceCampaignToggleVisible","initialAdGroup","_ref3$campaign","isAdGroupEditFlow","XandrNegativeTarget","BoostConversionBasedSegment","ContentTargetingMSNSubcategories","_serverContext$Permis","IsAIMCampaignEnabled","customSegments","deviceTargetingCampaignLevel","campaignLevelDeviceTargets","_useCollapseState","useCollapseState","_useCollapseState2","allAdGroupTargetingSections","adgroupTargetingExpandedSections","setAdGroupTargetingExpandedSections","urlOptions","TrackingUrlTemplate","FinalUrlSuffix","UrlCustomParameters","urlOptionsDetails","getUrlOptionsDetails","webExclusionsError","setExclusionsCallback","exclusionsData","patchedData","exclusions","adgroupExclusions","currentLocationTargets","getCampaignSubType","isAdScheduleCampaignToggleVisible","shouldSelectAllDevices","CampaignSettings","adScheduleDetails","adScheduleDetailsMessage","getAdScheduleDetails","current","supportExclusion","ValidatedBootstrapPanel","defaultExpanded","BootstrapPanel","Heading","Collapse","Body","allPanelItems","checkItems","skipItemsTypeCheck","activeKeys","setActiveKeys","ValidatedPanel","TextTitle","panelKey","formatInterests","showBidAdjustments","isAIMCampaignEnabled","autoTargeting","campaignBiddingStrategy","formatAudience","isIMARedesignEnabled","formatDevices","devices","isCTVSupported","deviceRestrictions","validationPropsField","defaultSelectAll","formatCompany","ValidatedCompanyPicker","formatIndustry","ValidatedIndustryPicker","formatJobFunction","ValidatedJobFunctionPicker","formatCustomSegment","headingRole","headingLevel","noOverflowHidden","ValidatedCustomSegmentsPicker","getContentTargetingPlacementsSummaryText","ContentTargetingPlacements","msnSubcategoriesEnabled","attentionBeaconProps","getExtraProps","ValidatedUrlOptionsParameter","ROTATION_OPTION_TO_TEXT","ValidatedAdRotation","ServerValidatedWebExclusions","showSiteExclusion","ScopeLevel","AdGroup","exclusionData","webExclusionPropertyVal","ValidatedFixedPanel","intent","layout","MessageBarBody","TargetingPreferences","ERROR_ENTITY","Ad","CampaignLocation","CampaignRadius","CampaignNegativeLocation","CampaignLocationIntent","CampaignDayTimeCriterion","CampaignNegativeWebpage","AdGroupLocation","AdGroupRadius","AdGroupNegativeLocation","AdGroupLocationIntent","AdGroupDayTimeCriterion","AdGroupNegativeWebpage","AdGroupLocationTargetError","BidRecommendationInfo","bidRecommendationRange","validationResult","isValidated","messageData","formatCurrency","Alert","Component","DefaultBidWithRecommendation","_useBidRecommendation","checkIsBidInRecommendedRange","useBidRecommendation","_useBidRecommendation2","setValidationResult","nextValue","nextValidationResult","AudienceBidValue","ceilingValue","floorValue","_ref$stopPropagation","_ref$isEdit","isFCapEnabled","useCampaignBidTypeInfo","placeholderText","adGroupBidProp","_getBidRange2","CampaignBidStrategyName","bidStrategy","getBidTitleDetails","ValidatedFrequencyCapping","XandrBidValue","isPremiumStreaming","shouldUsePredefinedFrequencyLimit","bidType","bidRange","VideoViewsCPVBidRange","dealMinimumBid","KeywordCPMBidRange","bidValidationProps","CeilingValue","getNetflixFrequencyCapping","adGroupLocationCriterions","anyComp","entityIs","ServerValidatedLocationTargetSetting","withUnvalidatedControlErrors","ValidatedLocationTargetSetting","ContextualTargetWithStyle","withDefaultStyles","ValidatedContextualTarget","targetsContainer","treeViewContainer","selectionContainer","paddingRight","contextualTargetTitle","AdGroupStepShell","_data$campaign","_data$campaign2","_data$adGroup","_data$campaign3","_data$adGroup2","onDataChangeProp","isMounted","useIsMounted","bundleLocationCriterions","BoostPublisherIds","BoostAccountIds","BoostTriggerIds","contextualTargets","locationRestricted","allAdGroupSettingsSections","adGroupSettingsExpandedSections","setAdGroupSettingsExpandedSections","AgeGenderDisclaimer","PTPerfEstimationUIUpdate","CampaignCreationPlannerIntegration","CampaignCreationPlannerIntegrationMultiAd","AudienceUsePrivacyCheckV2","_serverContext$Netfli","NetflixEnabledCountryCodes","useCampaignLevelDates","allBasicExpand","collapseExpander","shouldServeOnMSAN","campaignShouldServeOnMSAN","isXandrServing","isXandrCampaign","isAudienceAdGroupCreate","isAudienceAdGroupEditFlow","isDealFlow","isDealTypeRestricted","shouldShowDealLocationTarget","hideLocationTarget","hideGenreTarget","Genre","genreOptions","getDealGenreOptions","getGenreOptions","dealCountryCode","TwoLetterCountryCode","dealSupportedLocationType","SupportedLocationType","showAllValidationErrorsMemo","BidValue","updatedData","isValidTargets","NetflixEnabledCountryCodesArr","split","BundleCountriesCodesArr","expiredAdGroupError","bidAmountsLessThanFloorPriceAdGroupError","shouldShowNetflixTC","some","bundleCountry","indexOf","RemainingCharsValidatedTextField","adGroupNameProp","bidValueIcon","startDateEndDateIcon","allowStartDateSelection","allowNoEndDateSelection","allowEndDateSelection","placementTargetIcon","placementTargetingDetails","ValidatedBoostPlacementTarget","hideHeader","boostSetting","publisherIds","accountIds","triggerIds","contextualTargetIcon","contextualTargetDetails","expand","expandKey","getLocationTargetTitleDetails","locationTargetIcon","isRadiusExcludeEnabled","allowNegativeLocationTargeting","showSearchTypeOptions","defaultSelectedSearchType","SEARCH_TYPE","Boundary","isBrandAwarenessCampaignScenario","hideIntent","isAdGroupLevel","showUserParentLevelToggle","allowBidAdjustment","dealInfo","isForDeal","NetflixTCAgreement","formatGenders","genderTarget","genders","formatAgeRanges","ageTarget","AgeRange","formatGenreTargets","ValidatedGenreTargets","adScheduleIcon","dismissible","accountId","customerId","DealImpressionPanel","readCampaignCriterions","Campaigns","CampaignCriterions","$cast","where","readDayTimeCriterions","viewModelToBulkModelForAdSchedules","CampaignName","readLocationCriterions","readDeviceCriterion","adGroupId","defaultNativeAdGroup","defaultProperties","setCustomProperties","defaultTargetingProperties","setCustomTargetingProperties","defaultDealAdGroup","defaultCTVAdGroup","useDefaultAdGroup","useDefaultAdGroupForFlow","_ref$getDefaultAdGrou","_ref$setCustomPropert","_ref$setCustomTargeti","defaultAdGroupData","defaultTargeting","useAdGroupRepository","ServicesEndpoints","odataUrl","CampaignAPI","isOnebox","toString","_useAudienceData","useAudienceData","postponeFetch","pathOverride","audienceType","getAudienceData","inMarketAudienceRedesignEnabled","isAdGroupPublishing","loadAudienceData","allSettledPromiseWrapper","promises","wrappedPromises","p","reason","savedCampaign","savedAdGroup","loadPromises","bundleCountriesAndLocationCriterions","loadBundleCountries","loadCampaign","campaignLocationCriterions","campaignReadLocationCriterions","campaignDeviceCriterions","campaignReadDeviceCriterions","campaignDayTimeCriterions","campaignReadDayTimeCriterions","extend","getDealDetails","loadAdGroup","placementCriterions","readPlacementCriterions","locationCriterions","dayTimeCriterions","targetCriterions","readTargetingCriterions","audienceCriterions","readAudienceCriterions","exclusionRepository","resultMap","acc","_ref3$adGroup","_ref3$locationCriteri","_ref3$dayTimeCriterio","_ref3$targetCriterion","_ref3$audienceCriteri","_ref3$exclusions","_ref3$exclusions2","_ref3$exclusions3","campaignExclusions","_ref3$placementCriter","_ref3$dealDetails","modelToViewModelForAdGroup","adGroupModel","campaignModel","locationCriterionsModel","campaignLocationCriterionsModel","dayTimeCriterionsModel","targetCriterionsModel","audienceCriterionsModel","placementCriterionsModel","isAudienceAds","isDisplayAds","isVideoAds","isEnableMSANDisplayCampaignsEnabled","isEnableMSANVideoCampaignsEnabled","separateIMA","constraintModel","modelToViewModelForCampaign","each","cr","getErrorsPlaceholders","savePromises","saveExclusionsData","CampaignId","AdGroupId","AdvancedSettings","ExcludedSites","saveExclusionsPromise","saveExtensions","reject","_result$reason$server","NegativeSitesResult","EntityErrors","disclaimerSettingsStyles","_ref$iconFontFamily","iconFontFamily","float","entitySelectorStyle","paginationStyle","disclaimerPanelStyles","_ref2$iconFontFamily","alertStyle","neutralSecondary","cursor","resize","gridTemplateColumns","getCampaignStyles","borderTop","budgetContainer","campaignShell","disclaimerContainerWrapper","XandrBudgetAndBidStrategy","minBudget","topicForBidStrategy","ServerValidatedLegacyBudget","budget","validationDailyMinBudget","hideBudgetMinRecommendation","dateManagementSelector","stackStyles","flexShrink","stackItem","InfoLabel","infoTopic","HelpButton","AudienceBudgetBidStrategyInternal","setBudgetView","hideBidStrategy","showBudgetTypeSelection","allowBudgetTypeSelection","allowSharedBudgetLibrarySelection","bidStrategyName","sharedBudgetRef","setSharedBudgetRef","sharedBudget","sharedBudgetView","SharedBudgetSwitchView","newFactory","factory","accountCurrencyCode","withRealTimeUpdates","onBudgetChange","getValues","validate","BudgetId","update","budgetView","grid","gridView","viewModel","sharedBudgetSwitch","subscribe","isCPSSelected","sharedBudgetIsNotAllowedWarning","budgetHeader","ValidatedLegacyBidStrategy","initialValue","i18nNewDesign","validateWithBudget","budgetAmount","protoTypes","PropTypes","isRequired","BidStrategyId","BidStrategyName","AudienceBudgetBidStrategy","uiblockerStyle","containerBudgetStyle","sharedBudgetGridWrapper","glyphIconStyle","BudgetBidStrategyDetails","budgetTitleDetails","currencySymbol","getCurrencySymbol","individualBudget","bidStrategyDetails","CampaignGoali18nMap","CampaignGoalTypeBoostV2","campaignGoalText","getBidAdjustmentStylesTargetStyles","audienceModalStyles","modalWidth","audienceExpressionStyle","audienceCombinedListStyle","criterionSettingIndustryStyles","targetGridWidth","audienceAssociationSectionStyle","singleListBoxWidth","audienceTargetsSettingsStyles","audienceBudgetBidsStyles","commonDoubleListBoxStyle","tableStyle","searchboxStyle","fontFamily","editTargetButtonContainer","noTargetSelected","criterionTypeToString","CompanyName","criterionsToFetch","changedKey","validationKeys","criterionsByType","adjustedLocations","modelForParsing","CriterionBid","Multiplier","modelToViewModelForLocationTargets","overrideOriginalBidAdjustment","all","fetchCriterions","initializeWithhAdGroupAudience","allKeys","getAllNoneEmptyTypeKeys","document","createElement","cssText","CallToActionOptOut","isCallToActionOptOut","IsCallToActionOptOut","getAssociatedDisclaimer","repository","association","findAll","disclaimerdata","ValidatedDisclaimerExtension","displayPlusDisclaimerRef","useRef","DisclaimerAdsEnabled","associatedDisclaimer","validateAndWarn","AdExtensionAssociations","disclaimerAdsEnabled","setDisClaimerAdsEnabled","AdsCampaignDisclaimers","selectedDisclaimer","onDisclaimerCheckboxChange","isForNew","dateSettingsManageAtAdGroupLevelText","dateManagementSelectorContainer","DATE_MANAGEMENT_OPTIONS","CampaignLevel","AdGroupLevel","DateManagementSelector","selectionValue","DateManagementInfo","AudienceDateSetting","displayDateManagementSelector","allowDateManagementSelection","BudgetType","getCurrentDate","validateLifetimeBudgetDateSettings","budgetRangeError","numberOfDaysBetweenDates","replace","validateLifetimeBudgetDateRange","logActivity","action","dateSettingWithDefaultStartDate","amendedData","LegacyDateSetting","ValidatedAudienceDateSetting","WebsiteLists","_ref$selectedExclusio","selectedExclusions","_ref$onExclusionsChan","onExclusionsChange","WebsiteListSelector","listType","selected","CampaignStepShell","_ref3$DynamicPermissi","IsConversionAssociationWarningEnabled","ConversionAssociationWarning","IsCampaignLifetimeBudgetEnabled","initialCampaign","_wizardData$lifetimeB","lifetimeBudgetFlowData","_lifetimeBudgetFlowDa","isBudgetTypeEditable","_lifetimeBudgetFlowDa2","isDateManagementEditable","_getCampaignPanels","_serverContext$Dynami2","AudienceMMACTAOptOut","EnableDoubleVerify","IsMSANDisclaimerEnabled","IsMSANISPOTEnabled","getCampaignPanels","isAudienceCampaignEditFlow","isAudienceCampaignCreate","isCTVOrDealFlow","isLifetimeBudgetFeatureEnabled","allowStartDateEdit","onExclusionsListSelected","exclusionsList","websiteExclusionLists","list","advertiserCustomerId","AdvertiserCustomerID","optionsShown","setOptionsShown","dateSettings","dateSettingsDetails","getAudienceDateSettingsDetails","isLifetimeBudget","disclaimerRepositoryRef","Repository","DisclaimerAdExtension","skipExtensionCache","DisclaimerStringMap","devicesDetails","getDeviceDetails","filterOutBidPanel","CpvBid","getLaterDate","pricingModelUpdate","PricingModel","getMessageType","customConfirmMessages","onAdGroupValidate","allCampaignSettingsSections","campaignSettingsExpandedSections","setCampaignSettingsExpandedSections","_useCollapseState3","_useCollapseState4","allAdvancedCampaignSettingsSections","advancedCampaignSettingsExpandedSections","setAdvancedCampaignSettingsExpandedSections","advancedSettingsExpand","WebsiteExclusionLists","BudgetAndBidStrategy","setting","verifiedTrackingSettingsValidationProps","campaignFromData","VerifiedTrackingSettings","initialCampaignLevelDeviceTargets","setAssociatedDisclaimer","disclaimer","campaignNameProp","budgetBidStrategyIcon","conversionGoalsIcon","ValidatedConversionGoals","showTrackingStatusIcon","bidAdjustmentIcon","AllowDisclaimerEnabled","usePanel","isNativeAd","CallToActionImg","_data$websiteExclusio","UrlOptionsImg","phoneDesktopIcon","iconStyles","ValidatedBidAdjustmentGrid","webExclusionsIcon","showIPExclusion","showAccordion","siteInputProps","ipInputProps","headingClassName","Ruler","formatVendorSettings","ThirdPartyMeasurementV3WithValidation","AdGroupNegativeReferenceId","_ref$overrideType","AdGroupName","viewModelToBulkModelForBidAdjustmentUI","ageTargets","negativeAgeRanges","negativeGenderTypes","industryTargets","negativeIndustryTargets","ageTargetCriterions","negativeAgeTargetCriterions","genderTargetCriterions","negativeGenderTargetCriterions","jobTargetCriterions","negativeJobTargetCriterions","industryTargetCriterions","negativeIndustryTargetCriterions","companyNameTargetCriterions","negativeCompanyNameTargetCriterions","useCampaignRepository","isPublishing","viewModelToBulkModelForDisclaimerAssociation","viewModelToBulkModelForVerifiedTrackingSettings","saveAdGroupsPromise","customTargetingBulkModel","useCampaignEditRepository","_ref2$DynamicPermissi","isAudienceMMACTAOptOutEnabled","isAudienceMMACTADefaultOptOutEnabled","AudienceMMACTADefaultOptOut","isWebsiteExclusionListsEnabled","isCTVCampaignFlow","isDealCampaignFlow","getListsByCampaignId","saveWebsiteExclusionListsPromise","AdvanceSettings","Exclusions","ExcludedIPs","associateListsToCampaign","BudgetBidCampaignImportNotificationActivity","createScenarioAndActivity","scenarioName","activityName","stepContexts","CAMPAIGN_EDIT","initialData","showBudgetBidCampaignNotifications","campaignItemList","oldBudget","newBudget","oldBidStrategy","newBidStrategy","NegativeIPsResult","useSummarySchemaData","isAudienceCampaignFlow","timeDisplayType","setTimeDisplayType","numberOfAds","isMultiAdsAudienceCampaign","preferencesService","_preferencesService","initialize","isTwelveHourDisplay","findByName","Data","locations","loc","hideGenreTargetForDeal","isUseCampaignLevelDates","adsPanel","isRendered","adCreation","numAds","adGroupName","locationTargeting","genderTargeting","ageRangeTargeting","genreTargeting","predictiveTargeting","isPredictiveTargetingEnabled","advancedTargetingSeparator","companyTargets","negativeCompanyTargets","jobFunction","adScheduleAdGroup","useSearcherTimeZone","AdScheduleUseSearcherTimeZone","campaignName","startEndDatesCampaign","isDateLevelDisplayed","buildSchemaData","SummaryStepShell","schemaData","onAdsHeaderActionClick","onTargetingHeaderActionClick","onCampaignSettingsHeaderActionClick","separatorStyles","actionButton","iconName","dynamicProps","targeting","buildDefaultDataProperty","hd1","campaignSettings","buildSchema","GeneratedUI","customComponentTypes","summaryPageComponentTypes","useSummaryRepository","dayTimeCriterionsCampaign","readDayTimeCriterionsCampaign","saveJustAdGroup","useSelectedAdFormatState","updateSelectedAdFormat","selectedAdFormat","MultiAdFormatStepShell","_ref$adsType","adsType","_useSelectedAdFormatS","_useSelectedAdFormatS2","setSelectedAdFormat","isLoaded","setIsLoaded","isDisabled","setIsDisabled","onFormatChange","ACTIVE","AdFormatOption","SingleMultiAdFormatStepShell","isMultipleNative","useMultiAdFormatRepository","isMultipleFlow","nativeAdSave","multipleNativeAdSave","displayAdSave","videoAdSave","dataToSave","adResource","ResourceIdentifier","deleteAds","adsViewModel","adViewModel","fields","viewModelToModelForAdToDelete","bulkUpdate","bind","DisplayAdPreview","resizeImageHeightForThumbnail","image","cropHeight","cropWidth","aspectRatio","min","CroppedImageView","originalWidth","resizeImageHeight","SourceWidth","SourceX","cropX","SourceY","cropY","NativeAdPreview","imageContainer","nativeAdImage","nativeAdImageForeground","textOverlay","Caption2","VideoAdPreview","controls","kind","srcLang","default","getConfigByType","ContentViewRegular","ImageMultipleRegular","VideoRegular","getDescriptionByType","imageCount","headLinesCount","longHeadLinesCount","LongHeadlines","descriptionCount","headlineCount","descCount","_ad$data$image","targetWidth","targetHeight","duration","videoDuration","minutes","floor","seconds","padStart","getAdThumbnailStyles","objectFit","backgroundImage","previewDescription","getAdsContainerStyles","menuButton","menuContainer","toolbar","radioGroup","radioOption","emptyViewContainer","FilterFormat","native","MultiAdFormatAdsContainer","filterFormat","setFilterFormat","onClickCreateNewAd","Menu","MenuTrigger","MenuButton","MenuPopover","MenuList","MenuItem","ImageRegular","change","horizontalAlign","DesertSvg","adType","editWizardTypeList","StepConfig","StepConfigMultiAdFormat","DisplayPlusWizardInternal","wizardType","flowType","routeToNavigateToWhenDone","initialWizardData","isEnableMultiAdFormat","isConversionAssociationWarningEnabled","wizardPerfMarker","createChild","initialStep","step","machineOptions","guards","needsConfirming","getNeedConfirming","getStepConfigMultiAdFormat","getStepConfig","config","initialFlowFactors","getFlow","actions","onDone","onExited","attachStepActivities","setClarityTag","DisplayPlusCampaigns","PerformanceMarkerProvider","immediateDone","Scenario","MmpFetchProvider","Wizard","WizardPerfMarker","wizardName","wizardMarker","LayoutContainer","template","DefaultTemplate","Layout","StepContainer","BusyBlocker","loadingText","CancelWizardDialog","ConfirmWizardDialog","useConfirmDialogConfigWithLogger","DisplayPlusWizard","withPermissions","withLoggingContext","withRecommendationContext","spacingVerticalL","spacingVerticalNone","SaveAndPublish","isBlocking","FETCHING","onNextClicked","SAVE_AND_EXIT","buttonText","getCurrentStepId","PrimaryButton","SaveAsDraft","_useWizardService2","SaveAndExitButton","_useWizardService3","SkipAdCreationButton","_useWizardService4","SAVE_EMPTY_AND_NEXT","NextButton","_useWizardService5","currentStepId","SAVE_AND_NEXT","BackButton","_useWizardService6","onBackClicked","BACK","DisplayPlusStepFooter","nextButtonText","nextDisabled","backButtonText","cancelButtonText","hideBackButton","showAWFWarning","AWFWebExclusionsWarning","isFirstStep","getIsFirstStep","isLastStep","getIsLastStep","currentStep","isInternalUser","useIsInternalUser","wasAdAlreadyCreated","MessageBarTitle","CancelButton","EditFooter","saveAndExitButtonText","AdGroupCreationFooter","StepList","currentFlow","getCurrentFlow","displayMode","useResponsiveSize","Constants","ResponsiveSizeBreakpoints","stepListConfig","getStepListConfig","getDefaultOnItemClickFn","toStep","firstSubStep","s","isBehind","ResponsiveStepList","getOnItemClickFn","DisplayPlusCampaignWizard","withSiteMap","siteMap","getRoutePathById","displayPlusCampaignType","getDisplayPlusCampaignType","videoDeal","ErrorBar","DisplayPlusEditWizard","useDisplayPlusEditWizardStyles","wizardWrapper","DisplayPlusEditCampaignWizard","currentCampaign","isAudienceNativeAdsCampaign","isAudienceCTVCampaign","isAudienceDealCampaign","getWizardType","mergeClasses","DisplayPlusEditAdGroupWizard","currentAdGroup","DisplayPlusCreateAdGroupWizard","UnstyledCompanyPicker","_validationProps$data","companyAssociationRef","setCompanyAssociationRef","companyAssociationView","companyView","CompanyNameTargetSetting","showBidOnlyNote","defaultBidAdjustment","companyNameTarget","CompanyNameCriterion","negativeCompanyNameTarget","companies","_ref6","isCompanyTargetSame","pluck","isNegativeCompanyTargetSame","_ref8$BidAdjustment","companyTarget","criterionData","companyNameCriterion","criterionHelper","buildLinkedInCriterion","criterionSettingCompanyStyles","contentTargetingGroups","placementId","CheckOOInventoryBlocklists","useContentTargetingStyles","contentTargetingSpecificOptionsContainerStyle","contentTargetingSpecificOptionContainerStyle","spacingHorizontalXS","spacingHorizontalNone","spacingVerticalXS","spacingVerticalS","strokeWidthThin","colorNeutralStroke1","controlWrapperStyle","labelDescriptionStyle","colorNeutralForeground3","entireSpecificSelectionStyle","ENTIRE_MICROSOFT_NETWORK","SPECIFIC_PLACEMENTS","EXCLUDED_PLACEMENT_IDS","isTheEntireMicrosoftNetworkSelected","EntireNetworkOrSpecificSelection","entireSpecificSelection","onChangeEntireSpecific","allPlacementsLabel","allPlacementsSubLabel","specificPlacementsLabel","specificPlacementsSubLabel","Body1Stronger","ContentTargetingSpecificPlacements","groups","onToggleContentTargetingPlacement","isOnlyOnePlacementSelected","group","placementsSectionLabel","placementOptionsLabel","filteredContentTargetingGroups","setEntireSpecificSelection","v","PlacementId","radioSelection","_e","UnstyledIndustryPicker","industryAssociationRef","setIndustryAssociationRef","industryAssociationView","industryView","IndustryTargetSetting","industryTargetsBidAdjustment","IndustryCriterion","targetWithBidAdjustment","searchView","searchTreeInitializationPromise","treeView","node","child","innerChildren","innerChild","flatIndustryTargets","flatten","selectedIndustries","industryCriterion","selectedNegativeIndustries","trigger","UnstyledIndustryPickerWithBidAdjustment","UnstyledJobFunctionPicker","jobFunctionAssociationRef","setJobFunctionAssociationRef","jobFunctionAssociationView","jobFunctionView","JobFunctionTargetSetting","jobTargetBidAdjustments","jobTarget","JobFunctionCriterion","negativeJobTarget","initializeSearchDataTask","allJobTargets","searchResultView","selectedJobTargets","jobFunctionCriterion","selectedNegativeJobTargets","UnstyledJobFunctionPickerWithBidAdjustment","criterionSettingJobFunctionStyles","TargetEditButton","isBidAdjustmentsVisible","isTargetSelected","inline","targetsFieldNameList","HOC","setIsBidAdjustmentsVisible","targetInfo","setTargetInfo","bidAdjustmentclasses","_props$validationProp","any","targetsFieldName","updateTargetInfo","info","bidAdjustmentView","BidAdjustmentView","updateBidAdjustmentVisibility","isVisible","targetEditButtonProps","getNativeAdsStyles","extraPlacementInfo","MSANV2","MSEdgeCarousel","MSANBanner","MSANRiver","MSNCarousel","MSNPartnerStripe","MSNRestoday","MSANRectangle","MSEdgeMobile","responsiveMsanMMAConfig","placementSetName","placementTypes","msanMMAV2Config","msanMMAConfig","responsiveMsanMMABoostConfig","responsiveMsanMMABoostConfigV2","msanMMABoostConfig","msanMMABoostConfigV2","mma_191x100","edge_178x100","msan_191x100","msan_150x100","getImageExperienceStyles","isMMAV2Enabled","getNativeAdPanels","isVideo","isDisplay","multiAdFormatAdPanels","advancedPanels","AdvancedURLOptionsForVideo","AdvancedURLOptionsForDisplay","isImpressionTrackingForDisplayAndVideoEnabled","panels","basicPanels","IsMSANLogoAndCTAForMMAEnabled","ValidatedCallToAction","languageValue","ctaText","ctaAriaText","ValidatedLegacyCallToAction","isBoostScenario","isBoostCustomCTAEnabled","formatImpressionTrackingSetting","impressionTrackingUrls","_extractImpressionTra","extractImpressionTrackingSetting","_extractImpressionTra2","firstUrl","secondUrl","getImpressionTrackingComponent","validatedImpressionTrackingSetting","impressionTrackingSettingRef","setImpressionTrackingSettingRef","ImpressionTrackingUrls","window","globalLegacyI18n","i18nMerged","mergeI18n","impressionTrackingViewReact","impressionTrackingView","ImpressionTrackingView","initialImpressionTrackingUrls","isIASSectionVisible","isVerticalUrlInput","assign","adEditorOverrideStyle","disclaimerInfo","ValidatedAnchorAd","BoostAnchorsData","BoostAnchors","defaultSelectedKey","onUpdate","nativeAdMobileFinalUrlsProp","propertyIs","ServerValidatedMobileFinalUrl","ValidatedMobileUrl","impressionTrackingSettingsProp","ValidatedImpressionTrackingSetting","ImpressionTrackingSetting","mobileFinalUrls","trackingUrlTemplate","finalUrlSuffix","urlCustomParameters","verifiedTrackingSettings","CallToAction","CallToActionText","CallToActionAriaText","setNewCTACallback","shouldShowDisclaimerPanel","allAdvancedSettingsSections","advancedSettingsExpandedSections","setAdvancedSettingsExpandedSections","isThirdPartyMeasurementEnabled","allAdvancedSettingsExpand","advancedSettingsSectionExpanded","setAdvancedSettingsSectionExpanded","onAdvancedSettingsSectionToggle","expanded","mobileFinalUrlValidationProps","MobileFinalUrls","mobileFinalUrlDetails","isEmptyUrl","first","serverValidatedMobileFinalUrl","validateOnRender","validateOnDomain","validatedUrlOptionsParameter","thirdPartyMeasurementWithValidation","ThirdPartyMeasurementComponentWithValidation","ThirdPartyMeasurementV2WithValidation","ThirdPartyMeasurementWithValidation","callToAction","language","cta","anchorAd","MobileFinalUrlImg","relativePosition","ImpressionsTracking","formatThirdPartyMeasurementSetting","ConnectedImage","Disclaimer","HeadlinesWithRecommendationPrefillInternal","currentData","withInlineRecommendations","isAudienceAd","textAssetCollectionConfig","getTextAssetCollectionConfigByFeature","featureName","headlineConfig","getTextAssetCollectionConfig","headlinesRecommendationText","headlines","rec","prevHeadlineRecommendation","setPrevHeadlineRecommendation","TextAssetCollectionWithRecommendations","isOptional","showDeleteButton","enableCopilotRecommendations","HeadlinesWithRecommendationPrefill","LongHeadlinesWithRecommendationPrefill","longHeadlineConfig","longHeadlinesRecommendationText","longHeadlines","prevLongHeadlineRecommendation","setPrevLongHeadlineRecommendation","LongHeadline0","DescriptionsWithRecommendationPrefill","descriptionsConfig","descriptionsRecommendationText","descriptions","prevDescriptionRecommendation","setPrevDescriptionRecommendation","TextAssetCollectionWithRecommendationPrefillInternal","fetchRecommendationAssets","cancelFetchRecommendationAssetsJob","currentHeadlines","currentLongHeadlines","currentDescriptions","textAssetConfig","TextAssetCollectionWithRecommendationPrefill","TextAssetCollectionWithCoPilotInternal","setAddNewShortHeadlinesCallback","setAddNewLongHeadlinesCallback","setAddNewDescriptionCallback","headlineAssetCollection","HeadlineAssetCollection","longHeadlineAssetCollection","LongHeadlineAssetCollection","descriptionAssetCollection","DescriptionAssetCollection","TextAssetCollectionWithCoPilot","nativeAdHotspotsProp","andComp","ValidatedHotspot","hotspots","HotspotPanel","onUpdateHotspots","newHostpots","missField","glyph","actionText","uri","hotspotStrings","hotspot","desc","uniq","validateHotSpot","enableHotSpotPlacement","hideTitle","showHotspotCount","getMultiAdVideoPreviewStyles","adPreviewTitle","previewContainer","adPreviewHeader","adPreviewRoot","previewTag","MultiAdVideoPreview","videos","_props$selectedVideoI","selectedVideoIdx","selectedVideo","setSelectedVideo","videoRef","source","videoTemplateUIEnabled","VideoTemplateUI","ClipchampPlayer","videoUrl","TAB_IMAGE_ADS","TAB_VIDEO_ADS","videoTypesWithOrder","advancedSettingsStyles","nativeAdBusinessNameProp","nativeAdFinalUrlsProp","ValidatedFinalUrlWithStoreURL","withFinalUrlRecommendationUpdate","ValidatedFinalUrlWithRecommendations","ServerValidatedFinalUrl","getPlacementCount","IsMMAV2Enabled","DisplayPlusNativeAdsInternal","setAds","useClipchamp","UAPLNativeAdIntegration","CopilotCTALogoGeneration","_DynamicPermissions$I","ImageFittingMVP","_DynamicPermissions$I2","ImageFittingExlcudeMAE","ImageFittingUnifiedImageROI","AdPreviewRefresh","finalUrls","FinalUrlForRecommendation","images","LegacyResponsiveAd","nativeAdPanels","allAdSettingsSections","adSettingsExpandedSections","setAdSettingsExpandedSections","finalUrlSection","finalUrlExpandedSection","setFinalUrlExpandedSection","maxUploadNum","addNewDescriptionCallback","addNewShortHeadlinesCallback","addNewLongHeadlinesCallback","finalUrlForCopilotRecommendations","setFinalUrlForCopilotRecommendations","setSelectedVideoIdx","selectedValue","setSelectedValue","imageExperiencePortalContainerState","setImageExperiencePortalContainerState","previewImageId","cropImageObj","previewImagesSharedState","setPreviewImagesSharedState","imageExperienceAddNewImageCallback","setImageExperienceAddNewImageCallback","newCTACallback","_useState21","_useState22","assetAIEnhancementEnabled","setAssetAIEnhancementEnabled","_useState23","_useState24","assetAIEnhancementSettingsCalled","setAssetAIEnhancementSettingsCalled","_useState25","_useState26","useBrandKit","setUseBrandKit","imagesContainerRef","logosContainerRef","portraitContainerRef","shouldLogosBeEnabled","shouldPortraitBeEnabled","collectionsSummary","collection","displayText","displayTextSingular","textCardSummaryDetails","getTextCardSummaryDetails","hotspotSummaryDetails","allAssetsExpand","finalUrlValidationProps","debounce","textAssetsValidationProps","ctaValidationProps","onTabSelect","tab","onReset","ImageAssets","Headline1","Headline2","Description1","_useState27","_useState28","setShouldShowDisclaimerPanel","_useCopilot","useCopilot","currentCTA","skipBusinessNameRecommendation","copilotBanner","suggestionPoller","updateFinalUrlForCopilotRecommendations","urlWithoutScheme","onFinalUrlFocusOut","onFinalUrlKeyUp","finalUrlAdditionalProps","onBlur","onKeyUp","updateFinalUrlCallback","newFinalUrls","getAssetEnhancementSettings","settings","AssetAIEnhancementOptout","serverValidatedFinalUrl","additionalProperties","customUrlProtocol","imageListPortalContainer","ImageListPortalContainerWithControlErrorHandling","containerRef","containerState","isLogos","PerfMaxImageSuggestionCarousel","addImageCallback","isCopilotRecommendations","storeBackedBusinessName","ValidatedStoreBackedBusinessName","advancedSettings","placementCustomizationPredicate","adPreviewConfig","placementConfig","adPlacementsGroupType","AdPlacementsGroupType","msanImageAd","msanBoostImageAd","msanV2ImageAd","adPreview","PerfMaxAdPreviewComponent","PerfMaxAdPreviewUAPL","PerfMaxAdPreview","PerfMaxAdPreviewElement","imageList","updateImageList","shortHeadline","longHeadline","displayUrl","isMSANAd","enableAutoPlay","customPlacementHeaderClassName","customPlacementContainerClassName","TabList","Tab","validatedImageExperienceWrapper","mappedPreviewImageSharedState","ValidatedImageExperienceWrapper","imagesContaineRef","logosContaineRef","isLogoEnabled","isBoostPortraitEnabled","updatePortalContainerState","isCombinedMsanAndMmaAspectRatios","customMaxImageCount","isMSANBoostEnabled","UAPLPMaxIntegration","showCopilotOptionForImage","IsBackgroundSceneEnabled","customAssetLibraryEventHandler","onUploadImage","anActivity","imgId","onImageListUpdate","newImageList","curImageList","newImageIdList","img","curImageIdList","newImages","supportImageUpscale","AudienceImageUpscale","textAssetCollectionWithCopilot","logosContainer","portraitImageContainer","videosContainer","videoAd","CampaignFetchProvider","ValidatedVideoExperienceWithRecommendationFetch","multiVideoMode","allowedVideoSizes","disableRemoveAll","hideRatioLabel","videoExperienceCircleUploadType","disableUploadTextField","videoPickerContainerHeight","copilotEnabled","CopilotRepositoryProvider","finalUrl","locale","getLocale","recommendationType","enableLogoAndCTA","getFinalUrlCardSummaryDetails","FinalUrlImg","ImageAssetsImg","iconAltText","ImageListSummaryCardDetails","limit","VideoAssetsImg","isVideos","LogoAssetsImg","isPortrait","TextAssetsImg","hotspotImg","BusinessNameImg","ValidatedLegacyCallToActionWithLanguage","isDisplayPlusMMA","withActivityContext","withBannerService","modelToViewModelForBulkErrors","bulkUpsertEntityErrorMap","errorProcessor","identity","getBulkApiErrors","errorType","mappedErrorType","mapBulkUpsertErrors","formatIntoTextArrayString","texts","res","textValue","entitySchema","viewModelToModelForAd","_ref$isImageFittingEn","isDeletedEntities","subType","Videos","HotSpots","ActionText","Description","Uri","Glyph","Placement","CallToActionLanguage","getVerifiedTrackingSettingWrite","originalData","UiUnsupportedRatios","isBoostCampaign","flattenedIncludedImageAssetList","getFlattenedImageAssetList","updateAssetsIdsAsync","updates","imageToGenerateThumbnail","originalThumbnailAsset","overrideInfo","copyThumbnailLookToNewImage","bingSrc","portraitImage","setMTImageModel","imageArray","imageObj","isIncluded","isMultimediaAdinMSANEnabled","isMultimediaAd","isBoostPortraitImageEnabled","isBoost200x100ImageEnabled","IsBoost200x100ImageEnabled","isBoostNewAspectRatioSupportEnabled","IsBoostNewAspectRatioSupportEnabled","mtModel","getProcessedDataAsync","processTextAttribute","jsonTextAttribute","object","parse","textAttribute","bulkModelToViewModelForAd","adsModel","originalAdsModel","savedAd","VerifiedTrackingData","thirdPartyMeasurementStringToViewModel","bulkUpsertAdSettingsEntityErrorMap","ResponsiveAd","getBulkUploadEntityType","_ref2$activity","_ref2$imageOdata","_ref4$isImageFittingE","_ref5$isImageFittingE","adsToCreate","adsToDelete","updateAds","createdAds","deletedAds","adsNeededToCreate","adsNeededToUpdate","splitUpdateAndCreateAds","bulkCreate","bulkOrSystemError","bulkResult","console","warn","stack","titleContainer","adFormatContainer","labelContainer","OptionConfigs","getIcon","showHeader","audienceCampaignSettingsStyles","DynamicSearchAdPreviewUAPLUnstyled","_ref$data","TextPart2","DisplayUrl","Path1","Path2","domain","setDescription","urlPath1","setUrlPath1","urlPath2","setUrlPath2","urlDomain","getDomain","_useSinglePlacementLa","useSinglePlacementLayouts","groupType","placementFilterPredicate","tmp","SinglePlacementLayout","evaluateAdCustomizers","combineDescriptions","evaluatedText","adPreviewContainer","DynamicSearchAdPreviewUAPL","pathProps","orComp","ServerValidatedUrlPath","ValidatedUrlPath","AdTextInternal","initializeAdCustomizer","deps","jsDataCampaign","showAdCustomizers","IsRSAIffPopupEnabledFromDeps","useAdCustomizer","AdTextImg","ValidatedTextFieldWithAdCustomizer","containerSelector","DynamicSearchAd","configProps","LearnMoreLink","linkText","AdText","editor","preview","DynamicSearchAdEditor","onAdChanged","alwaysShowError","Token","cachedAd","setCachedAd","allSections","expandedSections","setExpandedSections","settingsExpand","triggerTestUurl","fn","originalView","isInline","uurlLevels","params","testUurl","apiInLog","validatedAd","URLOptionsSection","MetaDataEditor","metaData","assetLibraryConfig","onTextListChange","onChangeImage","disableGenerate","handleGenerate","textErrorMessages","textList","setTextList","onTextListUpdate","str","newTextList","imageSrc","newImage","TextItem","updateText","showHelpPopup","helpTopic","ImageChooser","currentImage","iconProps","getVideoSettingsEditorStyles","videoSettingsEditor","VideoSettingsEditor","videoSettings","setVideoSettings","onLoadingLogo","onChangeLogo","newLogoDataObject","businessNameErrorMessage","updating","currentLogo","logo","prev","onVideoSettingsChanged","onBusinessNameChange","onEdit","onDelete","ImageContainer","onLoadingImage","displayEdit","displayDelete","IconButton","getVideoEditorStyles","videoEditor","overflowY","leftPanelTop","leftPanelMiddle","maxHeight","tabs","borderRight","outlineColor","outlineStyle","metadata","leftPanelBottom","leftPanel","rightPanel","borderLeft","neutralLighterAlt","getScenePickerStyles","scenePicker","HelpPopupInline","Scene","scene","sceneId","onSceneSelected","selectedSceneId","clickFunc","onKeyDown","keyCode","Enter","keyFrame","isSelected","role","ScenePickerView","scenes","effective","getPreviewStyles","neutralLight","fontStyle","fill","panelNames","keyframeTemplateList","TemplateId","TemplateName","Version","Width","Height","TemplateFileName","Image","AspectRatio","MinHeight","MaxLengthInChar","getActiveTemplate","templateId","loadImagePromise","mock","onload","onerror","PanelButton","currentPanel","switchPanel","ScenePanel","setGenerateError","PlaceHolderBoxViewFooterConfig","summary","VideoPanel","footerProps","localizedTextFields","notReady","ItemPlaceholderBoxView","mainViewIcon","videoIcon","mainViewIconLabel","showTime","onVideoLoaded","LoadingBlocker","videoGenerated","Fragment","Panels","isScenePanel","sceneGenerated","generateError","renderPreview","onDismiss","dismissButtonAriaLabel","PreviewView","isSelenium","getParameter","isLocal","isEqualScene","scene1","scene2","isEqual","omit","isSceneChanged","original","isVideoSettingsChanged","isVideoChanged","useEditVideoAdsViewState","videoMetaData","dataService","copilotDataService","onApply","setIsOpen","newImageDataObject","saveVideoWhenApply","isCTV","_useRecommendations","editVideoAdsAssetRecommendations","fetchVideoKeyFrameRecommendations","generateVideo","audio","newVideoMetaData","generateScene","newSceneMetaData","useRecommendations","setScenes","setSelectedSceneId","isApplying","setIsApplying","setVideo","originalVideo","setOriginalVideo","setSceneGenerated","setVideoGenerated","videoScenesCache","setVideoScenesCache","haveEmptyImage","setHaveEmptyImage","newImageObject","setNewImageObject","_usePreviewState","setCurrentPanel","usePreviewState","_ref5$scenes","scenesInner","scenesWithIds","videoSettingsInner","logTrace","generateNewVideo","scenesInCall","isSwitchFromScene","_ref6$scenes","newVideoSettings","msg","delayedVideoGeneration","selectedScene","onScenesUpdated","updatedScenes","onVideoSettingsSelected","handleGenerateVideo","generateNewScene","videoLevelMetaData","handleGenerateScene","newScenes","copyScenes","from","newScenesWithIds","newScene","co","handleApply","newVideoUrl","savedImages","savedLogo","appliedVideoWithId","newVideo","savedMaterial","errorMessages","updatingText","maxLengthOfText","activeTemplate","getTextSizeLimitation","maxLength","haveTextError","haveErrorInScenes","textErrorForSelectedScene","prevScenes","allImages","loadImagePromises","disableApply","minSizeOfImage","getImageSizeLimitation","EditVideoAdsView","isOpen","_useEditVideoAdsViewS","handleTextListChange","evt","currentTarget","findParentElementWithClass","Panel","headerText","PanelType","custom","customWidth","layerProps","main","Overlay","AssetLibrarySpinner","useCustomSize","Icon","VideoEditorWithAddImageWrapperImp","isAssetLibraryAIGCMVPEnabled","initialView","isLiteLandingPageEnabled","assetLibraryUserPreferences","assetLibraryAccountPreferences","ianaTimeZone","showAddImagePanel","setShowAddImagePanel","setNewImageDataObject","setMinSizeOfImage","constants","defaultAspectRatioOption","aspectRatioOption","setAspectRatioOption","showAddLogoPanel","setShowAddLogoPanel","setNewLogoDataObject","onImageAddError","errorCode","Code","getImageValidationErrorMessage","addMediaConfig","getAddImageConfig","hideStockImage","IsSocialMediaImagesEnabled","VIEWS","SocialMedia","mediaRepository","MediaRepository","onSelectLogo","selectedImage","copilotVideoEditorScenario","create","imageSuggestion","adCreatorScenario","instrumentationScenarios","CopilotVideoAd","_useWebsiteSuggestion","useWebsiteSuggestion","adContext","trace","fullUrl","suggestionState","_suggestionState$sugg","suggestion","preDefinedAssetSources","getAssetSourceOptions","CSMLAssetSource","Shutterstock","preDefinedFilter","minSize","AddImageWrapper","LandingPage","imageExperienceProps","finalUrlProtocol","onUpdateFinalUrl","onUpdateFinalUrlPrefix","disabledAssetSources","AddLogoContainer","isImageSelectorDisplayed","onSelectedImagesSet","onImageSelectionCanceled","imageType","isStockPhotoEnabled","isLazyLoadEnabled","staticImagePath","imageOption","imageOptionKeys","Logo","imageOptions","setImageOption","isAdCreatorEnabled","isFinalUrlImageRetrievalEnabled","defaultSelectedPill","isThumbsUpDownEnabled","isTestEnv","recommendationStockImages","hideStockPillControl","VideoEditorWithAddImageWrapper","_ref2$palette","VideoEditorWithDataServices","withCopilotDataServiceLoaded","withAssetLibraryServicesLoaded","loggerTag","CopilotVideoEditor","isAADUser","dateFormat","accountTimeZone","preferenceService","allowedAssetType","FolderAssetType","AppealBase","AppealByIDsForParentEntity","_AppealBase","parentId","_this","_callSuper","Error","_inherits","AppealAllForParentEntity","_AppealBase2","_this2","resolveAppealParams","appealParams","getEditorialReasons","appealParamsPromise","_appealParams$options","getEditorialReasonsByIDsForParentEntity","getAllEntitiesForParentEntity","createAppealParamsWithIDs","getAppealRejections","_appealParams$options2","controller","odataResponse","Errors","utilities","processRejectReasonsFromOdata","editorialAppealAggregator","obj","substring","assertInputs","requestAppeal","appealData","appealIds","requestAppealFunc","_appealParams$options3","requestAppealAllForParentEntity","requestAppealByIDsForParentEntity","panelStylesProp","fabricPanelFixStyle","commands","uiBlockerAdapter","reactUIBlockerStyle","EditorialAppealRequestPanel","onSave","onCancel","appealDataPromise","setAppealData","setAppealIds","isBusy","setIsBusy","hasError","setHasError","handleAppealData","aggregatedRejectReasons","handleAppealDataError","editorialAppealFormData","setEditorialAppealFormData","isEditorialAppealFormDataValid","setIsEditorialAppealFormDataValid","onEditorialAppealChange","onSaveClick","onCancelClick","onRenderFooterContent","Item","isFooterAtBottom","UiBlocker","blocking","LegacyInlineErrorView","LegacyEditorialAppealRequestForm","appealTitle","EventDelegator","getTheme","IMAGE_DIM","maxWidthOfUrlField","paddleWidth","imageExtConfigAll","ImageExt","BingDesktopSingleImage","BingDesktopMultiImage","BingMobileMultiImage","MSEdgeMediumHeadline","MSNSingleCarousel","MSNMediumHeadline","MSNDoubleCarousel","imageExtConfigAllV2","MMAV2MSNRiver","MMAV2MSNSingleCarousel","imageExtConfigSingleImage","imageExtConfigSingleImageV2","imageExtConfigAllMultiImage","ExtensionImagesControlBase","_React$PureComponent","onImageListUpdated","setState","cropImage","replaceImage","onImageListChanged","onImagePreviewRequested","previewCarouselRef","setPreviewIndexByType","newPrefix","protocol","newUrl","newUrlWithProtocol","finalUrlChanged","setFullUrl","onImageCropCancelled","onImageReplaceCancelled","setAddNewImageCallback","callback","setOpenAddImageCallback","openAddImageCallback","newState","isValidUrl","mapSuggestionResponseToState","SuggestionStatus","FetchInProgress","setError","InvalidURL","fetchSuggestions","cancel","minimumSize","getMinimumSizeForImage","getLandingPageSuggestions","landingPageUrl","minimumResolution","newI18n","oldI18n","defaultPreviewFields","previewTexts","getPreviewTexts","EmptyURL","eligibleLayout","eligibleLayouts","ImageExtensionsEnhancements","subscribeToUrlChanged","ComponentSettings","ThemeFluent","setImageControlSetText","setText","setImageControlsValidate","setImageControlSetEligibleLayout","setEligibleLayout","adCreatorInstrumentation","getAdCreatorInstrumentation","SuggestionPoller","jobCompleteCallback","onPollingSuggestionCompleted","websiteSuggestionActivity","_this$props","enableAdPreviewLibrary","editImageActivity","response","isSubdomainScraping","ServerError","FetchSucceed","newText","newEligibleLayout","processedText","trim","extensionHeadline","imageListToValidate","typesPresent","imageExperienceImage","typesMissing","imageTypesWithOrder","typeMissingStrings","aspectRatios","stringKey","errMsg","_this3","enhancedImageExperienceProps","enhancedPreviewCarouselProps","onCropImage","imgObj","onReplaceImage","customClasses","viewAllPlacementsButton","reCropButton","$","ReactDOM","ThemeProvider","blockCarousel","ImageSuggestionCarousel","carouselParent","inProgress","carousel","isError","messageInfo","onSelectImage","imageSource","websiteSuggestionCarouselActivity","ind","onSelectSeeAll","isAdPreviewRefreshEnabled","PreviewCarouselComponent","UnifiedPreviewCarousel","PreviewCarousel","getUnifiedAdPreviewConfig","Provider","ImageExperience","isImageAdExtensionMode","genericImage","recommendation","isImageExtensionsEnhancementsEnabled","enableUnifiedAdPreview","totalImageListCount","willFetchFile","willInit","willFetchData","willRender","done","ExtensionImagesControl","failInDebug","assert","expression","verboseDebugInfo","assertIsDefined","assertNever","member","wordBreak","hyphens","colorNeutralForeground3BrandHover","Navigation","SideNavigation","mode","reserveSelectedTabSpace","selectionMode","useColorPickerStyles","spacingHorizontalSNudge","spacingVerticalM","colorPreview","spacingVerticalXXS","spacingHorizontalXXS","borderStyle","borderWidth","colorNeutralStroke2","borderRadiusLarge","colorInput","typographyStyles","body1","ColorPicker","onChangeColor","labelId","colorState","setColorState","onUpdateColor","_name","colorValue","hex","test","Caption1Strong","ColorPalette","showTooltipOnSelect","colorData","Color","HexCode","isDuplicate","hideCaption","palletteBoxSize","paletteColorSize","updateColor","Input","contentBefore","callToActionOptions","useCallToActionStyles","select","input","customTextContainer","inlinePopup","labelAction","onChangeCta","withCustomText","ctaValidations","helpLabel","selectedOptions","slice","isCustomTextOptionSelected","customInputText","setCustomInputText","handleSelect","_ev","optionText","ctaSchema","minLength","Combobox","onSelect","onOptionSelect","Option","toLowerCase","TextFormattingButton","TextEditStyle16Regular","useTextFormattingDialogueStyles","containerWrapper","backButton","spacingHorizontalMNudge","fontSelectorHeader","fontSelect","fontWeightSelect","fontContainer","gridGap","spacingHorizontalS","contentDivider","spacingVerticalXL","overrideFontWeights","TextFormattingDialogue","onToggleBack","onFormatText","isUsedForButton","textFormatOptions","hideColorFormatting","font","ArrowLeft16Regular","FontsFamilySelector","selectClassName","FontsWeightSelector","useDefaultContainerStyles","collapseContainer","collectionConfig","labelText","fieldName","singleAssetValidationPropsField","addButtonText","copilotButtonLabel","deleteButtonLabel","minCollectionSize","maxCollectionSize","helpPopupTopic","helpPopupAriaLabel","inlineRecommendationsTitle","inlineRecommendationsHelpTopicKey","inlineRecommendationsHelpTopicAriaLabel","inlineRecommendationsDisabledItemTooltip","duplicateErrorMessage","useTextAssetPlaceholderStyles","borderRadiusMedium","colorNeutralStrokeAccessible","spacingHorizontalM","TextAssetPlaceholder","isMultipleOptions","onFocusTextAsset","onDeleteTextAsset","onResetTextAssets","onApplyRecommendation","onToggleTextFormatting","longHeadlineAssetCollectionConfig","getLongHeadlineAssetCollectionConfig","recommendations","replaceExistingAssets","renderInlineCopilot","showAddButton","withDeleteIconDisabled","replaceMode","hideAddAllSuggestionsButton","enableCustomizer","setAddTextAssetCallback","overrideInputNode","ShortHeadlineAssetCollection","addNewShortHeadlineCallback","shortHeadlineAssetCollectionConfig","getShortHeadlineAssetCollectionConfig","addNewHeadlinesCallback","descriptionAssetCollectionConfig","getDescriptionAssetCollectionConfig","assetName","useTextAssetCollectionStyles","textDivider","disableCopilot","shortHeadlineValidations","longHeadlineValidations","descriptionValidations","onChangeTextAssetFormattingSection","shortHeadlineAssetCollection","onChangeTexts","helpButtonStyles","CurrentLocale","updatedDescriptionSchema","updatedHeadlineSchema","updatedLongHeadlineSchema","updatedAssetGroup","Headline","LongHeadline","onChangeTextsDebounced","textAssets","IsOptional","updatedTextAssets","newShortHeadline","newLongHeadline","newDescription","getskeletonStyles","row","colorNeutralStencil1","displayColorPicker","colorPalette","helpButton","ListSkeleton","Skeleton","SkeletonItem","AdsStudioDisplayColorPicker","paletteData","maxColors","totalColors","renderHelpBubble","allowDuplicates","Body1Strong","showEditBtn","isBrandKitColor","defaultSelected","UploadImage","withInstrumentation","maxLimit","elementType","isBrandKit","onSelectImages","minSizeConfig","panelSubtitle","panelTitle","imageData","privateUrl","setPrivateUrl","urlPrefixValue","prefix","hasErrorInUrl","scenarioValue","imagePickerError","setImagePickerError","clearImagePickerError","uploadImage","processUploadedImage","addImageByUrl","onImageSelected","onImagesSelected","customMediaSourceConfig","emptyFinalUrl","newOpen","showPromotionBanner","isStockImageEnabled","defaultImageOption","managedViewSelectionState","updateManagedViewSelectionState","enableStockMultipleSelection","enableWebsiteMultipleSelection","creativeEditorProps","applyZoom","zoomValue","zoom","parseInt","round","sizeCategories","Horizontal","Vertical","Square","aspectRatioLogoMapping","imageAspectRatioConfig","minCropSize","mapBrandKitImagesToDisplayAd","brandKitImage","logoConfig","isBrandKitImage","Src","assetId","imageSize","CropWidth","CropHeight","cropSetting","sourceHeight","sourceWidth","sourceX","CropX","sourceY","CropY","getImageAssetConfigs","templateConfigs","targetSizes","assetType","displayBackground","apectRatioSet","Set","add","filterBrandKitLogos","brandKit","logoAspectRatio","logos","ImageType","getBrandKitFilterLogos","filterLogos","addBrandKitToRecommendedAssets","recommendedAssets","assets","themesImages","themesLogos","imageAssets","themes","palettes","getAdSizeCategory","category","getAdConfig","templateConfig","assetProperties","getTextFormattingOptions","displayAds","prop","textFormattingColorOptions","textFormattingFontOptions","textFormattingWeightOptions","selectedColor","assetProperty","selectedFont","selectedWeight","isMultiple","getNewAssetProperties","newAssetProperties","newProp","findIndex","getColorContrastRatio","foregrounds","hexToRgb","hexCopy","m","r","g","exec","ratios","foreground","rgb1","rgb2","getContrastRatio","ratio","sum","element","ActionPaneComp","isAssetsLoading","imagesUrl","logosUrl","actionPanelDisplayData","onImageChange","onLogoChange","backgroundColors","onBackgroundColorChange","showRecommendationsBanner","editPanel","setEditPanel","setAssetType","internalEffectSettings","setEffectSettings","logoAssets","maxColorsLimit","next","onDeleteColor","colorid","dataset","handleAssetChange","keepCropSettings","onReplacePreview","onDismissEditPanel","onSelectRecommendedImage","naturalWidth","naturalHeight","assetData","imageUrl","logoUrl","imageAspectRatio","baseImage","AltText","CropSetting","SourceHeight","onEditPreview","hideEditPreviewBtnImage","hideCropImage","isMultpleImages","isMultpleLogos","onSaveEditImage","effectSettings","effectSrc","cropSettings","displayLogo","previewImage","hideEditPreviewBtn","isMultiplePreview","recommendedImages","uiBlocking","seeAllPanelTitle","onEditPreviewImage","onReplacePreviewImage","recommendedLoadingText","recommendationTitle","seeAllLinkText","showViewAllInHeader","M","disableCrop","isLogo","hasRightRail","displayImage","colorObj","finalUrlContainer","finalUrlInput","FinalUrl","setFinalUrl","localFinalUrl","setLocalFinalUrl","inputErrors","setInputErrors","handleSetFinalUrl","notifyFinalURLchange","handleKeyUp","containerClassName","ActionTypes","propApplicable","sizeConfig","updateAdProp","newPayload","currentColor","elementName","newColors","maxLengthInChar","updateColors","currentColors","updatedColors","editable","suffix","reducer","updateTargetSizes","adSizes","filterSizes","updateAssetPropertyAndColor","updateAssetPropertiesAndColor","updateFinalUrl","updateRecommendedAssets","assetsResponse","RecommendedAssets","Themes","ShortHeadlines","Cta","hasUpdateTemplate","recommendedHeadlineText","recommendedLongHeadlineText","recommendedDescriptionText","recommendedCtaText","updateWithRecommendedAssets","updateShortHeadLine","updateLongHeadLine","updateDescription","updateCallToAction","updateImage","updateLogo","updateBackground","updateAssetLoading","updateRecommendedAssetsWithBrandKit","updateRecommendedAssetsWithBrandKitData","adImages","updateBrandKit","displayAd","flat","o","highestColor","colorRatio","textColors","textColorStrings","colorObject","aspectRatioLogo","backgroundIndex","updatedAssetProperties","brandKitFonts","Typeface","Weight","TextAssetType","getAssetPropertiesFromBrandKitFonts","fonts","updateAdsWithBrandKit","updateAdImages","DisplayAdsContext","createContext","getImageData","getColorArray","returnArray","colorArray","getSerializedObjectAsArray","initialState","templateData","displayAdsTemplateDetails","defaultAssets","templateId2Size","templateSizeDetails","sizeKey","DisplayAdsProvider","dispatch","useReducer","propTypes","RecommendationsBanner","handleOnFetchSucceeded","showCopilotDialog","setShowCopilotDialog","lastFetchedUrl","setLastFetchedUrl","handleCopilotBannerFetchSucceeded","isMMA","isSignup","onFetch","onFetchFailed","onFetchSucceeded","handleCopilotDialogClose","handleFetchAssetsSucceeded","assetsRecommendationData","handleRefresh","copyOverrides","BannerServiceProvider","CopilotRecommendationBanner","narrow","isToastEnabled","onRefresh","toastOffset","vertical","shouldFetchRecommendations","CopilotThemesRecommendationDialog","open","onClosed","onFetchAssetsSucceeded","textCollection","colorNeutralBackground1","borderRadiusXLarge","spacingVerticalSNudge","shadow4","spacingVerticalXXL","spacingHorizontalL","getTextAssets","configs","MAX_SAFE_INTEGER","minLengthInChar","AdjustView","onCtaChange","onChangeTextAssets","onAssetPropertiesWithColorChange","onFinalUrlChange","onRecommendedAssetsChange","activeTextFormattingSection","setActiveTextFormattingSection","copilotUrl","actionPanelPreviewData","imageUrls","logoUrls","colorsMap","Map","logoData","colorCode","textFormattingOptions","shortHeadlineFormattingOptions","longHeadlineFormattingOptions","descriptionFormattingOptions","callToActionFormattingOptions","getAllTextFormattingOptions","newFormatting","section","formatConfig","getTransformedAssetProperties","handleChangeSectionAssetFormatting","SizesView","spacingHorizontalXXXL","filterButton","FilterBar","selectionCallback","selectedFilter","setSelectedFilter","previewStyles","justifySelf","adPreviews","centered","editButton","shadow2","transition","sizeText","zoomDropDown","zoomOptions","ZoomControl","onZoomSelect","Dropdown","PreviewImage","adSize","editEnabled","editIndividualAdCallback","loading","AdPreViews","isSinglePreviewSelected","filterSelectionCallback","showPreviewControls","saveButton","DisplayTemplateSummaryBarControl","isSaveDisabled","saveInNewFolder","onSaveSuccess","setIsSaving","sourceType","folderId","summaryBar","setSummaryBar","isSingleAd","getFolder","createFolder","folderName","memoizedImageUpload","asset","uploadImageByUrl","memoizedGetImageById","getImageById","uploadImageAsset","imageId","uploadImageAssets","imageAsset","logoAsset","folder","uploadAssets","adImage","adConfig","addImageWithBaseIdToFolder","baseId","customizedContent","timer","setInterval","summaryBarCustomizeEle","getElementById","clearInterval","createPortal","NavigationIds","colorNeutralBackground2Hover","Wand","bundleIcon","Glance","cache","DisplayAdsEditorComponent","showNavigation","displayTemplatesDataService","hasUpdateBrandKitData","hasFetchBrandKitData","brandKitDataService","brandkitApiState","showSummaryBarControl","onAdChange","setLoading","setDataLoaded","selectedItem","setSelectedItem","setIsSinglePreviewSelected","setZoomValue","loadingImage","setLoadingImage","hasFirstLoadWithAssets","groupedTabs","getBrandKits","fetchNewAds","editDisplayAdsAssetRecommendations","fetchNewDisplayAds","getAdConfigs","loadingAds","newAdImages","adsToFetch","hasCropSettingsUpdated","Ads","generatedDisplayAds","generatedAd","adUrl","imageAdsCropSettings","logoAdsCropSettings","imageCropSettings","logoCropSettings","fetchBrandKits","async","onLongHeadlineChange","onShortHeadlineChange","onDescriptionChange","updateTextAssets","selectedSize","isBrandKitLoading","brandkitLoading","DisplayAdsEditor","remainingProps","drawer","editorContainer","DisplayAdsEditorDrawer","onApplyCreative","templateDetails","setTemplateDetails","setAdData","saving","setSaving","parentContainer","parentElement","fetchDisplayAdsTemplateDefinition","templates","latestTemplate","displayAdsTemplateDefinitions","templateDefinition","version","addUrlImageToFolder","getImage","displayAdConfig","addCreative","mtObj","Drawer","modalType","separator","DrawerHeader","DrawerHeaderTitle","DrawerBody","DrawerFooter","RecommendationsSectionIcon","displayRecommendedImage","imagePreviewContainer","backgroundSize","backgroundPositionX","backgroundPositionY","checkerImage","overlay","colorBackgroundOverlay","multipleBtn","colorNeutralForeground4","fontSizeBase200","colorNeutralBackground3","actionBtns","borderRadiusSmall","getFullyShownImagesCount","itemWidth","getCarouselStyles","_components","_palette","disabledCarouselParent","pointerEvents","imageContainerLeftMargin","isCollapsible","overflowX","imageParentContainer","imageParentLeftOffset","numberOfImages","imageClickableContainer","panelHeading","panelIcon","panelHelpButton","imageHintRight","imageHintLeft","paddleBtn","moreIcon","seeAll","colorNeutralForeground2BrandSelected","seeAllInHeader","ImagePreview","memo","onReplace","hideEditBtn","hideReplaceBtn","showActionBtn","setShowActionBtn","onMouseEnter","onMouseLeave","colorNeutralForeground1","isRecommendationEmpty","hideReplacePreviewBtn","isSuggestionsPanelOpen","setIsSuggestionsPanelOpen","imagesToSuggest","setImagesToSuggest","onSelectSeeAllRecommendedImages","truncatedImages","showShimmer","suggestionId","stylingOverrides","initialImageContainerLeftMargin","isMultiSelect","showThemes","hasMore","onAdd","defaultFilter","searchQuery","collectChildren","flatTreeItems","entry","childValue","filterTreeItems","filteredTreeItemIndexes","ancestor","orderedFilteredIndexes","filteredTreeItems","useDropdownTreeStyles","dropdownContent","branch","hideContent","noResults","treeItemLayout","CustomTreeItem","flatTreeItem","onCheckedChange","onRenderContent","lazyLoadingEnabled","treeItemsProps","getTreeItemProps","allowedCheck","parentValue","treeItemProps","itemType","expandIcon","TreeItem","TreeItemLayout","DropdownTreeSelect","checkedItems","onOpenChange","onRenderTooltip","customFilter","lazyLoad","searchValue","setSearchValue","isResultOpen","setIsResultOpen","lazyLoadedData","setLazyLoadedData","lazyLoadedParents","setLazyLoadedParents","onChangeSearchValue","newValue","trimmedValue","itemsToUse","array","parent","myself","childMapValue","buildMap","parentsWithChild","parentsWithChildOrLoaded","onOpenChangeInternal","openedItem","itemChildData","onItemChecked","flatTree","useHeadlessFlatTree","handleBlur","contains","setTimeout","addEventListener","removeEventListener","showResults","SearchBox","onFocus","FlatTree","getTreeProps","showTips","withArrow","positioning"],"sourceRoot":""}