{"version":3,"file":"static/js/application.async.landing~e5a29a8d.95fe5c95.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/copilot-suggestions-tracker.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/event-logs.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/use-copilot-recommendation-survey.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/use-event-log.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/use-asset-library-event-log.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/use-log-recommendations-api-error.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/log-copilot-recommendations.js","../../../node_modules/@bingads-webui-campaign-react/copilot-common/src/get-unique-assets-from-themes.js","../../../node_modules/@bingads-webui-campaign-react/copilot-domain-data-service/localize/video-templates.js","../../../node_modules/@bingads-webui-campaign-react/copilot-domain-data-service/services/repository/copilotDomainDataRepository.js","../../../node_modules/@bingads-webui-campaign-react/copilot-domain-data-service/services/withCopilotDomainDataService.js","../../../node_modules/@bingads-webui-campaign-react/copilot-experience/src/use-prefill.js","../../../node_modules/@bingads-webui-campaign-react/copilot-experience/src/use-copilot.js","../../../node_modules/@bingads-webui-campaign-react/copilot-experience/src/use-survey-triggers.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/constants/tab-list.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/constants/search-input.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/tab-list-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/tab.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/get-search-range.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/grid-columns.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/grid-data-source.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/no-recommendation-warning-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/no-recommendation-warning.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/grid-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/keyword-ranking.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/search-input-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/search-input.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/search-input-stack.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/location-util.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/demo/default/example-data.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/use-keyword-suggestion.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/use-location-check.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/language-util.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/search-input-stack-container.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/keyword-groups-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/keyword-group-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/viewall-panel-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/action-bar-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/action-bar.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/panel-header-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/panel-header.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/keyword-group-view-all-panel.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/keyword-group.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/util/use-circular-buffer-view.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/keyword-groups.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/keyword-planner-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/no-data.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/keyword-planner.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/style/panel-style.js","../../../node_modules/@bingads-webui-campaign-react/copilot-keyword-planner/src/keyword-planner-panel.js","../../../node_modules/@bingads-webui-campaign-react/copilot-loggers/src/logging-context.js","../../../node_modules/@bingads-webui-campaign-react/copilot-loggers/src/use-copilot-loggers.js","../../../node_modules/@bingads-webui-campaign-react/cost-per-sale-option/src/style.js","../../../node_modules/@bingads-webui-campaign-react/cost-per-sale-option/src/cost-per-sale.js","../../../node_modules/@bingads-webui-campaign-react/cropped-image-view/src/cropped-image-view.js","../../../node_modules/@bingads-webui-campaign-react/cross-page-select-plugin/src/index.js"],"sourcesContent":["export const EMPTY_ASSET_HINTS = {\r\n headline: _TL_('You must enter a Short headline to get asset recommendations. '),\r\n description: _TL_('You must enter a Description to get asset recommendations. '),\r\n longHeadline: _TL_('You must enter a Long headline to get asset recommendations. '),\r\n};\r\nexport const NO_FINAL_URL_HINT = _TL_('You must enter a Final URL to get asset recommendations.');\r\nexport const REVISE_ERR_MSG = _TL_('We\\'re not able to generate an asset from the provided text. Please enter a new description and try again.');\r\nexport const DIFFERENT_TONE_ERR_MSG = _TL_('We don\\'t have a recommendation in this tone.');\r\nexport const FIND_SIMILAR_ERR_MSG = _TL_('There are no more recommendations.');\r\nexport const NOT_SUPPORT_DYNAMIC_TEXT = _TL_('Microsoft Advertising can\\'t use dynamic texts for generating asset recommendations. Please enter static text and try again.');\r\n\r\nexport const POST_ASSET_EVENT_NAME = 'PostAssetGroupEvent';\r\n\r\nexport const POST_ASSET_LIBRARY_EVENT_NAME = 'PostAssetLibraryEvent';\r\n\r\nexport const AssetLibraryEventRecordType = {\r\n ENTER_ASSET_LIBRARY: 'EnterAssetLibrary',\r\n ENTER_GENERATE_IMAGES_PANEL: 'EnterGenerateImagesPanel',\r\n GENERATE_IMAGES: 'GenerateImages',\r\n RETURN_IMAGES: 'ReturnImages',\r\n ADD_IMAGES_TO_ASSET_LIBRARY: 'AddImagesToAssetLibrary',\r\n};\r\n\r\nexport const AssetEventRecordType = {\r\n ENTER_FLOW: 'EnterFlow',\r\n RETURNED: 'Returned',\r\n VIEWED: 'Viewed',\r\n APPLIED: 'Applied',\r\n FEATURE_USAGE: 'FeatureUsage',\r\n MAPPING: 'Mapping',\r\n};\r\n\r\nexport const AssetEventOperationName = {\r\n NON_ITERATIVE: 'NonIterative',\r\n REFRESH_THEME: 'RefreshTheme',\r\n DIFFERENT_BACKGROUND: 'DifferentBackground',\r\n REWRITE: 'Rewrite',\r\n FIND_SIMILAR: 'FindSimilar',\r\n DIFFERENT_TONE: 'DifferentTone',\r\n FINAL_URL_RECOMMENDATION: 'FinalUrlRecommendation',\r\n PREFILL: 'Prefill',\r\n};\r\n\r\nexport const AssetEventFeature = {\r\n RSA: 'RSA',\r\n PMAX: 'Pmax',\r\n PMAX_LITE: 'PmaxLiteSignup',\r\n DISPLAY_PLUS: 'DisplayPlus',\r\n MMA: 'MMA',\r\n};\r\n\r\nexport const AssetType = {\r\n TEXT: 'Text',\r\n IMAGE: 'Image',\r\n THEME: 'Theme',\r\n VIDEO: 'Video',\r\n};\r\n\r\nexport const AssetPropertyName = {\r\n IMAGE: 'Image',\r\n HEADLINE: 'Headline',\r\n DESCRIPTION: 'Description',\r\n LONG_HEADLINE: 'LongHeadline',\r\n};\r\n\r\nexport const AssetEngagementEventName = {\r\n VIEW: 'View',\r\n ENTER: 'Enter',\r\n GENERATE: 'Generate',\r\n APPLY: 'Apply',\r\n PREFILL: 'Prefill',\r\n REMOVE_ASSETS: 'RemoveAssets',\r\n REMOVE_SINGLE_ASSET: 'RemoveSingleAsset',\r\n EDIT_SINGLE_ASSET: 'EditSingleAsset',\r\n AD_STRENGTH: 'AdStrength',\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport class CopilotSuggestionsTracker {\r\n constructor() {\r\n this.trackingData = {};\r\n this.initialSuggestionsData = {};\r\n }\r\n\r\n trackReturnedFinalUrlAssets(recommendedAssets) {\r\n this.trackingData = this.trackingData || {};\r\n this.trackingData.finalUrlSuggestions = this.trackingData.finalUrlSuggestions || [];\r\n const FinalUrls = recommendedAssets.FinalUrls || [];\r\n this.trackingData.finalUrlSuggestions = _.uniq(_.flatten([this.trackingData.finalUrlSuggestions, FinalUrls]));\r\n }\r\n\r\n trackReturnedTextAssets(recommendedAssets) {\r\n this.trackingData = this.trackingData || {};\r\n\r\n this.trackingData.textSuggestions = this.trackingData.textSuggestions || [];\r\n\r\n const headlines = recommendedAssets.headlines || recommendedAssets.ShortHeadlines || [];\r\n const longHeadlines = recommendedAssets.longHeadlines || recommendedAssets.LongHeadlines || [];\r\n const descriptions = recommendedAssets.descriptions || recommendedAssets.Descriptions || [];\r\n const TextAssets = recommendedAssets.TextAssets || [];\r\n\r\n const headlineRecommendations = _.map(headlines, headline => _.pick(headline, 'RecommendationId', 'Text'));\r\n const longHeadlineRecommendations = _.map(longHeadlines, headline => _.pick(headline, 'RecommendationId', 'Text'));\r\n const descriptionRecommendations = _.map(descriptions, description => _.pick(description, 'RecommendationId', 'Text'));\r\n const textRecommendations = _.map(TextAssets, textAsset => _.pick(textAsset, 'RecommendationId', 'Text'));\r\n\r\n this.trackingData.textSuggestions = _.flatten([this.trackingData.textSuggestions, headlineRecommendations, longHeadlineRecommendations, descriptionRecommendations, textRecommendations]);\r\n }\r\n\r\n trackSelectedImageAssets(recommendedAssets) {\r\n this.trackingData = this.trackingData || {};\r\n this.trackingData.imageSuggestions = this.trackingData.imageSuggestions || [];\r\n const ImageAssets = recommendedAssets.ImageAssets || [];\r\n this.trackingData.imageSuggestions = _.uniq(_.flatten([this.trackingData.imageSuggestions, _.map(ImageAssets, imageAsset => _.pick(imageAsset, 'suggestionId', 'imageId'))]));\r\n }\r\n\r\n trackViewedSuggestionIds(suggestionIds) {\r\n this.trackingData = this.trackingData || {};\r\n this.trackingData.viewedSuggestions = this.trackingData.viewedSuggestions || [];\r\n this.trackingData.viewedSuggestions = _.uniq(_.flatten([this.trackingData.viewedSuggestions, suggestionIds]));\r\n }\r\n\r\n getUntrackedViewedSuggestionIds(suggestionIds) {\r\n this.trackingData = this.trackingData || {};\r\n this.trackingData.viewedSuggestions = this.trackingData.viewedSuggestions || [];\r\n return _.difference(suggestionIds, this.trackingData.viewedSuggestions);\r\n }\r\n\r\n getInitialSuggestionsData() {\r\n const data = this.initialSuggestionsData;\r\n this.initialSuggestionsData = {};\r\n return data;\r\n }\r\n\r\n isInRemainingInitialSuggestions(property, asset) {\r\n if (!this.initialSuggestionsData[property]) return false;\r\n return _.find(this.initialSuggestionsData[property].remainingSuggestions, suggestion => asset === suggestion);\r\n }\r\n\r\n trackInitialSuggestions(property, suggestions) {\r\n this.initialSuggestionsData[property] = { prefilledCount: _.size(suggestions), remainingSuggestions: suggestions };\r\n }\r\n\r\n removeAllInitialSuggestions() {\r\n this.initialSuggestionsData = _.mapObject(this.initialSuggestionsData, ({ prefilledCount }) => ({ prefilledCount, remainingSuggestions: [] }));\r\n }\r\n\r\n removeInitialSuggestion(property, suggestion) {\r\n if (!this.initialSuggestionsData[property]) return;\r\n this.initialSuggestionsData[property].remainingSuggestions = _.without(this.initialSuggestionsData[property].remainingSuggestions, suggestion);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { AssetEventOperationName, AssetEventRecordType, POST_ASSET_EVENT_NAME } from './constants';\r\n\r\nexport const prefillAssetsAppliedLog = (CampaignId, initialSuggestionsData) => {\r\n const Properties = _.keys(initialSuggestionsData);\r\n const PrefilledSuggestionsCount = _.map(Properties, propertyName => initialSuggestionsData[propertyName].prefilledCount);\r\n const AppliedPrefilledSuggestionsCount = _.map(Properties, propertyName => _.size(initialSuggestionsData[propertyName].remainingSuggestions));\r\n\r\n return ({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.APPLIED,\r\n OperationName: AssetEventOperationName.PREFILL,\r\n CampaignId,\r\n Properties,\r\n PrefilledSuggestionsCount,\r\n AppliedPrefilledSuggestionsCount,\r\n },\r\n });\r\n};\r\n","import { useCallback, useEffect } from 'react';\r\nimport { useUserLevelPreference } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nconst COPILOT_PREFERENCE = 'SurveyPreference.CopilotAssetRecommendation.Features';\r\n\r\nexport const useCopilotRecommendationSurvey = (currentFeature) => {\r\n const [{ value: features }, { update: updateFeatures }] = useUserLevelPreference(COPILOT_PREFERENCE, []);\r\n\r\n useEffect(() => {\r\n if (!features.includes(currentFeature)) {\r\n updateFeatures([...features, currentFeature].sort());\r\n }\r\n }, [features, currentFeature, updateFeatures]);\r\n\r\n const trigger = useCallback((action) => {\r\n if (!window.survey || !window.survey.surveyManager) {\r\n return;\r\n }\r\n\r\n window.survey.CopilotAssetRecommendationSatisfactionTrigger = true;\r\n window.survey.CopilotRecommendationsSurveyCustomParams = { action, features };\r\n\r\n window.survey.surveyManager.trigger();\r\n }, [features]);\r\n\r\n const triggerSurveyOnSubmit = useCallback(() => trigger('submit'), [trigger]);\r\n const triggerSurveyOnCancel = useCallback(() => trigger('cancel'), [trigger]);\r\n\r\n return {\r\n triggerSurveyOnSubmit,\r\n triggerSurveyOnCancel,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { AssetType, AssetEventOperationName } from './constants';\r\n\r\nexport const getCopilotRecommendationIdsFromThemes = (themeRecommendations) => {\r\n const themes = _.isArray(themeRecommendations) ? themeRecommendations : themeRecommendations.themes;\r\n\r\n const themeRecommendationIds = [];\r\n const imageRecommendationIds = [];\r\n const descriptionRecommendationIds = [];\r\n const headlineRecommendationIds = [];\r\n const longHeadlineRecommendationIds = [];\r\n\r\n if (themes) {\r\n _.map(themes, (theme) => {\r\n themeRecommendationIds.push(theme.id);\r\n if (theme.images) {\r\n imageRecommendationIds.push(...theme.images.map(v => v.suggestionId));\r\n }\r\n if (theme.descriptions) {\r\n descriptionRecommendationIds.push(...theme.descriptions.map(v => v.RecommendationId));\r\n }\r\n if (theme.headlines) {\r\n headlineRecommendationIds.push(...theme.headlines.map(v => v.RecommendationId));\r\n }\r\n if (theme.longHeadlines) {\r\n longHeadlineRecommendationIds.push(...theme.longHeadlines.map(v => v.RecommendationId));\r\n }\r\n });\r\n }\r\n return {\r\n themeRecommendationIds, descriptionRecommendationIds, headlineRecommendationIds, longHeadlineRecommendationIds, imageRecommendationIds,\r\n };\r\n};\r\n\r\nexport function getSuggestedIdsAndAssetType({\r\n themeSuggestionIds = [],\r\n textSuggestionIds = [],\r\n imageSuggestionIds = [],\r\n videoSuggestionIds = [],\r\n}) {\r\n const SuggestionIds = [\r\n ...themeSuggestionIds,\r\n ...textSuggestionIds,\r\n ...imageSuggestionIds,\r\n ...videoSuggestionIds,\r\n ];\r\n\r\n const AssetTypes = new Array(themeSuggestionIds.length + textSuggestionIds.length + imageSuggestionIds.length + videoSuggestionIds.length);\r\n AssetTypes.fill(AssetType.THEME, 0, themeSuggestionIds.length);\r\n AssetTypes.fill(AssetType.TEXT, themeSuggestionIds.length, themeSuggestionIds.length + textSuggestionIds.length);\r\n AssetTypes.fill(AssetType.IMAGE, themeSuggestionIds.length + textSuggestionIds.length, themeSuggestionIds.length + textSuggestionIds.length + imageSuggestionIds.length);\r\n AssetTypes.fill(AssetType.VIDEO, themeSuggestionIds.length + textSuggestionIds.length + imageSuggestionIds.length, themeSuggestionIds.length + textSuggestionIds.length + imageSuggestionIds.length + videoSuggestionIds.length);\r\n return { SuggestionIds, AssetType: AssetTypes };\r\n}\r\n\r\nexport function getSuggestedIdsAndAssetTypeFromAssetsRecommendation(assetsRecommendationData) {\r\n const {\r\n RecommendedAssets: {\r\n Themes,\r\n ShortHeadlines,\r\n LongHeadlines,\r\n Descriptions,\r\n ImageAssets,\r\n VideoAssets,\r\n },\r\n } = assetsRecommendationData;\r\n\r\n return getSuggestedIdsAndAssetType({\r\n themeSuggestionIds: _.pluck(Themes, 'RecommendationId'),\r\n textSuggestionIds: [\r\n ..._.pluck(ShortHeadlines, 'RecommendationId'),\r\n ..._.pluck(LongHeadlines, 'RecommendationId'),\r\n ..._.pluck(Descriptions, 'RecommendationId'),\r\n ],\r\n imageSuggestionIds: _.pluck(ImageAssets, 'RecommendationId'),\r\n videoSuggestionIds: _.pluck(VideoAssets, 'RecommendationId'),\r\n });\r\n}\r\n\r\n/**\r\n * Adapt the API response to the format expected by the UI for displaying and applying an image asset.\r\n * @param {Object} image - Image object returned by copilot recommendation APIs.\r\n * @returns {Object} Formatted theme object.\r\n */\r\nexport function getFormattedImage(image) {\r\n const { RecommendationId, Url } = image;\r\n return {\r\n fullUrl: Url,\r\n thumbnailSrc: Url,\r\n thumbnailUrl: Url,\r\n suggestionId: RecommendationId,\r\n };\r\n}\r\n\r\n/**\r\n * Adapt the API response to the format expected by the UI for applying the theme and asset recommendation.\r\n * @param {Object} theme - A theme object returned by GetAssetsRecommendation.\r\n * @returns {Object} Formatted theme object.\r\n */\r\nexport function getFormattedThemeForApplying(theme) {\r\n return {\r\n id: theme.RecommendationId,\r\n name: theme.Name,\r\n previewUrl: _.get(theme, ['Images', 0, 'Url']),\r\n headlines: theme.ShortHeadlines,\r\n longHeadlines: theme.LongHeadlines,\r\n descriptions: theme.Descriptions,\r\n images: _.map(theme.Images, getFormattedImage),\r\n };\r\n}\r\n\r\nexport function getOperationName(requestType) {\r\n if (requestType === 'findSimilar') {\r\n return AssetEventOperationName.FIND_SIMILAR;\r\n }\r\n if (requestType === 'differentTone') {\r\n return AssetEventOperationName.DIFFERENT_TONE;\r\n }\r\n if (requestType === 'rewrite') {\r\n return AssetEventOperationName.REWRITE;\r\n }\r\n\r\n return undefined;\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\nimport {\r\n AssetEngagementEventName,\r\n AssetEventOperationName,\r\n AssetEventRecordType,\r\n POST_ASSET_EVENT_NAME,\r\n} from './constants';\r\nimport { getSuggestedIdsAndAssetType, getSuggestedIdsAndAssetTypeFromAssetsRecommendation, getOperationName } from './utils';\r\nimport { prefillAssetsAppliedLog } from './event-logs';\r\n\r\n/**\r\n * Event logging used to gather adoption metrics for the copilot asset suggestions.\r\n * @param {Function} postAssetEventLog - Logging function.\r\n * @returns {Object} - An object containing the event logging functions.\r\n */\r\nexport function useEventLog(postAssetEventLog) {\r\n const logEnterFlow = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.ENTER_FLOW,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logFinalUrlRecommendations = useCallback((FinalUrls) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.RETURNED,\r\n OperationName: AssetEventOperationName.FINAL_URL_RECOMMENDATION,\r\n FinalUrls,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logBannerGenerated = useCallback((CurrentFinalUrl, assetsRecommendationData) => {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetTypeFromAssetsRecommendation(assetsRecommendationData);\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.RETURNED,\r\n OperationName: AssetEventOperationName.NON_ITERATIVE,\r\n SuggestionIds,\r\n AssetType,\r\n CurrentFinalUrl,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logBannerRefresh = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n EngagementEventName: AssetEngagementEventName.ENTER,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logBannerRefreshCompleted = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n EngagementEventName: AssetEngagementEventName.VIEW,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logFetch = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n EngagementEventName: AssetEngagementEventName.GENERATE,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logFetchSucceeded = useCallback((finalUrl, themes) => {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetType({ themeSuggestionIds: _.pluck(themes, 'RecommendationId') });\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.RETURNED,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n SuggestionIds,\r\n AssetType,\r\n CurrentFinalUrl: finalUrl,\r\n },\r\n });\r\n\r\n // assume all themes are viewed by default\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.VIEWED,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n SuggestionIds,\r\n AssetType,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logFetchAssetsSucceeded = useCallback((finalUrl, assetsRecommendationData) => {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetTypeFromAssetsRecommendation(assetsRecommendationData);\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.RETURNED,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n SuggestionIds,\r\n AssetType,\r\n CurrentFinalUrl: finalUrl,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logApplyThemes = useCallback((themes) => {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetType({ themeSuggestionIds: _.pluck(themes, 'RecommendationId') });\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.REFRESH_THEME,\r\n EngagementEventName: AssetEngagementEventName.APPLY,\r\n SuggestionIds,\r\n AssetType,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logSuggestionsViewed = useCallback((textSuggestionIds, imageSuggestionIds, videoSuggestionIds) => {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetType({ textSuggestionIds, imageSuggestionIds, videoSuggestionIds });\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.VIEWED,\r\n SuggestionIds,\r\n AssetType,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logSuggestionsApplied = useCallback((CampaignId, AssetGroupId, textSuggestionIds, imageSuggestionIds, videoSuggestionIds, appliedVideoAssetIds = []) => {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetType({ textSuggestionIds, imageSuggestionIds, videoSuggestionIds });\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n CampaignId,\r\n AssetGroupId,\r\n RecordType: AssetEventRecordType.APPLIED,\r\n SuggestionIds,\r\n AssetType,\r\n ...(appliedVideoAssetIds.length > 0 && { AppliedVideoAssetIds: appliedVideoAssetIds }),\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logTextAssetMenuOpen = useCallback((TextAssetType) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n OperationName: 'InlineCopilot',\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n EngagementEventName: AssetEngagementEventName.VIEW,\r\n TextAssetType,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logTextAssetDialogOpen = useCallback((TextAssetType, OperationName) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n EngagementEventName: AssetEngagementEventName.ENTER,\r\n OperationName,\r\n TextAssetType,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logRefineTextAsset = useCallback((TextAssetType, requestType) => {\r\n const OperationName = getOperationName(requestType);\r\n\r\n if (OperationName) {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n EngagementEventName: AssetEngagementEventName.GENERATE,\r\n OperationName,\r\n TextAssetType,\r\n },\r\n });\r\n }\r\n }, [postAssetEventLog]);\r\n\r\n const logRefineTextAssetSucceeded = useCallback((finalUrl, params, textSuggestionIds) => {\r\n const OperationName = getOperationName(params.requestType);\r\n\r\n if (OperationName && textSuggestionIds) {\r\n const { SuggestionIds, AssetType } = getSuggestedIdsAndAssetType({ textSuggestionIds });\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.RETURNED,\r\n OperationName,\r\n SuggestionIds,\r\n AssetType,\r\n CurrentFinalUrl: finalUrl,\r\n },\r\n });\r\n\r\n // by default, the user views all recommendations returned\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.VIEWED,\r\n SuggestionIds,\r\n AssetType,\r\n },\r\n });\r\n }\r\n }, [postAssetEventLog]);\r\n\r\n const logTextAssetApplied = useCallback((TextAssetType, OperationName) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n EngagementEventName: AssetEngagementEventName.APPLY,\r\n OperationName,\r\n TextAssetType,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logPrefillAssets = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.PREFILL,\r\n EngagementEventName: AssetEngagementEventName.PREFILL,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logPrefillAssetsApplied = useCallback((CampaignId, initialSuggestionsData) => {\r\n postAssetEventLog(prefillAssetsAppliedLog(CampaignId, initialSuggestionsData));\r\n }, [postAssetEventLog]);\r\n\r\n const logPrefilledAdStrength = useCallback((adStrength, initialSuggestionsData) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.PREFILL,\r\n EngagementEventName: AssetEngagementEventName.AD_STRENGTH,\r\n AdStrength: adStrength,\r\n Suggestions: initialSuggestionsData,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logRemoveAssets = useCallback((PropertyName) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.PREFILL,\r\n EngagementEventName: AssetEngagementEventName.REMOVE_ASSETS,\r\n PropertyName,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logRemoveSingleAsset = useCallback((PropertyName, SuggestionId) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.PREFILL,\r\n EngagementEventName: AssetEngagementEventName.REMOVE_SINGLE_ASSET,\r\n PropertyName,\r\n SuggestionId,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logEditSingleAsset = useCallback((PropertyName, SuggestionId) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetEventRecordType.FEATURE_USAGE,\r\n OperationName: AssetEventOperationName.PREFILL,\r\n EngagementEventName: AssetEngagementEventName.EDIT_SINGLE_ASSET,\r\n PropertyName,\r\n SuggestionId,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n return {\r\n logEnterFlow,\r\n logFinalUrlRecommendations,\r\n logBannerGenerated,\r\n logBannerRefresh,\r\n logBannerRefreshCompleted,\r\n logFetch,\r\n logFetchSucceeded,\r\n logFetchAssetsSucceeded,\r\n logApplyThemes,\r\n logSuggestionsViewed,\r\n logSuggestionsApplied,\r\n logTextAssetMenuOpen,\r\n logTextAssetDialogOpen,\r\n logRefineTextAsset,\r\n logRefineTextAssetSucceeded,\r\n logTextAssetApplied,\r\n logPrefillAssets,\r\n logPrefillAssetsApplied,\r\n logPrefilledAdStrength,\r\n logRemoveAssets,\r\n logRemoveSingleAsset,\r\n logEditSingleAsset,\r\n };\r\n}\r\n\r\n","import { useCallback } from 'react';\r\nimport {\r\n AssetLibraryEventRecordType,\r\n POST_ASSET_LIBRARY_EVENT_NAME,\r\n} from './constants';\r\n\r\n/**\r\n * Event logging used to gather adoption metrics for the copilot asset library suggestions in campaign flow.\r\n * @param {Function} postAssetEventLog - Logging function.\r\n * @returns {Object} - An object containing the event logging functions.\r\n */\r\nexport function useAssetLibraryEventLog(postAssetEventLog) {\r\n const logEnterAssetLibrary = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_LIBRARY_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetLibraryEventRecordType.ENTER_ASSET_LIBRARY,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logEnterGenerateImagesPanel = useCallback(() => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_LIBRARY_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetLibraryEventRecordType.ENTER_GENERATE_IMAGES_PANEL,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logGenerateImages = useCallback((prompt) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_LIBRARY_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetLibraryEventRecordType.GENERATE_IMAGES,\r\n Prompt: prompt,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logReturnImages = useCallback((suggestionIds) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_LIBRARY_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetLibraryEventRecordType.RETURN_IMAGES,\r\n SuggestionIds: suggestionIds,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n const logAddImagesToAssetLibrary = useCallback((suggestionIds, prompt) => {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_LIBRARY_EVENT_NAME,\r\n EventValue: {\r\n RecordType: AssetLibraryEventRecordType.ADD_IMAGES_TO_ASSET_LIBRARY,\r\n SuggestionIds: suggestionIds,\r\n Prompt: prompt,\r\n },\r\n });\r\n }, [postAssetEventLog]);\r\n\r\n return {\r\n logEnterAssetLibrary,\r\n logEnterGenerateImagesPanel,\r\n logGenerateImages,\r\n logReturnImages,\r\n logAddImagesToAssetLibrary,\r\n };\r\n}\r\n\r\nexport function useAssetLibraryEventHandler(postAssetEventLog) {\r\n const {\r\n logEnterAssetLibrary,\r\n logEnterGenerateImagesPanel,\r\n logGenerateImages,\r\n logReturnImages,\r\n logAddImagesToAssetLibrary,\r\n } = useAssetLibraryEventLog(postAssetEventLog);\r\n\r\n const onEnterAssetLibrary = useCallback(() => {\r\n logEnterAssetLibrary();\r\n }, [logEnterAssetLibrary]);\r\n\r\n const onEnterGenerateImagesPanel = useCallback(() => {\r\n logEnterGenerateImagesPanel();\r\n }, [logEnterGenerateImagesPanel]);\r\n\r\n const onGenerateImages = useCallback(({ prompt }) => {\r\n logGenerateImages(prompt);\r\n }, [logGenerateImages]);\r\n\r\n const onReturnImages = useCallback(({ imageIds }) => {\r\n logReturnImages(imageIds);\r\n }, [logReturnImages]);\r\n\r\n const onAddImagesToAssetLibrary = useCallback(({ imageIds, prompt }) => {\r\n logAddImagesToAssetLibrary(imageIds, prompt);\r\n }, [logAddImagesToAssetLibrary]);\r\n\r\n return {\r\n onAddImagesToAssetLibrary,\r\n onGenerateImages,\r\n onReturnImages,\r\n onEnterGenerateImagesPanel,\r\n onEnterAssetLibrary,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\n\r\nfunction isShiproomErrorMessage(message) {\r\n if (message.includes('NO_RECOMMENDATION') || message.includes('UrlNotAccessible')) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function useLogRecommendationsApiError(activity) {\r\n const log = useCallback((error) => {\r\n const message = `Recommendations API error: ${error instanceof Error ? error : JSON.stringify(error)}`;\r\n const isShiproomError = isShiproomErrorMessage(message);\r\n\r\n const requestId = _.get(error, ['headers', 'x-ms-requestid']) || _.get(error, 'requestId');\r\n\r\n let logFn;\r\n if (activity) {\r\n logFn = (m) => {\r\n const f = isShiproomError ? activity.error : activity.trace;\r\n return f(m, undefined, requestId);\r\n };\r\n } else {\r\n // eslint-disable-next-line no-console\r\n logFn = isShiproomError ? console.error : console.log;\r\n }\r\n\r\n logFn(message);\r\n }, [activity]);\r\n\r\n return log;\r\n}\r\n","import _ from 'underscore';\r\nimport { AssetEventRecordType, AssetType, POST_ASSET_EVENT_NAME } from './constants';\r\nimport { prefillAssetsAppliedLog } from './event-logs';\r\n\r\n\r\nconst getCopilotAppliedRecommendations = ({ copilotTracking, assetGroup }) => {\r\n const assetType = [];\r\n const suggestionIds = [];\r\n const appliedImageAssetIds = [];\r\n\r\n const { trackingData } = copilotTracking || {};\r\n const { textSuggestions, imageSuggestions, finalUrlSuggestions } = trackingData || {};\r\n\r\n const {\r\n Descriptions, Headlines, LongHeadlines, Images, FinalUrls,\r\n } = assetGroup || {};\r\n\r\n // Get applied copilot text assets by text match\r\n const currentTextAssets = _.flatten([_.values(Descriptions), _.values(Headlines), _.values(LongHeadlines)]);\r\n\r\n const copilotTextRecommendations = _.filter(textSuggestions, asset => _.contains(currentTextAssets, asset.Text));\r\n const copilotTextRecommendationIds = _.uniq(_.pluck(copilotTextRecommendations, 'RecommendationId'));\r\n _.each(copilotTextRecommendationIds, (v) => {\r\n suggestionIds.push(v);\r\n assetType.push(AssetType.TEXT);\r\n });\r\n\r\n // Log applied copilot headline ofr DKI\r\n const copilotHeadlineRecommendations = _.filter(textSuggestions, asset => _.contains(Headlines, asset.Text));\r\n const appliedHeadlines = _.pluck(copilotHeadlineRecommendations, 'Text');\r\n\r\n // Get applied copilot image recommendations by imageId match\r\n const { ImageList } = Images;\r\n const currentImageAssets = _.uniq(_.map(_.flatten(ImageList), image => (image.id ? image.id.toString() : null)));\r\n const copilotImageRecommendations = _.uniq(_.filter(imageSuggestions, asset => _.contains(currentImageAssets, asset.imageId)));\r\n\r\n _.each(copilotImageRecommendations, (v) => {\r\n suggestionIds.push(v.suggestionId);\r\n assetType.push(AssetType.IMAGE);\r\n appliedImageAssetIds.push(v.imageId);\r\n });\r\n\r\n const appliedFinalUrlRecommendations = _.chain(finalUrlSuggestions)\r\n .uniq()\r\n .intersection(FinalUrls)\r\n .value();\r\n\r\n return {\r\n suggestionIds,\r\n assetType,\r\n appliedImageAssetIds,\r\n appliedFinalUrlRecommendations,\r\n appliedHeadlines,\r\n };\r\n};\r\n\r\nexport const logCopilotRecommendations = ({\r\n recommendationContext, assetGroup, campaignId = null, isEditing,\r\n}) => {\r\n const { postAssetEventLog, copilotTracking } = recommendationContext;\r\n\r\n if (_.isFunction(postAssetEventLog) && copilotTracking) {\r\n const {\r\n suggestionIds, assetType, appliedImageAssetIds, appliedFinalUrlRecommendations, appliedHeadlines,\r\n } = getCopilotAppliedRecommendations({ copilotTracking, assetGroup });\r\n\r\n const eventValue = {\r\n AssetGroupId: assetGroup.Id,\r\n RecordType: AssetEventRecordType.APPLIED,\r\n SuggestionIds: suggestionIds,\r\n AssetType: assetType,\r\n ...(appliedImageAssetIds.length > 0 && { AppliedImageAssetIds: appliedImageAssetIds }),\r\n ...(appliedFinalUrlRecommendations.length > 0 && { FinalUrls: appliedFinalUrlRecommendations }),\r\n ...(appliedHeadlines.length > 0 && { AppliedHeadlines: appliedHeadlines }),\r\n };\r\n\r\n if (campaignId) {\r\n eventValue.CampaignId = campaignId;\r\n }\r\n\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: eventValue,\r\n });\r\n\r\n if (!isEditing) {\r\n const initialSuggestionsData = copilotTracking.getInitialSuggestionsData();\r\n\r\n if (!_.isEmpty(initialSuggestionsData)) {\r\n postAssetEventLog(prefillAssetsAppliedLog(campaignId, initialSuggestionsData));\r\n }\r\n }\r\n }\r\n};\r\n","import _ from 'underscore';\r\n\r\nconst MaxAssetCountPerThemeToApply = {\r\n images: 5,\r\n headlines: 5,\r\n longHeadlines: 2,\r\n descriptions: 2,\r\n};\r\n\r\n/**\r\n * Gets a unique list of asset recommendation objects, including asset and recommendationId, from a list of themes,\r\n * without getting too many assets from each theme.\r\n * @param {Object[]} themes - List of theme objects with recommended text assets.\r\n * @param {string} field - Field name for text assets, e.g. 'headlines' or 'descriptions'.\r\n * @param {Number} [maxSize] - Maximum number of assets to get.\r\n * @returns {Object[]} - Array of asset objects, with asset and RecommendationId/suggestionId\r\n */\r\nfunction getUniqueAssetMapFromThemes(themes, field, maxSize) {\r\n // do not get too many assets from each theme\r\n const maxSizePerTheme = MaxAssetCountPerThemeToApply[field];\r\n\r\n // use a Map to prevent duplicate assets\r\n const map = new Map();\r\n\r\n for (let i = 0; i < _.size(themes) && map.size < maxSize; i += 1) {\r\n // add assets from each theme\r\n const assets = _.get(themes, [i, field]);\r\n\r\n let assetsAddedFromTheme = 0;\r\n\r\n for (let j = 0; j < _.size(assets) && assetsAddedFromTheme < maxSizePerTheme && map.size < maxSize; j += 1) {\r\n let key;\r\n let value;\r\n\r\n if (field === 'images') {\r\n value = assets[j];\r\n key = _.get(value, 'suggestionId');\r\n } else {\r\n key = _.get(assets, [j, 'Text']);\r\n value = _.get(assets, [j, 'RecommendationId']);\r\n }\r\n\r\n // Prevent duplicate image suggestionId, prevent duplicate text\r\n if (!_.isEmpty(key) && !map.has(key)) {\r\n assetsAddedFromTheme += 1;\r\n map.set(key, value);\r\n }\r\n }\r\n }\r\n\r\n return map;\r\n}\r\n\r\n/**\r\n * Gets a unique list of asset recommendationIds from a list of themes, without getting too many assets from each theme.\r\n * @param {Object[]} themes - List of theme objects with recommended text assets.\r\n * @param {string} field - Field name for text assets, e.g. 'headlines' or 'descriptions'.\r\n * @param {Number} [maxSize] - Maximum number of assets to get.\r\n * @returns {string[]} - Array of text asset strings.\r\n */\r\nexport function getUniqueRecommendationIdsFromThemes(themes, field, maxSize = Number.MAX_SAFE_INTEGER) {\r\n const map = getUniqueAssetMapFromThemes(themes, field, maxSize);\r\n\r\n if (field === 'images') {\r\n return Array.from(map.keys());\r\n }\r\n\r\n return Array.from(map.values());\r\n}\r\n\r\n/**\r\n * Gets a unique list of asset recommendations from a list of themes, without getting too many assets from each theme.\r\n * @param {Object[]} themes - List of theme objects with recommended text assets.\r\n * @param {string} field - Field name for text assets, e.g. 'headlines' or 'descriptions'.\r\n * @param {Number} [maxSize] - Maximum number of assets to get.\r\n * @returns {string[]} - Array of text asset strings.\r\n */\r\nexport function getUniqueAssetsFromThemes(themes, field, maxSize = Number.MAX_SAFE_INTEGER) {\r\n const map = getUniqueAssetMapFromThemes(themes, field, maxSize);\r\n\r\n if (field === 'images') {\r\n return Array.from(map.values());\r\n }\r\n return Array.from(map.keys());\r\n}\r\n","const videoTemplatesLocalized = i18n => ({\r\n 'f4e5dab9-317e-5426-9999-4a1d062a8d6e': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Microsoft Ad Animated Fun Template')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('A fun animated template for advertisers to promote their products.')),\r\n },\r\n '00000002-0000-0000-0000-000000000001': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Animated fun')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Grab your audience\\'s attention with eye-catching colors and a bold style designed to make your video stand out.')),\r\n },\r\n '00000002-0000-0000-0000-000000000002': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Bold and colorful')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Grab your audience\\'s attention with eye-catching colors and a bold style designed to make your video stand out.')),\r\n },\r\n '00000002-0000-0000-0000-000000000003': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Corporate and professional')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Showcase a video that has a professional look, designed to reach customers interested in your business.')),\r\n },\r\n '00000002-0000-0000-0000-000000000004': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Elegance and luxury')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Appeal to customers with a video that’s inspired by elegance, luxury, and beauty, designed to spark interest in your product or service.')),\r\n },\r\n '00000002-0000-0000-0000-000000000005': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Whimsical, fantasy')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Attract your audience with a creative, whimsical video designed to spark interest in your product or service.')),\r\n },\r\n '00000002-0000-0000-0000-000000000007': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Modern minimalist')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Elevate your brand with a sleek and modern-looking video designed to catch the eye of your target audience.')),\r\n },\r\n '00000002-0000-0000-0000-000000000008': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Nature-inspired')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Showcase a nature-inspired video that\\'s designed to appeal to customers who love the great outdoors.')),\r\n },\r\n '00000002-0000-0000-0000-000000000009': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Tech-savvy')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Grab the attention of customers with a tech-savvy, innovative video.')),\r\n },\r\n '00000002-0000-0000-0000-000000000010': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Urban cool')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Attract your target audience with a modern, urban, and trendy video.')),\r\n },\r\n '00000002-0000-0000-0000-000000000011': {\r\n LocalizedTemplateName: i18n.getString(_TL_('Vintage, retro')),\r\n LocalizedTemplateDescription: i18n.getString(_TL_('Bring back the classics with a retro-inspired video designed to evoke nostalgic fun.')),\r\n },\r\n});\r\n\r\nexport default videoTemplatesLocalized;\r\n","import { useCallback } from 'react';\r\nimport { useFetch } from '@bingads-webui-campaign-react/campaign-http';\r\nimport videoTemplatesLocalized from '../../localize/video-templates';\r\n\r\nexport const useCopilotDomainDataService = () => {\r\n const { post } = useFetch();\r\n\r\n const fetchData = useCallback(async (url, params) => {\r\n try {\r\n const response = await post(url, params);\r\n return { response, error: null };\r\n } catch (error) {\r\n return { response: null, error };\r\n }\r\n }, [post]);\r\n\r\n const getAudioListWithFilter = useCallback((filter) => {\r\n const url = 'v13/SupportedClipchampAudio/Query';\r\n return fetchData(url, { Mock: true, AudioFilter: filter });\r\n }, [fetchData]);\r\n\r\n const getVideoTemplateListWithFilter = useCallback((templateFilter) => {\r\n const url = 'v13/ClipchampTemplates/Query';\r\n return fetchData(url, { Mock: false, TemplateFilter: templateFilter });\r\n }, [fetchData]);\r\n\r\n return {\r\n getAudioListWithFilter,\r\n getVideoTemplateListWithFilter,\r\n };\r\n};\r\n\r\nexport const useCopilotDomainDataRepository = () => {\r\n const {\r\n getAudioListWithFilter,\r\n getVideoTemplateListWithFilter,\r\n } = useCopilotDomainDataService();\r\n\r\n const getAudioList = useCallback(filter => getAudioListWithFilter(filter), [getAudioListWithFilter]);\r\n\r\n const getVideoTemplates = useCallback(async (templateFilter, i18n) => {\r\n try {\r\n const { response, error } = await getVideoTemplateListWithFilter(templateFilter);\r\n\r\n if (error || !response) {\r\n return { response, error };\r\n }\r\n\r\n if (!i18n) {\r\n return { response, error: null }; // If i18n is not available, return templates without localization\r\n }\r\n\r\n const localizedTemplates = videoTemplatesLocalized(i18n);\r\n\r\n const updatedTemplates = response.Templates.map((template) => {\r\n const localizedTemplate = localizedTemplates[template.TemplateId];\r\n return {\r\n ...template,\r\n ...localizedTemplate,\r\n };\r\n });\r\n\r\n return { response: { Templates: updatedTemplates }, error: null };\r\n } catch (error) {\r\n return { response: null, error };\r\n }\r\n }, [getVideoTemplateListWithFilter]);\r\n\r\n return {\r\n getAudioList,\r\n getVideoTemplates,\r\n };\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useCopilotDomainDataRepository } from './repository/copilotDomainDataRepository';\r\n\r\nexport const withCopilotDomainDataService = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const dataService = useCopilotDomainDataRepository();\r\n const {\r\n getAudioList,\r\n getVideoTemplates,\r\n } = dataService;\r\n const copilotDomainDataService = useMemo(() => ({\r\n getAudioList,\r\n getVideoTemplates,\r\n }), [getAudioList, getVideoTemplates]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withCopilotDomainDataService(${getDisplayName(WrappedComponent)})`;\r\n\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\nimport {\r\n AssetPropertyName,\r\n getUniqueAssetsFromThemes,\r\n} from '@bingads-webui-campaign-react/copilot-common';\r\nimport { useBannerService } from '@bingads-webui/inline-copilot';\r\nimport { constants as ImageassetsConstants } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nconst DefaultMaxAssetsToPrefill = {\r\n images: 5,\r\n headlines: 12,\r\n longHeadlines: 4,\r\n descriptions: 4,\r\n};\r\n\r\nconst MaxAssetsToPrefillConfig = {\r\n Default: DefaultMaxAssetsToPrefill,\r\n LinkedIn: {\r\n images: 1,\r\n headlines: 1,\r\n longHeadlines: 1,\r\n descriptions: 1,\r\n },\r\n};\r\n\r\nconst getMaxAssetsToPrefill = feature => _.result(MaxAssetsToPrefillConfig, feature, DefaultMaxAssetsToPrefill);\r\n\r\nexport function usePrefill({\r\n activity,\r\n applyTextAssets,\r\n imageExperienceAddNewImageCallback,\r\n logAndTrackPrefillImages,\r\n copilotTracking,\r\n cta,\r\n newCTACallback,\r\n currentCTA,\r\n logo,\r\n feature = 'Default',\r\n permissions,\r\n}) {\r\n const { send: sendCopilotBannerNotification } = useBannerService();\r\n\r\n const prefill = useCallback((themes) => {\r\n // put banner into Applying state\r\n sendCopilotBannerNotification('Apply');\r\n\r\n const maxAssetsToPrefill = getMaxAssetsToPrefill(feature);\r\n let newThemes =themes;\r\n if (permissions && permissions.dynamic && permissions.dynamic.CopilotDKIRecommendation && feature === 'MMA') {\r\n const DKITheme = _.first(themes.filter(theme => theme.name === 'Asset_Theme_For_DKI'));\r\n const normalThemes = themes.filter(theme => theme.name !== 'Asset_Theme_For_DKI');\r\n if (DKITheme && DKITheme.headlines) { newThemes = [{ ...DKITheme, headlines: DKITheme.headlines.slice(0, 2) }, ...normalThemes]; }\r\n }\r\n // prefill text assets\r\n const newHeadlines = applyTextAssets(newThemes, 'headlines', maxAssetsToPrefill.headlines);\r\n if (newHeadlines) {\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.HEADLINE, newHeadlines);\r\n }\r\n const newLongHeadlines = applyTextAssets(themes, 'longHeadlines', maxAssetsToPrefill.longHeadlines);\r\n if (newLongHeadlines) {\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.LONG_HEADLINE, newLongHeadlines);\r\n }\r\n const newDescriptions = applyTextAssets(themes, 'descriptions', maxAssetsToPrefill.descriptions);\r\n if (newDescriptions) {\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.DESCRIPTION, newDescriptions);\r\n }\r\n\r\n // prefill images\r\n return new Promise((resolve) => {\r\n if (imageExperienceAddNewImageCallback) {\r\n const newImages = getUniqueAssetsFromThemes(themes, 'images', maxAssetsToPrefill.images);\r\n if (newImages.length > 0) {\r\n resolve(imageExperienceAddNewImageCallback(newImages, ImageassetsConstants.imageOptionKeys.Image));\r\n return;\r\n }\r\n }\r\n resolve({ processedImages: [] });\r\n }).then((response) => {\r\n if (response) {\r\n activity.trace(`Apply image from copilot prefill: ${JSON.stringify(response.processedImages)}`);\r\n\r\n if (response.processedImages && response.processedImages.length > 0) {\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.IMAGE, _.pluck(response.processedImages, 'idString'));\r\n const imageAssets = _.map(\r\n _.filter(response.processedImages, image => image && image.suggestionId && image.idString),\r\n image => ({\r\n suggestionId: image.suggestionId,\r\n imageId: image.idString,\r\n })\r\n );\r\n if (logAndTrackPrefillImages) {\r\n logAndTrackPrefillImages(imageAssets);\r\n }\r\n }\r\n\r\n if (response.errorMessage && activity) {\r\n const message = `Apply image from copilot prefill error: ${response.errorMessage}`;\r\n activity.trace(message);\r\n }\r\n }\r\n }).then(() => {\r\n if (cta && newCTACallback && currentCTA !== 'Automated') {\r\n newCTACallback({\r\n CallToAction: cta.replace(' ', ''),\r\n CallToActionLanguage: 'English',\r\n });\r\n }\r\n if (logo) {\r\n return imageExperienceAddNewImageCallback([{\r\n fullUrl: logo,\r\n suggestionId: -1,\r\n }], ImageassetsConstants.imageOptionKeys.Logo);\r\n }\r\n return Promise.resolve();\r\n });\r\n }, [sendCopilotBannerNotification, feature, applyTextAssets, copilotTracking, imageExperienceAddNewImageCallback, activity, cta, newCTACallback, currentCTA, logo]);\r\n\r\n return prefill;\r\n}\r\n","import React, { useCallback, useEffect, useState, useMemo, useContext } from 'react';\r\nimport _, { noop, isFunction } from 'underscore';\r\nimport {\r\n AssetEventFeature,\r\n getFormattedThemeForApplying,\r\n getUniqueAssetsFromThemes,\r\n useEventLog,\r\n} from '@bingads-webui-campaign-react/copilot-common';\r\nimport { uniqAssetRecommendationsInThemes, useRecommendations, RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { constants as ImageassetsConstants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { CopilotRecommendationBannerWithDialog } from '@bingads-webui/inline-copilot';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { usePostAssetEvent, AssetChannel, AssetScenario } from '@bingads-webui-react/copilot-event-provider';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\n\r\nimport { usePrefill } from './use-prefill';\r\nimport { useSurveyTriggers } from './use-survey-triggers';\r\nimport { getUniqueRecommendationIdsFromThemes } from '../../copilot-common/src/get-unique-assets-from-themes';\r\n\r\nexport const SuggestionViewImageCount = 5;\r\n\r\nexport const useCopilot = ({\r\n maxUploadNum,\r\n addNewShortHeadlinesCallback,\r\n addNewLongHeadlinesCallback,\r\n addNewDescriptionCallback,\r\n imageExperienceAddNewImageCallback,\r\n newCTACallback,\r\n currentCTA,\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 campaignId,\r\n assetGroupId,\r\n enableCopilotRecommendations = true,\r\n feature = 'DisplayPlus',\r\n assetScenario,\r\n customBannerStrings,\r\n toastOffset,\r\n isBannerNarrow,\r\n skipBusinessNameRecommendation = false,\r\n}) => {\r\n const postAssetEventScenario = useMemo(() => {\r\n if (assetScenario) {\r\n return assetScenario;\r\n }\r\n return data !== undefined ? AssetScenario.EDIT_WORK_FLOW : AssetScenario.CREATE_WORK_FLOW;\r\n }, [assetScenario, data]);\r\n const [recommendationContext, setRecommendationContext] = useContext(RecommendationContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { Permissions, DynamicPermissions } = serverContext || { };\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const [isRegionRestricted, setIsRegionRestricted] = useState(true);\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(setIsRegionRestricted);\r\n }, [permissions, serverContext]);\r\n\r\n const {\r\n copilotTracking,\r\n cta,\r\n isCustomerIdInExclusionList,\r\n logo,\r\n themes,\r\n } = recommendationContext;\r\n\r\n const finalUrlRecommendations = recommendationContext.finalUrls;\r\n\r\n const [applyRecommendationsResult, setApplyRecommendationsResult] = useState();\r\n\r\n const logTrace = useMemo(() => {\r\n if (instrumentation && instrumentation.AdsCopilot) {\r\n const scenario = instrumentation.AdsCopilot.create();\r\n return scenario.createActivity('AssetEvent').trace;\r\n }\r\n return { trace: noop, error: noop };\r\n }, [instrumentation]);\r\n\r\n\r\n const postAssetEventLog = usePostAssetEvent({\r\n shouldLog: isFunction(logTrace) && !isRegionRestricted,\r\n serverContext,\r\n channel: AssetChannel.WEB_UI,\r\n feature,\r\n scenario: postAssetEventScenario,\r\n logTrace,\r\n campaignId,\r\n assetGroupId,\r\n // Due to CORS issue in PmaxLite, we need to set withCredentials to false\r\n withCredentials: feature !== AssetEventFeature.PMAX_LITE,\r\n });\r\n\r\n // only prefill for new ads\r\n const [shouldPrefill, setShouldPrefill] = useState(!_.has(data, 'Id'));\r\n const FinalUrlForRecommendation = data && data.FinalUrlForRecommendation;\r\n\r\n const hasAssets = useMemo(() => {\r\n const images = data && data.Images;\r\n const headlines = _.compact(_.values(data && data.Headlines))|| [];\r\n const longHeadlines = _.compact(_.values((data && data.LongHeadlines))) || [];\r\n const descriptions = _.compact(_.values((data && data.Descriptions))) || [];\r\n if (images && images.ImageList && images.ImageList.length > 0) {\r\n return true;\r\n }\r\n\r\n if (headlines.length > 0 || longHeadlines.length > 0 || descriptions.length > 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }, [data]);\r\n\r\n const eventLog = useEventLog(postAssetEventLog);\r\n const {\r\n logEnterFlow,\r\n logFinalUrlRecommendations,\r\n logFetchAssetsSucceeded,\r\n logApplyThemes,\r\n logSuggestionsViewed,\r\n logPrefillAssets,\r\n logRemoveAssets,\r\n } = eventLog;\r\n\r\n const {\r\n suggestionPoller,\r\n handleCopilotBannerFetch,\r\n handleCopilotBannerFetchSucceeded,\r\n handleCopilotBannerFetchFailed,\r\n } = useRecommendations({\r\n cid,\r\n aid,\r\n campaignId: campaignId || -1,\r\n permissions,\r\n finalUrl: FinalUrlForRecommendation,\r\n isDisplayPlus: feature === AssetEventFeature.DISPLAY_PLUS,\r\n enableCopilotRecommendations,\r\n instrumentation,\r\n isMMA: feature === AssetEventFeature.MMA,\r\n isSignup: feature === AssetEventFeature.PMAX_LITE,\r\n skipBusinessNameRecommendation,\r\n });\r\n\r\n const handleReset = useCallback(() => {\r\n onReset();\r\n copilotTracking.removeAllInitialSuggestions();\r\n logRemoveAssets();\r\n }, [logRemoveAssets, onReset, copilotTracking]);\r\n\r\n const handleFetchAssetsSucceeded = useCallback((finalUrl, assetsRecommendationData) => {\r\n logFetchAssetsSucceeded(finalUrl, assetsRecommendationData);\r\n if (copilotTracking) {\r\n copilotTracking.trackReturnedTextAssets(assetsRecommendationData.RecommendedAssets);\r\n }\r\n }, [logFetchAssetsSucceeded, copilotTracking]);\r\n\r\n const applyTextAssets = useCallback((formattedThemesAndAssets, field, maxSize) => {\r\n let applyFn;\r\n switch (field) {\r\n case 'longHeadlines': applyFn = addNewLongHeadlinesCallback; break;\r\n case 'descriptions': applyFn = addNewDescriptionCallback; break;\r\n default: applyFn = addNewShortHeadlinesCallback; break;\r\n }\r\n\r\n if (applyFn) {\r\n const newTextAssets = getUniqueAssetsFromThemes(formattedThemesAndAssets, field, maxSize);\r\n applyFn(newTextAssets);\r\n\r\n // log selected suggestions as viewed\r\n const newTextAssetRecommendationIds = getUniqueRecommendationIdsFromThemes(formattedThemesAndAssets, field, maxSize);\r\n\r\n if (copilotTracking) {\r\n const viewedTextSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(newTextAssetRecommendationIds);\r\n if (viewedTextSuggestionIds.length > 0) {\r\n logSuggestionsViewed(viewedTextSuggestionIds);\r\n copilotTracking.trackViewedSuggestionIds(viewedTextSuggestionIds);\r\n }\r\n }\r\n\r\n return newTextAssets;\r\n }\r\n return null;\r\n }, [addNewShortHeadlinesCallback, addNewLongHeadlinesCallback, addNewDescriptionCallback, copilotTracking, logSuggestionsViewed]);\r\n\r\n const onApplyCopilotRecommendation = useCallback((selectedThemes, selectedThemesAndAssets) => {\r\n logApplyThemes(selectedThemes);\r\n\r\n const formattedThemesAndAssets = _.map(selectedThemesAndAssets, getFormattedThemeForApplying);\r\n\r\n setApplyRecommendationsResult(undefined);\r\n setRecommendationContext({\r\n themes: [...formattedThemesAndAssets],\r\n ...uniqAssetRecommendationsInThemes(formattedThemesAndAssets),\r\n });\r\n\r\n applyTextAssets(formattedThemesAndAssets, 'headlines');\r\n applyTextAssets(formattedThemesAndAssets, 'longHeadlines');\r\n applyTextAssets(formattedThemesAndAssets, 'descriptions');\r\n\r\n const logCopilotViewedImageSuggestions = (suggestionIds) => {\r\n if (copilotTracking) {\r\n const viewedImageSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(suggestionIds);\r\n if (viewedImageSuggestionIds.length > 0) {\r\n logSuggestionsViewed([], viewedImageSuggestionIds);\r\n copilotTracking.trackViewedSuggestionIds(viewedImageSuggestionIds);\r\n }\r\n }\r\n };\r\n\r\n const availableNewImages = getUniqueAssetsFromThemes(formattedThemesAndAssets, 'images', maxUploadNum);\r\n if (imageExperienceAddNewImageCallback && availableNewImages && availableNewImages.length > 0) {\r\n imageExperienceAddNewImageCallback(availableNewImages, ImageassetsConstants.imageOptionKeys.Image)\r\n .then((response) => {\r\n if (response.processedImages && enableCopilotRecommendations) {\r\n logCopilotViewedImageSuggestions(_.pluck(response.processedImages, 'suggestionId'));\r\n response.processedImages.forEach((image) => {\r\n if (image) {\r\n copilotTracking.trackSelectedImageAssets({ ImageAssets: [{ suggestionId: image.suggestionId, imageId: image.idString }] });\r\n }\r\n });\r\n }\r\n if (response.errorMessage && activity) {\r\n const message = `Apply image from copilot dialog error: ${response.errorMessage}`;\r\n activity.trace(message);\r\n }\r\n }).then(() => {\r\n if (cta && newCTACallback && currentCTA !== 'Automated') {\r\n newCTACallback({\r\n CallToAction: cta.replace(' ', ''),\r\n CallToActionLanguage: 'English',\r\n });\r\n }\r\n if (logo) {\r\n return imageExperienceAddNewImageCallback([{\r\n fullUrl: logo,\r\n suggestionId: -1,\r\n }], ImageassetsConstants.imageOptionKeys.Logo);\r\n }\r\n return Promise.resolve();\r\n })\r\n .finally(() => {\r\n setApplyRecommendationsResult('ApplySucceeded');\r\n });\r\n } else {\r\n setApplyRecommendationsResult('ApplySucceeded');\r\n }\r\n\r\n // resolve immediately, recommendations dialog will be closed and toast will be shown while apply operations continue\r\n return Promise.resolve();\r\n }, [logApplyThemes, setRecommendationContext, applyTextAssets, imageExperienceAddNewImageCallback, maxUploadNum, copilotTracking, logSuggestionsViewed, enableCopilotRecommendations, activity, cta, newCTACallback, currentCTA, logo]);\r\n\r\n const copilotBanner = useMemo(() => {\r\n if (isRegionRestricted) {\r\n // copilot is not enabled in this region, do not display the banner or fetch any recommendations\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }, [\r\n applyRecommendationsResult,\r\n customBannerStrings,\r\n eventLog,\r\n handleCopilotBannerFetch,\r\n handleCopilotBannerFetchFailed,\r\n handleCopilotBannerFetchSucceeded,\r\n handleFetchAssetsSucceeded,\r\n handleReset,\r\n isBannerNarrow,\r\n isRegionRestricted,\r\n onApplyCopilotRecommendation,\r\n toastOffset,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (enableCopilotRecommendations) {\r\n logEnterFlow();\r\n\r\n setRecommendationContext({\r\n postAssetEventLog,\r\n });\r\n }\r\n }, [logEnterFlow, setRecommendationContext, postAssetEventLog, enableCopilotRecommendations]);\r\n\r\n useEffect(() => {\r\n if (enableCopilotRecommendations && finalUrlRecommendations && finalUrlRecommendations.length > 0) {\r\n logFinalUrlRecommendations(finalUrlRecommendations);\r\n copilotTracking.trackReturnedFinalUrlAssets({ FinalUrls: finalUrlRecommendations });\r\n }\r\n }, [finalUrlRecommendations, logFinalUrlRecommendations, copilotTracking, enableCopilotRecommendations]);\r\n\r\n const logAndTrackPrefillImages = useCallback((imageAssets) => {\r\n if (copilotTracking && imageAssets && imageAssets.length > 0) {\r\n copilotTracking.trackSelectedImageAssets({ ImageAssets: imageAssets });\r\n const viewedImageSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(_.pluck(imageAssets, 'suggestionId'));\r\n if (viewedImageSuggestionIds.length > 0) {\r\n logSuggestionsViewed([], viewedImageSuggestionIds);\r\n }\r\n }\r\n }, [copilotTracking, logSuggestionsViewed]);\r\n\r\n const prefill = usePrefill({\r\n activity,\r\n applyTextAssets,\r\n imageExperienceAddNewImageCallback,\r\n logAndTrackPrefillImages,\r\n copilotTracking,\r\n cta,\r\n newCTACallback,\r\n currentCTA,\r\n logo,\r\n feature,\r\n permissions,\r\n });\r\n useEffect(() => {\r\n if (enableCopilotRecommendations && shouldPrefill) {\r\n if (_.size(themes) === 0) {\r\n activity.trace('not prefilling ad, no copilot recommendations');\r\n } else if (hasAssets) {\r\n activity.trace('not prefilling ad, text or image assets already exist');\r\n } else {\r\n // prevent prefilling again\r\n setShouldPrefill(false);\r\n\r\n if (isCustomerIdInExclusionList) {\r\n activity.trace('not prefilling ad, customer is in exclusion list');\r\n } else {\r\n // new asset group or campaign with no text or image assets, prefill with copilot recommendations\r\n activity.trace('prefilling ad with copilot recommendations');\r\n setApplyRecommendationsResult(undefined);\r\n prefill(themes).finally(() => {\r\n setApplyRecommendationsResult('ApplySucceeded');\r\n logPrefillAssets();\r\n });\r\n }\r\n }\r\n }\r\n }, [\r\n activity,\r\n enableCopilotRecommendations,\r\n hasAssets,\r\n isCustomerIdInExclusionList,\r\n logPrefillAssets,\r\n prefill,\r\n shouldPrefill,\r\n themes,\r\n ]);\r\n\r\n\r\n useSurveyTriggers({\r\n enableCopilotRecommendations,\r\n isSaving,\r\n isCanceling,\r\n themes,\r\n });\r\n\r\n return {\r\n copilotBanner,\r\n suggestionPoller,\r\n themes,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useEffect } from 'react';\r\nimport { getParameter } from '@bingads-webui/url-util';\r\nimport { AssetEventFeature, useCopilotRecommendationSurvey } from '@bingads-webui-campaign-react/copilot-common';\r\n\r\nexport function useSurveyTriggers({\r\n enableCopilotRecommendations,\r\n isSaving,\r\n isCanceling,\r\n themes,\r\n}) {\r\n const {\r\n triggerSurveyOnSubmit,\r\n triggerSurveyOnCancel,\r\n } = useCopilotRecommendationSurvey(AssetEventFeature.DISPLAY_PLUS);\r\n\r\n const isSelenium = getParameter('isselenium');\r\n\r\n useEffect(() => {\r\n if (enableCopilotRecommendations && isSaving && !isSelenium) {\r\n triggerSurveyOnSubmit();\r\n }\r\n }, [enableCopilotRecommendations, isSaving, isSelenium, triggerSurveyOnSubmit]);\r\n\r\n useEffect(() => {\r\n if (enableCopilotRecommendations && isCanceling && _.size(themes) > 0 && !isSelenium) {\r\n triggerSurveyOnCancel();\r\n }\r\n }, [isCanceling, triggerSurveyOnCancel, themes, enableCopilotRecommendations, isSelenium]);\r\n}\r\n","export const TABLIST = {\r\n GROUP: 'group',\r\n RANK: 'rank',\r\n};\r\n","export const SEARCH_INPUT_TYPES = {\r\n WEBSITE: 'website',\r\n KEYWORD: 'keyword',\r\n};\r\n\r\nexport const SEARCH_INPUT_TITLES = {\r\n [SEARCH_INPUT_TYPES.WEBSITE]: _TL_('Scan your website for keywords'),\r\n [SEARCH_INPUT_TYPES.KEYWORD]: _TL_('Add your products or services'),\r\n};\r\n\r\nexport const SEARCH_INPUT_PLACEHOLDERS = {\r\n [SEARCH_INPUT_TYPES.WEBSITE]: _TL_(\"Enter your website's URL\"),\r\n [SEARCH_INPUT_TYPES.KEYWORD]: _TL_('Enter your products or services'),\r\n};\r\n","export const getTabListStyles = () => ({\r\n root: {\r\n marginTop: 4,\r\n '& button + button': {\r\n marginLeft: 24,\r\n },\r\n },\r\n divider: {\r\n marginTop: 5,\r\n },\r\n});\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Tab, TabList, Divider } 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 { TABLIST } from './constants/index';\r\nimport { getTabListStyles } from './style/tab-list-style';\r\n\r\nexport const KeywordTab = ({\r\n selectedTab,\r\n onTabSelect,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getTabListStyles);\r\n\r\n return (\r\n
\r\n \r\n {i18n.getString(_TL_('Keyword grouping'))}\r\n {i18n.getString(_TL_('Keyword ranking'))}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nKeywordTab.propTypes = {\r\n selectedTab: PropTypes.string.isRequired,\r\n onTabSelect: PropTypes.func.isRequired,\r\n};\r\n","const options = {\r\n compact: 'short',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n};\r\n\r\nexport function getSearchRange(value) {\r\n const base = 10 ** Math.floor(Math.log10(value));\r\n\r\n return {\r\n ceil: base * 10,\r\n floor: base < 10 ? 0 : base,\r\n };\r\n}\r\n\r\nexport function getSearchRangeString(value, i18n) {\r\n const range = getSearchRange(value);\r\n\r\n if (range.ceil === 0) {\r\n return '-';\r\n }\r\n return `${i18n.formatDecimal(range.floor, options)} - ${i18n.formatDecimal(range.ceil, options)}`;\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { getSearchRangeString } from './get-search-range';\r\n\r\nexport const onRenderHeader = (title, topicId, i18n) => (\r\n
\r\n \r\n {title}\r\n \r\n {\r\n topicId && (\r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n);\r\n\r\nexport const columnOrder = i18n => ({\r\n key: 'ColumnOrder',\r\n name: i18n.getString(_TL_('#')),\r\n fieldName: 'Order',\r\n minWidth: 30,\r\n maxWidth: 60,\r\n // isResizable: true,\r\n sortable: false,\r\n onRender: (_item, index) => {\r\n // eslint-disable-next-line react-hooks/rules-of-hooks\r\n const { state } = useContext(GridContext);\r\n const { pagination } = state;\r\n const { pageNumber, pageSize } = pagination;\r\n return `#${i18n.formatDecimal(((pageNumber - 1) * pageSize) + index + 1, {\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n })}`;\r\n },\r\n});\r\n\r\nexport const columnKeyword = i18n => ({\r\n key: 'Keyword',\r\n name: i18n.getString(_TL_('Keyword')),\r\n fieldName: 'Keyword',\r\n minWidth: 100,\r\n maxWidth: 200,\r\n isResizable: true,\r\n sortable: false,\r\n});\r\n\r\nexport const columnSearches = i18n => ({\r\n key: 'ColumnSearches',\r\n name: 'ColumnSearches',\r\n fieldName: 'AggregateMetric/AverageSearchVolume',\r\n minWidth: 100,\r\n maxWidth: 120,\r\n isResizable: true,\r\n sortable: true,\r\n onRender: item => getSearchRangeString(item.AggregateMetric.AverageSearchVolume, i18n),\r\n onRenderHeader: () => onRenderHeader(i18n.getString(_TL_('Searches')), 'pop_BA_CampaignCreate_Keywords_MonthlySearches', i18n),\r\n});\r\n\r\nexport const columns = i18n => [\r\n columnOrder(i18n),\r\n columnKeyword(i18n),\r\n columnSearches(i18n),\r\n];\r\n","import { useContext, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { GridContext, useClientSortingPaging, usePreservedSelection } from '@bingads-webui-grid/grid-context';\r\n\r\nexport const GridDataSource = ({ onSelectChange }) => {\r\n const { state, dispatch } = useContext(GridContext);\r\n const {\r\n sortedColumn, pagination, sourceItemsInAllPages, selectedItemsInAllPages,\r\n } = state;\r\n const { pageNumber, pageSize } = pagination;\r\n const sort = useCallback((a, b) => {\r\n const isSortedDescending = sortedColumn.isSortedDescending ? -1 : 1;\r\n switch (sortedColumn.fieldName) {\r\n case 'AggregateMetric/AverageSearchVolume':\r\n return isSortedDescending * (a.AggregateMetric.AverageSearchVolume - b.AggregateMetric.AverageSearchVolume);\r\n default:\r\n return 0;\r\n }\r\n }, [sortedColumn]);\r\n\r\n useClientSortingPaging({\r\n sortFunction: sort,\r\n });\r\n usePreservedSelection();\r\n\r\n useEffect(() => {\r\n dispatch({ type: 'FINISH_LOAD_DATA', payload: { items: sourceItemsInAllPages.slice((pageNumber - 1) * pageSize, (pageNumber) * pageSize), totalCount: sourceItemsInAllPages.length } });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n onSelectChange(selectedItemsInAllPages);\r\n }, [onSelectChange, selectedItemsInAllPages]);\r\n\r\n return null;\r\n};\r\n\r\nGridDataSource.propTypes = {\r\n onSelectChange: PropTypes.func.isRequired,\r\n};\r\n","export const getNoDataWarningStyles = () => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n },\r\n imageContainer: {\r\n height: 200,\r\n width: 200,\r\n borderRadius: 160,\r\n border: '0.64px #F0F0F0',\r\n background: '#FAF9F8',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n image: {\r\n height: 128,\r\n width: 128,\r\n },\r\n keyHint: {\r\n fontWeight: 600,\r\n fontSize: 20,\r\n width: 300,\r\n marginTop: 18,\r\n textAlign: 'center',\r\n },\r\n description: {\r\n width: 300,\r\n textAlign: 'center',\r\n marginTop: 8,\r\n },\r\n});\r\n","import React, { useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport searchImage from './media/search.png';\r\nimport { getNoDataWarningStyles } from './style/no-recommendation-warning-style';\r\n\r\nexport const NoRecommendationWarning = () => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getNoDataWarningStyles);\r\n return (\r\n
\r\n
\r\n {i18n.getString(_TL_('colorful\r\n
\r\n
\r\n {i18n.getString(_TL_('No keywords found'))}\r\n
\r\n
\r\n {i18n.getString(_TL_('We were unable to suggest any keywords based on the URL provided. Please try entering a different URL, product, or service.'))}\r\n
\r\n
\r\n );\r\n};\r\n","export const getGridStyles = () => ({\r\n root: {\r\n marginTop: 16,\r\n '& .ms-DetailsHeader': {\r\n borderTop: 'none',\r\n },\r\n '& .ms-DetailsRow-cell:nth-child(1)': {\r\n borderRight: 'none',\r\n },\r\n '& .ms-DetailsHeader-cell:nth-child(3)': {\r\n borderRight: 'none',\r\n },\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 { SelectionMode, CheckboxVisibility } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ContextualDetailsList, GridContextProvider } from '@bingads-webui-grid/grid-context';\r\nimport { columns } from './util/grid-columns';\r\nimport { GridDataSource } from './grid-data-source';\r\nimport { NoRecommendationWarning } from './no-recommendation-warning';\r\nimport { getGridStyles } from './style/grid-style';\r\n\r\nexport const KeywordRanking = ({\r\n allData,\r\n selectedData,\r\n onSelectChange,\r\n}) => {\r\n const classes = useDefaultStyles(getGridStyles);\r\n const i18n = useContext(I18nContext);\r\n const gridColumns = useMemo(() => columns(i18n), [i18n]);\r\n const initialGridContext = useMemo(() => ({\r\n sortedColumn: {}, // [todo] initial sort column\r\n selectionMode: SelectionMode.multiple,\r\n allColumns: gridColumns,\r\n selectedColumns: gridColumns,\r\n initAllItems: allData,\r\n initSelectedItems: selectedData,\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\n stickyHeader\r\n checkboxVisibility={CheckboxVisibility.always}\r\n />\r\n \r\n
\r\n );\r\n};\r\n\r\nKeywordRanking.propTypes = {\r\n allData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onSelectChange: PropTypes.func,\r\n};\r\n\r\nKeywordRanking.defaultProps = {\r\n onSelectChange: () => {},\r\n};\r\n","export const getSearchInputStyles = () => ({\r\n searchInputContainer: {\r\n width: 268,\r\n },\r\n searchBox: {\r\n marginTop: 4,\r\n },\r\n});\r\n\r\nexport const searchInputTitleStyles = {\r\n fontWeight: 600,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text } from '@fluentui/react-components';\r\nimport { SearchBox } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getSearchInputStyles, searchInputTitleStyles } from './style/search-input-style';\r\nimport { SEARCH_INPUT_TITLES, SEARCH_INPUT_PLACEHOLDERS } from './constants';\r\n\r\nexport const SearchInput = (props) => {\r\n const classes = useDefaultStyles(getSearchInputStyles);\r\n const i18n = useContext(I18nContext);\r\n const {\r\n onSearch,\r\n onChange,\r\n type,\r\n value,\r\n enabled,\r\n } = props;\r\n\r\n return (\r\n
\r\n
\r\n \r\n {i18n.getString(SEARCH_INPUT_TITLES[type])}\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nSearchInput.propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n onSearch: PropTypes.func.isRequired,\r\n type: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n enabled: PropTypes.bool.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@fluentui/react';\r\nimport { SearchInput } from './search-input';\r\nimport { SEARCH_INPUT_TYPES } from './constants';\r\n\r\nexport const SearchInputStack = ({\r\n url,\r\n keywords,\r\n inputStatus,\r\n onUrlChange,\r\n onKeywordsChange,\r\n onSearch,\r\n}) => (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nSearchInputStack.propTypes = {\r\n onSearch: PropTypes.func.isRequired,\r\n onKeywordsChange: PropTypes.func.isRequired,\r\n onUrlChange: PropTypes.func.isRequired,\r\n url: PropTypes.string.isRequired,\r\n keywords: PropTypes.string.isRequired,\r\n inputStatus: PropTypes.shape({\r\n url: PropTypes.bool,\r\n keywords: PropTypes.bool,\r\n }).isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { isSelectedLanguagesOnlyTire2ForKeywordPlanner, getKeywordPlannerSupportedLanguagesByLocationIds } from '@bingads-webui-campaign-legacy/location-targets/util/constants';\r\n\r\nexport const isAllLocationsUnsupported = targetedLocationInfo => targetedLocationInfo.locations.length === 0 && targetedLocationInfo.numLocationsTargeted > 0;\r\n\r\nexport const getLanguagesSupportedByLocations = (locations, languages, useTireTwoMarkets = false) => {\r\n const locationSupportedLanguages =\r\n getKeywordPlannerSupportedLanguagesByLocationIds(locations, useTireTwoMarkets);\r\n\r\n return _.intersection(languages, locationSupportedLanguages);\r\n};\r\n\r\nexport const onlyTire2LangaugesSelected = (locations, languages, crossCheckWithTargets = false) => {\r\n const languagesCanUse = crossCheckWithTargets ?\r\n getLanguagesSupportedByLocations(locations, languages, true) :\r\n languages;\r\n\r\n return !_.isEmpty(languagesCanUse) && isSelectedLanguagesOnlyTire2ForKeywordPlanner(languagesCanUse);\r\n};\r\n","export const exampleData = [\r\n {\r\n Name: 'Used Car',\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 4550,\r\n AverageCPC: 1000,\r\n CompetitionLevel: 'Low',\r\n },\r\n Suggestions: [\r\n {\r\n Keyword: 'carvana used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 308,\r\n AverageCPC: 1000,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'carvana used cars inventory',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 50,\r\n AverageCPC: 230,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'edmunds used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 50,\r\n AverageCPC: 30,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'truecar used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 40,\r\n AverageCPC: 40,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars near me',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 80,\r\n AverageCPC: 0,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 40,\r\n AverageCPC: 860,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'autotrader used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 80,\r\n AverageCPC: 901,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'certified used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 60,\r\n AverageCPC: 3330,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'cargurus used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 990,\r\n AverageCPC: 2220,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'cars com used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 880,\r\n AverageCPC: 1110,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'buy used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 770,\r\n AverageCPC: 340,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'kelley blue book used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 550,\r\n AverageCPC: 10,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'carmax used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 660,\r\n AverageCPC: 20,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'carfax used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 440,\r\n AverageCPC: 30,\r\n CompetitionLevel: 'High',\r\n },\r\n },\r\n {\r\n Keyword: 'bmw used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 580,\r\n AverageCPC: 900,\r\n CompetitionLevel: 'Medium',\r\n },\r\n },\r\n {\r\n Keyword: 'blue book value used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 320,\r\n AverageCPC: 102,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'evans halshaw used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 120,\r\n AverageCPC: 320,\r\n CompetitionLevel: 'Medium',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars ni',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 350,\r\n AverageCPC: 30,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'arnold clark used cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 230,\r\n AverageCPC: 40,\r\n CompetitionLevel: 'Medium',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n Name: 'Car',\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 450,\r\n AverageCPC: 330,\r\n CompetitionLevel: 'Low',\r\n },\r\n Suggestions: [\r\n {\r\n Keyword: 'new cars 2020',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 1230,\r\n AverageCPC: 130,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'honda cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 850,\r\n AverageCPC: 530,\r\n CompetitionLevel: 'Medium',\r\n },\r\n },\r\n {\r\n Keyword: 'pre owned cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 150,\r\n AverageCPC: 630,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'suv cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 9814,\r\n AverageCPC: 220,\r\n CompetitionLevel: 'Medium',\r\n },\r\n },\r\n {\r\n Keyword: 'jaguar cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 465,\r\n AverageCPC: 330,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'disney cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 123,\r\n AverageCPC: 440,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cazoo cars uk',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 342,\r\n AverageCPC: 770,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'model cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 220,\r\n AverageCPC: 60,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'volvo cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 330,\r\n AverageCPC: 10,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cars trucks',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 230,\r\n AverageCPC: 10,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'tesla 1 million cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 980,\r\n AverageCPC: 50,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'electric cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 608,\r\n AverageCPC: 60,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'mclaren cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 6850,\r\n AverageCPC: 90,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cars film 2006',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 5550,\r\n AverageCPC: 100,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'lowrider cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 6660,\r\n AverageCPC: 960,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'sports cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 60,\r\n AverageCPC: 9690,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'japan gas powered cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 70,\r\n AverageCPC: 567890,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'gateway classic cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 30,\r\n AverageCPC: 3333,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'motability cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 50,\r\n AverageCPC: 456,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: '2020 new cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 1230,\r\n AverageCPC: 9999,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'luxury cars',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 77770,\r\n AverageCPC: 11100,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n Name: 'Used Car Sale',\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 9990,\r\n AverageCPC: 8850,\r\n CompetitionLevel: 'Low',\r\n },\r\n Suggestions: [\r\n {\r\n Keyword: 'used cars sale near me',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 88880,\r\n AverageCPC: 9620,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars sale',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 808,\r\n AverageCPC: 4210,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cheap used cars sale',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 90,\r\n AverageCPC: 6250,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars sale my area',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 30,\r\n AverageCPC: 8550,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars sale owner',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 502,\r\n AverageCPC: 6230,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'used cars sales',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 560,\r\n AverageCPC: 10000,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'all used cars sale',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Used Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 230,\r\n AverageCPC: 60,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n Name: 'Car Sale',\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 3890,\r\n AverageCPC: 3330,\r\n CompetitionLevel: 'Low',\r\n },\r\n Suggestions: [\r\n {\r\n Keyword: 'cars sale near me',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 40,\r\n AverageCPC: 10,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cars sale',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car Sale',\r\n Existing: true,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 30,\r\n AverageCPC: 20,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cars sale my area',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car Sale',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 20,\r\n AverageCPC: 30,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'new cars sale',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car Sale',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 120,\r\n AverageCPC: 40,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n {\r\n Keyword: 'cars sale owner',\r\n SourceType: 'SuggestionFromKeyword',\r\n Tag: 'Car Sale',\r\n Existing: false,\r\n AggregateMetric: {\r\n TimePeriod: 'Last12Months',\r\n AverageSearchVolume: 120,\r\n AverageCPC: 560,\r\n CompetitionLevel: 'Low',\r\n },\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const searchIdeaExampleData = [{\r\n Aggregations: [{\r\n Keywords: [{\r\n Type: 'Idea',\r\n Index: 0,\r\n Keyword: {\r\n Text: 'abcdefghi',\r\n MatchType: 'Broad',\r\n },\r\n }],\r\n }],\r\n}];\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { getKeywordPlannerSupportedLanguagesByLocationIds, getKeywordPlannerSupportedLocationIdsByLangauges } from '@bingads-webui-campaign-legacy/location-targets/util/constants';\r\nimport {\r\n CONTROL_TYPES,\r\n URL_OPTION_TYPES,\r\n KEYWORD_FILTER_WITH_RANGE_TYPES,\r\n OPERATOR_TYPES,\r\n NETWORK_TYPES,\r\n LOCATION_TARGET_LIMIT,\r\n} from '@bingads-webui-campaign-react/keyword-planner-shared';\r\nimport { isAllLocationsUnsupported } from './location-util';\r\nimport { exampleData } from '../../demo/default/example-data';\r\n\r\nconst odataLimits = {\r\n url: 2000,\r\n location: 100,\r\n keywordLength: 100,\r\n};\r\n\r\nconst uri = 'Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.AdGroupSuggestions?$expand=Suggestions';\r\n\r\nconst requestData = ({\r\n url,\r\n keywords,\r\n targetedLocationInfo,\r\n languages,\r\n}) => {\r\n const req = {\r\n criteria: [],\r\n };\r\n\r\n let hasOnlyKeyword = true;\r\n\r\n if (url) {\r\n hasOnlyKeyword = false;\r\n // KeywordPlanner has a url length limit\r\n // This url is solely for keyword suggestion purpose and\r\n // not saved or used by other feature\r\n const requestUrl = url.substr(0, odataLimits.url);\r\n\r\n req.criteria.push({\r\n '@odata.type': '#Model.Suggestions.UrlSuggestionCriterion',\r\n Url: requestUrl,\r\n });\r\n }\r\n\r\n if (keywords) {\r\n const keywordsArray = _.isArray(keywords) ? keywords : [keywords];\r\n\r\n _.each(keywordsArray, (keyword) => {\r\n req.criteria.push({\r\n '@odata.type': '#Model.Suggestions.SeedKeywordSuggestionCriterion',\r\n Keyword: keyword.substr(0, odataLimits.keywordLength),\r\n });\r\n });\r\n }\r\n\r\n let languagesToUse = getKeywordPlannerSupportedLanguagesByLocationIds(_.pluck(targetedLocationInfo.countryLocationInfo, 'countryLocationId'), !hasOnlyKeyword);\r\n // add parameter when keyword planner support more than one language in multi-language pilot\r\n\r\n if (!_.isEmpty(languages)) {\r\n // keyword only mode only support one langue for now, will update this after they fix the bug\r\n if (hasOnlyKeyword && languagesToUse.length > 1) {\r\n languagesToUse = [_.first(languagesToUse)];\r\n } else if (!hasOnlyKeyword && languagesToUse.length > 3) {\r\n // url only support 3 for now, will udpate this after they fix the bug\r\n languagesToUse = _.first(languagesToUse, 3);\r\n }\r\n _.each(languagesToUse, (language) => {\r\n if (language) {\r\n req.criteria.push({\r\n '@odata.type': '#Model.Suggestions.LanguageSuggestionCriterion',\r\n Language: language,\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (_.isArray(targetedLocationInfo.locations)) {\r\n // KeywordPlanner OData has a location count limit\r\n const languageSupportedLoations = _.isEmpty(languagesToUse) ?\r\n targetedLocationInfo.locations :\r\n getKeywordPlannerSupportedLocationIdsByLangauges(languagesToUse, !hasOnlyKeyword);\r\n\r\n const locationIdsSupportedByLanguage = _.compact(_.map(targetedLocationInfo.countryLocationInfo, (item) => {\r\n if (_.contains(languageSupportedLoations, item.countryLocationId)) {\r\n return item.locationId;\r\n }\r\n return 0;\r\n }));\r\n\r\n const requestLocations = _.first(\r\n locationIdsSupportedByLanguage,\r\n odataLimits.location\r\n );\r\n\r\n _.each(requestLocations, (locationId) => {\r\n if (locationId) {\r\n req.criteria.push({\r\n '@odata.type': '#Model.Suggestions.LocationSuggestionCriterion',\r\n LocationId: locationId,\r\n });\r\n }\r\n });\r\n }\r\n\r\n return req;\r\n};\r\n\r\nexport const useKeywordSuggestion = () => ({\r\n keywords,\r\n url,\r\n targetedLocationInfo,\r\n languages,\r\n scenario = 'campaign creation',\r\n}) => {\r\n if (window.e2eTestEnvironment) {\r\n return Promise.resolve({ value: exampleData });\r\n }\r\n\r\n if (isAllLocationsUnsupported(targetedLocationInfo)) {\r\n return Promise.resolve(null);\r\n }\r\n\r\n if (!keywords && !url) {\r\n return Promise.resolve(null);\r\n }\r\n\r\n const requestDataObj = requestData({\r\n keywords, url, targetedLocationInfo, languages,\r\n });\r\n\r\n if (_.isEmpty(requestDataObj.criteria)) {\r\n return Promise.resolve(null);\r\n }\r\n\r\n return odata.post(uri, {\r\n path: 'AdInsight/V2/',\r\n data: requestDataObj,\r\n customHeader: {\r\n name: 'scenario',\r\n value: scenario,\r\n },\r\n }, (dummy, response, textStatus, xhr) => {\r\n const currentSourceReqId = (xhr && xhr.getResponseHeader('x-ms-requestid')) || '';\r\n if (response && response.value) {\r\n _.each(response.value, (suggestions) => {\r\n if (suggestions && suggestions.Suggestions) {\r\n _.each(suggestions.Suggestions, (suggestion) => {\r\n // eslint-disable-next-line no-param-reassign\r\n suggestion.RequestId = currentSourceReqId;\r\n });\r\n }\r\n });\r\n }\r\n });\r\n};\r\n\r\nexport const getSearchIdeaModel = ({\r\n keywords = '',\r\n url = '',\r\n targetedLocationInfo,\r\n languages,\r\n}) => ({\r\n isIdeas: true,\r\n [CONTROL_TYPES.SEARCH_IDEA_PRODUCTS]: {\r\n isValid: true,\r\n rawKeywords: '',\r\n parsedKeywords: [keywords],\r\n },\r\n [CONTROL_TYPES.LANDING_PAGE]: {\r\n url,\r\n isValid: true,\r\n option: URL_OPTION_TYPES.PAGE,\r\n },\r\n [CONTROL_TYPES.LANGUAGE]: _.first(languages),\r\n [CONTROL_TYPES.LOCATION_LD]: _.first(targetedLocationInfo, LOCATION_TARGET_LIMIT),\r\n [CONTROL_TYPES.NETWORK]: NETWORK_TYPES.ALL,\r\n [CONTROL_TYPES.KEYWORD_FILTERS_GROUP]: {\r\n ..._.object(_.map(KEYWORD_FILTER_WITH_RANGE_TYPES, rangeKeywordFilterType =>\r\n [rangeKeywordFilterType, { operator: OPERATOR_TYPES.START, value: null, isValid: true }])),\r\n [CONTROL_TYPES.COMPETITION]: [],\r\n },\r\n [CONTROL_TYPES.INCLUDED_KEYWORD]: {\r\n rawKeywords: '',\r\n parsedKeywords: [],\r\n },\r\n [CONTROL_TYPES.NEGATIVE_KEYWORD]: {\r\n rawKeywords: '',\r\n parsedKeywords: [],\r\n },\r\n [CONTROL_TYPES.ACCOUNT_KEYWORD_DEDUPE]: true,\r\n [CONTROL_TYPES.CATEGORY]: {\r\n categoryId: '',\r\n isValid: true,\r\n },\r\n [CONTROL_TYPES.DATE_RANGE]: {},\r\n});\r\n","import * as locationFilters from '@bingads-webui-campaign-legacy/location-targets/util/filters';\r\nimport _ from 'underscore';\r\nimport {\r\n KPLocations,\r\n LOCATION_COUNTRYCODE_WHITE_LIST,\r\n LOCATION_TYPE,\r\n} from '@bingads-webui-campaign-react/keyword-planner-shared';\r\nimport * as LocationTargetTypes from '@bingads-webui-campaign-legacy/location-targets/util/locationTargetTypes';\r\n// import jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { isAllLocationsUnsupported, onlyTire2LangaugesSelected } from './location-util';\r\n\r\n// jsdata.Intermediate.getAll('CampaignCriterion')\r\nexport const getTargetedLocationInfo = (criterions, permissions) => {\r\n if (permissions && permissions.dynamic && permissions.dynamic.KeywordPlannerLiteRefactorPhase1) {\r\n if (_.isEmpty(criterions)) {\r\n return _.map(KPLocations, location => ({ id: location.id }));\r\n }\r\n\r\n const includedCriterions = _.where(criterions, {\r\n Status: 'Active',\r\n SelectionStatus: LocationTargetTypes.Included,\r\n });\r\n\r\n const locations = _.map(includedCriterions, (criterion) => {\r\n const target = criterion.Criterion.LocationCriterion || criterion.Criterion.RadiusCriterion || {};\r\n return { id: target.LocationId, countryCode: target.CountryCode, locationType: target.LocationType };\r\n });\r\n\r\n return _.filter(locations, location => !_.isUndefined(location.id) && (_.contains(LOCATION_COUNTRYCODE_WHITE_LIST, location.countryCode)\r\n || (location.locationType === LOCATION_TYPE.COUNTRY && _.contains(_.map(KPLocations, country => country.id), location.id))));\r\n }\r\n\r\n const locationsObj = locationFilters.getSupportedLocationIds(criterions, true);\r\n\r\n return {\r\n locations: locationsObj.items,\r\n numLocationsTargeted: locationsObj.totalCount,\r\n countryLocationInfo: locationsObj.countryLocationInfo,\r\n };\r\n};\r\n\r\nexport const useSearchBoxStatus = (targetedLocationInfo, languages, permissions) => {\r\n const status = {\r\n url: true,\r\n keywords: true,\r\n };\r\n\r\n if (permissions && permissions.dynamic && permissions.dynamic.KeywordPlannerLiteRefactorPhase1) {\r\n return status;\r\n }\r\n\r\n const allLocationsUnsupported = isAllLocationsUnsupported(targetedLocationInfo);\r\n if (allLocationsUnsupported) {\r\n status.url = false;\r\n status.keywords = false;\r\n } else if (onlyTire2LangaugesSelected(targetedLocationInfo.locations, languages, true)) {\r\n status.keywords = false;\r\n }\r\n\r\n return status;\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { keywordPlannerSupportedLanguages } from '@bingads-webui-campaign-legacy/location-targets/util/constants';\r\nimport {\r\n languageOptions,\r\n} from '@bingads-webui-campaign-react/keyword-planner-shared';\r\n\r\nconst languagesAllNumber = 1000;\r\n\r\nconst keywordPlannerSupportedLanguagesIdValueMap = _.invert(keywordPlannerSupportedLanguages);\r\nconst supportedLanguages = _.keys(keywordPlannerSupportedLanguages);\r\n\r\nexport const getSupportedLanguages = (languages, permissions) => {\r\n if (permissions && permissions.dynamic && permissions.dynamic.KeywordPlannerLiteRefactorPhase1) {\r\n return _.contains(languages, 'All') ? _.map(languageOptions, language => language.id) : languages;\r\n }\r\n if (_.contains(languages, 'All') || _.contains(languages, languagesAllNumber)) {\r\n return supportedLanguages;\r\n }\r\n // convert numbers to string\r\n const languages2Use = _.chain(languages)\r\n .map((lang) => {\r\n if (_.isNumber(lang)) {\r\n return keywordPlannerSupportedLanguagesIdValueMap[lang]; // undefined if not supported\r\n }\r\n return lang;\r\n }).compact().value();\r\n\r\n return _.intersection(languages2Use, supportedLanguages);\r\n};\r\n","import React, { useState, useCallback, useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n useKeywordPlannerService,\r\n CHANNEL_TYPES,\r\n} from '@bingads-webui-campaign-react/keyword-planner-shared';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { SearchInputStack } from './search-input-stack';\r\nimport { useKeywordSuggestion, useSearchBoxStatus, getSearchIdeaModel } from './util/index';\r\n\r\nexport const SearchInputStackContainer = ({\r\n targetedLocationInfo,\r\n supportedLanguages,\r\n beforeSearch,\r\n onSearchSuccess,\r\n onSearchFinally,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const [url, setUrl] = useState('');\r\n const [keywords, setKeywords] = useState('');\r\n const recommendateRequest = useKeywordSuggestion();\r\n const {\r\n Permissions,\r\n DynamicPermissions,\r\n } = useContext(ServerContext);\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const inputStatus = useSearchBoxStatus(targetedLocationInfo, supportedLanguages, permissions);\r\n const { getSearchIdea } = useKeywordPlannerService();\r\n const onSearch = useCallback(() => {\r\n if (!_.isEmpty(url) || !_.isEmpty(keywords)) {\r\n beforeSearch();\r\n // eslint-disable-next-line no-unused-expressions\r\n activity && activity.signal(`onSearchSidePanelKeywordsSuggestion - ${JSON.stringify({\r\n Url: url,\r\n Keywords: keywords,\r\n })}`);\r\n if (permissions && permissions.dynamic && permissions.dynamic.KeywordPlannerLiteRefactorPhase1) {\r\n getSearchIdea({\r\n model: getSearchIdeaModel({\r\n keywords,\r\n url,\r\n targetedLocationInfo,\r\n languages: supportedLanguages,\r\n }),\r\n isLanguageDecoupling: true,\r\n channel: CHANNEL_TYPES.CAMPAIGN_CREATION,\r\n })\r\n .then(data => onSearchSuccess(data))\r\n .catch((error) => {\r\n // eslint-disable-next-line no-unused-expressions\r\n activity && activity.signal(`onFetchRecommendationInSetting - has error - ${JSON.stringify({\r\n ErrorStatus: error && error.status,\r\n })}`);\r\n })\r\n .finally(onSearchFinally);\r\n } else {\r\n recommendateRequest({\r\n keywords,\r\n url,\r\n targetedLocationInfo,\r\n languages: supportedLanguages,\r\n activity,\r\n })\r\n .then(data => onSearchSuccess({ data }))\r\n .catch((error) => {\r\n // eslint-disable-next-line no-unused-expressions\r\n activity && activity.signal(`onFetchRecommendationInSetting - has error - ${JSON.stringify({\r\n ErrorStatus: error && error.status,\r\n })}`);\r\n })\r\n .finally(onSearchFinally);\r\n }\r\n }\r\n }, [\r\n beforeSearch,\r\n keywords,\r\n onSearchFinally,\r\n onSearchSuccess,\r\n recommendateRequest,\r\n supportedLanguages,\r\n targetedLocationInfo,\r\n url,\r\n activity,\r\n getSearchIdea,\r\n permissions,\r\n ]);\r\n\r\n const onUrlChange = useCallback((e, value) => {\r\n setUrl(value === undefined ? '' : value);\r\n }, []);\r\n const onKeywordsChange = useCallback((e, value) => {\r\n setKeywords(value === undefined ? '' : value);\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSearchInputStackContainer.propTypes = {\r\n beforeSearch: PropTypes.func.isRequired,\r\n onSearchSuccess: PropTypes.func.isRequired,\r\n onSearchFinally: PropTypes.func.isRequired,\r\n targetedLocationInfo: PropTypes.shape({}).isRequired,\r\n supportedLanguages: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","export const getKeywordGroupsStyles = () => ({\r\n container: {\r\n marginTop: 20,\r\n },\r\n divider: {\r\n marginTop: 16,\r\n marginBottom: 8,\r\n },\r\n});\r\n","export const getKeywordGroupStyles = () => ({\r\n container: {\r\n marginTop: 4,\r\n },\r\n title: {\r\n marginTop: 4,\r\n marginBottom: 12,\r\n fontWeight: 600,\r\n },\r\n checkAllLink: {\r\n marginLeft: 8,\r\n },\r\n addAllLink: {\r\n marginTop: 16,\r\n },\r\n});\r\n","export const getViewAllPanelStyles = () => ({\r\n '@global': {\r\n '.side-panel-keyword-planner-view-all.panel-right .panel-content': {\r\n '& .panel-body': {\r\n width: 600,\r\n paddingLeft: 24,\r\n paddingRight: 24,\r\n display: 'flex',\r\n marginBottom: 65,\r\n '& .fui-FluentProvider': {\r\n width: '100%',\r\n },\r\n },\r\n '& .panel-header': {\r\n paddingLeft: 24,\r\n },\r\n },\r\n },\r\n});\r\n","export const getActionBarStyles = () => ({\r\n root: {\r\n width: '100%',\r\n bottom: 0,\r\n position: 'fixed',\r\n borderTop: '1px solid #EDEBE9',\r\n padding: 16,\r\n margin: '0 -24px',\r\n },\r\n});\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@fluentui/react';\r\nimport { Button } 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 { getActionBarStyles } from './style/action-bar-style';\r\n\r\nexport const ActionBar = ({\r\n onAdd,\r\n onCancel,\r\n}) => {\r\n const classes = useDefaultStyles(getActionBarStyles);\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nActionBar.propTypes = {\r\n onAdd: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n};\r\n","export const getPanelHeaderStyles = () => ({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n image: {\r\n marginRight: 8,\r\n marginBottom: 4,\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 { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { SparkleIcon } from '@bingads-webui-campaign-react/sparkle-icon';\r\nimport { getPanelHeaderStyles } from './style/panel-header-style';\r\n\r\nexport const PanelHeader = ({ i18n }) => {\r\n const classes = useDefaultStyles(getPanelHeaderStyles);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {i18n.getString(_TL_('Explore keywords'))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nPanelHeader.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import React, { useCallback, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { Panel } from '@bingads-webui-campaign-react/panel';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { KeywordRanking } from './keyword-ranking';\r\nimport { getViewAllPanelStyles } from './style/viewall-panel-style';\r\nimport { ActionBar } from './action-bar';\r\nimport { PanelHeader } from './panel-header';\r\n\r\nexport const KeywordGroupViewAllPanel = ({\r\n allData,\r\n selectedData,\r\n isOpen,\r\n onClose,\r\n i18n,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const classes = useDefaultStyles(getViewAllPanelStyles);\r\n const [selection, setSelection] = useState(selectedData);\r\n const onSelectionChange = useCallback((data) => {\r\n setSelection(data);\r\n }, []);\r\n const onAdd = useCallback(() => {\r\n onClose(selection);\r\n // eslint-disable-next-line no-unused-expressions\r\n activity && activity.signal(`onAddSidePanelGroupDetailsGridKeywords - ${JSON.stringify({\r\n GridKeywords: selection,\r\n })}`);\r\n }, [onClose, selection, activity]);\r\n const onCancel = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n return (\r\n }\r\n className={classes}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nKeywordGroupViewAllPanel.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n allData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useCallback, useMemo, useContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { differenceBy } from 'lodash';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Link } from '@bingads-webui-react/fabric-with-signal';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { SuggestedItemsMultiSelect, SelectableSuggestedItem, MoreSuggestionsInlineButton } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { getKeywordGroupStyles } from './style/keyword-group-style';\r\nimport { useCircularBufferViewWithSelected, MAX_INLINE_RECOMMENDATIONS_PER_PAGE } from './util/use-circular-buffer-view';\r\nimport { KeywordGroupViewAllPanel } from './keyword-group-view-all-panel';\r\n\r\nconst SelectableSuggestedItemInternal = ({\r\n item, index, onItemToggle, selectedItems,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const onKeywordToggle = useCallback((itemIndex, itemText) => {\r\n onItemToggle(item, itemIndex, itemText);\r\n // eslint-disable-next-line no-unused-expressions\r\n activity && activity.signal(`onAddSidePanelGroupKeyword - ${JSON.stringify({\r\n GroupKeyword: item,\r\n })}`);\r\n }, [item, onItemToggle, activity]);\r\n\r\n return (\r\n s.key === item.key)}\r\n />\r\n );\r\n};\r\n\r\nSelectableSuggestedItemInternal.propTypes = {\r\n item: PropTypes.shape({\r\n Keyword: PropTypes.string.isRequired,\r\n key: PropTypes.string.isRequired,\r\n }).isRequired,\r\n index: PropTypes.number.isRequired,\r\n onItemToggle: PropTypes.func.isRequired,\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n\r\nexport const KeywordGroup = ({\r\n groupName,\r\n groupItems,\r\n selectedItems,\r\n onToggle,\r\n onAddAll,\r\n onBulkChange,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const [isPanelOpen, setIsPanelOpen] = useState(false);\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getKeywordGroupStyles);\r\n const currentSelectedItems = useMemo(() => _.filter(selectedItems, s => _.some(groupItems, item => item.key === s.key)), [selectedItems, groupItems]);\r\n const sortedGroupItems = useMemo(() => _.sortBy(groupItems, g => !_.some(currentSelectedItems, item => item.key === g.key)), [groupItems, currentSelectedItems]);\r\n const unSelectedItems = useMemo(() => _.last(sortedGroupItems, sortedGroupItems.length - currentSelectedItems.length), [sortedGroupItems, currentSelectedItems]);\r\n const [availableInlineRecommendations, canMoveNext, moveNext] = useCircularBufferViewWithSelected(unSelectedItems, currentSelectedItems);\r\n const onClickRefresh = useCallback(() => {\r\n if (activity) {\r\n activity.signal(`onRefreshSidePanelGroupKeywords - ${groupName} - ${JSON.stringify({\r\n GroupKeywordsSize: groupItems.length,\r\n })}`);\r\n }\r\n moveNext();\r\n }, [moveNext, activity, groupName, groupItems.length]);\r\n const onPanelOpen = useCallback(() => {\r\n setIsPanelOpen(true);\r\n if (activity) {\r\n activity.signal(`onOpenSidePanelGroupDetailsGrid - ${groupName}`);\r\n }\r\n }, [setIsPanelOpen, activity, groupName]);\r\n const onAddAllClick = useCallback(() => {\r\n onAddAll(groupItems);\r\n // eslint-disable-next-line no-unused-expressions\r\n activity && activity.signal(`onAddAllSidePanelGroupKeywords - ${JSON.stringify({\r\n GroupKeywords: groupItems,\r\n })}`);\r\n }, [groupItems, onAddAll, activity]);\r\n const onSelectionChange = useCallback((newSelectedItems) => {\r\n if (newSelectedItems) {\r\n onBulkChange(differenceBy(currentSelectedItems, newSelectedItems, 'key'), differenceBy(newSelectedItems, currentSelectedItems, 'key'));\r\n }\r\n setIsPanelOpen(false);\r\n }, [currentSelectedItems, onBulkChange]);\r\n const onRemoveAllClick = useCallback(() => {\r\n onBulkChange(groupItems, []);\r\n if (activity) {\r\n activity.signal(`onRemoveAllSidePanelGroupKeywords - ${groupName} - ${JSON.stringify({\r\n GroupKeywords: currentSelectedItems,\r\n })}`);\r\n }\r\n }, [groupItems, onBulkChange, activity, currentSelectedItems, groupName]);\r\n\r\n const renderSelectableSuggestedItem = useCallback((item, index, onItemToggle) => (\r\n ), [selectedItems]);\r\n const renderButtons = useCallback(() => {\r\n if (groupItems.length > MAX_INLINE_RECOMMENDATIONS_PER_PAGE) {\r\n return (\r\n <>\r\n \r\n {i18n.getString(_TL_('+{{count}} keywords'), { count: groupItems.length - MAX_INLINE_RECOMMENDATIONS_PER_PAGE })}\r\n \r\n );\r\n }\r\n return null;\r\n }, [canMoveNext, classes.checkAllLink, groupItems.length, i18n, onClickRefresh, onPanelOpen]);\r\n\r\n return (\r\n
\r\n
{groupName}
\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Add all'))}\r\n \r\n {\r\n currentSelectedItems.length > 0 && unSelectedItems.length > 0 && (\r\n \r\n \r\n {currentSelectedItems.length === 1 ? i18n.getString(_TL_('Remove (1 keyword)')) : i18n.getString(_TL_('Remove ({{count}} keywords)'), { count: currentSelectedItems.length })}\r\n \r\n \r\n )\r\n }\r\n {\r\n currentSelectedItems.length > 0 && unSelectedItems.length === 0 && (\r\n \r\n \r\n {currentSelectedItems.length === 1 ? i18n.getString(_TL_('Remove (1 keyword)')) : i18n.getString(_TL_('Remove all ({{count}} keywords)'), { count: currentSelectedItems.length })}\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nKeywordGroup.propTypes = {\r\n groupItems: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onToggle: PropTypes.func.isRequired,\r\n groupName: PropTypes.string.isRequired,\r\n onAddAll: PropTypes.func.isRequired,\r\n onBulkChange: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nexport const MAX_INLINE_RECOMMENDATIONS_PER_PAGE = 5;\r\n\r\nexport const useCircularBufferViewWithSelected = (unselectedCollection, selectedCollection, pageSize = MAX_INLINE_RECOMMENDATIONS_PER_PAGE) => {\r\n const [page, setPage] = useState([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n\r\n const selectedCount = selectedCollection.length;\r\n const unselectedCount = unselectedCollection.length;\r\n\r\n useEffect(() => {\r\n if (unselectedCount === 0 && selectedCount === 0) {\r\n setPage([]);\r\n return;\r\n }\r\n\r\n const newPage = _.first(selectedCollection, pageSize);\r\n let index = currentIndex % unselectedCount;\r\n let count = newPage.length;\r\n while (count < pageSize && count < unselectedCount + selectedCount) {\r\n newPage.push(unselectedCollection[index]);\r\n index = (index + 1) % unselectedCount;\r\n count += 1;\r\n }\r\n setPage(newPage);\r\n }, [unselectedCollection, currentIndex, pageSize, selectedCollection, unselectedCount, selectedCount]);\r\n\r\n const canMoveNext = selectedCount < pageSize && unselectedCount > (pageSize - selectedCount);\r\n\r\n const moveNext = useCallback(() => {\r\n setCurrentIndex(((currentIndex + pageSize) - selectedCount) % unselectedCount);\r\n }, [currentIndex, pageSize, selectedCount, unselectedCount]);\r\n\r\n return [page, canMoveNext, moveNext];\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { unionBy, differenceBy } from 'lodash';\r\nimport { Stack } from '@fluentui/react';\r\nimport { Divider } from '@fluentui/react-components';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getKeywordGroupsStyles } from './style/keyword-groups-style';\r\nimport { KeywordGroup } from './keyword-group';\r\n\r\nexport const KeywordGroups = ({\r\n allData,\r\n selectedData,\r\n onSelectChange,\r\n}) => {\r\n const classes = useDefaultStyles(getKeywordGroupsStyles);\r\n const onToggle = useCallback((item) => {\r\n const selectedItem = selectedData.find(s => s.key === item.key);\r\n if (selectedItem) {\r\n onSelectChange(selectedData.filter(s => s.key !== item.key));\r\n } else {\r\n onSelectChange([...selectedData, item]);\r\n }\r\n }, [onSelectChange, selectedData]);\r\n const onAddAll = useCallback((groupItems) => {\r\n onSelectChange(unionBy(selectedData, groupItems, 'key'));\r\n }, [onSelectChange, selectedData]);\r\n const onBulkChange = useCallback((deselectItems, newSelectedItems) => {\r\n const selectedResult = differenceBy(selectedData, deselectItems, 'key');\r\n onSelectChange([...selectedResult, ...newSelectedItems]);\r\n }, [onSelectChange, selectedData]);\r\n\r\n return (\r\n
\r\n \r\n {allData.map((item, index) => (\r\n \r\n \r\n { index < (allData.length - 1) && }\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nKeywordGroups.propTypes = {\r\n allData: PropTypes.arrayOf(PropTypes.shape({\r\n Suggestions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n })).isRequired,\r\n selectedData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onSelectChange: PropTypes.func.isRequired,\r\n};\r\n","export const getKeywordPlannerStyles = () => ({\r\n dataContainer: {\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n height: '100%',\r\n },\r\n flexContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { NoRecommendationWarning } from './no-recommendation-warning';\r\n\r\nexport const NoData = ({ data }) => {\r\n if (_.isArray(data) && _.isEmpty(data)) {\r\n return ;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nNoData.propTypes = {\r\n data: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nNoData.defaultProps = {\r\n data: null,\r\n};\r\n","import React, { useState, useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { KeywordTab } from './tab';\r\nimport { TABLIST } from './constants/index';\r\nimport { KeywordRanking } from './keyword-ranking';\r\nimport { SearchInputStackContainer } from './search-input-stack-container';\r\nimport { KeywordGroups } from './keyword-groups';\r\nimport { getKeywordPlannerStyles } from './style/keyword-planner-style';\r\nimport { ActionBar } from './action-bar';\r\nimport { NoData } from './no-data';\r\n\r\nexport const KeywordPlanner = ({\r\n targetedLocationInfo,\r\n supportedLanguages,\r\n onClose,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const classes = useDefaultStyles(getKeywordPlannerStyles);\r\n const i18n = useContext(I18nContext);\r\n const [selectedTab, setSelectedTab] = useState(TABLIST.GROUP);\r\n const [blocking, setBlocking] = useState(false);\r\n // allData:\r\n // null: no input, no search result; doesn't show anything\r\n // []: empty search result, show warning message\r\n // [{...}]: search result, show keyword grouping and ranking\r\n const [allData, setAllData] = useState(null);\r\n const [selectedData, setSelectedData] = useState([]);\r\n const [refreshKey, setRefreshKey] = useState(0);\r\n const {\r\n Permissions,\r\n DynamicPermissions,\r\n } = useContext(ServerContext);\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const onTabSelect = useCallback((_e, tabData) => {\r\n setSelectedTab(tabData.value);\r\n activity.signal(`onSwitchSidePanelTab - ${JSON.stringify({\r\n Tab: tabData.value,\r\n })}`);\r\n }, [activity]);\r\n const onRecommendationSuccess = useCallback(({ data, traceInfo }) => {\r\n if (data === null) { // data null means no request sent\r\n return;\r\n }\r\n\r\n let dataWithKey = [];\r\n if (permissions && permissions.dynamic && permissions.dynamic.KeywordPlannerLiteRefactorPhase1 && data && _.first(data.value)) {\r\n const keywordAggregations = _.first(data.value).Aggregations || [];\r\n dataWithKey = _.map(keywordAggregations, group => ({\r\n ...group,\r\n Suggestions: _.map(group.Keywords, (keyword) => {\r\n const keywordText = keyword.Keyword ? keyword.Keyword.Text : '';\r\n return {\r\n ...keyword,\r\n AggregateMetric: {\r\n AverageSearchVolume: _.property(['Idea', 'AvgSearchs'])(_.find(_.first(data.value).Keywords, item => item.Keyword && item.Keyword.Text === keywordText)) || 0,\r\n },\r\n Keyword: keywordText,\r\n key: group.Name + keywordText,\r\n RequestId: traceInfo && traceInfo.requestId,\r\n };\r\n }),\r\n }));\r\n } else {\r\n dataWithKey = _.map(data.value, group => ({\r\n ...group,\r\n Suggestions: _.map(group.Suggestions, keyword => ({\r\n ...keyword,\r\n key: keyword.Tag + keyword.Keyword,\r\n })),\r\n }));\r\n }\r\n activity.signal(`onFetchRecommendationInSidePanel - ${_.isEmpty(dataWithKey) ? 'no data' : 'has data'}`);\r\n setAllData(dataWithKey);\r\n setSelectedData([]);\r\n setRefreshKey(refreshKey + 1);\r\n }, [refreshKey, activity, permissions]);\r\n const unblockPanel = useCallback(() => {\r\n setBlocking(false);\r\n }, []);\r\n const blockPanel = useCallback(() => {\r\n setBlocking(true);\r\n }, []);\r\n const onSelectChange = useCallback((data) => {\r\n setSelectedData(data);\r\n }, []);\r\n const onAdd = useCallback(() => {\r\n onClose(selectedData, selectedTab, activity);\r\n }, [onClose, selectedData, selectedTab, activity]);\r\n const onCancel = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n const allRankingData = useMemo(() => _.flatten(_.pluck(allData, 'Suggestions')), [allData]);\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n {\r\n !_.isEmpty(allData) && (\r\n <>\r\n \r\n
\r\n {\r\n selectedTab === TABLIST.GROUP &&\r\n \r\n }\r\n {\r\n selectedTab === TABLIST.RANK &&\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\nKeywordPlanner.propTypes = {\r\n targetedLocationInfo: PropTypes.shape({}).isRequired,\r\n supportedLanguages: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n","export const getPanelStyles = () => ({\r\n '@global': {\r\n '.side-panel-keyword-planner.panel-right .panel-content': {\r\n '& .panel-body': {\r\n width: 600,\r\n paddingLeft: 24,\r\n paddingRight: 24,\r\n display: 'flex',\r\n height: 'calc(100% - 56px)',\r\n overflow: 'hidden',\r\n marginBottom: 65,\r\n },\r\n '& .panel-header': {\r\n paddingLeft: 24,\r\n },\r\n '& .react-block-ui-none, .react-block-ui': {\r\n display: 'flex',\r\n height: '100%',\r\n },\r\n },\r\n },\r\n flexContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n});\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ThemeProvider } from 'react-jss';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { Panel } from '@bingads-webui-campaign-react/panel';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { KeywordPlanner } from './keyword-planner';\r\nimport { getPanelStyles } from './style/panel-style';\r\nimport { PanelHeader } from './panel-header';\r\n\r\nexport const KeywordPlannerPanel = ({\r\n isOpen,\r\n onClose,\r\n i18n,\r\n targetedLocationInfo,\r\n supportedLanguages,\r\n}) => {\r\n const classes = useDefaultStyles(getPanelStyles);\r\n const onCancel = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n return (\r\n }\r\n className={classes}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nKeywordPlannerPanel.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n targetedLocationInfo: PropTypes.shape({}).isRequired,\r\n supportedLanguages: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React, { createContext, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { CopilotSuggestionsTracker } from '@bingads-webui-campaign-react/copilot-common';\r\n\r\n// Create the logging context\r\nexport const LoggingContext = createContext([{}, () => {}]);\r\n\r\n// Custom hook to access the logging context\r\n\r\n// Provider component to wrap your app with the logging context\r\nexport const LoggingProvider = ({ children }) => {\r\n const [loggingContext, setLoggingContext] = useState({\r\n copilotTracking: new CopilotSuggestionsTracker(),\r\n postAssetEventLog: () => {},\r\n });\r\n\r\n const updateLoggingContext = useCallback((newContext) => {\r\n setLoggingContext(prevContext => ({\r\n ...prevContext,\r\n ...newContext,\r\n }));\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nLoggingProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n};\r\n\r\nexport const withLoggingContext = (WrappedComponent) => {\r\n const HoC = props => (\r\n \r\n \r\n \r\n );\r\n HoC.displayName = `WithLoggingContext(${getDisplayName(WrappedComponent)})`;\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","import _ from 'underscore';\r\nimport { useContext, useMemo, useEffect, useCallback, useState } from 'react';\r\n\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { usePostAssetEvent, AssetChannel, AssetScenario } from '@bingads-webui-react/copilot-event-provider';\r\nimport { useEventLog } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\n\r\nimport { LoggingContext } from './logging-context';\r\n\r\n// Initialize the postAssetEventLog function in the LoggingContext.\r\n// It only needs to be called once.\r\nexport const useInitCopilotLoggers = ({\r\n campaignId,\r\n feature = 'DisplayPlusCreative',\r\n isEditScenario = false,\r\n}) => {\r\n const serverContext = useContext(ServerContext);\r\n const activity = useContext(ActivityContext);\r\n const [, updateLoggingContext] = useContext(LoggingContext);\r\n\r\n const logTrace = useMemo(() => _.get(activity, 'trace'), [activity]);\r\n\r\n const { Permissions, DynamicPermissions } = serverContext || { };\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const [isRegionRestricted, setIsRegionRestricted] = useState(true);\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(setIsRegionRestricted);\r\n }, [permissions, serverContext]);\r\n\r\n const postAssetEventLog = usePostAssetEvent({\r\n serverContext,\r\n channel: AssetChannel.WEB_UI,\r\n feature,\r\n campaignId,\r\n scenario: isEditScenario ? AssetScenario.EDIT_WORK_FLOW: AssetScenario.CREATE_WORK_FLOW,\r\n shouldLog: _.isFunction(logTrace) && !isRegionRestricted,\r\n logTrace,\r\n });\r\n\r\n useEffect(() => {\r\n updateLoggingContext({ postAssetEventLog });\r\n }, [postAssetEventLog, updateLoggingContext]);\r\n};\r\n\r\nexport const useCopilotLoggers = () => {\r\n const [loggingContext] = useContext(LoggingContext);\r\n const { postAssetEventLog = _.noop, copilotTracking } = loggingContext || {};\r\n\r\n const {\r\n logEnterFlow,\r\n logBannerGenerated,\r\n logSuggestionsViewed,\r\n logSuggestionsApplied,\r\n } = useEventLog(postAssetEventLog);\r\n\r\n const logSuggestionsViewedWrapped = useCallback((imageSuggestionIds, videoSuggestionIds) => {\r\n if (!copilotTracking) { return; }\r\n\r\n const viewedImageSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(imageSuggestionIds);\r\n const viewedVideoSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(videoSuggestionIds);\r\n\r\n if (viewedImageSuggestionIds.length > 0 || viewedVideoSuggestionIds.length > 0) {\r\n logSuggestionsViewed(undefined /* textSuggestions */, viewedImageSuggestionIds, viewedVideoSuggestionIds);\r\n\r\n copilotTracking.trackViewedSuggestionIds(viewedImageSuggestionIds);\r\n }\r\n }, [copilotTracking, logSuggestionsViewed]);\r\n\r\n const logSuggestionsAppliedWrapped = useCallback((\r\n campaignId,\r\n adgroupId,\r\n textSuggestionIds,\r\n imageSuggestionIds,\r\n videoSuggestionIds,\r\n appliedVideoAssetIds\r\n ) => {\r\n logSuggestionsApplied(\r\n campaignId,\r\n adgroupId,\r\n textSuggestionIds,\r\n imageSuggestionIds,\r\n videoSuggestionIds,\r\n appliedVideoAssetIds\r\n );\r\n }, [logSuggestionsApplied]);\r\n\r\n return {\r\n logEnterFlow,\r\n logBannerGenerated,\r\n logSuggestionsViewed: logSuggestionsViewedWrapped,\r\n logSuggestionsApplied: logSuggestionsAppliedWrapped,\r\n };\r\n};\r\n","export const getCPSStyles = () => ({\r\n cpsOptions: {\r\n '& .alert-container': {\r\n marginTop: 8,\r\n },\r\n },\r\n});\r\n","/* eslint-disable react/no-danger */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { withVerticalAlignCenterSpan } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Checkbox } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { getCPSStyles } from './style';\r\n\r\n\r\nconst CostPerSale = ({ validationProps, updateValidation }) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { data: costPerSaleOptOut } = validationProps;\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], newData);\r\n if (activity) {\r\n activity.signal(`onCPSOptionChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation]);\r\n\r\n const classes = useDefaultStyles(getCPSStyles);\r\n\r\n return (\r\n
\r\n onChange({ costPerSaleOptOut: !isChecked })}\r\n onRenderLabel={withVerticalAlignCenterSpan(() => ())}\r\n />\r\n {costPerSaleOptOut &&\r\n
\r\n For the best results, consider turning on CPS bid option.')) }} />\r\n )}\r\n linkText={i18n.getString(_TL_('Learn more'))}\r\n href=\"https://help.ads.microsoft.com/#apex/ads/en/56786/1/#CPS\"\r\n linkType=\"directLink\"\r\n />\r\n )}\r\n level=\"Info\"\r\n icon={(
)}\r\n dismissible={false}\r\n />\r\n
}\r\n
\r\n );\r\n};\r\n\r\nCostPerSale.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n costPerSaleOptOut: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedCostPerSale = withCustomValidation(CostPerSale);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport class CroppedImageView extends React.PureComponent {\r\n render() {\r\n const {\r\n originalWidth,\r\n resizeImageHeight,\r\n aspectRatio,\r\n src,\r\n } = this.props;\r\n\r\n const SourceWidth = this.props.SourceWidth || originalWidth;\r\n const SourceX = this.props.SourceX || 0;\r\n const SourceY = this.props.SourceY || 0;\r\n const borderRadius = this.props.borderRadius || 0;\r\n\r\n const resizeImageWidth = resizeImageHeight * aspectRatio;\r\n\r\n const imageToContainerRatio = resizeImageWidth / originalWidth;\r\n\r\n const cropSectionToImageRatio = originalWidth / SourceWidth;\r\n\r\n const negativeMarginX = -SourceX * imageToContainerRatio * cropSectionToImageRatio;\r\n const negativeMarginY = -SourceY * imageToContainerRatio * cropSectionToImageRatio;\r\n\r\n const resizeContainerStyle = {\r\n height: `${resizeImageHeight}px`,\r\n width: `${resizeImageWidth}px`,\r\n overflow: 'hidden',\r\n borderRadius: `${borderRadius}px`,\r\n };\r\n\r\n const resizeImageStyle = {\r\n width: `${resizeImageWidth * cropSectionToImageRatio}px`,\r\n marginLeft: `${negativeMarginX}px`,\r\n marginTop: `${negativeMarginY}px`,\r\n };\r\n\r\n return (\r\n \r\n e.preventDefault()}\r\n style={resizeImageStyle}\r\n src={src}\r\n alt={aspectRatio}\r\n />\r\n
\r\n );\r\n }\r\n}\r\n\r\nCroppedImageView.propTypes = {\r\n originalWidth: PropTypes.number.isRequired,\r\n resizeImageHeight: PropTypes.number.isRequired,\r\n aspectRatio: PropTypes.number.isRequired,\r\n SourceWidth: PropTypes.number,\r\n SourceX: PropTypes.number,\r\n SourceY: PropTypes.number,\r\n src: PropTypes.string.isRequired,\r\n borderRadius: PropTypes.number,\r\n};\r\n\r\nCroppedImageView.defaultProps = {\r\n SourceWidth: null,\r\n SourceX: null,\r\n SourceY: null,\r\n borderRadius: null,\r\n};\r\n","import { ViewModel } from '@bingads-webui/projection-grid-cross-page-select-all';\r\n\r\nclass NewViewModel extends ViewModel {\r\n constructor(options) {\r\n super(options);\r\n\r\n this.updateGridSelectionState = options.updateGridSelectionState;\r\n\r\n this.allSelected.subscribe(() => {\r\n options.gridView.trigger('didSelect', options.gridView.selectedKeys());\r\n });\r\n }\r\n\r\n rowsDidUpdate(...args) {\r\n super.rowsDidUpdate(...args);\r\n\r\n const selectionCount = this.selectedRowsCount;\r\n const totalCount = this.totalRowsTotalPageCount();\r\n const isMultiPage = this.pageSizeMoreThanOne();\r\n const isSinglePageAllSelected = this.currentPageAllRowsSelected();\r\n const isCrossPageAllSelected = this.allSelected();\r\n\r\n this.updateGridSelectionState({\r\n selectionCount,\r\n totalCount,\r\n isMultiPage,\r\n isSinglePageAllSelected,\r\n isCrossPageAllSelected,\r\n });\r\n }\r\n}\r\n\r\nexport function getCrossPageSelectPlugin({\r\n updateGridSelectionState,\r\n}) {\r\n let viewModel;\r\n\r\n return {\r\n onSelectCrossPage() {\r\n viewModel.selectAll();\r\n\r\n return false;\r\n },\r\n plugin: definePlugin => definePlugin('crossPageSelectAll', [\r\n 'config',\r\n 'gridView',\r\n 'pagination',\r\n ], (config, gridView, pagination) => {\r\n const deselectAllOnReloadWhenNotAllSelected = !(config.plugins.crossPageSelectAll &&\r\n config.plugins.crossPageSelectAll.disableDeselectAll);\r\n\r\n viewModel = new NewViewModel({\r\n updateGridSelectionState,\r\n gridView,\r\n pagination,\r\n i18n: { getString: () => '' },\r\n deselectAllOnReloadWhenNotAllSelected,\r\n });\r\n\r\n return {\r\n viewModel,\r\n selectAll() {\r\n viewModel.selectAll();\r\n },\r\n deselectAll() {\r\n viewModel.deselectAll();\r\n },\r\n get isAllSelected() {\r\n return viewModel.allSelected();\r\n },\r\n };\r\n }),\r\n };\r\n}\r\n"],"names":["EMPTY_ASSET_HINTS","headline","_TL_","description","longHeadline","NO_FINAL_URL_HINT","NOT_SUPPORT_DYNAMIC_TEXT","POST_ASSET_EVENT_NAME","POST_ASSET_LIBRARY_EVENT_NAME","AssetLibraryEventRecordType","ENTER_ASSET_LIBRARY","ENTER_GENERATE_IMAGES_PANEL","GENERATE_IMAGES","RETURN_IMAGES","ADD_IMAGES_TO_ASSET_LIBRARY","AssetEventRecordType","ENTER_FLOW","RETURNED","VIEWED","APPLIED","FEATURE_USAGE","MAPPING","AssetEventOperationName","NON_ITERATIVE","REFRESH_THEME","DIFFERENT_BACKGROUND","REWRITE","FIND_SIMILAR","DIFFERENT_TONE","FINAL_URL_RECOMMENDATION","PREFILL","AssetEventFeature","RSA","PMAX","PMAX_LITE","DISPLAY_PLUS","MMA","AssetType","TEXT","IMAGE","THEME","VIDEO","AssetPropertyName","HEADLINE","DESCRIPTION","LONG_HEADLINE","AssetEngagementEventName","VIEW","ENTER","GENERATE","APPLY","REMOVE_ASSETS","REMOVE_SINGLE_ASSET","EDIT_SINGLE_ASSET","AD_STRENGTH","CopilotSuggestionsTracker","_createClass","_classCallCheck","this","trackingData","initialSuggestionsData","key","value","recommendedAssets","finalUrlSuggestions","FinalUrls","_","textSuggestions","headlines","ShortHeadlines","longHeadlines","LongHeadlines","descriptions","Descriptions","TextAssets","headlineRecommendations","longHeadlineRecommendations","descriptionRecommendations","textRecommendations","textAsset","imageSuggestions","ImageAssets","imageAsset","suggestionIds","viewedSuggestions","data","property","asset","remainingSuggestions","suggestion","suggestions","prefilledCount","_ref","prefillAssetsAppliedLog","CampaignId","Properties","PrefilledSuggestionsCount","propertyName","AppliedPrefilledSuggestionsCount","EventName","EventValue","RecordType","OperationName","useCopilotRecommendationSurvey","currentFeature","_useUserLevelPreferen","useUserLevelPreference","_useUserLevelPreferen2","_slicedToArray","features","updateFeatures","update","useEffect","includes","concat","_toConsumableArray","sort","trigger","useCallback","action","window","survey","surveyManager","CopilotAssetRecommendationSatisfactionTrigger","CopilotRecommendationsSurveyCustomParams","triggerSurveyOnSubmit","triggerSurveyOnCancel","getCopilotRecommendationIdsFromThemes","themeRecommendations","themes","themeRecommendationIds","imageRecommendationIds","descriptionRecommendationIds","headlineRecommendationIds","longHeadlineRecommendationIds","theme","push","id","images","apply","map","v","suggestionId","RecommendationId","getSuggestedIdsAndAssetType","_ref$themeSuggestionI","themeSuggestionIds","_ref$textSuggestionId","textSuggestionIds","_ref$imageSuggestionI","imageSuggestionIds","_ref$videoSuggestionI","videoSuggestionIds","SuggestionIds","AssetTypes","Array","length","fill","getSuggestedIdsAndAssetTypeFromAssetsRecommendation","assetsRecommendationData","_assetsRecommendation","RecommendedAssets","Themes","VideoAssets","getFormattedImage","image","Url","fullUrl","thumbnailSrc","thumbnailUrl","getFormattedThemeForApplying","name","Name","previewUrl","Images","getOperationName","requestType","useEventLog","postAssetEventLog","logEnterFlow","logFinalUrlRecommendations","logBannerGenerated","CurrentFinalUrl","_getSuggestedIdsAndAs","logBannerRefresh","EngagementEventName","logBannerRefreshCompleted","logFetch","logFetchSucceeded","finalUrl","_getSuggestedIdsAndAs2","logFetchAssetsSucceeded","_getSuggestedIdsAndAs3","logApplyThemes","_getSuggestedIdsAndAs4","logSuggestionsViewed","_getSuggestedIdsAndAs5","logSuggestionsApplied","AssetGroupId","appliedVideoAssetIds","arguments","undefined","_getSuggestedIdsAndAs6","_objectSpread","AppliedVideoAssetIds","logTextAssetMenuOpen","TextAssetType","logTextAssetDialogOpen","logRefineTextAsset","logRefineTextAssetSucceeded","params","_getSuggestedIdsAndAs7","logTextAssetApplied","logPrefillAssets","logPrefillAssetsApplied","logPrefilledAdStrength","adStrength","AdStrength","Suggestions","logRemoveAssets","PropertyName","logRemoveSingleAsset","SuggestionId","logEditSingleAsset","useAssetLibraryEventHandler","_useAssetLibraryEvent","logEnterAssetLibrary","logEnterGenerateImagesPanel","logGenerateImages","prompt","Prompt","logReturnImages","logAddImagesToAssetLibrary","useAssetLibraryEventLog","onEnterAssetLibrary","onEnterGenerateImagesPanel","onGenerateImages","onReturnImages","_ref2","imageIds","onAddImagesToAssetLibrary","_ref3","useLogRecommendationsApiError","activity","error","message","Error","JSON","stringify","isShiproomError","isShiproomErrorMessage","requestId","m","trace","console","log","logCopilotRecommendations","_ref5","recommendationContext","assetGroup","_ref5$campaignId","campaignId","isEditing","copilotTracking","_getCopilotAppliedRec","assetType","appliedImageAssetIds","_ref4","Headlines","currentTextAssets","copilotTextRecommendations","Text","copilotTextRecommendationIds","copilotHeadlineRecommendations","appliedHeadlines","ImageList","currentImageAssets","toString","copilotImageRecommendations","imageId","appliedFinalUrlRecommendations","uniq","intersection","getCopilotAppliedRecommendations","eventValue","Id","AppliedImageAssetIds","AppliedHeadlines","getInitialSuggestionsData","MaxAssetCountPerThemeToApply","getUniqueAssetMapFromThemes","field","maxSize","maxSizePerTheme","Map","i","size","assets","assetsAddedFromTheme","j","has","set","getUniqueRecommendationIdsFromThemes","Number","MAX_SAFE_INTEGER","from","keys","values","getUniqueAssetsFromThemes","i18n","LocalizedTemplateName","getString","LocalizedTemplateDescription","useCopilotDomainDataRepository","_useCopilotDomainData","post","useFetch","fetchData","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","response","wrap","_context","prev","next","sent","abrupt","t0","stop","_x","_x2","getAudioListWithFilter","filter","Mock","AudioFilter","getVideoTemplateListWithFilter","templateFilter","TemplateFilter","useCopilotDomainDataService","getAudioList","getVideoTemplates","_callee2","_yield$getVideoTempla","localizedTemplates","updatedTemplates","_context2","videoTemplatesLocalized","Templates","template","localizedTemplate","TemplateId","_x3","_x4","withCopilotDomainDataService","WrappedComponent","Wrapper","props","dataService","copilotDomainDataService","useMemo","_jsx","displayName","getDisplayName","hoistNonReactStatics","DefaultMaxAssetsToPrefill","MaxAssetsToPrefillConfig","Default","LinkedIn","usePrefill","applyTextAssets","imageExperienceAddNewImageCallback","logAndTrackPrefillImages","cta","newCTACallback","currentCTA","logo","_ref$feature","feature","permissions","sendCopilotBannerNotification","useBannerService","send","maxAssetsToPrefill","getMaxAssetsToPrefill","newThemes","dynamic","CopilotDKIRecommendation","DKITheme","normalThemes","slice","newHeadlines","trackInitialSuggestions","newLongHeadlines","newDescriptions","Promise","resolve","newImages","ImageassetsConstants","imageOptionKeys","Image","processedImages","then","imageAssets","idString","errorMessage","CallToAction","replace","CallToActionLanguage","Logo","useCopilot","maxUploadNum","addNewShortHeadlinesCallback","addNewLongHeadlinesCallback","addNewDescriptionCallback","onReset","cid","aid","serverContext","instrumentation","isSaving","isCanceling","assetGroupId","_ref$enableCopilotRec","enableCopilotRecommendations","assetScenario","customBannerStrings","toastOffset","isBannerNarrow","_ref$skipBusinessName","skipBusinessNameRecommendation","postAssetEventScenario","AssetScenario","EDIT_WORK_FLOW","CREATE_WORK_FLOW","_useContext","useContext","RecommendationContext","_useContext2","setRecommendationContext","ActivityContext","Permissions","DynamicPermissions","_useState","useState","_useState2","isRegionRestricted","setIsRegionRestricted","isCopilotRegionRestricted","isCustomerIdInExclusionList","finalUrlRecommendations","finalUrls","_useState3","_useState4","applyRecommendationsResult","setApplyRecommendationsResult","logTrace","AdsCopilot","create","createActivity","noop","usePostAssetEvent","shouldLog","isFunction","channel","AssetChannel","WEB_UI","scenario","withCredentials","_useState5","_useState6","shouldPrefill","setShouldPrefill","FinalUrlForRecommendation","hasAssets","eventLog","_useRecommendations","useRecommendations","isDisplayPlus","isMMA","isSignup","suggestionPoller","handleCopilotBannerFetch","handleCopilotBannerFetchSucceeded","handleCopilotBannerFetchFailed","handleReset","removeAllInitialSuggestions","handleFetchAssetsSucceeded","trackReturnedTextAssets","formattedThemesAndAssets","applyFn","newTextAssets","newTextAssetRecommendationIds","viewedTextSuggestionIds","getUntrackedViewedSuggestionIds","trackViewedSuggestionIds","onApplyCopilotRecommendation","selectedThemes","selectedThemesAndAssets","uniqAssetRecommendationsInThemes","availableNewImages","viewedImageSuggestionIds","logCopilotViewedImageSuggestions","forEach","trackSelectedImageAssets","finally","copilotBanner","FluentProvider","webLightTheme","children","CopilotRecommendationBannerWithDialog","onDialogFetchAssetsSucceeded","onApply","onFetch","onFetchFailed","onFetchSucceeded","customStrings","narrow","isNewLogo","trackReturnedFinalUrlAssets","prefill","_useCopilotRecommenda","isSelenium","getParameter","useSurveyTriggers","TABLIST","SEARCH_INPUT_TYPES","SEARCH_INPUT_TITLES","_defineProperty","SEARCH_INPUT_PLACEHOLDERS","getTabListStyles","root","marginTop","marginLeft","divider","KeywordTab","selectedTab","onTabSelect","I18nContext","classes","useDefaultStyles","_jsxs","className","TabList","selectedValue","Tab","Divider","options","compact","minimumFractionDigits","maximumFractionDigits","getSearchRangeString","range","base","Math","pow","floor","log10","ceil","getSearchRange","formatDecimal","columnOrder","fieldName","minWidth","maxWidth","sortable","onRender","_item","index","pagination","GridContext","state","pageNumber","pageSize","columnKeyword","isResizable","columnSearches","item","AggregateMetric","AverageSearchVolume","onRenderHeader","title","topicId","HelpPopup","topic","GridDataSource","onSelectChange","dispatch","sortedColumn","sourceItemsInAllPages","selectedItemsInAllPages","a","b","isSortedDescending","useClientSortingPaging","sortFunction","usePreservedSelection","type","payload","items","totalCount","propTypes","PropTypes","isRequired","getNoDataWarningStyles","display","flexDirection","alignItems","justifyContent","height","imageContainer","width","borderRadius","border","background","keyHint","fontWeight","fontSize","textAlign","NoRecommendationWarning","classNames","src","searchImage","alt","getGridStyles","borderTop","borderRight","KeywordRanking","allData","selectedData","gridColumns","columns","initialGridContext","selectionMode","SelectionMode","multiple","allColumns","selectedColumns","initAllItems","initSelectedItems","GridContextProvider","ContextualDetailsList","placeholder","stickyHeader","checkboxVisibility","CheckboxVisibility","always","defaultProps","getSearchInputStyles","searchInputContainer","searchBox","searchInputTitleStyles","SearchInput","onSearch","onChange","enabled","style","SearchBox","ariaLabel","iconProps","iconName","pointerEvents","cursor","onClick","showIcon","disabled","SearchInputStack","keywords","inputStatus","onUrlChange","onKeywordsChange","Stack","tokens","childrenGap","horizontal","isAllLocationsUnsupported","targetedLocationInfo","locations","numLocationsTargeted","onlyTire2LangaugesSelected","languages","languagesCanUse","useTireTwoMarkets","locationSupportedLanguages","getKeywordPlannerSupportedLanguagesByLocationIds","getLanguagesSupportedByLocations","isSelectedLanguagesOnlyTire2ForKeywordPlanner","exampleData","TimePeriod","AverageCPC","CompetitionLevel","Keyword","SourceType","Tag","Existing","odataLimits","useKeywordSuggestion","_ref2$scenario","e2eTestEnvironment","requestDataObj","req","criteria","hasOnlyKeyword","requestUrl","substr","keywordsArray","keyword","languagesToUse","countryLocationInfo","language","Language","languageSupportedLoations","getKeywordPlannerSupportedLocationIdsByLangauges","locationIdsSupportedByLanguage","countryLocationId","locationId","requestLocations","LocationId","requestData","odata","path","customHeader","dummy","textStatus","xhr","currentSourceReqId","getResponseHeader","RequestId","getSearchIdeaModel","_ref3$keywords","_ref3$url","isIdeas","CONTROL_TYPES","SEARCH_IDEA_PRODUCTS","isValid","rawKeywords","parsedKeywords","LANDING_PAGE","option","URL_OPTION_TYPES","PAGE","LANGUAGE","LOCATION_LD","LOCATION_TARGET_LIMIT","NETWORK","NETWORK_TYPES","ALL","KEYWORD_FILTERS_GROUP","KEYWORD_FILTER_WITH_RANGE_TYPES","rangeKeywordFilterType","operator","OPERATOR_TYPES","START","COMPETITION","INCLUDED_KEYWORD","NEGATIVE_KEYWORD","ACCOUNT_KEYWORD_DEDUPE","CATEGORY","categoryId","DATE_RANGE","getTargetedLocationInfo","criterions","KeywordPlannerLiteRefactorPhase1","KPLocations","location","includedCriterions","Status","SelectionStatus","LocationTargetTypes","criterion","target","Criterion","LocationCriterion","RadiusCriterion","countryCode","CountryCode","locationType","LocationType","LOCATION_COUNTRYCODE_WHITE_LIST","LOCATION_TYPE","COUNTRY","country","locationsObj","locationFilters","keywordPlannerSupportedLanguagesIdValueMap","keywordPlannerSupportedLanguages","supportedLanguages","getSupportedLanguages","languageOptions","languages2Use","lang","SearchInputStackContainer","beforeSearch","onSearchSuccess","onSearchFinally","setUrl","setKeywords","recommendateRequest","ServerContext","status","useSearchBoxStatus","getSearchIdea","useKeywordPlannerService","signal","Keywords","model","isLanguageDecoupling","CHANNEL_TYPES","CAMPAIGN_CREATION","catch","ErrorStatus","e","getKeywordGroupsStyles","container","marginBottom","getKeywordGroupStyles","checkAllLink","addAllLink","getViewAllPanelStyles","paddingLeft","paddingRight","getActionBarStyles","bottom","position","padding","margin","ActionBar","onAdd","onCancel","Item","Button","appearance","getPanelHeaderStyles","marginRight","PanelHeader","SparkleIcon","KeywordGroupViewAllPanel","isOpen","onClose","selection","setSelection","onSelectionChange","GridKeywords","Panel","panelClassName","flexContainer","SelectableSuggestedItemInternal","onItemToggle","selectedItems","onKeywordToggle","itemIndex","itemText","GroupKeyword","SelectableSuggestedItem","onToggle","isSelected","some","s","KeywordGroup","groupName","groupItems","onAddAll","onBulkChange","isPanelOpen","setIsPanelOpen","currentSelectedItems","sortedGroupItems","g","unSelectedItems","_useCircularBufferVie","unselectedCollection","selectedCollection","page","setPage","currentIndex","setCurrentIndex","selectedCount","unselectedCount","newPage","count","useCircularBufferViewWithSelected","_useCircularBufferVie2","availableInlineRecommendations","canMoveNext","moveNext","onClickRefresh","GroupKeywordsSize","onPanelOpen","onAddAllClick","GroupKeywords","newSelectedItems","differenceBy","onRemoveAllClick","renderSelectableSuggestedItem","renderButtons","_Fragment","MoreSuggestionsInlineButton","useStyleFluent2","Link","SuggestedItemsMultiSelect","suggestedItems","onSuggestedItemToggle","KeywordGroups","selectedItem","find","unionBy","deselectItems","selectedResult","disableShrink","getKeywordPlannerStyles","dataContainer","overflowY","overflowX","NoData","KeywordPlanner","setSelectedTab","blocking","setBlocking","setAllData","_useState7","_useState8","setSelectedData","_useState9","_useState10","refreshKey","setRefreshKey","_e","tabData","onRecommendationSuccess","traceInfo","dataWithKey","keywordAggregations","Aggregations","group","keywordText","unblockPanel","blockPanel","allRankingData","UiBlocker","loadingText","getPanelStyles","overflow","KeywordPlannerPanel","ThemeProvider","components","ComponentSettings","core","ThemeFluent","LoggingContext","createContext","LoggingProvider","loggingContext","setLoggingContext","updateLoggingContext","newContext","prevContext","Provider","withLoggingContext","HoC","useInitCopilotLoggers","_ref$isEditScenario","isEditScenario","useCopilotLoggers","_useContext3","_ref3$postAssetEventL","_useEventLog","viewedVideoSuggestionIds","adgroupId","getCPSStyles","cpsOptions","ValidatedCostPerSale","withCustomValidation","validationProps","updateValidation","costPerSaleOptOut","newData","Checkbox","label","checked","_ev","isChecked","onRenderLabel","withVerticalAlignCenterSpan","Alert","LearnMoreLink","text","dangerouslySetInnerHTML","__html","linkText","href","linkType","level","icon","dismissible","CroppedImageView","_React$PureComponent","_callSuper","_inherits","_this$props","originalWidth","resizeImageHeight","aspectRatio","SourceWidth","SourceX","SourceY","resizeImageWidth","imageToContainerRatio","cropSectionToImageRatio","negativeMarginX","negativeMarginY","resizeContainerStyle","resizeImageStyle","onContextMenu","preventDefault","React","NewViewModel","_ViewModel","_this","updateGridSelectionState","allSelected","subscribe","gridView","selectedKeys","_len","args","_key","_superPropGet","selectionCount","selectedRowsCount","totalRowsTotalPageCount","isMultiPage","pageSizeMoreThanOne","isSinglePageAllSelected","currentPageAllRowsSelected","isCrossPageAllSelected","ViewModel","getCrossPageSelectPlugin","viewModel","onSelectCrossPage","selectAll","plugin","definePlugin","config","deselectAllOnReloadWhenNotAllSelected","plugins","crossPageSelectAll","disableDeselectAll","deselectAll","isAllSelected"],"sourceRoot":""}