{"version":3,"file":"static/js/application.async.landing~cc5f987d.fb879fac.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/play-pause-buttons/src/play-pause-buttons.js","../../../node_modules/@bingads-webui-campaign-react/pmax-common/src/components/step-header.js","../../../node_modules/@bingads-webui-campaign-react/pmax-common/src/utils/error-handling.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/style.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/shared.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-list-data.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-experience-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-list-portal-beacon-adapter.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-list-portal-container.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-list-card-details.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/ad-preview-controls.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/perf-max-ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/perf-max-ad-preview-uapl.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/ad-preview-responsive-styles.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/perf-max-responsive-ad-preview-uapl.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/carousel-pmax-style.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-recommendations-panel.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/perf-max-image-suggestion-carousel.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-list-portal-container-with-carousel-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/logo-list-portal-container-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-image-experience/src/image-list-portal-container-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-preference.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/recommendation.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-search-location-data.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-get-budget-default-value-for-country.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-pmax-campaign-crud.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-odata-options.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-is-estimation-api-supported-locale.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-audience-reach-estimation-v2.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-budget-suggestion.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/image-data.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-audience-data.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/use-load-account-info.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-data/src/user-creation-context.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-instrumentation/src/pmax-lite-schemas.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-instrumentation/src/instrumentation.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-instrumentation/src/instrumentation-context.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-instrumentation/src/utils/setup-global.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-shimmers/src/language-country-step-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-shimmers/src/website-step-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-shimmers/src/campaign-mode-step-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-shimmers/src/ad-assets-step-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-wizard-utils/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-wizard-utils/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-wizard-utils/src/use-submit-to-main-bundle.js","../../../node_modules/@bingads-webui-campaign-react/pmax-lite-wizard-utils/src/init-legacy-odata.js","../../../node_modules/@bingads-webui-campaign-react/pmax-suggestion-service/src/suggestions-context.js","../../../node_modules/@bingads-webui-campaign-react/pmax-suggestion-service/src/suggestions-provider.js","../../../node_modules/@bingads-webui-campaign-react/pmax-suggestion-service/src/services/use-load-bi-suggestions.js","../../../node_modules/@bingads-webui-campaign-react/pmax-suggestion-service/src/services/use-load-target-suggestions.js","../../../node_modules/@bingads-webui-campaign-react/pmax-suggestion-service/src/suggestions-resumer.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/common.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/targeting-location.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/use-target-instrument.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/validation.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/collapsible-location.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/audience-signal.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/shimmer-element.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/audience-name-mapping.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/audience-interests.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/audience-demographics.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/collapsible-audience-signal.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/collapsible-search-themes.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/format-big-decimal.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/location-targets.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/audience-estimation.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/targeting-estimation.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/styles/targeting-step-style.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/components/targeting-step.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/use-target-adapter.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/utils/search-themes.js","../../../node_modules/@bingads-webui-campaign-react/pmax-targeting/src/use-targeting-repository.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/recommendations-constants.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/text-asset-recommendations-panel.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/text-asset-recommendations-with-themes-panel.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/inline-recommendations.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/use-circular-buffer-view.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/text-asset-recommendations-dropdown.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/pmax-text-asset-collection-config.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/text-asset-collection-with-recommendations.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/text-asset-collections.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/store-backed-business-name.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/business-name-with-recommendation.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/business-name-with-recommendation-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/validated-final-url-with-recommendations.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/validated-final-url-with-recommendations-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/description-asset-collection.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/headline-asset-collection.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/long-headline-asset-collection.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/description-asset-collection-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/headline-asset-collection-section.js","../../../node_modules/@bingads-webui-campaign-react/pmax-text-input/src/long-headline-asset-collection-section.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/portfolio-name-input.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/portfolio-type-dropdown.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/portfolio-campaign-type-dropdown.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/portfolio-campaign-selector.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/portfolio-additional-settings.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/additional-settings-helper.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/portfolio-panel-display-mode.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel/src/index.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-creation-dialog/src/index.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-selector/src/index.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-selector/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-selector/src/portfolio-selector-shell.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-selector/src/portfolio-selector-view.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/aggregated-rows.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/bid-strategy-type.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/bid-strategy-status.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/budget-type.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/column-chooser.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/column-title-pop.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/entity-selector.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/error-map.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/inline-download.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/inline-edit.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/performance-metrics.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/performance-metrics-pop.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/phone-performance-metrics.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/phone-performance-metrics-pop.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/portfolio-campaign-type.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/portfolio-schema.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/i18n-map/segment.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/helpers/build-merged-i18n.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/helpers/localize-api-error.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/helpers/pairs-to-map.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/components/error.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/components/ui-blocker.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/target-cpa-inline-edit-view.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/target-impression-share-inline-edit-view.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/target-roas-inline-editor-view.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/manual-cpi-inline-edit-view.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/manual-cpc-inline-edit-view.js","../../../node_modules/@bingads-webui-campaign-react/preview-right-rail-wrapper/src/styles/preview-right-rail-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/preview-right-rail-wrapper/src/preview-carousel-right-rail-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/preview-right-rail-wrapper/src/preview-single-right-rail-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/manualCpcInlineEditor.pug","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/manualCpiInlineEditor.pug","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/targetCpaInlineEditor.pug","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/targetImpressionShareInlineEditor.pug","../../../node_modules/@bingads-webui-campaign-react/portfolio-bid-strategy-shared/src/inline-edit-view/targetRoasInlineEditor.pug","../../../node_modules/@bingads-webui-campaign-react/pmax-overview-responsive-utils/src/utils.ts"],"sourcesContent":["import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { IconButton } from '@bingads-webui-react/fabric-control';\r\n\r\n\r\nexport const PlayPauseButtons = React.memo(({\r\n newI18n, pause, play, isPlaying, customizedClassName,\r\n}) => (\r\n
\r\n {isPlaying ? : }\r\n
\r\n));\r\n\r\n\r\nexport const isPlayPausePreviewImageEnabled = permissions => _.chain(permissions).result('dynamic').result('PlayPausePreviewImage').value();\r\n\r\n\r\nPlayPauseButtons.propTypes = {\r\n newI18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }),\r\n pause: PropTypes.func,\r\n play: PropTypes.func,\r\n isPlaying: PropTypes.bool,\r\n customizedClassName: PropTypes.string,\r\n};\r\n\r\nPlayPauseButtons.defaultProps = {\r\n customizedClassName: undefined,\r\n newI18n: {\r\n getString: () => {},\r\n },\r\n pause: () => {},\r\n play: () => {},\r\n isPlaying: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nconst getHeaderStyles = () => ({\r\n headerContainer: {\r\n marginBottom: 32,\r\n },\r\n stepTitle: {\r\n fontSize: 26,\r\n marginBottom: 16,\r\n },\r\n stepDescription: {\r\n lineHeight: '20px',\r\n fontSize: 14,\r\n },\r\n});\r\n\r\nexport const StepHeader = ({\r\n title,\r\n description,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const getResponsiveStyles = useResponsiveStyles(getHeaderStyles);\r\n\r\n return (\r\n
\r\n

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

\r\n

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

\r\n
\r\n );\r\n};\r\n\r\nStepHeader.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { getBulkApiErrors, CampaignApiError } from '@bingads-webui-campaign/api-errors';\r\nimport { notificationApi } from '@bingads-webui-react/notification-center';\r\nimport { generalError } from '@bingads-webui-campaign-react/recommendation-prefill';\r\n\r\nexport const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AssetGroup: 'assetGroup',\r\n CampaignLocation: 'campaignLocation',\r\n CampaignRadius: 'campaignRadius',\r\n CampaignNegativeLocation: 'campaignNegativeLocation',\r\n CampaignLocationIntent: 'campaignLocationIntent',\r\n CampaignDayTimeCriterion: 'campaignDayTimeCriterion',\r\n CampaignNegativeWebpage: 'campaignNegativeWebpage',\r\n AudienceGroupAssetGroupAssociation: 'audienceGroupAssetGroupAssociation',\r\n};\r\n\r\nconst getFirstBulkErrorMessage = (response, i18n) => {\r\n if (!response || !response.errors) {\r\n return i18n.getString(generalError);\r\n }\r\n\r\n const errorsObj = getBulkApiErrors(response.errors, null, i18n);\r\n\r\n if (!errorsObj || !errorsObj[0] || !errorsObj[0].message) {\r\n return i18n.getString(generalError);\r\n }\r\n\r\n return errorsObj[0].message;\r\n};\r\n\r\nexport const handleBulkErrors = (response, i18n, log) => {\r\n if (log) {\r\n log(`handleBulkErrors: response: ${JSON.stringify(response)}`);\r\n }\r\n notificationApi.showWarning(getFirstBulkErrorMessage(response, i18n));\r\n};\r\n\r\nexport const showGeneralError = (i18n) => {\r\n notificationApi.showWarning(i18n.getString(generalError));\r\n};\r\n\r\nexport const genericApiError = new CampaignApiError(generalError);\r\n\r\nconst getBulkUploadEntityType = entitySchema =>\r\n (entitySchema.properties['bulk-upload-type'] || {}).value ||\r\n entitySchema.name;\r\n\r\nexport const getBulkUploadErrorType = entitySchema =>\r\n `${getBulkUploadEntityType(entitySchema)} Error`;\r\n\r\nexport const mapBulkUpsertErrors\r\n = (errors, bulkUpsertEntityErrorMap, errorProcessor = _.identity, scenario, i18n, activityLogger) =>\r\n getBulkApiErrors(errors, scenario, i18n, activityLogger).map((error) => {\r\n const errorType = error.type;\r\n const mappedErrorType = _.result(bulkUpsertEntityErrorMap, errorType, errorType);\r\n // eslint-disable-next-line no-param-reassign\r\n error.type = mappedErrorType;\r\n return errorProcessor(error);\r\n });\r\n","import { floatButtonStyle, imageExperienceContentStyle, editImageCommonStyle, extensionEditorStyles } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst pmaxImageExperienceContentStyle = (palette = {}, iconFontFamily = 'MsAds MDL2 Assets') => ({\r\n '& .image-experience-content': {\r\n marginBottom: 10,\r\n minWidth: 669,\r\n\r\n '& .image-list-view-content .image-list': {\r\n position: 'relative',\r\n marginBottom: 0,\r\n\r\n '& .image-list-content': {\r\n width: '100%',\r\n overflowX: 'auto',\r\n\r\n '&:after': {\r\n content: '\"\"',\r\n display: 'inline-flex',\r\n flexBasis: 28,\r\n flexShrink: 0,\r\n },\r\n\r\n '& .ms-ChoiceField-wrapper': {\r\n padding: 1.5,\r\n '&:after': {\r\n inset: 0,\r\n },\r\n },\r\n\r\n '& .image-list-item .image-list-item-image, & .image-list-item .image-list-item-video': {\r\n '&:hover': {\r\n '& .glyphicon.glyphicon-remove.image-delete': {\r\n opacity: 0.75,\r\n\r\n '&:hover': {\r\n opacity: 1,\r\n },\r\n },\r\n\r\n '& .glyphicon.glyphicon-pencil.image-edit': {\r\n opacity: 0.75,\r\n\r\n '&:hover': {\r\n opacity: 1,\r\n },\r\n },\r\n },\r\n\r\n '& .glyphicon.glyphicon-remove.image-delete': {\r\n extend: floatButtonStyle({ palette }).floatButton,\r\n fontFamily: iconFontFamily,\r\n lineHeight: 1,\r\n fontSize: 16,\r\n margin: 0,\r\n padding: 8,\r\n position: 'absolute',\r\n left: 'auto',\r\n top: 'auto',\r\n right: 2,\r\n bottom: 2,\r\n borderRadius: '50%',\r\n marginBottom: 8,\r\n marginRight: 20,\r\n opacity: 0,\r\n\r\n '&:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n\r\n '&:hover, &:focus': {\r\n opacity: 1,\r\n },\r\n },\r\n\r\n '& .glyphicon.glyphicon-pencil.image-edit': {\r\n extend: floatButtonStyle({ palette }).floatButton,\r\n fontFamily: iconFontFamily,\r\n lineHeight: 1,\r\n fontSize: 16,\r\n border: 'none',\r\n position: 'absolute',\r\n left: 2,\r\n top: 'auto',\r\n right: 'auto',\r\n bottom: 2,\r\n borderRadius: '50%',\r\n marginLeft: 20,\r\n marginBottom: 8,\r\n height: 32,\r\n width: 32,\r\n padding: 0,\r\n opacity: 0,\r\n\r\n '&:before': {\r\n content: '\"\\\\E70F\"',\r\n },\r\n\r\n '&:hover, &:focus': {\r\n opacity: 1,\r\n },\r\n },\r\n\r\n '& .glyphicon.glyphicon-plus.image-add': {\r\n extend: floatButtonStyle({ palette }).floatButton,\r\n fontFamily: iconFontFamily,\r\n lineHeight: 1,\r\n fontSize: 16,\r\n border: 'none',\r\n position: 'absolute',\r\n height: 24,\r\n width: 32,\r\n left: 2,\r\n top: 'auto',\r\n right: 'auto',\r\n bottom: 2,\r\n background: 'transparent',\r\n marginLeft: 40,\r\n marginBottom: 32,\r\n padding: 0,\r\n opacity: 0.75,\r\n\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n marginRight: 4,\r\n marginLeft: 4,\r\n },\r\n\r\n '&:hover': {\r\n opacity: 1,\r\n background: 'transparent',\r\n },\r\n },\r\n\r\n '& .glyphicon.glyphicon-pencil.image-edit.is-recommended-image': {\r\n opacity: 0.5,\r\n },\r\n\r\n '& .image-edit + .glyphicon.glyphicon-remove.image-delete': {\r\n extend: floatButtonStyle({ palette }).floatButton,\r\n fontFamily: iconFontFamily,\r\n lineHeight: 1,\r\n fontSize: 16,\r\n border: 'none',\r\n position: 'absolute',\r\n left: 'auto',\r\n top: 'auto',\r\n right: 2,\r\n bottom: 2,\r\n backgroundColor: `${palette.white}d4`,\r\n borderRadius: '50%',\r\n marginRight: 20,\r\n marginBottom: 8,\r\n height: 32,\r\n width: 32,\r\n padding: 0,\r\n\r\n '&:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n\r\n '&:hover': {\r\n '&:before': {\r\n color: palette.white,\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .image-list-item .image-list-item-image.with-copilot-option': {\r\n '&:hover': {\r\n '& .image-list-item-action-bar': {\r\n opacity: 1,\r\n },\r\n },\r\n '& .image-list-item-action-bar': {\r\n '&.open': {\r\n opacity: 1,\r\n },\r\n display: 'flex',\r\n backgroundColor: palette.white,\r\n borderRadius: 8,\r\n opacity: 0,\r\n position: 'absolute',\r\n bottom: 6,\r\n marginLeft: 6,\r\n padding: [0, 8, 0, 4],\r\n overflow: 'hidden',\r\n\r\n '& button': {\r\n minWidth: 24,\r\n margin: [6, 0, 6, 4],\r\n width: 24,\r\n height: 24,\r\n padding: 0,\r\n border: 'none',\r\n backgroundColor: palette.white,\r\n '& img': {\r\n width: 24,\r\n height: 24,\r\n },\r\n '& .active': {\r\n display: 'none',\r\n backgroundColor: palette.themeDarkAlt,\r\n },\r\n '& .passive': {\r\n display: 'inline-block',\r\n backgroundColor: palette.white,\r\n },\r\n '&:hover, &:focus': {\r\n '& .active': {\r\n display: 'inline-block',\r\n },\r\n '& .passive': {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n '& .action-divider': {\r\n margin: [6, 0, 6, 4],\r\n width: 1,\r\n height: 24,\r\n display: 'inline-block',\r\n borderLeft: `1px solid ${palette.neutralQuaternaryAlt}`,\r\n },\r\n '& .glyphicon.glyphicon-remove.image-delete': {\r\n position: 'static',\r\n margin: [6, 0, 6, 4],\r\n width: 24,\r\n height: 24,\r\n extend: floatButtonStyle({ palette }).floatButton,\r\n fontSize: 16,\r\n color: palette.neutralPrimary,\r\n backgroundColor: palette.white,\r\n padding: 0,\r\n borderRadius: 'unset',\r\n opacity: 1,\r\n\r\n '&:before': {\r\n content: '\"\\\\E74D\"',\r\n },\r\n '&:hover': {\r\n backgroundColor: palette.themeDarkAlt,\r\n '&:before': {\r\n color: palette.white,\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .glyphicon.glyphicon-pencil.image-edit': {\r\n position: 'static',\r\n margin: [6, 0, 6, 4],\r\n width: 24,\r\n height: 24,\r\n borderRadius: 'unset',\r\n backgroundColor: palette.white,\r\n '&:before': {\r\n color: palette.neutralPrimary,\r\n },\r\n '&:hover': {\r\n '&:before': {\r\n color: palette.white,\r\n },\r\n backgroundColor: palette.themeDarkAlt,\r\n },\r\n opacity: 1,\r\n },\r\n },\r\n\r\n '& .image-list-add-placeholder': {\r\n position: 'relative',\r\n top: -6,\r\n width: 116,\r\n height: 99,\r\n background: 'transparent',\r\n borderStyle: 'dashed',\r\n borderColor: '#c8c6c4',\r\n borderRadius: 6,\r\n borderWidth: 1,\r\n },\r\n\r\n '& .remove-all-button': {\r\n visibility: 'hidden',\r\n },\r\n\r\n '& .image-list-choice-group': {\r\n '& .ms-Label, & .ms-ChoiceField-labelWrapper': {\r\n display: 'none',\r\n },\r\n\r\n '& .ms-ChoiceFieldGroup-flexContainer': {\r\n display: 'flex',\r\n flexFlow: 'row',\r\n flexWrap: 'wrap',\r\n width: '490px',\r\n\r\n '& .ms-ChoiceField': {\r\n marginRight: 8,\r\n background: 'transparent',\r\n\r\n '& .ms-ChoiceField-field': {\r\n borderWidth: 2,\r\n height: 99,\r\n width: 112,\r\n padding: 0,\r\n borderRadius: 6,\r\n\r\n '&:before, &:after': {\r\n zIndex: 1,\r\n },\r\n },\r\n\r\n '& .ms-ChoiceField-innerField': {\r\n padding: 0,\r\n height: 99,\r\n width: 112,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const getStyles = (components, { palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '@global': {\r\n ...extensionEditorStyles({ palette }),\r\n },\r\n imageExperienceContainer: {\r\n ...imageExperienceContentStyle(palette, iconFontFamily),\r\n ...pmaxImageExperienceContentStyle(palette, iconFontFamily),\r\n ...editImageCommonStyle(palette, iconFontFamily),\r\n },\r\n imageListLoadingContainer: {\r\n minHeight: 84,\r\n '& .loading': {\r\n paddingTop: 30,\r\n },\r\n },\r\n imageListErrorContainer: {\r\n paddingTop: 10,\r\n '& .alert': {\r\n alignItems: 'center',\r\n padding: [4, 16, 4, 12],\r\n\r\n '& .alert-image:before': {\r\n lineHeight: '32px',\r\n },\r\n\r\n '& .alert__content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n },\r\n\r\n '& .alert__action': {\r\n marginLeft: 'auto',\r\n marginTop: 'unset',\r\n },\r\n },\r\n },\r\n ariaAnnounce: {\r\n display: 'block',\r\n opacity: 0,\r\n height: 2,\r\n width: 2,\r\n margin: -1,\r\n },\r\n});\r\n\r\nexport const getAdPreviewStyles = (components, { palette = {} }) => ({\r\n adPreviewContainer: {\r\n '& .new-preview-carousel-container-adprelib': {\r\n border: 0,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n borderRadius: '2px',\r\n backgroundColor: `${palette.white}`,\r\n },\r\n '& .ad-preview-controls-container': {\r\n paddingBottom: 10,\r\n },\r\n '& .ad-preview-actions': {\r\n '& button': {\r\n marginRight: 8,\r\n },\r\n },\r\n '& .ad-preview-title': {\r\n '& .preview-title-string-key': {\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n marginRight: 8,\r\n },\r\n '& .preview-title-preview-type': {\r\n fontSize: 14,\r\n },\r\n },\r\n '& .preview-type-string': {\r\n visibility: 'hidden',\r\n },\r\n '& .carousel-wrapper': {\r\n '& .carousel-inner': {\r\n height: 515,\r\n merginTop: 10,\r\n },\r\n '& .carousel-control': {\r\n background: 'transparent',\r\n },\r\n },\r\n },\r\n\r\n carouselLayoutClassName: {\r\n border: 0,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n borderRadius: '2px',\r\n backgroundColor: `${palette.white}`,\r\n\r\n '& .carousel-wrapper': {\r\n '& .carousel-inner': {\r\n height: 515,\r\n },\r\n '& .carousel-control.left, .carousel-control.right': {\r\n left: 0,\r\n bottom: -7,\r\n background: 'transparent',\r\n zIndex: 20,\r\n },\r\n },\r\n },\r\n carouselControlsMsn: {\r\n '& .carousel-wrapper': {\r\n '& .carousel-control.left': {\r\n marginLeft: 200,\r\n },\r\n '& .carousel-control.right': {\r\n marginLeft: 430,\r\n },\r\n '& .carousel-indicators': {\r\n marginLeft: 240,\r\n margin: '20px 24px',\r\n left: 0,\r\n },\r\n },\r\n },\r\n carouselControlsOthers: {\r\n '& .carousel-wrapper': {\r\n '& .carousel-control.left': {\r\n marginLeft: 270,\r\n },\r\n '& .carousel-control.right': {\r\n marginLeft: 357,\r\n },\r\n '& .carousel-indicators': {\r\n marginLeft: 310,\r\n margin: '20px 24px',\r\n left: 0,\r\n },\r\n },\r\n },\r\n customCarouselRoot: {\r\n '& .custom-carousel-controls-and-indicators': {\r\n transform: 'translateX(-15px) translateX(-50%)',\r\n left: '50%',\r\n\r\n '& .carousel-control.left': {\r\n marginRight: '10px !important',\r\n },\r\n '& .carousel-control.right': {\r\n marginLeft: '5px !important',\r\n },\r\n },\r\n },\r\n adExtensionContainer: {\r\n // todo: add styles for ad extension preview components if needed\r\n margin: 10,\r\n },\r\n placementContainerClassName: {\r\n minWidth: 669,\r\n border: '0 !important',\r\n boxShadow: 'unset !important',\r\n borderRadius: '0 !important',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n\r\n '& .placement-validation-message': {\r\n display: 'inline-block',\r\n width: '100%',\r\n fontSize: 14,\r\n textAlign: 'center',\r\n lineHeight: 2,\r\n marginRight: 16,\r\n },\r\n },\r\n carouselLayoutHeader: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n\r\n '& .carousel-header-texts': {\r\n display: 'inline-block',\r\n margin: '20px 8px 16px 24px',\r\n fontSize: 18,\r\n lineHeight: '24px',\r\n\r\n '& .carousel-header-ratio': {\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n marginRight: 8,\r\n },\r\n '& .carousel-header-title': {\r\n fontSize: 14,\r\n },\r\n },\r\n '& .ad-preview-actions': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 0,\r\n flexShrink: 0,\r\n alignItems: 'center',\r\n marginRight: 16,\r\n '& button': {\r\n marginRight: 8,\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst geCarouselStyleForMsan = {\r\n root: {\r\n '& .carousel-wrapper': {\r\n '& .carousel-control.left': {\r\n marginLeft: 200,\r\n },\r\n '& .carousel-control.right': {\r\n marginLeft: 430,\r\n },\r\n },\r\n },\r\n previewCarousel: {\r\n bottomCarouselNavigation: {\r\n '& .carousel-indicators': {\r\n marginLeft: 240,\r\n margin: '20px 24px',\r\n left: 0,\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst geCarouselStyleForOthers = {\r\n root: {\r\n '& .carousel-wrapper': {\r\n '& .carousel-control.left': {\r\n marginLeft: 270,\r\n },\r\n '& .carousel-control.right': {\r\n marginLeft: 357,\r\n },\r\n },\r\n },\r\n previewCarousel: {\r\n bottomCarouselNavigation: {\r\n '& .carousel-indicators': {\r\n marginLeft: 310,\r\n margin: '20px 24px',\r\n left: 0,\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport const getCarouselControlsAndIndicatorsStyleBySurface = (surface) => {\r\n switch (surface) {\r\n case 'Bing':\r\n case 'Edge':\r\n case 'Outlook':\r\n return geCarouselStyleForOthers;\r\n case 'Msn':\r\n default:\r\n return geCarouselStyleForMsan;\r\n }\r\n};\r\n\r\nexport const getSummaryCardStyles = () => ({\r\n ImageListCardDetailsContainer: {\r\n '& img': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n maxHeight: 48,\r\n marginRight: 10,\r\n marginTop: 5,\r\n },\r\n },\r\n});\r\n\r\nexport const getImageSuggestionCarouselStyles = (_components, { palette } = {}) => ({\r\n ImageSuggestionCarouselContainer: {\r\n '& .image-suggestion-carousel-root': {\r\n '& .collapsible-title > a': {\r\n fontSize: 12,\r\n fontWeight: 600,\r\n '&:hover': {\r\n background: 'transparent',\r\n },\r\n },\r\n },\r\n },\r\n InfoMessageBar: {\r\n background: palette.themeLighterAlt,\r\n },\r\n});\r\n\r\nexport const getImageSuggestionPanelStyles = () => ({\r\n panel: {\r\n top: 60,\r\n },\r\n panelHeader: {\r\n paddingLeft: 32,\r\n paddingRight: 24,\r\n alignSelf: 'justify-start',\r\n flexGrow: 1,\r\n },\r\n panelTitle: {\r\n fontSize: 20,\r\n fontWeight: 600,\r\n display: 'inline-block',\r\n lineHeight: '27px',\r\n paddingBottom: 20,\r\n },\r\n backButton: {\r\n display: 'inline-block',\r\n paddingRight: 10,\r\n },\r\n theme: {\r\n marginBottom: 14,\r\n marginLeft: 4,\r\n },\r\n buttonContainer: {\r\n alignItems: 'center',\r\n },\r\n errorMessage: {\r\n marginTop: 16,\r\n },\r\n});\r\n\r\nexport const imageSuggestionPanelWidth = '920px';\r\n","import _ from 'underscore';\r\nimport { parseUrl } from '@bingads-webui-campaign-react/url-editor';\r\nimport { getFinalUrlWithPath } from '@bingads-webui-campaign-react/validated-url-input';\r\n\r\nimport {\r\n UAPPlacementTypeAlias as EPT,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\nconst DEFAULT_URL_PREFIX = 'https';\r\nconst URL_COLON_SLASH_SLASH = '://';\r\n\r\nconst vmImagesFieldString = 'Images';\r\nconst vmImagesDataFieldString = 'ImageList';\r\nconst vmImageAssetsFieldString = 'ImageAssets';\r\n\r\nconst vmHeadlinesFieldString = 'Headlines';\r\nconst vmLongHeadlinesFieldString = 'LongHeadlines';\r\nconst vmDescriptionsFieldString = 'Descriptions';\r\nconst vmBusinessNameFieldString = 'BusinessName';\r\nconst vmCallToActionFieldString = 'CallToAction';\r\nconst vmFinalUrlsFieldString = 'FinalUrls';\r\nconst vmPath1FieldString = 'Path1';\r\nconst vmPath2FieldString = 'Path2';\r\n\r\nexport const pmaxRequiredAspectRatios = { Image191x100: 1, Image1x1: 1 };\r\n\r\n// ignore Image169x100 because the minimum size (703x372) is bigger than original image 703x368\r\nexport const audienceMMAV2RequiredAspectRatios = {\r\n OriginalImage: 1, Image201x100: 1, Image200x100: 1, Image191x100: 1, Image169x100: 1, Image153x100: 1, Image124x100: 1, Image120x100: 1, Image1x1: 1,\r\n};\r\nexport const specialMinimumSizeReqiurementAspectRatios = { Image169x100: [703, 372] };\r\n\r\nexport const getImagesFromImagesVm = vmImages => _.result(vmImages, vmImagesDataFieldString, undefined);\r\nconst getImageAssetsFromImagesVm = vmImages => _.result(vmImages, vmImageAssetsFieldString, []);\r\n\r\nexport const hasImages = imagesVm => _.result(getImagesFromImagesVm(imagesVm), 'length', 0) > 0;\r\n\r\nexport const getImageAssetsFromVm = (assetGroupVm, imageListPropName) => {\r\n const vmImages = _.result(assetGroupVm, imageListPropName || vmImagesFieldString, []);\r\n return getImageAssetsFromImagesVm(vmImages);\r\n};\r\n\r\nexport const getImageListFromVm = (assetGroupVm, imageListPropName) => {\r\n const vmImages = _.result(assetGroupVm, imageListPropName || vmImagesFieldString, {});\r\n return getImagesFromImagesVm(vmImages);\r\n};\r\n\r\nexport const createImagesVm = ({\r\n imageList,\r\n imageListPropName,\r\n}) => (\r\n imageListPropName && !imageList ? {} : {\r\n [imageListPropName || vmImagesFieldString]: {\r\n [vmImagesDataFieldString]: imageList,\r\n [vmImageAssetsFieldString]: null,\r\n },\r\n });\r\n\r\nexport const getInternalFinalUrlStateFromUrl = (url) => {\r\n const finalUrlProtocolAndDest = parseUrl(url);\r\n\r\n return {\r\n internalFinalUrl: url,\r\n internalFinalUrlProtocol: `${finalUrlProtocolAndDest.protocol || DEFAULT_URL_PREFIX}${URL_COLON_SLASH_SLASH}`,\r\n internalFinalUrlDest: finalUrlProtocolAndDest.url,\r\n };\r\n};\r\n\r\nconst getFirstNonEmptyItemKey = (items) => {\r\n const unEmptyItems = _.pick(items, _.identity);\r\n const keys = _.keys(unEmptyItems).sort();\r\n return _.first(keys);\r\n};\r\nconst getFirstNonEmptyItem = (items) => {\r\n const key = getFirstNonEmptyItemKey(items);\r\n return key ? items[key] : undefined;\r\n};\r\n\r\nexport const getAssetsFromVm = (assetGroupVm) => {\r\n const finalUrls = _.result(assetGroupVm, vmFinalUrlsFieldString, []);\r\n\r\n return ({\r\n shortHeadline: getFirstNonEmptyItem(_.result(assetGroupVm, vmHeadlinesFieldString, {})),\r\n longHeadline: getFirstNonEmptyItem(_.result(assetGroupVm, vmLongHeadlinesFieldString, {})),\r\n description: getFirstNonEmptyItem(_.result(assetGroupVm, vmDescriptionsFieldString, {})),\r\n businessName: _.result(assetGroupVm, vmBusinessNameFieldString, '') || '',\r\n callToAction: _.result(assetGroupVm, vmCallToActionFieldString, ''),\r\n finalUrl: _.first(finalUrls),\r\n displayUrl: getFinalUrlWithPath(finalUrls, _.result(assetGroupVm, vmPath1FieldString), _.result(assetGroupVm, vmPath2FieldString)),\r\n });\r\n};\r\n\r\nexport const adPreviewConfig = [{\r\n placementSetName: 'Msn',\r\n placementTypes: [\r\n EPT.PMax.AudienceWideImage,\r\n EPT.PMax.MSEdgeSingleCarousel,\r\n EPT.PMax.MSNInArticle,\r\n EPT.PMax.AudienceSquareImage,\r\n EPT.PMax.MSNSmallHeadline,\r\n EPT.PMax.MMAWideImage,\r\n EPT.PMax.MMAVerticalImage,\r\n ],\r\n}, {\r\n placementSetName: 'Bing',\r\n placementTypes: [\r\n EPT.PMax.MMALandscapeImage,\r\n EPT.BingSearch.Text,\r\n ],\r\n}, {\r\n placementSetName: 'Edge',\r\n placementTypes: [\r\n EPT.PMax.MSEdgeSingleCarousel,\r\n EPT.PMax.MMALandscapeImage,\r\n ],\r\n}, {\r\n placementSetName: 'Outlook',\r\n placementTypes: [\r\n EPT.Outlook.Mobile, EPT.Outlook.Web,\r\n ],\r\n}];\r\n\r\nexport const adPreviewConfigV2 = [{\r\n placementSetName: 'Msn',\r\n placementTypes: [\r\n EPT.PMax.AudienceWideImage,\r\n EPT.PMax.AudienceSquareImage,\r\n EPT.PMax.MMAWideImage,\r\n EPT.PMax.MMAVerticalImage,\r\n EPT.PMax.MMAV2MSNSingleCarousel,\r\n EPT.PMax.MMAV2MSNRestoday,\r\n EPT.PMax.MMAV2MSNPartnerStripe,\r\n ],\r\n}, {\r\n placementSetName: 'Bing',\r\n placementTypes: [\r\n EPT.PMax.MMALandscapeImage,\r\n EPT.BingSearch.Text,\r\n ],\r\n}, {\r\n placementSetName: 'Edge',\r\n placementTypes: [\r\n EPT.PMax.MMALandscapeImage,\r\n EPT.PMax.MMAV2MSEdgeCarousel,\r\n ],\r\n}, {\r\n placementSetName: 'Outlook',\r\n placementTypes: [\r\n EPT.Outlook.Mobile, EPT.Outlook.Web,\r\n ],\r\n}];\r\n\r\nexport const adPreviewConfigV3 = [{\r\n placementSetName: 'Msn',\r\n placementTypes: [\r\n EPT.PMax.MMAV2MSNRiver,\r\n EPT.PMax.AudienceSquareImage,\r\n EPT.PMax.MMAV2MSNSingleCarousel,\r\n EPT.PMax.MMAV2MSNRestoday,\r\n EPT.PMax.MMAV2MSNPartnerStripe,\r\n EPT.PMax.MMAV2MSEdgeCarousel,\r\n ],\r\n}, {\r\n placementSetName: 'Bing',\r\n placementTypes: [\r\n EPT.PMax.MMALandscapeImage,\r\n EPT.BingSearch.Text,\r\n ],\r\n}, {\r\n placementSetName: 'Outlook',\r\n placementTypes: [\r\n EPT.Outlook.Mobile, EPT.Outlook.Web,\r\n ],\r\n}];\r\n\r\nexport const AdPreviewSurface = {\r\n Msn: 'Msn',\r\n Bing: 'Bing',\r\n Edge: 'Edge',\r\n Outlook: 'Outlook',\r\n VideoGaming: 'VideoGaming',\r\n};\r\n\r\nexport const AdPreviewSurfacePlacementKeys = {\r\n [AdPreviewSurface.Msn]: ['msan_191x100', 'msan_1x1', 'edge_178x100', 'msan_150x100', 'msan_133x100', 'mma_4x1', 'mma_1x2'],\r\n [AdPreviewSurface.Bing]: ['mma_191x100', 'bing_text'],\r\n [AdPreviewSurface.Edge]: ['mma_191x100', 'edge_178x100'],\r\n [AdPreviewSurface.Outlook]: ['outlook_text_mobile', 'outlook_text_web'],\r\n};\r\n\r\nexport const AdPreviewSurfacePlacementKeysV2 = {\r\n [AdPreviewSurface.Msn]: ['msan_191x100', 'msan_1x1', 'mma_4x1', 'mma_1x2', 'mma_169x100', 'mma_124x100', 'mma_153x100'],\r\n [AdPreviewSurface.Bing]: ['mma_191x100', 'bing_text'],\r\n [AdPreviewSurface.Edge]: ['mma_191x100', 'edge_201x100'],\r\n [AdPreviewSurface.Outlook]: ['outlook_text_mobile', 'outlook_text_web'],\r\n};\r\n\r\nexport const AdPreviewSurfacePlacementKeysV3 = {\r\n [AdPreviewSurface.Msn]: ['msan_191x100', 'msan_1x1', 'mma_169x100', 'mma_124x100', 'mma_153x100', 'edge_201x100'],\r\n [AdPreviewSurface.Bing]: ['mma_191x100', 'bing_text'],\r\n [AdPreviewSurface.Outlook]: ['outlook_text_mobile', 'outlook_text_web'],\r\n};\r\n\r\nexport const getNumberOfPlacementBySurface = surface =>\r\n AdPreviewSurfacePlacementKeys[surface].length;\r\n\r\nexport const getNumberOfPlacementByCustomSurface = (surface, customSurfaceKeys) => customSurfaceKeys[surface] && customSurfaceKeys[surface].placements.length;\r\nexport const getNumberOfPlacementBySurfaceV2 = surface =>\r\n AdPreviewSurfacePlacementKeysV2[surface].length;\r\n\r\nexport const getNumberOfPlacementBySurfaceV3 = surface =>\r\n AdPreviewSurfacePlacementKeysV3[surface].length;\r\n\r\nexport const AdPreviewOverideStylesByKey = {\r\n mma_191x100: { imagePreviewHeight: 153, imagePreviewWidth: 292 },\r\n edge_178x100: { imagePreviewHeight: 220, imagePreviewWidth: 390 },\r\n msan_191x100: { imagePreviewHeight: 200, imagePreviewWidth: 382 },\r\n msan_150x100: { imagePreviewHeight: 200, imagePreviewWidth: 300 },\r\n mma_1x2: { imagePreviewHeight: 320, imagePreviewWidth: 160 },\r\n};\r\n\r\n\r\nexport const responsiveAdPreviewConfig = [{\r\n placementSetName: AdPreviewSurface.Msn,\r\n placementTypes: [\r\n EPT.Responsive.PMax.AudienceWideImage,\r\n EPT.Responsive.PMax.MSEdgeSingleCarousel,\r\n EPT.Responsive.PMax.MSNInArticle,\r\n EPT.Responsive.PMax.AudienceSquareImage,\r\n EPT.Responsive.PMax.MSNSmallHeadline,\r\n EPT.Responsive.PMax.MMAWideImage,\r\n EPT.Responsive.PMax.MMAVerticalImage,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Bing,\r\n placementTypes: [\r\n EPT.Responsive.PMax.MMALandscapeImage,\r\n EPT.Responsive.BingSearch.Text,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Edge,\r\n placementTypes: [\r\n EPT.Responsive.PMax.MSEdgeSingleCarousel,\r\n EPT.Responsive.PMax.MMALandscapeImage,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Outlook,\r\n placementTypes: [\r\n EPT.Responsive.Outlook.Mobile, EPT.Responsive.Outlook.Web,\r\n ],\r\n}];\r\n\r\nexport const responsiveAdPreviewConfigV2 = [{\r\n placementSetName: AdPreviewSurface.Msn,\r\n placementTypes: [\r\n EPT.Responsive.PMax.AudienceWideImage,\r\n EPT.Responsive.PMax.AudienceSquareImage,\r\n EPT.Responsive.PMax.MMAWideImage,\r\n EPT.Responsive.PMax.MMAVerticalImage,\r\n EPT.Responsive.PMax.MMAV2MSNSingleCarousel,\r\n EPT.Responsive.PMax.MMAV2MSNRestoday,\r\n EPT.Responsive.PMax.MMAV2MSNPartnerStripe,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Bing,\r\n placementTypes: [\r\n EPT.Responsive.PMax.MMALandscapeImage,\r\n EPT.Responsive.BingSearch.Text,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Edge,\r\n placementTypes: [\r\n EPT.Responsive.PMax.MMALandscapeImage,\r\n EPT.Responsive.PMax.MMAV2MSEdgeCarousel,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Outlook,\r\n placementTypes: [\r\n EPT.Responsive.Outlook.Mobile, EPT.Responsive.Outlook.Web,\r\n ],\r\n}];\r\n\r\nexport const responsiveAdPreviewConfigV3 = [{\r\n placementSetName: AdPreviewSurface.Msn,\r\n placementTypes: [\r\n EPT.Responsive.PMax.MMAV2MSNRiver,\r\n EPT.Responsive.PMax.AudienceSquareImage,\r\n EPT.Responsive.PMax.MMAV2MSNSingleCarousel,\r\n EPT.Responsive.PMax.MMAV2MSNRestoday,\r\n EPT.Responsive.PMax.MMAV2MSNPartnerStripe,\r\n EPT.Responsive.PMax.MMAV2MSEdgeCarousel,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Bing,\r\n placementTypes: [\r\n EPT.Responsive.PMax.MMALandscapeImage,\r\n EPT.Responsive.BingSearch.Text,\r\n ],\r\n}, {\r\n placementSetName: AdPreviewSurface.Outlook,\r\n placementTypes: [\r\n EPT.Responsive.Outlook.Mobile, EPT.Responsive.Outlook.Web,\r\n ],\r\n}];\r\n\r\nexport const getResponsiveAdPreviewConfig = (isAdPreviewRefreshEnabled, isPMaxAspectRatiosV2Enabled, permissions) => {\r\n let config = responsiveAdPreviewConfig;\r\n if (isAdPreviewRefreshEnabled && isPMaxAspectRatiosV2Enabled) {\r\n config = responsiveAdPreviewConfigV3;\r\n } else if (isPMaxAspectRatiosV2Enabled) {\r\n config = responsiveAdPreviewConfigV2;\r\n }\r\n\r\n if (permissions.dynamic.PMaxVideo) {\r\n // update Msn placment with video\r\n const msnSurfacePlacements = config.find(placement => placement.placementSetName === AdPreviewSurface.Msn);\r\n\r\n if (msnSurfacePlacements && !msnSurfacePlacements.placementTypes.includes(EPT.PMax.Video)) {\r\n msnSurfacePlacements.placementTypes.push(EPT.PMax.Video);\r\n }\r\n\r\n // if config doesn't have VideoGaming surface, add it\r\n const videoGamingSurface = config.find(placement => placement.placmentSetName === AdPreviewSurface.VideoGaming);\r\n if (!videoGamingSurface) {\r\n config.push({\r\n placementSetName: AdPreviewSurface.VideoGaming,\r\n placementTypes: [\r\n EPT.PMax.Video,\r\n ],\r\n });\r\n }\r\n }\r\n\r\n return config;\r\n};\r\n\r\n\r\nexport const getExtraPlacementInfo = hasLogo => ({\r\n [EPT.Responsive.PMax.AudienceWideImage]: {\r\n aspectRatioUIString: '1.91:1',\r\n previewTitle: _TL_('MSN feed'),\r\n customClassName: 'msan_191x100',\r\n imagePreviewHeight: AdPreviewOverideStylesByKey.msan_191x100.imagePreviewHeight,\r\n },\r\n [EPT.Responsive.PMax.MSEdgeSingleCarousel]: {\r\n aspectRatioUIString: '1.78:1',\r\n previewTitle: _TL_('Microsoft Edge single carousel'),\r\n customClassName: 'edge_178x100',\r\n imagePreviewHeight: AdPreviewOverideStylesByKey.edge_178x100.imagePreviewHeight,\r\n },\r\n [EPT.Responsive.PMax.MSNInArticle]: {\r\n aspectRatioUIString: '1.5:1',\r\n previewTitle: _TL_('MSN in-article ad'),\r\n customClassName: 'msan_150x100',\r\n imagePreviewHeight: AdPreviewOverideStylesByKey.msan_150x100.imagePreviewHeight,\r\n },\r\n [EPT.Responsive.PMax.AudienceSquareImage]: {\r\n aspectRatioUIString: '1:1',\r\n previewTitle: _TL_('MSN square image'),\r\n customClassName: 'msan_1x1',\r\n },\r\n [EPT.Responsive.PMax.MSNSmallHeadline]: {\r\n aspectRatioUIString: '1.33:1',\r\n previewTitle: _TL_('MSN small headline'),\r\n customClassName: 'msan_133x100',\r\n },\r\n [EPT.Responsive.PMax.MMAWideImage]: {\r\n aspectRatioUIString: '4:1',\r\n previewTitle: _TL_('Wide image'),\r\n customClassName: 'mma_4x1',\r\n },\r\n [EPT.Responsive.PMax.MMAVerticalImage]: {\r\n aspectRatioUIString: '1:2',\r\n previewTitle: _TL_('Vertical image'),\r\n customClassName: 'mma_1x2',\r\n imagePreviewHeight: AdPreviewOverideStylesByKey.mma_1x2.imagePreviewHeight,\r\n },\r\n [EPT.Responsive.PMax.MMALandscapeImage]: {\r\n aspectRatioUIString: '1.91:1',\r\n previewTitle: _TL_('Landscape Image Multimedia Ad'),\r\n customClassName: 'mma_191x100',\r\n imagePreviewHeight: AdPreviewOverideStylesByKey.mma_191x100.imagePreviewHeight,\r\n hasLogo,\r\n },\r\n [EPT.Responsive.BingSearch.Text]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Bing search ad'),\r\n customClassName: 'bing_text',\r\n hasLogo,\r\n },\r\n [EPT.Responsive.Outlook.Mobile]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Microsoft Outlook web (mobile)'),\r\n customClassName: 'outlook_text_mobile',\r\n hasLogo,\r\n },\r\n [EPT.Responsive.Outlook.Web]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Microsoft Outlook web (computer)'),\r\n customClassName: 'outlook_text_web',\r\n hasLogo,\r\n },\r\n [EPT.UnifiedAppAds.VideoHorizontal]: {\r\n aspectRatioUIString: '16:9',\r\n previewTitle: _TL_('Horizontal fullscreen video'),\r\n customClassName: 'video_16x9',\r\n },\r\n [EPT.UnifiedAppAds.M365Outlook]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Outlook Mobile'),\r\n customClassName: 'outlook_text_mobile',\r\n hasLogo,\r\n },\r\n [EPT.Responsive.PMax.MMAV2MSEdgeCarousel]: {\r\n aspectRatioUIString: '2.01:1',\r\n previewTitle: _TL_('Microsoft Edge carousel'),\r\n customClassName: 'edge_201x100',\r\n hasLogo: true,\r\n },\r\n [EPT.Responsive.PMax.MMAV2MSNSingleCarousel]: {\r\n aspectRatioUIString: '1.69:1',\r\n previewTitle: _TL_('MSN Single Carousel'),\r\n customClassName: 'mma_169x100',\r\n },\r\n [EPT.Responsive.PMax.MMAV2MSNRestoday]: {\r\n aspectRatioUIString: '1.24:1',\r\n previewTitle: _TL_('MSN Restoday'),\r\n customClassName: 'mma_124x100',\r\n },\r\n [EPT.Responsive.PMax.MMAV2MSNPartnerStripe]: {\r\n aspectRatioUIString: '1.53:1',\r\n previewTitle: _TL_('MSN Partner Stripe'),\r\n customClassName: 'mma_153x100',\r\n },\r\n [EPT.Responsive.PMax.MMAV2MSNRiver]: {\r\n aspectRatioUIString: '1.91:1',\r\n previewTitle: _TL_('MSN feed'),\r\n hasLogo: true,\r\n },\r\n [EPT.PMax.Video]: {\r\n previewTitle: _TL_('Video'),\r\n customClassName: 'video',\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport { getFlattenedImageAssetList, updateAssetsIdsAsync, setMTImageModel, getImagesFromMTAssetsAsync } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n\r\nexport const processImageListViewModelToModel = (imageListVm, serverContext, cid, aid) => {\r\n const imageOData = new ImageOData(cid, aid, getODataConfig(serverContext));\r\n const flattenedIncludedImageAssetList = getFlattenedImageAssetList(imageListVm, true /* isMultimediaAdinMSANEnabled */, false /* isMultimediaAd */);\r\n const originalData = {};\r\n\r\n return updateAssetsIdsAsync(flattenedIncludedImageAssetList, 0, true /* isAdCreatorEnabled */, imageOData)\r\n .then((updates) => {\r\n // isMultimediaAdinMSANEnabled unset because right now pmax MT does not support autofill (we have to specify all included aspect ratios - no data optimizations)\r\n // TODO: Refactor code to have more calrity on functionality specifying isMultimediaAdinMSANEnabled and isMultimediaAd values\r\n setMTImageModel(\r\n originalData,\r\n updates,\r\n _.map(imageListVm, imageArray => _.filter(imageArray, imageObj => imageObj.isIncluded)) /* imageList */,\r\n {\r\n isMultimediaAdinMSANEnabled: false,\r\n isMultimediaAd: false,\r\n },\r\n [] /* UiUnsupportedRatios */\r\n );\r\n return originalData;\r\n });\r\n};\r\n\r\nexport const processImageListModelToViewModel = (imageAssetArray, cid, aid, overrideParameters) => {\r\n const baseUrl = `/Customers(${cid})/Accounts(${aid})/`;\r\n const isCombinedMsanAndMmaAspectRatios = overrideParameters && overrideParameters.isCombinedMsanAndMmaAspectRatios !== undefined ? overrideParameters.isCombinedMsanAndMmaAspectRatios : true;\r\n const isLinkedInAd = overrideParameters && overrideParameters.isLinkedInAd !== undefined ? overrideParameters.isLinkedInAd : false;\r\n const isPMaxAspectRatiosV2Enabled = overrideParameters && overrideParameters.isPMaxAspectRatiosV2Enabled;\r\n\r\n const promise = getImagesFromMTAssetsAsync(\r\n odata,\r\n baseUrl,\r\n imageAssetArray,\r\n true /* isMultimediaAd */,\r\n true /* isAdCreatorEnabled */,\r\n isCombinedMsanAndMmaAspectRatios, /* isCombinedMsanAndMmaAspectRatios */\r\n false /* isStoreAppProng */,\r\n false /* isStoreAppSpotLight */,\r\n false /* isStoreAppTransparentLogo */,\r\n isLinkedInAd /* isLinkedInAd */,\r\n false /* isImageFittingEnabled */,\r\n isPMaxAspectRatiosV2Enabled\r\n );\r\n\r\n return createAsyncToken(promise);\r\n};\r\n","import React, { useState, useMemo, useContext, useCallback, useEffect, useRef } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { ImageExperience, AdTypeEnum, getDefaultCurrentSelectedImageId, getDefaultSelectedImageId } from '@bingads-webui-campaign-react/image-experience';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withPreference } from '@bingads-webui-react/preference-context';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { instrumentationScenarios } from '@bingads-webui-campaign/ad-creator-tools-instrumentation';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { validateAdUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useAssetLibraryEventHandler, AssetPropertyName } from '@bingads-webui-campaign-react/copilot-common';\r\n\r\nimport { getStyles } from './style';\r\nimport { getInternalFinalUrlStateFromUrl, getImageListFromVm, getAssetsFromVm, createImagesVm, getImageAssetsFromVm, pmaxRequiredAspectRatios, audienceMMAV2RequiredAspectRatios, specialMinimumSizeReqiurementAspectRatios, adPreviewConfig as PMAXAdPreviewConfig, adPreviewConfigV2 as PMaxAdPreviewConfigV2, adPreviewConfigV3 as PMaxAdPreviewConfigV3 } from './shared';\r\nimport { getODataConfig, processImageListModelToViewModel } from './image-list-data';\r\n\r\nexport const PMaxImageExperienceMaxImageCount = 20;\r\n\r\nconst ImageExperienceWrapperInternal = (props) => {\r\n const {\r\n validationProps,\r\n updateValidation,\r\n imageAssetsOptional,\r\n isLogoEnabled,\r\n isBoostPortraitEnabled,\r\n updateFinalUrlCallback,\r\n updateImageListCallback,\r\n i18n,\r\n permissions,\r\n preferenceService,\r\n imagesContaineRef,\r\n logosContaineRef,\r\n portraitContainerRef,\r\n campaignId,\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n updatePortalContainerState,\r\n setImageExperienceAddNewImageCallback,\r\n suggestionPoller,\r\n wizardPerfMarker,\r\n postAssetEventLog,\r\n isCombinedMsanAndMmaAspectRatios,\r\n customMaxImageCount,\r\n UAPLPMaxIntegration,\r\n isMSANBoostEnabled,\r\n imageListPropName,\r\n isBulkEditMMA,\r\n isImproveMMA,\r\n genericImage,\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCopilotRecommendations,\r\n adPreviewConfig,\r\n optionalAspectRatio,\r\n isStoreAppProng,\r\n isStoreAppSpotLight,\r\n isAd,\r\n isStockImageEnabled,\r\n isStoreAppTransparentLogo,\r\n isMMAV2Enabled,\r\n showCopilotOptionForImage,\r\n customAssetLibraryEventHandler,\r\n isLinkedInAd,\r\n customPreviewTexts,\r\n customOnEditImage,\r\n customOnSaveEditImage,\r\n onRenderAllowedAspectRatioControl,\r\n isAudienceAd,\r\n supportImageUpscale,\r\n isImageFittingEnabled,\r\n isUnifiedAppCampaignWindowsStore,\r\n isPMaxAspectRatiosV2Enabled,\r\n isAdPreviewRefreshEnabled,\r\n } = props;\r\n if (adPreviewConfig.placementConfig === undefined) {\r\n const refreshedAdPreviewConfig = isAdPreviewRefreshEnabled ? PMaxAdPreviewConfigV3 : PMaxAdPreviewConfigV2;\r\n adPreviewConfig.placementConfig = isPMaxAspectRatiosV2Enabled ? refreshedAdPreviewConfig : PMAXAdPreviewConfig;\r\n }\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { copilotTracking } = recommendationContext;\r\n\r\n const [finalUrlState, setFinalUrlState] = useState({\r\n wizardFinalUrl: null,\r\n internalFinalUrl: null,\r\n internalFinalUrlProtocol: null,\r\n internalFinalUrlDest: null,\r\n });\r\n\r\n const [state, setState] = useState({\r\n thumbnailRecord: null,\r\n currentSelectedImageId: null,\r\n currentSelectedLogoId: null,\r\n });\r\n\r\n const imageExperienceAddImageCalbackRef = useRef(_.noop);\r\n const suggestedImageBeingAdded = useRef(null);\r\n\r\n useEffect(() => {\r\n setImageExperienceAddNewImageCallback(() => (images, imageSource, replaceExistingAssets) => {\r\n const { fullUrl, suggestionId } = images[images.length - 1];\r\n if (images.length === 1) {\r\n suggestedImageBeingAdded.current = { fullUrl, suggestionId };\r\n }\r\n if (isCopilotRecommendations) {\r\n return imageExperienceAddImageCalbackRef.current(images, imageSource, replaceExistingAssets);\r\n }\r\n return imageExperienceAddImageCalbackRef.current(fullUrl, imageSource);\r\n });\r\n }, [isCopilotRecommendations, setImageExperienceAddNewImageCallback]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n const serverContext = useContext(ServerContext);\r\n const { scope } = useContext(ScopeContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const isMeetingMinimumRequirementPerAspectRatio = useCallback((imageList, forLogos) => {\r\n let requiredAspectRatios = pmaxRequiredAspectRatios;\r\n if (isMMAV2Enabled) {\r\n requiredAspectRatios = audienceMMAV2RequiredAspectRatios;\r\n }\r\n if (isLinkedInAd) {\r\n return imageList && imageList.length > 0;\r\n }\r\n const ratioCounts = _.mapObject(optionalAspectRatio || requiredAspectRatios, () => 0);\r\n _.each(imageList, imageArray =>\r\n _.each(imageArray, (imageObj) => {\r\n if (imageObj.isIncluded && imageObj.isLogo === forLogos && !imageObj.isPortrait && _.has(requiredAspectRatios, imageObj.type)) {\r\n ratioCounts[imageObj.type] += 1;\r\n }\r\n\r\n if (isMMAV2Enabled && _.has(specialMinimumSizeReqiurementAspectRatios, imageObj.type) && imageObj.isLogo === false && !imageObj.isPortrait) {\r\n // for Image169x100, the minimum size (703x372) is bigger than original image (required) 703x368\r\n const minimumSizerequirement = specialMinimumSizeReqiurementAspectRatios[imageObj.type];\r\n const imageActualCroppedSize = imageObj.cropSettings || {};\r\n const isThisAspectRatioExcludedForMinimumSizeReqiurement = imageActualCroppedSize.SourceWidth < minimumSizerequirement[0] || imageActualCroppedSize.SourceHeight < minimumSizerequirement[1];\r\n ratioCounts[imageObj.type] += isThisAspectRatioExcludedForMinimumSizeReqiurement ? 1 : 0;\r\n }\r\n }));\r\n return _.every(requiredAspectRatios, (minCount, type) => ratioCounts[type] >= minCount);\r\n }, [isLinkedInAd, isMMAV2Enabled, optionalAspectRatio]);\r\n\r\n const validateImageList = useCallback((imageList, logos) => {\r\n if (imageAssetsOptional || logos) {\r\n return [];\r\n }\r\n\r\n if (!isMeetingMinimumRequirementPerAspectRatio(imageList, logos)) {\r\n let error = logos ?\r\n i18n.getString(_TL_('You need to add at least 1 logo with 1:1 aspect ratio to your asset group.')) :\r\n i18n.getString(_TL_('You need to add at least 1 image with 1.91:1 aspect ratio and 1 image with 1:1 aspect ratio to your asset group.'));\r\n\r\n if (isAd) {\r\n error = logos ?\r\n i18n.getString(_TL_('You need to add at least 1 logo with 1:1 aspect ratio to the ad.')) :\r\n i18n.getString(_TL_('You need to add at least 1 image with 1.91:1 aspect ratio and 1 image with 1:1 aspect ratio to the ad.'));\r\n }\r\n\r\n if (isMMAV2Enabled) {\r\n error = logos ?\r\n i18n.getString(_TL_('You need to add at least 1 logo to the ad.')) :\r\n i18n.getString(_TL_('You need to add at least 1 image to the ad with minimum requirement.'));\r\n }\r\n\r\n if (isLinkedInAd) {\r\n error = i18n.getString(_TL_('You need to add 1 image to the ad.'));\r\n }\r\n\r\n return [error];\r\n }\r\n\r\n return [];\r\n }, [imageAssetsOptional, isMeetingMinimumRequirementPerAspectRatio, i18n, isAd, isMMAV2Enabled]);\r\n\r\n const updateFinalUrlStateFromWizardIfChanged = useCallback((vmAssetsInfo) => {\r\n const vmFinalUrl = vmAssetsInfo.finalUrl;\r\n if (vmFinalUrl !== finalUrlState.wizardFinalUrl) {\r\n setFinalUrlState({\r\n wizardFinalUrl: vmFinalUrl,\r\n ...getInternalFinalUrlStateFromUrl(vmFinalUrl),\r\n });\r\n }\r\n }, [finalUrlState]);\r\n\r\n const onImageSelected = useCallback((imageId, isLogoSelected = false) => {\r\n if (isLogoSelected) {\r\n setState({\r\n ...state,\r\n currentSelectedLogoId: imageId,\r\n });\r\n\r\n setPreviewImagesSharedState({\r\n ...previewImagesSharedState, previewLogoId: imageId,\r\n });\r\n } else {\r\n setState({\r\n ...state,\r\n currentSelectedImageId: imageId,\r\n });\r\n\r\n setPreviewImagesSharedState({\r\n ...previewImagesSharedState, cropImageObj: null, previewImageId: imageId, editingPlacementType: '',\r\n });\r\n }\r\n }, [state, setPreviewImagesSharedState, previewImagesSharedState]);\r\n\r\n const onImageRemoved = useCallback((imageId, updatedImageList, isLogo) => {\r\n if ((isLogo && `${state.currentSelectedLogoId}` === `${imageId}`) || (!isLogo && `${state.currentSelectedImageId}` === `${imageId}`)) {\r\n const selectedImageId = getDefaultSelectedImageId(updatedImageList, isLogo);\r\n onImageSelected(selectedImageId, isLogo);\r\n }\r\n if (!copilotTracking || !copilotTracking.isInRemainingInitialSuggestions(AssetPropertyName.IMAGE, imageId)) { return; }\r\n copilotTracking.removeInitialSuggestion(AssetPropertyName.IMAGE, imageId);\r\n }, [copilotTracking, onImageSelected, state.currentSelectedImageId, state.currentSelectedLogoId]);\r\n\r\n const vmImageAssets = getImageAssetsFromVm(validationProps.data, imageListPropName);\r\n const vmImageList = getImageListFromVm(validationProps.data, imageListPropName);\r\n const latestImageList = useRef();\r\n\r\n const getNewlyAddedImageId = useCallback((latest, updated) => {\r\n const newImage = _.find(updated, image => !_.contains(latest, image));\r\n if (_.isArray(newImage)) {\r\n const { id } = _.first(newImage);\r\n return id;\r\n }\r\n return null;\r\n }, []);\r\n\r\n const onImageListUpdated = useCallback((updatedImageList, currentSelectedImageId, isLogo, shouldDirty = true) => {\r\n setPreviewImagesSharedState(prevState => ({ ...prevState, cropImageObj: null, editingPlacementType: '' }));\r\n const imagesErrorList = [...validateImageList(updatedImageList, false)];\r\n const logosErrorList = [...validateImageList(updatedImageList, true)];\r\n const allErrors = [...imagesErrorList, ...logosErrorList];\r\n\r\n const listSizeChange = _.size(updatedImageList) - _.size(latestImageList.current);\r\n\r\n updatePortalContainerState({\r\n imageErrors: imagesErrorList,\r\n logoErrors: logosErrorList,\r\n isDirty: shouldDirty,\r\n imageListSizeChange: listSizeChange,\r\n });\r\n\r\n updateImageListCallback(updatedImageList);\r\n if (customAssetLibraryEventHandler && customAssetLibraryEventHandler.onImageListUpdate) {\r\n customAssetLibraryEventHandler.onImageListUpdate(activity, updatedImageList, latestImageList.current);\r\n }\r\n\r\n if (suggestedImageBeingAdded.current) {\r\n const addedImageId = getNewlyAddedImageId(latestImageList.current, updatedImageList);\r\n if (addedImageId) {\r\n const { suggestionId } = suggestedImageBeingAdded.current;\r\n reportRecommendations({ selectedImageSuggestions: [{ suggestionId, imageId: addedImageId }] });\r\n }\r\n suggestedImageBeingAdded.current = null;\r\n }\r\n\r\n latestImageList.current = updatedImageList;\r\n updateValidation(allErrors, createImagesVm({ imageList: updatedImageList, imageListPropName }, shouldDirty));\r\n\r\n if (currentSelectedImageId) {\r\n onImageSelected(currentSelectedImageId, isLogo);\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`onImageListUpdated - currentImageSize: ${JSON.stringify(updatedImageList)}`);\r\n }\r\n }, [setPreviewImagesSharedState, validateImageList, updatePortalContainerState, updateImageListCallback, customAssetLibraryEventHandler, updateValidation, imageListPropName, activity, getNewlyAddedImageId, reportRecommendations, onImageSelected]);\r\n\r\n useEffect(() => {\r\n if (latestImageList.current !== vmImageList) {\r\n // This trigger image list validate that is not triggered by image experience udating image list:\r\n // 1. On first run after render - we should not mark dirty in this case\r\n // 2. When image list is updated externally by ad-preview - we should mark dirty in this case\r\n onImageListUpdated(vmImageList, null, null, previewImagesSharedState.isImageListUpdatedByPreview /* shouldDirty */);\r\n }\r\n }, [onImageListUpdated, previewImagesSharedState.isImageListUpdatedByPreview, vmImageList]);\r\n\r\n const asyncTokenRef = useRef();\r\n\r\n useEffect(() => {\r\n if (vmImageAssets && vmImageAssets.length > 0) {\r\n if (asyncTokenRef.current != null) {\r\n asyncTokenRef.current.cancel();\r\n }\r\n updatePortalContainerState({ imageAssetsLoadPending: true });\r\n asyncTokenRef.current = processImageListModelToViewModel(vmImageAssets, scope.values.cid, scope.values.aid, {\r\n isCombinedMsanAndMmaAspectRatios: !isMultimediaAd,\r\n isLinkedInAd,\r\n isPMaxAspectRatiosV2Enabled,\r\n })\r\n .on({\r\n onSuccess: (loadedImageList) => {\r\n let selectedImageId = null;\r\n if (isMultimediaAd) {\r\n selectedImageId = getDefaultCurrentSelectedImageId(loadedImageList);\r\n }\r\n return onImageListUpdated(loadedImageList, selectedImageId, null, false /* shouldDirty */);\r\n },\r\n onError: () => {\r\n const errorArray = ['Image asset load failure'];\r\n updatePortalContainerState({\r\n imageErrors: errorArray,\r\n logoErrors: errorArray,\r\n imageAssetsLoadFailure: true,\r\n });\r\n updateValidation(errorArray, createImagesVm({ imageList: null, imageListPropName }));\r\n },\r\n });\r\n } else {\r\n onImageListUpdated(vmImageList, null, null, false /* shouldDirty */);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n onImageListUpdated(vmImageList, null, null, false /* shouldDirty */);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [imageAssetsOptional]);\r\n\r\n const onImageEditCancelled = useCallback(() => {\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, cropImageObj: null, editingPlacementType: '' });\r\n }, [previewImagesSharedState, setPreviewImagesSharedState]);\r\n\r\n const onImagePreviewRequested = () => {\r\n };\r\n\r\n const onSaveThumbnailAsDraft = () => {\r\n };\r\n\r\n const vmAssetsInfo = getAssetsFromVm(validationProps.data);\r\n updateFinalUrlStateFromWizardIfChanged(vmAssetsInfo);\r\n\r\n const updateFinalUrl = useCallback((newFinalUrl) => {\r\n // if url is valid then trigger the wizard to update the final url which will trigger this component to update entire state in updateFinalUrlStateFromWizardIfChanged\r\n // if its not valid, just update internal state\r\n if (_.isEmpty(validateAdUrl(newFinalUrl, '', i18n))) {\r\n updateFinalUrlCallback([newFinalUrl]);\r\n } else {\r\n setFinalUrlState({\r\n ...finalUrlState,\r\n ...getInternalFinalUrlStateFromUrl(newFinalUrl),\r\n });\r\n }\r\n }, [updateFinalUrlCallback, i18n, finalUrlState]);\r\n\r\n const onUpdateFinalUrlPrefix = useCallback((ev, newPrefix) => {\r\n const prefixText = newPrefix.text;\r\n const newFinalUrl = prefixText + finalUrlState.internalFinalUrlDest;\r\n updateFinalUrl(newFinalUrl);\r\n }, [finalUrlState.internalFinalUrlDest, updateFinalUrl]);\r\n\r\n const onUpdateFinalUrl = useCallback((ev) => {\r\n const newUrl = ev && ev.target && ev.target.value;\r\n const newFinalUrl = finalUrlState.internalFinalUrlProtocol + newUrl;\r\n updateFinalUrl(newFinalUrl);\r\n }, [finalUrlState.internalFinalUrlProtocol, updateFinalUrl]);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid: scope.values.cid,\r\n aid: scope.values.aid,\r\n cmpId: campaignId,\r\n oDataConfig,\r\n }), [scope.values.cid, scope.values.aid, campaignId, oDataConfig]);\r\n\r\n const assetLibraryEventHandler = useAssetLibraryEventHandler(postAssetEventLog);\r\n const finalAssetLibraryEventHandler = useMemo(\r\n () => ({\r\n ...assetLibraryEventHandler,\r\n onUploadImage: (imgId) => {\r\n if (customAssetLibraryEventHandler && customAssetLibraryEventHandler.onUploadImage) {\r\n customAssetLibraryEventHandler.onUploadImage(activity, imgId);\r\n }\r\n },\r\n }),\r\n [activity, assetLibraryEventHandler, customAssetLibraryEventHandler]\r\n );\r\n\r\n const perfMarker = wizardPerfMarker.createChild('PerfMaxImageExperienceWrapper', { autoEnd: true });\r\n return (\r\n
\r\n { imageExperienceAddImageCalbackRef.current = callback; }}\r\n setAddNewImagesCallback={isCopilotRecommendations ? (callback) => { imageExperienceAddImageCalbackRef.current = callback; } : _.noop}\r\n setOpenAddImageCallback={_.noop}\r\n adCreatorScenario={instrumentationScenarios.default}\r\n onManualCropLogo={() => setState({ ...state, hasManualCroppedLogo: true })}\r\n onManualCropImage={() => setState({ ...state, hasManualCroppedImage: true })}\r\n preferencesService={preferenceService}\r\n imagesPortalContainer={imagesContaineRef.current}\r\n logosPortalContainer={isLogoEnabled && logosContaineRef.current}\r\n portraitPortalContainer={portraitContainerRef && portraitContainerRef.current}\r\n isRenderAddInImageList\r\n customMaxImageCount={customMaxImageCount || PMaxImageExperienceMaxImageCount}\r\n showCopilotOptionForImage={showCopilotOptionForImage}\r\n postAssetEventLog={postAssetEventLog}\r\n assetLibraryEventHandler={finalAssetLibraryEventHandler}\r\n editingPlacementType={previewImagesSharedState.editingPlacementType}\r\n adPreviewConfig={adPreviewConfig}\r\n enableUnifiedAdPreview={UAPLPMaxIntegration}\r\n isMSANBoostEnabled={isMSANBoostEnabled}\r\n isBulkEditMMA={isBulkEditMMA}\r\n isImproveMMA={isImproveMMA}\r\n genericImage={genericImage}\r\n isStockImageEnabled={isStockImageEnabled}\r\n isStoreAppProng={isStoreAppProng}\r\n isStoreAppSpotLight={isStoreAppSpotLight}\r\n isStoreAppTransparentLogo={isStoreAppTransparentLogo}\r\n enableImageListEdit={!isStoreAppProng && !isStoreAppSpotLight && !isStoreAppTransparentLogo}\r\n isUnifiedAppCampaignWindowsStore={isUnifiedAppCampaignWindowsStore}\r\n isLinkedInAd={isLinkedInAd}\r\n customPreviewTexts={customPreviewTexts}\r\n customOnEditImage={customOnEditImage}\r\n customOnSaveEditImage={customOnSaveEditImage}\r\n onRenderAllowedAspectRatioControl={onRenderAllowedAspectRatioControl}\r\n supportImageUpscale={supportImageUpscale}\r\n isImageFittingEnabled={isImageFittingEnabled}\r\n isPMaxAspectRatiosV2Enabled={isPMaxAspectRatiosV2Enabled}\r\n />\r\n
\r\n );\r\n};\r\n\r\nImageExperienceWrapperInternal.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Images: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n DisplayPlusCopilotRecommendations: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n updateFinalUrlCallback: PropTypes.func.isRequired,\r\n imagesContaineRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n logosContaineRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n portraitContainerRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }),\r\n isBoostPortraitEnabled: PropTypes.bool,\r\n campaignId: PropTypes.string,\r\n imageAssetsOptional: PropTypes.bool,\r\n isLogoEnabled: PropTypes.bool,\r\n previewImagesSharedState: PropTypes.shape({\r\n cropImageObj: PropTypes.shape({}),\r\n isImageListUpdatedByPreview: PropTypes.bool,\r\n editingPlacementType: PropTypes.string,\r\n }).isRequired,\r\n setPreviewImagesSharedState: PropTypes.func.isRequired,\r\n updatePortalContainerState: PropTypes.func.isRequired,\r\n suggestionPoller: PropTypes.shape({\r\n getLandingPageSuggestions: PropTypes.func.isRequired,\r\n cancel: PropTypes.func.isRequired,\r\n }).isRequired,\r\n setImageExperienceAddNewImageCallback: PropTypes.func,\r\n wizardPerfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n postAssetEventLog: PropTypes.func,\r\n isCombinedMsanAndMmaAspectRatios: PropTypes.bool,\r\n customMaxImageCount: PropTypes.number,\r\n UAPLPMaxIntegration: PropTypes.bool,\r\n isMSANBoostEnabled: PropTypes.bool,\r\n imageListPropName: PropTypes.string,\r\n isBulkEditMMA: PropTypes.bool,\r\n isImproveMMA: PropTypes.bool,\r\n genericImage: PropTypes.string,\r\n isMultimediaAd: PropTypes.bool,\r\n isMultimediaAdinMSANEnabled: PropTypes.bool,\r\n isCopilotRecommendations: PropTypes.bool,\r\n adPreviewConfig: PropTypes.shape({\r\n adType: PropTypes.string,\r\n placementConfig: PropTypes.arrayOf(PropTypes.shape({})),\r\n extraPlacementInfo: PropTypes.shape({}),\r\n }),\r\n optionalAspectRatio: PropTypes.shape({}),\r\n updateImageListCallback: PropTypes.func,\r\n isStoreAppProng: PropTypes.bool,\r\n isStoreAppSpotLight: PropTypes.bool,\r\n isAd: PropTypes.bool,\r\n isStockImageEnabled: PropTypes.bool,\r\n isStoreAppTransparentLogo: PropTypes.bool,\r\n isMMAV2Enabled: PropTypes.bool,\r\n showCopilotOptionForImage: PropTypes.bool,\r\n customAssetLibraryEventHandler: PropTypes.shape({}),\r\n isLinkedInAd: PropTypes.bool,\r\n customPreviewTexts: PropTypes.shape({}),\r\n customOnEditImage: PropTypes.func,\r\n customOnSaveEditImage: PropTypes.func,\r\n onRenderAllowedAspectRatioControl: PropTypes.func,\r\n isAudienceAd: PropTypes.bool,\r\n supportImageUpscale: PropTypes.bool,\r\n isImageFittingEnabled: PropTypes.bool,\r\n isUnifiedAppCampaignWindowsStore: PropTypes.bool,\r\n isPMaxAspectRatiosV2Enabled: PropTypes.bool,\r\n isAdPreviewRefreshEnabled: PropTypes.bool,\r\n};\r\n\r\nImageExperienceWrapperInternal.defaultProps = {\r\n campaignId: null,\r\n imageAssetsOptional: false,\r\n isLogoEnabled: true,\r\n postAssetEventLog: _.noop,\r\n customMaxImageCount: null,\r\n portraitContainerRef: null,\r\n isBoostPortraitEnabled: false,\r\n UAPLPMaxIntegration: false,\r\n isMSANBoostEnabled: false,\r\n imageListPropName: null,\r\n setImageExperienceAddNewImageCallback: _.noop,\r\n isBulkEditMMA: false,\r\n isImproveMMA: false,\r\n genericImage: null,\r\n isMultimediaAd: false,\r\n isMultimediaAdinMSANEnabled: true,\r\n isCopilotRecommendations: true,\r\n adPreviewConfig: {\r\n adType: AdTypeEnum.pMax,\r\n placementConfig: undefined,\r\n extraPlacementInfo: undefined,\r\n },\r\n optionalAspectRatio: null,\r\n updateImageListCallback: _.noop,\r\n isStoreAppProng: false,\r\n isStoreAppSpotLight: false,\r\n isAd: false,\r\n isStockImageEnabled: true,\r\n isStoreAppTransparentLogo: false,\r\n isMMAV2Enabled: false,\r\n showCopilotOptionForImage: false,\r\n customAssetLibraryEventHandler: null,\r\n isLinkedInAd: false,\r\n customPreviewTexts: undefined,\r\n customOnEditImage: null,\r\n customOnSaveEditImage: null,\r\n onRenderAllowedAspectRatioControl: null,\r\n isAudienceAd: false,\r\n supportImageUpscale: false,\r\n isImageFittingEnabled: false,\r\n isUnifiedAppCampaignWindowsStore: false,\r\n isPMaxAspectRatiosV2Enabled: false,\r\n isAdPreviewRefreshEnabled: false,\r\n};\r\n\r\nexport const ValidatedImageExperienceWrapper = withInstrumentation(withPreference(withCustomValidation(ImageExperienceWrapperInternal)));\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useNeedsAttentionForAdapter } from '@bingads-webui-campaign-react/attention-beacon';\r\n\r\nexport const ImageListPortalBeaconAdapter = (WrappedComponent) => {\r\n const HOC = ({\r\n containerState,\r\n isLogos,\r\n validationProps,\r\n attentionBeaconAdapterProps: attentionBeaconAdapterPropsFromProps,\r\n ...restProps\r\n }) => {\r\n const {\r\n imageAssetsLoadFailure,\r\n imageErrors,\r\n logoErrors,\r\n isDirty,\r\n } = containerState;\r\n\r\n const errorMessages = isLogos ? logoErrors : imageErrors;\r\n\r\n const needsAttentionLocal = useMemo(() => {\r\n const showValidationError = (isDirty || validationProps.alwaysShowError) && !_.isEmpty(errorMessages);\r\n return imageAssetsLoadFailure || showValidationError;\r\n }, [errorMessages, imageAssetsLoadFailure, isDirty, validationProps.alwaysShowError]);\r\n\r\n const { attentionBeaconAdapterProps } = useNeedsAttentionForAdapter({ needsAttentionLocal, attentionBeaconAdapterProps: attentionBeaconAdapterPropsFromProps });\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n isLogos: PropTypes.bool.isRequired,\r\n containerState: PropTypes.shape({\r\n imageAssetsLoadFailure: PropTypes.bool,\r\n imageErrors: PropTypes.arrayOf(PropTypes.string),\r\n logoErrors: PropTypes.arrayOf(PropTypes.string),\r\n isDirty: PropTypes.bool,\r\n }).isRequired,\r\n validationProps: PropTypes.shape({\r\n alwaysShowError: PropTypes.bool,\r\n }),\r\n attentionBeaconAdapterProps: PropTypes.shape({\r\n onAdapterNeedsAttentionChange: PropTypes.func.isRequired,\r\n }).isRequired,\r\n };\r\n\r\n HOC.defaultProps = {\r\n validationProps: {},\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `ValidationBeaconAdapter(${getDisplayName(WrappedComponent)})`;\r\n HOC.isAttentionBeaconAdapter = true;\r\n\r\n return HOC;\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Loading } from '@bingads-webui-campaign-react/loading';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { FocusableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { withFormError, withAlwaysShowError, codeIs, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { ImageListPortalBeaconAdapter } from './image-list-portal-beacon-adapter';\r\n\r\nimport { getStyles } from './style';\r\n\r\nexport const ImageListPortalContainer = (props) => {\r\n const {\r\n i18n,\r\n containerRef,\r\n containerState,\r\n isLogos,\r\n validationProps,\r\n } = props;\r\n\r\n const {\r\n imageAssetsLoadPending,\r\n imageAssetsLoadFailure,\r\n imageErrors,\r\n logoErrors,\r\n isDirty,\r\n imageListSizeChange,\r\n } = containerState;\r\n\r\n const errorMessages = isLogos ? logoErrors : imageErrors;\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const ariaAnnounceMessage = useMemo(() => {\r\n if (imageListSizeChange === 0) {\r\n return '';\r\n } else if (imageListSizeChange === 1) {\r\n return i18n.getString(_TL_('One image added'));\r\n } else if (imageListSizeChange === -1) {\r\n return i18n.getString(_TL_('One image removed'));\r\n } else if (imageListSizeChange > 1) {\r\n return i18n.getString(_TL_('{{count}} images added'), { count: imageListSizeChange });\r\n }\r\n\r\n return i18n.getString(_TL_('{{count}} images removed'), { count: Math.abs(imageListSizeChange) });\r\n }, [imageListSizeChange, i18n]);\r\n\r\n\r\n const loadingImagesSpinner = useMemo(() => (\r\n
\r\n \r\n
\r\n ), [classes.imageListLoadingContainer, i18n]);\r\n\r\n const loadingImageError = useMemo(() => (\r\n
\r\n )}\r\n dismissible={false}\r\n />\r\n
\r\n ), [classes.imageListErrorContainer, i18n]);\r\n\r\n const imageListContainer = useMemo(() => (\r\n
\r\n
\r\n {ariaAnnounceMessage}\r\n \r\n
), [classes.imageExperienceContainer, classes.ariaAnnounce, containerRef, errorMessages, isDirty, validationProps.alwaysShowError, imageListSizeChange]);\r\n\r\n if (imageAssetsLoadPending) {\r\n return loadingImagesSpinner;\r\n }\r\n\r\n if (imageAssetsLoadFailure) {\r\n return loadingImageError;\r\n }\r\n\r\n return imageListContainer;\r\n};\r\n\r\nImageListPortalContainer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n containerRef: PropTypes.shape({}).isRequired,\r\n containerState: PropTypes.shape({}),\r\n isLogos: PropTypes.bool.isRequired,\r\n validationProps: PropTypes.shape({\r\n alwaysShowError: PropTypes.bool,\r\n }),\r\n};\r\n\r\nImageListPortalContainer.defaultProps = {\r\n containerState: {},\r\n validationProps: {},\r\n};\r\n\r\nexport const ImageListPortalContainerWithControlErrorHandling =\r\n withAlwaysShowError(withControlErrorHandling(ImageListPortalContainer, [FocusableActuator], [ImageListPortalBeaconAdapter]));\r\n\r\n// DuplicateImage should only occure for logo (as it currently lack proper handling for adding duplicate images in some scenarios. This should not occur on image list)\r\nexport const LogoListPortalContainerWithControlErrorHandling =\r\n withFormError(withAlwaysShowError(withControlErrorHandling(ImageListPortalContainer, [FocusableActuator], [ImageListPortalBeaconAdapter])), { filter: entityIs('assetGroup') && propertyIs('Images') && codeIs('DuplicateImage') });\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getImagesFromImagesVm } from './shared';\r\nimport { getSummaryCardStyles } from './style';\r\n\r\nconst MaxThumbnails = 5;\r\n\r\nexport const ImageListSummaryCardDetails = (props) => {\r\n const {\r\n images, isLogos, i18n, isPortrait, videos, isVideos,\r\n } = props;\r\n\r\n const imageList = getImagesFromImagesVm(images);\r\n\r\n let noDataString;\r\n if (isLogos) {\r\n noDataString = _TL_('No logos');\r\n } else if (isVideos) {\r\n noDataString = _TL_('No videos');\r\n } else {\r\n noDataString = _TL_('No images');\r\n }\r\n\r\n const thumbnails = _.reduce(\r\n imageList,\r\n (memo, image) => {\r\n const firstImg = _.first(image);\r\n\r\n if (isPortrait && firstImg.isPortrait) {\r\n return firstImg.isPortrait === isPortrait ? [...memo, firstImg.ThumbnailUrl] : [...memo];\r\n }\r\n return firstImg.isLogo === isLogos ? [...memo, firstImg.ThumbnailUrl] : [...memo];\r\n },\r\n []\r\n );\r\n\r\n const videoThumbnails = videos.map(video => video.thumbnailUrl);\r\n const allThumbnails = [...thumbnails, ...videoThumbnails];\r\n\r\n const moreMediaCount = allThumbnails.length - MaxThumbnails;\r\n const thumbnailsToDisplay = allThumbnails.slice(0, MaxThumbnails);\r\n\r\n const classes = useDefaultStyles(getSummaryCardStyles);\r\n\r\n return (\r\n
\r\n {thumbnailsToDisplay.map(url => (\"\"))}\r\n {moreMediaCount > 0 && ({i18n.getString(_TL_('+{{count}} more'), { count: moreMediaCount })})}\r\n {allThumbnails.length === 0 && ({i18n.getString(noDataString)})}\r\n
\r\n );\r\n};\r\n\r\nImageListSummaryCardDetails.propTypes = {\r\n images: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n isLogos: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isPortrait: PropTypes.bool,\r\n isVideos: PropTypes.bool,\r\n videos: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.number.isRequired,\r\n idString: PropTypes.string.isRequired,\r\n thumbnailUrl: PropTypes.string.isRequired,\r\n })),\r\n};\r\n\r\nImageListSummaryCardDetails.defaultProps = {\r\n isPortrait: false,\r\n isVideos: false,\r\n videos: [],\r\n};\r\n","import React, { useCallback, useMemo, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Pivot, PivotItem } from '@fluentui/react';\r\nimport { Tab, TabList } from '@fluentui/react-components';\r\nimport { AdPreviewSurface } from './shared';\r\n\r\nexport const PerfMaxAdPreviewControls = (props) => {\r\n const {\r\n onSurfaceChange,\r\n onPlacementFilterChange,\r\n permissions,\r\n showAdPreviewControlsV2 = false,\r\n } = props;\r\n\r\n const [surfaceChoice, setSurfaceChoice] = useState('Msn');\r\n\r\n const surfaceMap = useMemo(() => {\r\n if (showAdPreviewControlsV2) {\r\n return ({\r\n [AdPreviewSurface.Msn]: ['msan_191x100', 'msan_1x1', 'mma_169x100', 'mma_124x100', 'mma_153x100', 'edge_201x100'],\r\n [AdPreviewSurface.Bing]: ['mma_191x100', 'bing_text'],\r\n [AdPreviewSurface.Outlook]: ['outlook_text_mobile', 'outlook_text_web'],\r\n });\r\n }\r\n return ({\r\n Bing: ['mma_191x100', 'bing_text'],\r\n Msn: ['msan_191x100', 'msan_1x1', 'edge_178x100', 'msan_150x100', 'msan_133x100', 'mma_4x1', 'mma_1x2'],\r\n Edge: ['mma_191x100', 'edge_178x100'],\r\n Outlook: ['outlook_text_mobile', 'outlook_text_web'],\r\n });\r\n }, [showAdPreviewControlsV2]);\r\n\r\n const placementFilterByPreviewControlState = useCallback((placemenet) => {\r\n const { key } = placemenet;\r\n const surfaceList = surfaceMap[surfaceChoice];\r\n\r\n return _.contains(surfaceList, key);\r\n }, [surfaceChoice, surfaceMap]);\r\n\r\n useEffect(() => {\r\n onPlacementFilterChange(placementFilterByPreviewControlState);\r\n }, [onPlacementFilterChange, placementFilterByPreviewControlState]);\r\n\r\n useEffect(() => {\r\n onSurfaceChange(surfaceChoice);\r\n }, [onSurfaceChange, surfaceChoice]);\r\n\r\n return (\r\n
\r\n setSurfaceChoice(item.props.itemKey)}>\r\n \r\n \r\n {\r\n !showAdPreviewControlsV2 && (\r\n \r\n )\r\n }\r\n \r\n {\r\n permissions && permissions.dynamic.PMaxVideo && (\r\n \r\n )\r\n }\r\n \r\n
);\r\n};\r\n\r\nPerfMaxAdPreviewControls.propTypes = {\r\n onSurfaceChange: PropTypes.func.isRequired,\r\n onPlacementFilterChange: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n PMaxVideo: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n showAdPreviewControlsV2: PropTypes.bool,\r\n};\r\n\r\nexport const CustomAdPreviewControls = (props) => {\r\n const {\r\n onSurfaceChange,\r\n onPlacementFilterChange,\r\n customSurfaceKeys,\r\n i18n,\r\n } = props;\r\n\r\n const [surfaceChoice, setSurfaceChoice] = useState(_.keys(customSurfaceKeys)[0]);\r\n\r\n const placementFilterByPreviewControlState = useCallback((placement) => {\r\n const { key } = placement;\r\n const surfaceMap = _.keys(customSurfaceKeys);\r\n\r\n const surfaceList = surfaceMap[surfaceChoice];\r\n\r\n return _.contains(surfaceList, key);\r\n }, [surfaceChoice, customSurfaceKeys]);\r\n\r\n useEffect(() => {\r\n onPlacementFilterChange(placementFilterByPreviewControlState);\r\n }, [onPlacementFilterChange, placementFilterByPreviewControlState]);\r\n\r\n useEffect(() => {\r\n onSurfaceChange(surfaceChoice);\r\n }, [onSurfaceChange, surfaceChoice]);\r\n\r\n return (\r\n
\r\n setSurfaceChoice(item.value)}\r\n defaultSelectedValue={_.keys(customSurfaceKeys)[0]}\r\n >\r\n {\r\n Object.keys(customSurfaceKeys).map(key => (\r\n \r\n {i18n.getString(customSurfaceKeys[key].title)}\r\n \r\n ))\r\n }\r\n \r\n
\r\n );\r\n};\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { usePreviewCarouselLayout } from '@bingads-webui-campaign-react/ad-placement-factory';\r\nimport { AdPlacementsGroupType } from '@bingads-webui-campaign-react/ad-placement-consts';\r\nimport { PerfMaxAdPreviewControls } from './ad-preview-controls';\r\nimport previewPlaceholder from '../media/preview-placeholder.png';\r\nimport { getAdPreviewStyles, getCarouselControlsAndIndicatorsStyleBySurface } from './style';\r\nimport { pmaxRequiredAspectRatios } from './shared';\r\n\r\nconst shortHeadlineMaxLength = 30;\r\nconst longHeadlineMaxLength = 90;\r\nconst descriptionMaxLength = 90;\r\n\r\nexport const PerfMaxAdPreview = (props) => {\r\n const {\r\n imageList,\r\n updateImageList,\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n isMSANAd,\r\n enableAutoPlay,\r\n placementCustomizationPredicate,\r\n adPlacementsGroupType = AdPlacementsGroupType.perfMax,\r\n hideHeaderButtons,\r\n isAppCampaignPreview,\r\n } = props;\r\n\r\n const adDataProps = ['shortHeadline', 'longHeadline', 'description', 'url', 'displayUrl', 'callToAction', 'businessName'];\r\n const currentAdData = _.pick(props, adDataProps);\r\n const [adData, setAdData] = React.useState(currentAdData);\r\n\r\n const isAdDataUpdated = useCallback(newAdData => (newAdData.length !== adData.length || !_.isMatch(newAdData, adData)), [adData]);\r\n const debouncedSetAdData = useMemo(() => _.debounce(setAdData, 500), []);\r\n if (isAdDataUpdated(currentAdData)) {\r\n debouncedSetAdData.cancel();\r\n debouncedSetAdData(currentAdData);\r\n }\r\n\r\n const getImageIndexFromId = useCallback((id) => {\r\n const index = _.findIndex(imageList, placement => _.first(placement).id === id && !_.first(placement).isLogo && !_.first(placement).isPortrait);\r\n return index >= 0 ? index : null;\r\n }, [imageList]);\r\n\r\n const getPreviewImageIndex = useCallback((idRequestedByImageExperience) => {\r\n let index = getImageIndexFromId(idRequestedByImageExperience);\r\n\r\n if (!index) {\r\n const firstImageIndex = _.findIndex(imageList, placement => !_.first(placement).isLogo && !_.first(placement).isPortrait);\r\n index = firstImageIndex >= 0 ? firstImageIndex : null;\r\n }\r\n\r\n return index;\r\n }, [getImageIndexFromId, imageList]);\r\n\r\n const { previewImageId } = previewImagesSharedState;\r\n\r\n let imagesToDisplay = [];\r\n let previewImageIndex = null;\r\n if (imageList && isAppCampaignPreview) {\r\n // for app campaign, always send all images for preview\r\n imagesToDisplay = imageList.flat();\r\n } else if (imageList && imageList.length > 0) {\r\n previewImageIndex = getPreviewImageIndex(previewImageId);\r\n imagesToDisplay = _.isNumber(previewImageIndex) ? imageList[previewImageIndex] : [];\r\n }\r\n\r\n const canExcludeAspectRatio = useCallback((typeToCheck) => {\r\n const minCount = pmaxRequiredAspectRatios[typeToCheck];\r\n if (!minCount) {\r\n return true;\r\n }\r\n\r\n let typeCount = 0;\r\n _.each(imageList, imageArray =>\r\n _.each(imageArray, (imageObj) => {\r\n if (imageObj.isIncluded && typeToCheck === imageObj.type) {\r\n typeCount += 1;\r\n }\r\n }));\r\n\r\n return (typeCount - 1) >= minCount;\r\n }, [imageList]);\r\n\r\n const getIsRequiredByIndex = useCallback((index, template) => {\r\n const { type } = template;\r\n return !canExcludeAspectRatio(type);\r\n }, [canExcludeAspectRatio]);\r\n\r\n const onAddAspectRatio = useCallback((type) => {\r\n const newImageList = [...imageList];\r\n _.find(newImageList[previewImageIndex], imagePlacement => imagePlacement.type === type).isIncluded = true;\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, isImageListUpdatedByPreview: true });\r\n updateImageList(newImageList);\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState, updateImageList]);\r\n\r\n const onRemoveAspectRatio = useCallback((type) => {\r\n const newImageList = [...imageList];\r\n _.find(newImageList[previewImageIndex], imagePlacement => imagePlacement.type === type).isIncluded = false;\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, isImageListUpdatedByPreview: true });\r\n updateImageList(newImageList);\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState, updateImageList]);\r\n\r\n const onEdit = useCallback((type) => {\r\n const cropImageObj = _.find(imageList[previewImageIndex], imagePlacement => imagePlacement.type === type);\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, cropImageObj });\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState]);\r\n\r\n const truncatedAdData = useMemo(() => {\r\n const validAdData = { ...adData };\r\n\r\n if (validAdData.shortHeadline && validAdData.shortHeadline.length > shortHeadlineMaxLength) {\r\n validAdData.shortHeadline = validAdData.shortHeadline.substring(0, shortHeadlineMaxLength - 1);\r\n }\r\n\r\n if (validAdData.longHeadline && validAdData.longHeadline.length > longHeadlineMaxLength) {\r\n validAdData.longHeadline = validAdData.longHeadline.substring(0, longHeadlineMaxLength - 1);\r\n }\r\n\r\n if (validAdData.description && validAdData.description.length > descriptionMaxLength) {\r\n validAdData.description = validAdData.description.substring(0, descriptionMaxLength - 1);\r\n }\r\n\r\n return validAdData;\r\n }, [adData]);\r\n\r\n const [placementFilter, setPlacementFilter] = useState({ func: () => true });\r\n\r\n const getFirstElement = useCallback((item) => {\r\n if (_.isArray(item)) {\r\n return _.first(item);\r\n }\r\n return item;\r\n }, []);\r\n\r\n const getLogo = useCallback(() => {\r\n const logos = _.filter(imageList, imageArr =>\r\n getFirstElement(imageArr).isLogo === true);\r\n\r\n return _.first(logos);\r\n }, [getFirstElement, imageList]);\r\n\r\n const { PreviewCarouselLayout } = usePreviewCarouselLayout({\r\n groupType: adPlacementsGroupType,\r\n placementFilterPredicate: placementFilter.func,\r\n customDefaultImage: previewPlaceholder,\r\n placementCustomizationPredicate: placementCustomizationPredicate || null,\r\n });\r\n\r\n const classes = useDefaultStyles(getAdPreviewStyles);\r\n const [surfaceChoice, setSurfaceChoice] = useState({});\r\n const styleOverrides = useMemo(() => getCarouselControlsAndIndicatorsStyleBySurface(surfaceChoice), [surfaceChoice]);\r\n\r\n const onPlacementFilterChange = useCallback((newPlacementFilter) => {\r\n setPlacementFilter({ func: newPlacementFilter });\r\n }, []);\r\n\r\n return (\r\n
\r\n {!isMSANAd &&\r\n }\r\n logo.isIncluded)}\r\n headerButtonProps={{\r\n onAddAspectRatio,\r\n onRemoveAspectRatio,\r\n onEdit,\r\n }}\r\n adData={truncatedAdData}\r\n getIsRequiredByIndex={getIsRequiredByIndex}\r\n enableAutoPlay={_.isNull(enableAutoPlay) ? isMSANAd : enableAutoPlay}\r\n styleOverrides={styleOverrides}\r\n hideHeaderButtons={hideHeaderButtons}\r\n />\r\n
);\r\n};\r\n\r\nPerfMaxAdPreview.propTypes = {\r\n imageList: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))),\r\n updateImageList: PropTypes.func.isRequired,\r\n previewImagesSharedState: PropTypes.shape({\r\n previewImageId: PropTypes.shape({}),\r\n }).isRequired,\r\n setPreviewImagesSharedState: PropTypes.func.isRequired,\r\n isMSANAd: PropTypes.bool,\r\n enableAutoPlay: PropTypes.bool,\r\n placementCustomizationPredicate: PropTypes.func,\r\n adPlacementsGroupType: PropTypes.string,\r\n hideHeaderButtons: PropTypes.bool,\r\n isAppCampaignPreview: PropTypes.bool,\r\n};\r\n\r\nPerfMaxAdPreview.defaultProps = {\r\n imageList: null,\r\n isMSANAd: false,\r\n enableAutoPlay: null,\r\n placementCustomizationPredicate: null,\r\n adPlacementsGroupType: AdPlacementsGroupType.perfMax,\r\n hideHeaderButtons: false,\r\n isAppCampaignPreview: false,\r\n};\r\n","import classNames from 'classnames';\r\nimport React, { useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport {\r\n UAPPlacementTypeAlias as EPT,\r\n useImageExperienceAdPreviewModel,\r\n AdPreviewCarouselLayoutEx,\r\n UAPAdExtensionType as EAdExtensionType,\r\n AdPreviewAdExtensionComponents,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { PerfMaxAdPreviewControls } from './ad-preview-controls';\r\nimport previewPlaceholder from '../media/preview-placeholder.png';\r\nimport { getAdPreviewStyles } from './style';\r\nimport {\r\n pmaxRequiredAspectRatios,\r\n audienceMMAV2RequiredAspectRatios,\r\n adPreviewConfig as PMaxAdPreviewConfig,\r\n adPreviewConfigV2 as PMaxAdPreviewConfigV2,\r\n adPreviewConfigV3 as PMaxAdPreviewConfigV3,\r\n} from './shared';\r\n\r\nconst shortHeadlineMaxLength = 30;\r\nconst longHeadlineMaxLength = 90;\r\nconst descriptionMaxLength = 90;\r\n\r\nconst getPMaxExtraPlacementInfo = hasLogo => ({\r\n [EPT.PMax.AudienceWideImage]: {\r\n aspectRatioUIString: '1.91:1',\r\n previewTitle: _TL_('MSN feed'),\r\n },\r\n [EPT.PMax.MSEdgeSingleCarousel]: {\r\n aspectRatioUIString: '1.78:1',\r\n previewTitle: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [EPT.PMax.MSNInArticle]: {\r\n aspectRatioUIString: '1.5:1',\r\n previewTitle: _TL_('MSN in-article ad'),\r\n },\r\n [EPT.PMax.AudienceSquareImage]: {\r\n aspectRatioUIString: '1:1',\r\n previewTitle: _TL_('MSN square image'),\r\n },\r\n [EPT.PMax.MSNSmallHeadline]: {\r\n aspectRatioUIString: '1.33:1',\r\n previewTitle: _TL_('MSN small headline'),\r\n },\r\n [EPT.PMax.MMAWideImage]: {\r\n aspectRatioUIString: '4:1',\r\n previewTitle: _TL_('Wide image'),\r\n },\r\n [EPT.PMax.MMAVerticalImage]: {\r\n aspectRatioUIString: '1:2',\r\n previewTitle: _TL_('Vertical image'),\r\n },\r\n [EPT.PMax.MMALandscapeImage]: {\r\n aspectRatioUIString: '1.91:1',\r\n previewTitle: _TL_('Landscape Image Multimedia Ad'),\r\n hasLogo,\r\n },\r\n [EPT.BingSearch.Text]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Bing search ad'),\r\n hasLogo,\r\n },\r\n [EPT.Outlook.Mobile]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Microsoft Outlook web (mobile)'),\r\n hasLogo,\r\n },\r\n [EPT.Outlook.Web]: {\r\n aspectRatioUIString: '',\r\n previewTitle: _TL_('Microsoft Outlook web (computer)'),\r\n hasLogo,\r\n },\r\n [EPT.PMax.MMAV2MSEdgeCarousel]: {\r\n aspectRatioUIString: '2.01:1',\r\n previewTitle: _TL_('Microsoft Edge carousel'),\r\n },\r\n [EPT.PMax.MMAV2MSNSingleCarousel]: {\r\n aspectRatioUIString: '1.69:1',\r\n previewTitle: _TL_('MSN Single Carousel'),\r\n },\r\n [EPT.PMax.MMAV2MSNRestoday]: {\r\n aspectRatioUIString: '1.24:1',\r\n previewTitle: _TL_('MSN Restoday'),\r\n },\r\n [EPT.PMax.MMAV2MSNPartnerStripe]: {\r\n aspectRatioUIString: '1.53:1',\r\n previewTitle: _TL_('MSN Partner Stripe'),\r\n },\r\n [EPT.PMax.MMAV2MSNRiver]: {\r\n aspectRatioUIString: '1.91:1',\r\n previewTitle: _TL_('MSN feed'),\r\n hasLogo,\r\n },\r\n});\r\n\r\nconst AdExtensionTypes = [\r\n EAdExtensionType.SiteLink,\r\n EAdExtensionType.Callout,\r\n EAdExtensionType.Promotion,\r\n EAdExtensionType.StructuredSnippet,\r\n EAdExtensionType.Price,\r\n];\r\n\r\nexport const getExtensionData = (extensions, extensionType, extensionFormatters) => {\r\n switch (extensionType) {\r\n case EAdExtensionType.SiteLink: {\r\n const siteLinks = _.result(extensions, EAdExtensionType.SiteLink, []).slice(0, 4); // only show 4 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.SiteLink])) {\r\n return siteLinks.map(siteLink => extensionFormatters[EAdExtensionType.SiteLink](siteLink));\r\n }\r\n return siteLinks;\r\n }\r\n case EAdExtensionType.Callout: {\r\n const callOuts = _.result(extensions, EAdExtensionType.Callout, []).slice(0, 4); // only show 4 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.Callout])) {\r\n return callOuts.map(callOut => extensionFormatters[EAdExtensionType.Callout](callOut));\r\n }\r\n return callOuts;\r\n }\r\n case EAdExtensionType.Promotion: {\r\n const promotions = _.result(extensions, EAdExtensionType.Promotion, []).slice(0, 1); // only show 1 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.Promotion])) {\r\n return promotions.map(promotion => extensionFormatters[EAdExtensionType.Promotion](promotion));\r\n }\r\n return promotions;\r\n }\r\n case EAdExtensionType.StructuredSnippet: {\r\n const structuredSnippets = _.result(extensions, EAdExtensionType.StructuredSnippet, []).slice(0, 1).map(({ Category, Texts }) => ({\r\n Category,\r\n Texts: Texts.slice(0, 3),\r\n })); // only show 3 values at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.StructuredSnippet])) {\r\n return structuredSnippets.map(structuredSnippet => extensionFormatters[EAdExtensionType.StructuredSnippet](structuredSnippet));\r\n }\r\n return structuredSnippets;\r\n }\r\n case EAdExtensionType.Price: {\r\n const prices = _.result(extensions, EAdExtensionType.Price, []).reduce((acc, { TableRows }) => [...acc, ...TableRows], []).slice(0, 8); // only show 8 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.Price])) {\r\n return prices.map(price => extensionFormatters[EAdExtensionType.Price](price));\r\n }\r\n return prices;\r\n }\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nexport const PerfMaxAdPreview = (props) => {\r\n const {\r\n extraPlacementInfo: extraPlacementInfoProp,\r\n imageList,\r\n updateImageList,\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n isMSANAd,\r\n enableAutoPlay,\r\n i18n,\r\n logoPreviewEnabled,\r\n customPlacementContainerClassName,\r\n customPlacementHeaderClassName,\r\n isAdExtensionPreviewEnabled,\r\n extensionsAssociations,\r\n extensionFormatters,\r\n isMMAV2Enabled,\r\n isImageFittingEnabled,\r\n activity,\r\n isPMaxAspectRatiosV2Enabled,\r\n isAdPreviewRefreshEnabled,\r\n hotspots,\r\n } = props;\r\n let { adPreviewConfig } = props;\r\n\r\n if (adPreviewConfig === undefined) {\r\n const refreshPmaxAdPreviewConfig = isAdPreviewRefreshEnabled ? PMaxAdPreviewConfigV3 : PMaxAdPreviewConfigV2;\r\n adPreviewConfig = isPMaxAspectRatiosV2Enabled ? refreshPmaxAdPreviewConfig : PMaxAdPreviewConfig;\r\n }\r\n\r\n const extraPlacementInfo = useMemo(() => {\r\n if (extraPlacementInfoProp) {\r\n return extraPlacementInfoProp;\r\n }\r\n return getPMaxExtraPlacementInfo(logoPreviewEnabled);\r\n }, [extraPlacementInfoProp, logoPreviewEnabled]);\r\n\r\n const hasSurfaceChoicePivot = !isMSANAd;\r\n\r\n const adDataProps = ['shortHeadline', 'longHeadline', 'description', 'url', 'displayUrl', 'callToAction', 'businessName'];\r\n const currentAdData = _.pick(props, adDataProps);\r\n const [adData, setAdData] = React.useState(currentAdData);\r\n\r\n const isAdDataUpdated = useCallback(newAdData => (newAdData.length !== adData.length || !_.isMatch(newAdData, adData)), [adData]);\r\n const debouncedSetAdData = useMemo(() => _.debounce(setAdData, 500), []);\r\n if (isAdDataUpdated(currentAdData)) {\r\n debouncedSetAdData.cancel();\r\n debouncedSetAdData(currentAdData);\r\n }\r\n\r\n const getImageIndexFromId = useCallback((id) => {\r\n const index = _.findIndex(imageList, placement => _.first(placement).id === id && !_.first(placement).isLogo && !_.first(placement).isPortrait);\r\n return index >= 0 ? index : null;\r\n }, [imageList]);\r\n\r\n const getPreviewImageIndex = useCallback((idRequestedByImageExperience) => {\r\n let index = getImageIndexFromId(idRequestedByImageExperience);\r\n\r\n if (!index) {\r\n const firstImageIndex = _.findIndex(imageList, placement => !_.first(placement).isLogo);\r\n index = firstImageIndex >= 0 ? firstImageIndex : null;\r\n }\r\n\r\n return index;\r\n }, [getImageIndexFromId, imageList]);\r\n\r\n const { previewImageId, previewLogoId } = previewImagesSharedState;\r\n\r\n let previewImageIndex = null;\r\n if (imageList && imageList.length > 0) {\r\n previewImageIndex = getPreviewImageIndex(previewImageId);\r\n }\r\n\r\n const requiredAspectRatios = isMMAV2Enabled ? audienceMMAV2RequiredAspectRatios : pmaxRequiredAspectRatios;\r\n const canExcludeAspectRatio = useCallback((typeToCheck) => {\r\n const minCount = requiredAspectRatios[typeToCheck];\r\n if (!minCount) {\r\n return true;\r\n }\r\n\r\n let typeCount = 0;\r\n _.each(imageList, imageArray =>\r\n _.each(imageArray, (imageObj) => {\r\n if (imageObj.isIncluded && typeToCheck === imageObj.type) {\r\n typeCount += 1;\r\n }\r\n }));\r\n\r\n return (typeCount - 1) >= minCount;\r\n }, [imageList]);\r\n\r\n const onAddAspectRatio = useCallback((type) => {\r\n const newImageList = [...imageList];\r\n _.find(newImageList[previewImageIndex], imagePlacement => imagePlacement.type === type).isIncluded = true;\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, isImageListUpdatedByPreview: true, editingPlacementType: '' });\r\n updateImageList(newImageList);\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState, updateImageList]);\r\n\r\n const onRemoveAspectRatio = useCallback((type) => {\r\n const newImageList = [...imageList];\r\n _.find(newImageList[previewImageIndex], imagePlacement => imagePlacement.type === type).isIncluded = false;\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, isImageListUpdatedByPreview: true, editingPlacementType: '' });\r\n updateImageList(newImageList);\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState, updateImageList]);\r\n\r\n const onEdit = useCallback((type, placementType) => {\r\n if (activity && activity.signal) {\r\n activity.signal(`Perf max ad preview: re-crop clicked, isMSANAd:${isMSANAd}, type:${type}`);\r\n }\r\n const cropImageObj = _.find(imageList[previewImageIndex], imagePlacement => imagePlacement.type === type);\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, cropImageObj, editingPlacementType: placementType });\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState]);\r\n\r\n const truncatedAdData = useMemo(() => {\r\n const validAdData = { ...adData };\r\n\r\n if (validAdData.shortHeadline && validAdData.shortHeadline.length > shortHeadlineMaxLength) {\r\n validAdData.shortHeadline = validAdData.shortHeadline.substring(0, shortHeadlineMaxLength - 1);\r\n }\r\n\r\n if (validAdData.longHeadline && validAdData.longHeadline.length > longHeadlineMaxLength) {\r\n validAdData.longHeadline = validAdData.longHeadline.substring(0, longHeadlineMaxLength - 1);\r\n }\r\n\r\n if (validAdData.description && validAdData.description.length > descriptionMaxLength) {\r\n validAdData.description = validAdData.description.substring(0, descriptionMaxLength - 1);\r\n }\r\n\r\n return _.defaults(validAdData, {\r\n shortHeadline: i18n.getString(_TL_('Short headline')),\r\n longHeadline: i18n.getString(_TL_('Long headline')),\r\n description: i18n.getString(_TL_('Ad text')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n callToAction: i18n.getString(_TL_('Please select language first')),\r\n url: 'https://example.com',\r\n });\r\n }, [adData, i18n]);\r\n\r\n const classes = useDefaultStyles(getAdPreviewStyles);\r\n const [surfaceChoice, setSurfaceChoice] = useState({});\r\n // use extensionCount and extensionRerenderFlag to force rerender when extension count decreases\r\n const extensionCount = useRef(0);\r\n const [extensionRerenderFlag, setExtensionRerenderFlag] = useState(0);\r\n\r\n const {\r\n onUpdateImageExperienceImageList,\r\n imageExperiencePlacementSets: placementSets,\r\n } = useImageExperienceAdPreviewModel(adPreviewConfig, previewPlaceholder, isImageFittingEnabled);\r\n\r\n useEffect(() => {\r\n // get correct image index fitler out logo\r\n const imageListWithoutLogo = _.compact(_.map(imageList, (placementList) => {\r\n const placements = _.filter(placementList, placement => !placement.isLogo && !placement.isPortrait);\r\n return !_.isEmpty(placements) ? placements : null;\r\n })) || [];\r\n\r\n // get current preview image\r\n const imageToPreview = _.find(imageListWithoutLogo, (placementList) => {\r\n const {\r\n id, idString, baseId, baseImage,\r\n } = _.first(placementList) || {};\r\n const { id: baseImageId, idString: baseImageIdString } = baseImage || {};\r\n return id === previewImageId || idString === previewImageId || baseId === previewImageId || baseImageId === previewImageId || baseImageIdString === previewImageId;\r\n }) || imageListWithoutLogo[0];\r\n\r\n _.debounce(onUpdateImageExperienceImageList, 100)([imageToPreview], null);\r\n // !! when *previewImageSharedState* changes update the image list, this component relies on in-place updates to imageList\r\n }, [previewImagesSharedState, imageList, onUpdateImageExperienceImageList, previewImageId]);\r\n\r\n const curPlacementList = useMemo(() => {\r\n const { placementList: pl } = _.find(placementSets, ({ placementSetName }) => !hasSurfaceChoicePivot || placementSetName === surfaceChoice) || {};\r\n if (isAdExtensionPreviewEnabled && surfaceChoice === 'Bing') {\r\n const bingSearchAdPlacement = _.find(pl, ({ placementMeta }) => placementMeta.placementType === EPT.BingSearch.Text);\r\n // extend the placement list to add new placements for ad extensions\r\n if (bingSearchAdPlacement) {\r\n const placementListWithExtensions = [\r\n ...pl,\r\n // add additional property to identity the extension type to render\r\n ...AdExtensionTypes.reduce((pls, adExtensionType) => {\r\n if (_.has(extensionsAssociations, adExtensionType) && extensionsAssociations[adExtensionType].length > 0) {\r\n pls.push({ ...bingSearchAdPlacement, adExtensionType });\r\n }\r\n return pls;\r\n }, []),\r\n ];\r\n const preExtensionCount = extensionCount.current;\r\n extensionCount.current = placementListWithExtensions.length - pl.length;\r\n if (preExtensionCount > extensionCount.current) {\r\n setExtensionRerenderFlag(prevState => (prevState + 1) % 1000);\r\n }\r\n return placementListWithExtensions;\r\n }\r\n }\r\n return pl;\r\n }, [extensionsAssociations, hasSurfaceChoicePivot, isAdExtensionPreviewEnabled, placementSets, surfaceChoice]);\r\n\r\n const isSizeValid = useCallback((placement) => {\r\n const { placementMeta, imageMeta } = placement || {};\r\n const { minSize } = placementMeta || {};\r\n const [minWidth, minHeight] = minSize || [];\r\n const { width, height } = imageMeta || {};\r\n return width >= minWidth && height >= minHeight;\r\n }, []);\r\n\r\n const getFirstElement = useCallback((item) => {\r\n if (_.isArray(item)) {\r\n return _.first(item);\r\n }\r\n return item;\r\n }, []);\r\n\r\n const curPreviewLogo = useMemo(() => {\r\n const allLogos = _.filter(imageList, imageArr => getFirstElement(imageArr).isLogo === true);\r\n let curLogos = previewLogoId && _.find(allLogos, logo => _.first(logo).Id === previewLogoId);\r\n curLogos = curLogos || _.first(allLogos);\r\n\r\n // currently only square logo is supported, 4x1 logo are ignored\r\n const curLogoRatio = _.find(curLogos, logo => logo.isIncluded === true && logo.type === 'Image1x1');\r\n return curLogoRatio;\r\n }, [getFirstElement, imageList, previewLogoId]);\r\n\r\n const renderAdExtensionPreivew = useCallback((placement, adExtensionType) => {\r\n const AdExtensionPreviewComponent = AdPreviewAdExtensionComponents[adExtensionType];\r\n if (AdExtensionPreviewComponent) {\r\n return ;\r\n }\r\n return null;\r\n }, [extensionFormatters, extensionsAssociations]);\r\n\r\n const onRenderPlacement = useCallback((placement, AdPlacementComponent) => {\r\n const {\r\n placementMeta, imageMeta, hasImageExperienceData, adExtensionType,\r\n } = placement || {};\r\n const isPlaceholderImage = imageMeta && (imageMeta.url === previewPlaceholder);\r\n const { minSize, placementType } = placementMeta || {};\r\n const [minWidth, minHeight] = minSize || [];\r\n const isValid = isSizeValid(placement);\r\n const {\r\n hasLogo, customClassName, imagePreviewHeight, previewTitle, disclaimerMessage,\r\n } = extraPlacementInfo[placementType] || {};\r\n\r\n return (\r\n
\r\n {hasImageExperienceData && !isValid &&\r\n \r\n {\r\n i18n.getString(_TL_('To include this aspect ratio, add a new image that is at least {{width}} x {{height}} pixels.'), {\r\n width: minWidth,\r\n height: minHeight,\r\n })\r\n }\r\n \r\n }\r\n \r\n {adExtensionType && renderAdExtensionPreivew(placement, adExtensionType)}\r\n \r\n {isMSANAd && previewTitle && (\r\n
{i18n.getString(previewTitle)}
\r\n )}\r\n {isMSANAd && disclaimerMessage && (\r\n
{i18n.getString(disclaimerMessage)}
\r\n )}\r\n
\r\n );\r\n }, [classes.adExtensionContainer, classes.placementContainerClassName, curPreviewLogo, customPlacementContainerClassName, extraPlacementInfo, i18n, isMSANAd, isSizeValid, renderAdExtensionPreivew, truncatedAdData]);\r\n\r\n const onRenderCarouselHeader = useCallback((placement) => {\r\n const { placementMeta, isPlacementIncluded, hasImageExperienceData } = placement || {};\r\n const { imageType, placementType } = placementMeta || {};\r\n if (!placementType) {\r\n return null;\r\n }\r\n const canBeExcluded = canExcludeAspectRatio(imageType);\r\n const {\r\n aspectRatioUIString, previewTitle, previewHeaderTitle, hideHeaderButtons = false,\r\n } = extraPlacementInfo[placementMeta.placementType] || {};\r\n const isValid = isSizeValid(placement);\r\n return (\r\n
\r\n {isMSANAd ? (\r\n
\r\n {previewHeaderTitle ? i18n.getString(previewHeaderTitle) : i18n.getString(previewTitle)}\r\n
\r\n ) : (\r\n
\r\n {aspectRatioUIString}\r\n {i18n.getString(previewTitle)}\r\n
\r\n )}\r\n {hasImageExperienceData && isValid && !hideHeaderButtons && (\r\n
\r\n {isPlacementIncluded && onEdit(imageType, placementType)} text={i18n.getString(_TL_('Edit aspect ratio'))} />}\r\n {isPlacementIncluded && onRemoveAspectRatio(imageType)} text={i18n.getString(_TL_('Exclude'))} disabled={!canBeExcluded} />}\r\n {!isPlacementIncluded && onAddAspectRatio(imageType)} text={i18n.getString(_TL_('Include'))} />}\r\n
\r\n )}\r\n
\r\n );\r\n }, [canExcludeAspectRatio, classes.carouselLayoutHeader, customPlacementHeaderClassName, extraPlacementInfo, i18n, isMSANAd, isSizeValid, onAddAspectRatio, onEdit, onRemoveAspectRatio]);\r\n\r\n const carouselLayoutClassName = useMemo(() => classNames(\r\n classes.carouselLayoutClassName,\r\n surfaceChoice === 'Msn' ? classes.carouselControlsMsn : classes.carouselControlsOthers\r\n ), [classes, surfaceChoice]);\r\n\r\n return (\r\n
\r\n {hasSurfaceChoicePivot &&\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nPerfMaxAdPreview.propTypes = {\r\n adPreviewConfig: PropTypes.arrayOf(PropTypes.shape({})),\r\n extraPlacementInfo: PropTypes.shape({}),\r\n imageList: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))),\r\n updateImageList: PropTypes.func.isRequired,\r\n previewImagesSharedState: PropTypes.shape({\r\n previewImageId: PropTypes.string,\r\n previewLogoId: PropTypes.string,\r\n }).isRequired,\r\n setPreviewImagesSharedState: PropTypes.func.isRequired,\r\n isMSANAd: PropTypes.bool,\r\n enableAutoPlay: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n logoPreviewEnabled: PropTypes.bool,\r\n customPlacementContainerClassName: PropTypes.string,\r\n customPlacementHeaderClassName: PropTypes.string,\r\n isAdExtensionPreviewEnabled: PropTypes.bool,\r\n extensionsAssociations: PropTypes.shape({}),\r\n extensionFormatters: PropTypes.shape({}),\r\n isMMAV2Enabled: PropTypes.bool,\r\n isImageFittingEnabled: PropTypes.bool,\r\n activity: PropTypes.shape({}),\r\n isPMaxAspectRatiosV2Enabled: PropTypes.bool,\r\n isAdPreviewRefreshEnabled: PropTypes.bool,\r\n};\r\n\r\nPerfMaxAdPreview.defaultProps = {\r\n adPreviewConfig: undefined,\r\n extraPlacementInfo: undefined,\r\n imageList: null,\r\n isMSANAd: false,\r\n enableAutoPlay: null,\r\n logoPreviewEnabled: false,\r\n customPlacementContainerClassName: undefined,\r\n customPlacementHeaderClassName: undefined,\r\n isAdExtensionPreviewEnabled: false,\r\n extensionsAssociations: {},\r\n extensionFormatters: {},\r\n isMMAV2Enabled: false,\r\n isImageFittingEnabled: false,\r\n activity: undefined,\r\n isPMaxAspectRatiosV2Enabled: false,\r\n isAdPreviewRefreshEnabled: false,\r\n};\r\n","import { AdPreviewOverideStylesByKey } from './shared';\r\n\r\nconst IndicatorWidth = 10;\r\nconst IndicatorsGap = 8;\r\n\r\nconst getIndicatorsWidth = placements => (placements * IndicatorWidth) + ((placements - 1) * IndicatorsGap);\r\n\r\nexport const getAdAssetsPreviewStyles = () => ({\r\n container: {\r\n position: 'sticky',\r\n top: '0',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n width: 'fit-content',\r\n maxWidth: '100%',\r\n\r\n '& .auto-height': {\r\n '& .carousel-inner': {\r\n height: 'auto !important',\r\n },\r\n },\r\n '& .new-preview-carousel-container-adprelib': {\r\n backgroundColor: '#ffffff',\r\n border: 'none',\r\n borderRadius: '4px',\r\n boxShadow: '0px 2px 4px 0px rgba(0, 0, 0, 0.10)',\r\n maxWidth: '420px',\r\n minWidth: 'unset !important',\r\n\r\n '& .ad-placement-card-preview.mma_191x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.mma_191x100.imagePreviewWidth,\r\n '& .text-container': {\r\n padding: '5px 12px 12px 12px',\r\n '& .short-headline': {\r\n wordWrap: 'break-word',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-card-preview.edge_178x100': {\r\n '& .card-parent': {\r\n '& .placement-card-content': {\r\n height: 'fit-content',\r\n width: 'fit-content',\r\n maxWidth: '100%',\r\n '& .text-container': {\r\n maxWidth: 'calc(100% - 25px)',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_191x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.msan_191x100.imagePreviewWidth,\r\n },\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_150x100': {\r\n '& .card-parent': {\r\n maxWidth: AdPreviewOverideStylesByKey.msan_150x100.imagePreviewWidth,\r\n },\r\n },\r\n\r\n '& .ad-placement-card-preview.msan_1x1': {\r\n padding: 20,\r\n },\r\n '& .ad-placement-card-preview.mma_4x1': {\r\n padding: 20,\r\n },\r\n '& .ad-placement-card-preview.mma_1x2': {\r\n padding: 20,\r\n maxWidth: AdPreviewOverideStylesByKey.mma_1x2.imagePreviewWidth,\r\n },\r\n '& .ad-placement-card-preview.msan_133x100': {\r\n padding: 20,\r\n },\r\n\r\n '& .ad-placement-card-preview.outlook_text_mobile': {\r\n boxSizing: 'content-box',\r\n maxWidth: 'calc(100% - 50px)',\r\n },\r\n\r\n '& .ad-placement-card-preview.outlook_text_web': {\r\n padding: '0px 8px',\r\n },\r\n },\r\n },\r\n 'container-l': {\r\n '& .new-preview-carousel-container-adprelib': {\r\n width: '100%',\r\n },\r\n },\r\n 'container-m': {\r\n '& .new-preview-carousel-container-adprelib': {\r\n width: '100%',\r\n },\r\n },\r\n 'container-s': {\r\n '& .new-preview-carousel-container-adprelib': {\r\n width: '100%',\r\n },\r\n },\r\n adExtensionContainer: {\r\n // todo: add styles for ad extension preview components if needed\r\n margin: 10,\r\n },\r\n placementContainerClassName: {\r\n opacity: '100%',\r\n },\r\n carouselLayoutHeader: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n '& .carousel-header-texts': {\r\n width: '100%',\r\n height: 24,\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n margin: '20px 8px 16px 24px',\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n lineHeight: '24px',\r\n '& .carousel-header-ratio': {\r\n color: 'rgb(50, 49, 48)',\r\n fontSize: 14,\r\n fontWeight: 700,\r\n marginRight: 8,\r\n },\r\n '& .carousel-header-title': {\r\n fontSize: 14,\r\n },\r\n },\r\n '& .ad-preview-actions': {\r\n flexGrow: 0,\r\n textAligh: 'center',\r\n marginRight: 16,\r\n textWrap: 'nowrap',\r\n },\r\n },\r\n customCarouselClassName: {\r\n boxShadow: 'rgba(0, 0, 0, 0.1) 0px 2px 4px 0px',\r\n '& .carousel-inner': {\r\n minHeight: 450,\r\n },\r\n\r\n '& .carousel-indicators': {\r\n display: 'flex !important',\r\n left: '50% !important',\r\n margin: '48px 0 !important',\r\n transform: 'translateX(-50%) !important',\r\n gap: '8px !important',\r\n\r\n '& li': {\r\n margin: '0 !important',\r\n },\r\n },\r\n\r\n '& .carousel-control': {\r\n display: 'flex !important',\r\n width: '12px !important',\r\n margin: '12px 0 !important',\r\n left: '50% !important',\r\n },\r\n\r\n '& .carousel-control.left': {\r\n transform: ({ placements }) => {\r\n const transformations = [];\r\n\r\n // Move left arrow to the center\r\n transformations.push('translateX(-50%)');\r\n\r\n // Move left arrow to the left of the indicators\r\n const indicatorsWidth = getIndicatorsWidth(placements);\r\n transformations.push(`translateX(-${indicatorsWidth / 2}px)`);\r\n\r\n // Add extra space between the left arrow and the indicators\r\n transformations.push('translateX(-16px)');\r\n\r\n return transformations.join(' ');\r\n },\r\n bottom: '16px !important',\r\n },\r\n\r\n '& .carousel-control.right': {\r\n transform: ({ placements }) => {\r\n const transformations = [];\r\n\r\n // Move right arrow to the center\r\n transformations.push('translateX(-50%)');\r\n\r\n // Move right arrow to the right of the indicators\r\n const indicatorsWidth = getIndicatorsWidth(placements);\r\n transformations.push(`translateX(${indicatorsWidth / 2}px)`);\r\n\r\n // Add extra space between the right arrow and the indicators\r\n transformations.push('translateX(14px)');\r\n\r\n return transformations.join(' ');\r\n },\r\n bottom: '16px !important',\r\n },\r\n },\r\n disclaimerMessage: {\r\n maxWidth: '420px',\r\n fontSize: '12px',\r\n color: '#605E5C',\r\n },\r\n 'disclaimerMessage-l': {\r\n width: '100%',\r\n },\r\n 'disclaimerMessage-m': {\r\n width: '100%',\r\n },\r\n 'disclaimerMessage-s': {\r\n width: '100%',\r\n },\r\n adPreviewActions: {\r\n display: 'flex',\r\n columnGap: '5px',\r\n },\r\n});\r\n","import classNames from 'classnames';\r\nimport React, { useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport {\r\n UAPPlacementTypeAlias as EPT,\r\n useImageExperienceAdPreviewModel,\r\n AdPreviewCarouselLayoutEx,\r\n UAPAdExtensionType as EAdExtensionType,\r\n AdPreviewAdExtensionComponents,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { PerfMaxAdPreviewControls, CustomAdPreviewControls } from './ad-preview-controls';\r\nimport previewPlaceholder from '../media/preview-placeholder.png';\r\nimport {\r\n AdPreviewSurface,\r\n getExtraPlacementInfo,\r\n getNumberOfPlacementBySurface,\r\n getNumberOfPlacementByCustomSurface,\r\n getNumberOfPlacementBySurfaceV2,\r\n getNumberOfPlacementBySurfaceV3,\r\n pmaxRequiredAspectRatios,\r\n getResponsiveAdPreviewConfig,\r\n} from './shared';\r\nimport { getAdAssetsPreviewStyles } from './ad-preview-responsive-styles';\r\n\r\nconst shortHeadlineMaxLength = 30;\r\nconst longHeadlineMaxLength = 90;\r\nconst descriptionMaxLength = 90;\r\n\r\nconst AdExtensionTypes = [\r\n EAdExtensionType.SiteLink,\r\n EAdExtensionType.Callout,\r\n EAdExtensionType.Promotion,\r\n EAdExtensionType.StructuredSnippet,\r\n EAdExtensionType.Price,\r\n];\r\n\r\nexport const getExtensionData = (extensions, extensionType, extensionFormatters) => {\r\n switch (extensionType) {\r\n case EAdExtensionType.SiteLink: {\r\n const siteLinks = _.result(extensions, EAdExtensionType.SiteLink, []).slice(0, 4); // only show 4 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.SiteLink])) {\r\n return siteLinks.map(siteLink => extensionFormatters[EAdExtensionType.SiteLink](siteLink));\r\n }\r\n return siteLinks;\r\n }\r\n case EAdExtensionType.Callout: {\r\n const callOuts = _.result(extensions, EAdExtensionType.Callout, []).slice(0, 4); // only show 4 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.Callout])) {\r\n return callOuts.map(callOut => extensionFormatters[EAdExtensionType.Callout](callOut));\r\n }\r\n return callOuts;\r\n }\r\n case EAdExtensionType.Promotion: {\r\n const promotions = _.result(extensions, EAdExtensionType.Promotion, []).slice(0, 1); // only show 1 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.Promotion])) {\r\n return promotions.map(promotion => extensionFormatters[EAdExtensionType.Promotion](promotion));\r\n }\r\n return promotions;\r\n }\r\n case EAdExtensionType.StructuredSnippet: {\r\n const structuredSnippets = _.result(extensions, EAdExtensionType.StructuredSnippet, []).slice(0, 1).map(({ Category, Texts }) => ({\r\n Category,\r\n Texts: Texts.slice(0, 3),\r\n })); // only show 3 values at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.StructuredSnippet])) {\r\n return structuredSnippets.map(structuredSnippet => extensionFormatters[EAdExtensionType.StructuredSnippet](structuredSnippet));\r\n }\r\n return structuredSnippets;\r\n }\r\n case EAdExtensionType.Price: {\r\n const prices = _.result(extensions, EAdExtensionType.Price, []).reduce((acc, { TableRows }) => [...acc, ...TableRows], []).slice(0, 8); // only show 8 at most.\r\n if (_.isFunction(extensionFormatters[EAdExtensionType.Price])) {\r\n return prices.map(price => extensionFormatters[EAdExtensionType.Price](price));\r\n }\r\n return prices;\r\n }\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nexport const PerfMaxAdPreview = (props) => {\r\n const {\r\n extraPlacementInfo: extraPlacementInfoProp,\r\n imageList,\r\n updateImageList,\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n isMSANAd,\r\n enableAutoPlay,\r\n i18n,\r\n logoPreviewEnabled,\r\n customPlacementHeaderClassName,\r\n isAdExtensionPreviewEnabled,\r\n extensionsAssociations,\r\n extensionFormatters,\r\n customSurfaceKeys,\r\n appLogo,\r\n isPMaxAspectRatiosV2Enabled,\r\n isAdPreviewRefreshEnabled,\r\n permissions,\r\n } = props;\r\n\r\n let { adPreviewConfig } = props;\r\n if (adPreviewConfig === undefined) {\r\n adPreviewConfig = getResponsiveAdPreviewConfig(isAdPreviewRefreshEnabled, isPMaxAspectRatiosV2Enabled, permissions);\r\n }\r\n\r\n const extraPlacementInfo = useMemo(() => {\r\n if (extraPlacementInfoProp) {\r\n return extraPlacementInfoProp;\r\n }\r\n\r\n return getExtraPlacementInfo(logoPreviewEnabled);\r\n }, [extraPlacementInfoProp, logoPreviewEnabled]);\r\n\r\n const hasSurfaceChoicePivot = !isMSANAd;\r\n\r\n const adDataProps = ['shortHeadline', 'videos', 'longHeadline', 'description', 'url', 'displayUrl', 'callToAction', 'businessName'];\r\n const currentAdData = _.pick(props, adDataProps);\r\n const [adData, setAdData] = React.useState(currentAdData);\r\n\r\n const isAdDataUpdated = useCallback(newAdData => (newAdData.length !== adData.length || !_.isMatch(newAdData, adData)), [adData]);\r\n const debouncedSetAdData = useMemo(() => _.debounce(setAdData, 500), []);\r\n if (isAdDataUpdated(currentAdData)) {\r\n debouncedSetAdData.cancel();\r\n debouncedSetAdData(currentAdData);\r\n }\r\n\r\n const getImageIndexFromId = useCallback((id) => {\r\n const index = _.findIndex(imageList, placement => _.first(placement).id === id && !_.first(placement).isLogo && !_.first(placement).isPortrait);\r\n return index >= 0 ? index : null;\r\n }, [imageList]);\r\n\r\n const getPreviewImageIndex = useCallback((idRequestedByImageExperience) => {\r\n let index = getImageIndexFromId(idRequestedByImageExperience);\r\n\r\n if (!index) {\r\n const firstImageIndex = _.findIndex(imageList, placement => !_.first(placement).isLogo);\r\n index = firstImageIndex >= 0 ? firstImageIndex : null;\r\n }\r\n\r\n return index;\r\n }, [getImageIndexFromId, imageList]);\r\n\r\n const { previewImageId, previewLogoId } = previewImagesSharedState;\r\n\r\n let previewImageIndex = null;\r\n if (imageList && imageList.length > 0) {\r\n previewImageIndex = getPreviewImageIndex(previewImageId);\r\n }\r\n\r\n const canExcludeAspectRatio = useCallback((typeToCheck) => {\r\n const minCount = pmaxRequiredAspectRatios[typeToCheck];\r\n if (!minCount) {\r\n return true;\r\n }\r\n\r\n let typeCount = 0;\r\n _.each(imageList, imageArray =>\r\n _.each(imageArray, (imageObj) => {\r\n if (imageObj.isIncluded && typeToCheck === imageObj.type) {\r\n typeCount += 1;\r\n }\r\n }));\r\n\r\n return (typeCount - 1) >= minCount;\r\n }, [imageList]);\r\n\r\n const onAddAspectRatio = useCallback((type) => {\r\n const newImageList = [...imageList];\r\n _.find(newImageList[previewImageIndex], imagePlacement => imagePlacement.type === type).isIncluded = true;\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, isImageListUpdatedByPreview: true, editingPlacementType: '' });\r\n updateImageList(newImageList);\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState, updateImageList]);\r\n\r\n const onRemoveAspectRatio = useCallback((type) => {\r\n const newImageList = [...imageList];\r\n _.find(newImageList[previewImageIndex], imagePlacement => imagePlacement.type === type).isIncluded = false;\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, isImageListUpdatedByPreview: true, editingPlacementType: '' });\r\n updateImageList(newImageList);\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState, updateImageList]);\r\n\r\n const onEdit = useCallback((type, placementType) => {\r\n const cropImageObj = _.find(imageList[previewImageIndex], imagePlacement => imagePlacement.type === type);\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, cropImageObj, editingPlacementType: placementType });\r\n }, [imageList, previewImageIndex, previewImagesSharedState, setPreviewImagesSharedState]);\r\n\r\n const truncatedAdData = useMemo(() => {\r\n const validAdData = { ...adData };\r\n\r\n if (validAdData.shortHeadline && validAdData.shortHeadline.length > shortHeadlineMaxLength) {\r\n validAdData.shortHeadline = validAdData.shortHeadline.substring(0, shortHeadlineMaxLength - 1);\r\n }\r\n\r\n if (validAdData.longHeadline && validAdData.longHeadline.length > longHeadlineMaxLength) {\r\n validAdData.longHeadline = validAdData.longHeadline.substring(0, longHeadlineMaxLength - 1);\r\n }\r\n\r\n if (validAdData.description && validAdData.description.length > descriptionMaxLength) {\r\n validAdData.description = validAdData.description.substring(0, descriptionMaxLength - 1);\r\n }\r\n\r\n return _.defaults(validAdData, {\r\n shortHeadline: i18n.getString(_TL_('Short headline')),\r\n longHeadline: i18n.getString(_TL_('Long headline')),\r\n description: i18n.getString(_TL_('Ad text')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n callToAction: i18n.getString(_TL_('Please select language first')),\r\n url: 'https://example.com',\r\n });\r\n }, [adData, i18n]);\r\n\r\n // const classes = useDefaultStyles(getAdPreviewStyles);\r\n const [surfaceChoice, setSurfaceChoice] = useState(customSurfaceKeys ? customSurfaceKeys[Object.keys(customSurfaceKeys)[0]] : AdPreviewSurface.Msn);\r\n\r\n // use extensionCount and extensionRerenderFlag to force rerender when extension count decreases\r\n const extensionCount = useRef(0);\r\n const [extensionRerenderFlag, setExtensionRerenderFlag] = useState(0);\r\n\r\n const {\r\n onUpdateImageExperienceImageList,\r\n imageExperiencePlacementSets: placementSets,\r\n } = useImageExperienceAdPreviewModel(adPreviewConfig, previewPlaceholder);\r\n\r\n useEffect(() => {\r\n // get correct image index fitler out logo\r\n const imageListWithoutLogo = _.compact(_.map(imageList, (placementList) => {\r\n const placements = _.filter(placementList, placement => !placement.isLogo && !placement.isPortrait);\r\n return !_.isEmpty(placements) ? placements : null;\r\n })) || [];\r\n\r\n // get current preview image\r\n const imageToPreview = _.find(imageListWithoutLogo, (placementList) => {\r\n const {\r\n id, idString, baseId, baseImage,\r\n } = _.first(placementList) || {};\r\n const { id: baseImageId, idString: baseImageIdString } = baseImage || {};\r\n return id === previewImageId || idString === previewImageId || baseId === previewImageId || baseImageId === previewImageId || baseImageIdString === previewImageId;\r\n }) || imageListWithoutLogo[0];\r\n\r\n _.debounce(onUpdateImageExperienceImageList, 100)([imageToPreview], null);\r\n // !! when *previewImageSharedState* changes update the image list, this component relies on in-place updates to imageList\r\n }, [previewImagesSharedState, imageList, onUpdateImageExperienceImageList, previewImageId]);\r\n\r\n const curPlacementList = useMemo(() => {\r\n const { placementList: pl } = _.find(placementSets, ({ placementSetName }) => !hasSurfaceChoicePivot || placementSetName === surfaceChoice) || {};\r\n if (isAdExtensionPreviewEnabled && surfaceChoice === 'Bing') {\r\n const bingSearchAdPlacement = _.find(pl, ({ placementMeta }) => placementMeta.placementType === EPT.Responsive.BingSearch.Text);\r\n // extend the placement list to add new placements for ad extensions\r\n if (bingSearchAdPlacement) {\r\n const placementListWithExtensions = [\r\n ...pl,\r\n // add additional property to identity the extension type to render\r\n ...AdExtensionTypes.reduce((pls, adExtensionType) => {\r\n if (_.has(extensionsAssociations, adExtensionType) && extensionsAssociations[adExtensionType].length > 0) {\r\n pls.push({ ...bingSearchAdPlacement, adExtensionType });\r\n }\r\n return pls;\r\n }, []),\r\n ];\r\n const preExtensionCount = extensionCount.current;\r\n extensionCount.current = placementListWithExtensions.length - pl.length;\r\n if (preExtensionCount > extensionCount.current) {\r\n setExtensionRerenderFlag(prevState => (prevState + 1) % 1000);\r\n }\r\n return placementListWithExtensions;\r\n }\r\n }\r\n return pl;\r\n }, [extensionsAssociations, hasSurfaceChoicePivot, isAdExtensionPreviewEnabled, placementSets, surfaceChoice]);\r\n\r\n const stylingProps = useMemo(() => {\r\n let placements = null;\r\n\r\n if (customSurfaceKeys) {\r\n placements = getNumberOfPlacementByCustomSurface(surfaceChoice, customSurfaceKeys);\r\n } else {\r\n placements = (curPlacementList && curPlacementList.length) || getNumberOfPlacementBySurface(surfaceChoice);\r\n }\r\n\r\n if (isPMaxAspectRatiosV2Enabled) {\r\n placements = isAdPreviewRefreshEnabled ? getNumberOfPlacementBySurfaceV3(surfaceChoice) : getNumberOfPlacementBySurfaceV2(surfaceChoice);\r\n }\r\n\r\n return ({\r\n component:\r\n {\r\n placements,\r\n },\r\n });\r\n }, [curPlacementList, customSurfaceKeys, isAdPreviewRefreshEnabled, isPMaxAspectRatiosV2Enabled, surfaceChoice]);\r\n\r\n const getStyles = useResponsiveStyles(getAdAssetsPreviewStyles, stylingProps);\r\n\r\n const isSizeValid = useCallback((placement) => {\r\n const { placementMeta, imageMeta } = placement || {};\r\n const { minSize } = placementMeta || {};\r\n const [minWidth, minHeight] = minSize || [];\r\n const { width, height } = imageMeta || {};\r\n return width >= minWidth && height >= minHeight;\r\n }, []);\r\n\r\n const getFirstElement = useCallback((item) => {\r\n if (_.isArray(item)) {\r\n return _.first(item);\r\n }\r\n return item;\r\n }, []);\r\n\r\n const curPreviewLogo = useMemo(() => {\r\n const allLogos = _.filter(imageList, imageArr => getFirstElement(imageArr).isLogo === true);\r\n let curLogos = previewLogoId && _.find(allLogos, logo => _.first(logo).Id === previewLogoId);\r\n curLogos = curLogos || _.first(allLogos);\r\n\r\n // currently only square logo is supported, 4x1 logo are ignored\r\n const curLogoRatio = _.find(curLogos, logo => logo.isIncluded === true && logo.type === 'Image1x1');\r\n return curLogoRatio;\r\n }, [getFirstElement, imageList, previewLogoId]);\r\n\r\n const renderAdExtensionPreivew = useCallback((placement, adExtensionType) => {\r\n const AdExtensionPreviewComponent = AdPreviewAdExtensionComponents[adExtensionType];\r\n if (AdExtensionPreviewComponent) {\r\n return ;\r\n }\r\n return null;\r\n }, [extensionFormatters, extensionsAssociations]);\r\n\r\n const onRenderPlacement = useCallback((placement, AdPlacementComponent) => {\r\n const {\r\n placementMeta, imageMeta, hasImageExperienceData, adExtensionType,\r\n } = placement || {};\r\n const isPlaceholderImage = imageMeta && (imageMeta.url === previewPlaceholder);\r\n const { minSize, placementType } = placementMeta || {};\r\n const [minWidth, minHeight] = minSize || [];\r\n const isValid = isSizeValid(placement);\r\n const {\r\n hasLogo, customClassName, imagePreviewHeight, previewTitle, disclaimerMessage,\r\n } = extraPlacementInfo[placementType] || {};\r\n\r\n return (\r\n
\r\n {hasImageExperienceData && !isValid &&\r\n \r\n {\r\n i18n.getString(_TL_('To include this aspect ratio, add a new image that is at least {{width}} x {{height}} pixels.'), {\r\n width: minWidth,\r\n height: minHeight,\r\n })\r\n }\r\n \r\n }\r\n \r\n {adExtensionType && renderAdExtensionPreivew(placement, adExtensionType)}\r\n \r\n {isMSANAd && previewTitle && (\r\n
{i18n.getString(previewTitle)}
\r\n )}\r\n {isMSANAd && disclaimerMessage && (\r\n
{i18n.getString(disclaimerMessage)}
\r\n )}\r\n
\r\n );\r\n }, [curPreviewLogo, appLogo, extraPlacementInfo, getStyles, i18n, isMSANAd, isSizeValid, renderAdExtensionPreivew, truncatedAdData]);\r\n\r\n const onRenderCarouselHeader = useCallback((placement) => {\r\n const { placementMeta, isPlacementIncluded, hasImageExperienceData } = placement || {};\r\n const { imageType, placementType } = placementMeta || {};\r\n if (!placementType) {\r\n return null;\r\n }\r\n const canBeExcluded = canExcludeAspectRatio(imageType);\r\n const {\r\n aspectRatioUIString, previewTitle, previewHeaderTitle, hideHeaderButtons = false,\r\n } = extraPlacementInfo[placementMeta.placementType] || {};\r\n const isValid = isSizeValid(placement);\r\n return (\r\n
\r\n {isMSANAd ? (\r\n
\r\n {previewHeaderTitle ? i18n.getString(previewHeaderTitle) : i18n.getString(previewTitle)}\r\n
\r\n ) : (\r\n
\r\n {aspectRatioUIString}\r\n {previewTitle && i18n.getString(previewTitle)}\r\n
\r\n )}\r\n {hasImageExperienceData && isValid && !hideHeaderButtons && (\r\n
\r\n {isPlacementIncluded && onEdit(imageType, placementType)} text={i18n.getString(_TL_('Edit aspect ratio'))} />}\r\n {isPlacementIncluded && onRemoveAspectRatio(imageType)} text={i18n.getString(_TL_('Exclude'))} disabled={!canBeExcluded} />}\r\n {!isPlacementIncluded && onAddAspectRatio(imageType)} text={i18n.getString(_TL_('Include'))} />}\r\n
\r\n )}\r\n
\r\n );\r\n }, [canExcludeAspectRatio, customPlacementHeaderClassName, extraPlacementInfo, getStyles, i18n, isMSANAd, isSizeValid, onAddAspectRatio, onEdit, onRemoveAspectRatio]);\r\n\r\n return (\r\n
\r\n {\r\n hasSurfaceChoicePivot &&\r\n customSurfaceKeys ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n
\r\n {i18n.getString(_TL_('These are examples of how your ads could appear. Depending on placement, the actual ad may appear differently.'))}\r\n
\r\n
\r\n );\r\n};\r\n\r\nPerfMaxAdPreview.propTypes = {\r\n adPreviewConfig: PropTypes.arrayOf(PropTypes.shape({})),\r\n extraPlacementInfo: PropTypes.shape({}),\r\n imageList: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))),\r\n updateImageList: PropTypes.func.isRequired,\r\n previewImagesSharedState: PropTypes.shape({\r\n previewImageId: PropTypes.string,\r\n previewLogoId: PropTypes.string,\r\n }).isRequired,\r\n setPreviewImagesSharedState: PropTypes.func.isRequired,\r\n isMSANAd: PropTypes.bool,\r\n enableAutoPlay: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n logoPreviewEnabled: PropTypes.bool,\r\n customPlacementContainerClassName: PropTypes.string,\r\n customPlacementHeaderClassName: PropTypes.string,\r\n isAdExtensionPreviewEnabled: PropTypes.bool,\r\n extensionsAssociations: PropTypes.shape({}),\r\n extensionFormatters: PropTypes.shape({}),\r\n appLogo: PropTypes.shape({}),\r\n isPMaxAspectRatiosV2Enabled: PropTypes.bool,\r\n customSurfaceKeys: PropTypes.shape({}),\r\n isAdPreviewRefreshEnabled: PropTypes.bool,\r\n permissions: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nPerfMaxAdPreview.defaultProps = {\r\n adPreviewConfig: undefined,\r\n extraPlacementInfo: undefined,\r\n imageList: null,\r\n isMSANAd: false,\r\n enableAutoPlay: null,\r\n logoPreviewEnabled: false,\r\n customPlacementContainerClassName: undefined,\r\n customPlacementHeaderClassName: undefined,\r\n isAdExtensionPreviewEnabled: false,\r\n extensionsAssociations: {},\r\n extensionFormatters: {},\r\n appLogo: null,\r\n isPMaxAspectRatiosV2Enabled: false,\r\n customSurfaceKeys: null,\r\n isAdPreviewRefreshEnabled: false,\r\n};\r\n","const IMAGE_DIM = {\r\n width: 106,\r\n height: 76,\r\n marginRight: 8,\r\n};\r\n\r\nconst PaddleBottomValue = 18;\r\n\r\nexport const initialImageContainerLeftMargin = 10;\r\n\r\nexport const getFullyShownImagesCount = (width) => {\r\n if (!width) {\r\n return 0;\r\n }\r\n\r\n const itemWidth = IMAGE_DIM.width + IMAGE_DIM.marginRight;\r\n\r\n return Math.floor(width / itemWidth);\r\n};\r\n\r\nexport const getCarouselStyles = (components, { palette = {} } = {}, iconFontFamily = 'MsAds MDL2 Assets') => ({\r\n carouselParent: {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n width: '100%',\r\n alignItems: 'end',\r\n },\r\n disabledCarouselParent: {\r\n pointerEvents: 'none',\r\n opacity: 0.4,\r\n },\r\n image: {\r\n ...IMAGE_DIM,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n objectFit: 'cover',\r\n borderRadius: 6,\r\n },\r\n imageContainer: ({ imageContainerLeftMargin, isCollapsible }) => ({\r\n height: IMAGE_DIM.height,\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n display: 'inline-block',\r\n marginLeft: isCollapsible ? imageContainerLeftMargin : 0,\r\n flexGrow: 1,\r\n }),\r\n imageParentContainer: ({ imageParentLeftOffset, numberOfImages }) => ({\r\n display: 'flex',\r\n width: (IMAGE_DIM.width + IMAGE_DIM.marginRight) * numberOfImages,\r\n position: 'relative',\r\n left: ((-1 * IMAGE_DIM.width) - IMAGE_DIM.marginRight) * imageParentLeftOffset,\r\n }),\r\n imageClickableContainer: {\r\n display: 'inline',\r\n '& :hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n loadingMessageContainer: {\r\n marginTop: 16,\r\n marginLeft: 16,\r\n },\r\n loadingText: {\r\n display: 'inline-block',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n verticalAlign: 'top',\r\n },\r\n panel: {},\r\n panelHeading: {\r\n display: 'flex',\r\n },\r\n panelTitle: {\r\n flexGrow: 0,\r\n },\r\n panelIcon: {\r\n marginRight: 3,\r\n paddingBottom: 12,\r\n '&:before': {\r\n fontFamily: iconFontFamily,\r\n content: '\"\\\\E3AF\"',\r\n },\r\n },\r\n panelHelpButton: {\r\n display: 'flex',\r\n '& .helpbutton': {\r\n margin: '4px 0px',\r\n },\r\n },\r\n imageHintRight: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n background: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: 20,\r\n height: IMAGE_DIM.height,\r\n right: 32,\r\n },\r\n imageHintLeft: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n background: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: 30,\r\n height: IMAGE_DIM.height,\r\n left: 34,\r\n transform: 'rotate(-180deg)',\r\n },\r\n paddleBtn: {\r\n bottom: PaddleBottomValue,\r\n },\r\n moreIcon: {\r\n fontSize: '18px',\r\n height: '60px',\r\n width: '33px',\r\n color: palette.themeDarkAlt,\r\n },\r\n seeAll: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n right: 0,\r\n bottom: 12,\r\n whiteSpace: 'nowrap',\r\n maxWidth: 50,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n seeAllInHeader: {\r\n marginLeft: 'auto',\r\n '& a': {\r\n position: 'static',\r\n color: palette.themePrimary,\r\n fontSize: 12,\r\n '&:hover, $:acitve, $:focus': {\r\n color: palette.themeDarkAlt,\r\n },\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n spinner: {\r\n ...components.getBlockerStyle(16, palette),\r\n display: 'inline-block',\r\n lineHeight: '16px',\r\n },\r\n parentContainer: {\r\n '& $panel': { // need more selector specificity to override styles applied to top of grid panels\r\n marginLeft: 0,\r\n marginTop: 12,\r\n },\r\n '& $panelHeading': {\r\n border: 'none',\r\n '& $panelTitle.collapsible-title': {\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '24px',\r\n '& > a': {\r\n '& .helpbutton': {\r\n fontSize: '14px',\r\n lineHeight: '24px',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n },\r\n },\r\n marginTop: 0,\r\n },\r\n },\r\n '& + .alert-info': {\r\n marginTop: 8,\r\n '& a': {\r\n color: palette.themeDarkAlt,\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { findIndex, filter, map, extend, find, chain, where, isEmpty } from 'underscore';\r\nimport { DefaultButton, Panel, PanelType, Stack, PrimaryButton, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { IconButton } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FluentImagePicker } from '@bingads-webui-campaign-react/fluent-image-picker';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { panelStylesProp } from '@bingads-webui-campaign-react/asset-library-shared-add-media-layout';\r\nimport { CopilotTab, CopilotTabItem } from '@bingads-webui/inline-copilot-ui';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { getImageSuggestionPanelStyles, imageSuggestionPanelWidth } from './style';\r\n\r\nconst getImageWithDefaultSelectState = images => map(images, image => extend({}, image, { isSelected: false }));\r\n\r\nconst mapSelectSate = (allImages, needUpdateImages) => map(needUpdateImages, (image) => {\r\n const newImage = find(allImages, img => img.fullUrl === image.fullUrl);\r\n return newImage || image;\r\n});\r\n\r\nexport const ImageRecommendationsPanel = (props) => {\r\n const {\r\n i18n,\r\n title,\r\n images,\r\n themes,\r\n hasMore,\r\n showThemes,\r\n loadNextPage,\r\n onSelectImage,\r\n onDismiss,\r\n isMultiSelect,\r\n onAdd,\r\n maxUploadNum,\r\n } = props;\r\n\r\n const isLoadingFirstPage = false;\r\n\r\n const defaultImagesWithSelectState = useMemo(() => getImageWithDefaultSelectState(images), [images]);\r\n const classes = useDefaultStyles(getImageSuggestionPanelStyles);\r\n const [error, setError] = useState(null);\r\n const [allImages, setAllImages] = useState(defaultImagesWithSelectState);\r\n const [activeImages, setActiveImages] = useState(allImages);\r\n const [activeTheme, setActiveTheme] = useState(i18n.getString(_TL_('All')));\r\n const themeNames = useMemo(() => [\r\n ...map(themes.filter(theme => !isEmpty(theme.images)), ({ name }) => name),\r\n ], [themes]);\r\n\r\n const onSwitchTheme = useCallback((key) => {\r\n setActiveTheme(key);\r\n if (key === i18n.getString(_TL_('All'))) {\r\n setActiveImages(allImages);\r\n } else {\r\n const rawImages = chain(themes)\r\n .filter(theme => theme.name === key)\r\n .first()\r\n .result('images')\r\n .map(img => extend({}, img))\r\n .value();\r\n const imagesWithState = mapSelectSate(allImages, rawImages);\r\n setActiveImages(imagesWithState);\r\n }\r\n }, [allImages, i18n, themes]);\r\n\r\n const onClickAdd = useCallback(() => {\r\n onAdd(filter(allImages, image => image.isSelected));\r\n }, [onAdd, allImages]);\r\n\r\n const onClickCancel = useCallback((e) => {\r\n onDismiss(e);\r\n }, [onDismiss]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {i18n.getString(title)}\r\n
\r\n
\r\n ), [classes.backButton, classes.panelHeader, classes.panelTitle, i18n, onClickCancel, title]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n \r\n { isMultiSelect &&\r\n \r\n image.isSelected) === -1}>\r\n {i18n.getString(_TL_('Add'))}\r\n \r\n \r\n }\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n \r\n { isMultiSelect &&\r\n \r\n {i18n.getString(_TL_('Selected images: {{count}}'), { count: where(allImages, { isSelected: true }).length })}\r\n \r\n }\r\n \r\n ), [classes.buttonContainer, isMultiSelect, onClickAdd, allImages, i18n, onClickCancel]);\r\n\r\n const onSelectImageInternal = useCallback((index) => {\r\n const { fullUrl, suggestionId } = isMultiSelect || showThemes ? activeImages[index] : images[index];\r\n\r\n if (!isMultiSelect) {\r\n onDismiss();\r\n onSelectImage(fullUrl, index, suggestionId);\r\n } else {\r\n const image = find(allImages, img => img.fullUrl === fullUrl);\r\n\r\n if (!image.isSelected && maxUploadNum !== undefined && filter(allImages, img => img.isSelected).length >= maxUploadNum) {\r\n setError(i18n.getString(_TL_('You\\'ve exceeded the max. number of assets you can add at a time ({{limitNumber}}). Please try again.'), { limitNumber: maxUploadNum }));\r\n return;\r\n }\r\n\r\n setError(null);\r\n if (image) {\r\n image.isSelected = !image.isSelected;\r\n }\r\n setAllImages([...allImages]);\r\n setActiveImages(mapSelectSate(allImages, activeImages));\r\n }\r\n }, [isMultiSelect, showThemes, activeImages, images, onDismiss, onSelectImage, allImages, maxUploadNum, i18n]);\r\n\r\n return (\r\n \r\n {(isMultiSelect || showThemes) &&\r\n \r\n
\r\n onSwitchTheme(key)}\r\n >\r\n \r\n {i18n.getString(_TL_('All'))}\r\n \r\n {map(themeNames, name => (\r\n \r\n {name}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n }\r\n {\r\n isLoadingFirstPage ? :\r\n \r\n }\r\n {\r\n error && {error}\r\n }\r\n );\r\n};\r\n\r\nImageRecommendationsPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n title: PropTypes.string,\r\n images: PropTypes.arrayOf(PropTypes.shape({\r\n thumbnailSrc: PropTypes.string,\r\n fullUrl: PropTypes.string,\r\n suggestionId: PropTypes.string,\r\n })).isRequired,\r\n showThemes: PropTypes.bool,\r\n themes: PropTypes.arrayOf(PropTypes.shape({})),\r\n hasMore: PropTypes.bool.isRequired,\r\n loadNextPage: PropTypes.func.isRequired,\r\n onSelectImage: PropTypes.func.isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n isMultiSelect: PropTypes.bool,\r\n onAdd: PropTypes.func,\r\n maxUploadNum: PropTypes.number,\r\n};\r\n\r\nImageRecommendationsPanel.defaultProps = {\r\n title: _TL_('Recommended images'),\r\n themes: [],\r\n showThemes: true,\r\n isMultiSelect: false,\r\n onAdd: () => {},\r\n maxUploadNum: undefined,\r\n};\r\n","import React, { useContext, useState, useCallback, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { AssetEventRecordType, AssetType, POST_ASSET_EVENT_NAME } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { MessageBar, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport classNames from 'classnames';\r\nimport { getImageSuggestionCarouselStyles } from './style';\r\nimport { getCarouselStyles, getFullyShownImagesCount, initialImageContainerLeftMargin } from './carousel-pmax-style';\r\nimport { ImageRecommendationsPanel } from './image-recommendations-panel';\r\n\r\nexport const SuggestionViewImageCount = 5;\r\nconst MaxSuggestionsInCarousel = 15;\r\nconst isEmptySuggestionsHintEnabled = true;\r\n\r\nconst PerfMaxImageSuggestionCarouselInternal = (props) => {\r\n const {\r\n i18n,\r\n addImageCallback = _.noop,\r\n maxUploadNum,\r\n isCopilotRecommendations,\r\n customMessageBarText,\r\n } = props;\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const {\r\n themes, imageAssets, postAssetEventLog = _.noop, copilotTracking,\r\n } = recommendationContext;\r\n const { carouselState, panelState } = useMemo(() => {\r\n if (isCopilotRecommendations) {\r\n return {\r\n carouselState: {\r\n carousel: {\r\n isError: _.isEmpty(imageAssets),\r\n },\r\n suggestion: {\r\n images: imageAssets,\r\n },\r\n },\r\n panelState: {\r\n panelImages: imageAssets,\r\n hasMore: false,\r\n },\r\n };\r\n }\r\n return (recommendationContext && recommendationContext.images) || {};\r\n }, [imageAssets, isCopilotRecommendations, recommendationContext]);\r\n const { suggestion, carousel } = carouselState || {};\r\n const { images: suggestionImages, inProgress: suggestionInProgress } = suggestion || {};\r\n\r\n const [imagesToSuggest, setImagesToSuggest] = useState([]);\r\n const [carouselErrorMessage, setCarouselErrorMessage] = useState({});\r\n const [blockCarousel, setBlockCarousel] = useState(false);\r\n const [isSuggestionsPanelOpen, setIsSuggestionsPanelOpen] = useState(false);\r\n\r\n const logCopilotViewedImageSuggestions = useCallback((suggestionIds) => {\r\n if (copilotTracking) {\r\n const viewedImageSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(suggestionIds);\r\n if (viewedImageSuggestionIds.length > 0) {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n AssetType: _.map(viewedImageSuggestionIds, () => AssetType.IMAGE),\r\n SuggestionIds: viewedImageSuggestionIds,\r\n RecordType: AssetEventRecordType.VIEWED,\r\n },\r\n });\r\n copilotTracking.trackViewedSuggestionIds(viewedImageSuggestionIds);\r\n }\r\n }\r\n }, [copilotTracking, postAssetEventLog]);\r\n\r\n if (isSuggestionsPanelOpen) {\r\n const panelViewedSuggestionIds = _.pluck(panelState.panelImages, 'suggestionId');\r\n reportRecommendations({ view: panelViewedSuggestionIds });\r\n if (isCopilotRecommendations) {\r\n logCopilotViewedImageSuggestions(panelViewedSuggestionIds);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const truncatedImages = _.isArray(suggestionImages) && suggestionImages.slice(0, MaxSuggestionsInCarousel);\r\n setImagesToSuggest(truncatedImages || []);\r\n }, [suggestionImages]);\r\n\r\n const classes = useDefaultStyles(getImageSuggestionCarouselStyles);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const onSelectImage = useCallback((fullUrl, index, suggestionId) => {\r\n setBlockCarousel(true);\r\n addImageCallback([{ fullUrl, suggestionId }], constants.imageOptionKeys.Image)\r\n .then((response) => {\r\n if (response.processedImage) {\r\n if (isCopilotRecommendations) {\r\n const { idString } = response.processedImage;\r\n logCopilotViewedImageSuggestions([suggestionId]);\r\n copilotTracking.trackSelectedImageAssets({ ImageAssets: [{ suggestionId, imageId: idString }] });\r\n }\r\n }\r\n if (response.errorMessage) {\r\n setCarouselErrorMessage({\r\n type: MessageBarType.error,\r\n message: response.errorMessage,\r\n });\r\n }\r\n return Promise.resolve();\r\n })\r\n .finally(() => {\r\n setImagesToSuggest(_.reject(imagesToSuggest, image => image.fullUrl === fullUrl));\r\n setBlockCarousel(false);\r\n });\r\n }, [addImageCallback, copilotTracking, imagesToSuggest, isCopilotRecommendations, logCopilotViewedImageSuggestions]);\r\n\r\n const onAdd = useCallback((images) => {\r\n setBlockCarousel(true);\r\n setIsSuggestionsPanelOpen(false);\r\n addImageCallback(images, constants.imageOptionKeys.Image)\r\n .then((response) => {\r\n if (response.processedImages) {\r\n if (isCopilotRecommendations) {\r\n response.processedImages.forEach((image) => {\r\n copilotTracking.trackSelectedImageAssets({ ImageAssets: [{ suggestionId: image.suggestionId, imageId: image.idString }] });\r\n });\r\n }\r\n }\r\n if (response.errorMessage) {\r\n setCarouselErrorMessage({\r\n type: MessageBarType.error,\r\n message: response.errorMessage,\r\n });\r\n }\r\n return Promise.resolve();\r\n })\r\n .finally(() => {\r\n // setImagesToSuggest(_.reject(imagesToSuggest, image => image.fullUrl === fullUrl));\r\n setBlockCarousel(false);\r\n });\r\n }, [addImageCallback, copilotTracking, isCopilotRecommendations]);\r\n\r\n const onSelectSeeAllImages = useCallback(() => {\r\n setIsSuggestionsPanelOpen(true);\r\n }, []);\r\n\r\n const onOffsetChange = useCallback((offset) => {\r\n const viewedImages = imagesToSuggest.slice(offset, offset + SuggestionViewImageCount);\r\n const suggestionIds = _.pluck(viewedImages, 'suggestionId');\r\n reportRecommendations({ view: suggestionIds });\r\n if (isCopilotRecommendations) {\r\n logCopilotViewedImageSuggestions(suggestionIds);\r\n }\r\n }, [imagesToSuggest, isCopilotRecommendations, logCopilotViewedImageSuggestions, reportRecommendations]);\r\n\r\n const shouldDisplayEmptySuggestionsHint = isEmptySuggestionsHintEnabled && isCopilotRecommendations && !suggestionInProgress && maxUploadNum > 0 && _.isEmpty(imagesToSuggest);\r\n\r\n return (\r\n \r\n
\r\n {shouldDisplayEmptySuggestionsHint && (\r\n \r\n {customMessageBarText || i18n.getString(_TL_('Select the add image icon above to find relevant stock images or generate custom AI images for your ads.'))\r\n }\r\n \r\n )}\r\n \r\n 0 ? imagesToSuggest : []}\r\n i18n={i18n}\r\n isEmpty={carousel && carousel.isError}\r\n messageInfo={carouselErrorMessage}\r\n onSelectImage={onSelectImage}\r\n onSelectSeeAll={onSelectSeeAllImages}\r\n showEllipsisWhenNoMoreImages\r\n showViewAllInHeader={isCopilotRecommendations}\r\n stylingOverrides={{\r\n getCarouselStyles,\r\n getFullyShownImagesCount,\r\n initialImageContainerLeftMargin,\r\n seeAllLinkText: _TL_('View all'),\r\n }}\r\n onOffsetChange={onOffsetChange}\r\n />\r\n \r\n
\r\n {isSuggestionsPanelOpen &&\r\n setIsSuggestionsPanelOpen(false)}\r\n isMultiSelect={isCopilotRecommendations}\r\n onAdd={onAdd}\r\n maxUploadNum={maxUploadNum}\r\n />\r\n }\r\n
);\r\n};\r\n\r\nPerfMaxImageSuggestionCarouselInternal.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n addImageCallback: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n DisplayPlusCopilotRecommendations: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n isCopilotRecommendations: PropTypes.bool,\r\n customMessageBarText: PropTypes.string,\r\n};\r\n\r\nPerfMaxImageSuggestionCarouselInternal.defaultProps = {\r\n isCopilotRecommendations: true,\r\n};\r\n\r\nexport const PerfMaxImageSuggestionCarousel = withPermissions(withInstrumentation(PerfMaxImageSuggestionCarouselInternal));\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ImageListPortalContainerWithControlErrorHandling } from './image-list-portal-container';\r\nimport { PerfMaxImageSuggestionCarousel } from './perf-max-image-suggestion-carousel';\r\nimport { ImageListSummaryCardDetails } from './image-list-card-details';\r\nimport ImageAssetsImg from '../media/image-assets.svg';\r\n\r\nexport const ImageListPortalContainerWithCarouselSection = ({\r\n expand,\r\n images,\r\n imageLimit,\r\n maxUploadNum,\r\n containerRef,\r\n containerState,\r\n addImageCallback,\r\n classes,\r\n isMultimediaAd,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'images',\r\n }}\r\n {...rest}\r\n >\r\n \r\n {i18n.getString(_TL_('You can add up to {{limit}} images to your ad.'), { limit: imageLimit })}\r\n {isMultimediaAd && i18n.getString(_TL_(' Required aspect ratios: 1.91:1 and 1:1. Minimum image upload dimensions: 703 x 368 pixels.'))}\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nImageListPortalContainerWithCarouselSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n imageLimit: PropTypes.number.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n containerRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n containerState: PropTypes.shape({}),\r\n addImageCallback: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n imageExperienceStyle: PropTypes.string,\r\n }),\r\n isMultimediaAd: PropTypes.bool,\r\n};\r\n\r\nImageListPortalContainerWithCarouselSection.defaultProps = {\r\n containerState: {},\r\n classes: {},\r\n isMultimediaAd: true,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ImageListPortalContainerWithControlErrorHandling } from './image-list-portal-container';\r\nimport { ImageListSummaryCardDetails } from './image-list-card-details';\r\nimport LogoAssetsImg from '../media/logo-assets.svg';\r\n\r\nexport const LogoListPortalContainerSection = ({\r\n expand,\r\n images,\r\n containerRef,\r\n containerState,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'logos',\r\n }}\r\n {...rest}\r\n >\r\n {i18n.getString(_TL_('You can add up to 5 different logos. Each logo can have one or both 4:1 aspect ratio and 1:1 aspect ratio.'))}\r\n \r\n \r\n );\r\n};\r\n\r\nLogoListPortalContainerSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n containerRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n containerState: PropTypes.shape({}),\r\n};\r\n\r\nLogoListPortalContainerSection.defaultProps = {\r\n containerState: {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ImageListPortalContainerWithControlErrorHandling } from './image-list-portal-container';\r\nimport { ImageListSummaryCardDetails } from './image-list-card-details';\r\nimport ImageAssetsImg from '../media/image-assets.svg';\r\n\r\nexport const ImageListPortalContainerSection = ({\r\n expand,\r\n images,\r\n imageLimit,\r\n containerRef,\r\n containerState,\r\n classes,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'images',\r\n }}\r\n {...rest}\r\n >\r\n {i18n.getString(_TL_('You can add up to {{limit}} images to your ad.'), { limit: imageLimit })}\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nImageListPortalContainerSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n imageLimit: PropTypes.number.isRequired,\r\n containerRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n containerState: PropTypes.shape({}),\r\n classes: PropTypes.shape({\r\n imageExperienceStyle: PropTypes.string,\r\n }),\r\n};\r\n\r\nImageListPortalContainerSection.defaultProps = {\r\n containerState: {},\r\n classes: {},\r\n};\r\n","import { useMemo } from 'react';\r\nimport { useUserLevelPreference } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { BudgetSuggestionTiers } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\n\r\nexport const preferenceNames = {\r\n WizardStep: 'PMaxLite.WizardStep',\r\n SelectedLanguage: 'PMaxLite.SelectedLanguage',\r\n SelectedCountry: 'PMaxLite.SelectedCountry',\r\n MarketPrefillEnabled: 'PMaxLite.MarketPrefillEnabled',\r\n BudgetSuggestionTier: 'PMaxLite.BudgetSuggestionTier',\r\n SelectedCurrency: 'PMaxLite.SelectedCurrency',\r\n WebsiteUrl: 'PMaxLite.WebsiteUrl',\r\n SmartPageUrl: 'PMaxLite.SmartPageUrl',\r\n SmartPageTermsAndConditions: 'PMaxLite.SmartPageTermsAndConditions',\r\n LanguageCountryPageTermsAndConditions: 'PMaxLite.LanguageCountryPageTermsAndConditions',\r\n TimezonePrefillEnabled: 'PMaxLite.TimezonePrefillEnabled',\r\n TempImageIdString: 'PMaxLite.TempImageIdString',\r\n PhoneNumberCountryCode: 'PMaxLite.PhoneNumberCountryCode',\r\n};\r\n\r\nexport const getPreferenceDefaults = () => ({\r\n [preferenceNames.WizardStep]: {},\r\n [preferenceNames.SelectedLanguage]: 'English',\r\n [preferenceNames.SelectedCountry]: 'US',\r\n [preferenceNames.MarketPrefillEnabled]: true,\r\n [preferenceNames.BudgetSuggestionTier]: BudgetSuggestionTiers.Balanced,\r\n [preferenceNames.SelectedCurrency]: '',\r\n [preferenceNames.SmartPageTermsAndConditions]: {},\r\n [preferenceNames.LanguageCountryPageTermsAndConditions]: false,\r\n [preferenceNames.TimezonePrefillEnabled]: true,\r\n [preferenceNames.TempImageIdString]: '',\r\n [preferenceNames.PhoneNumberCountryCode]: '',\r\n});\r\n\r\nexport function usePreference(preferenceName) {\r\n const preferenceDefaultValue = useMemo(() => {\r\n // load default from list of defaults\r\n const preferenceDefaults = getPreferenceDefaults();\r\n return preferenceDefaults[preferenceName];\r\n }, [preferenceName]);\r\n\r\n return useUserLevelPreference(preferenceName, preferenceDefaultValue);\r\n}\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst getEdmEntity = (api, cid, aid, campaignId) => {\r\n if (campaignId) {\r\n return edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)[api];\r\n }\r\n return edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)[api];\r\n};\r\n\r\nexport const loadBusinessInfoRecommendation = (payload, cid, aid, campaignId) => {\r\n const edmEntity = getEdmEntity('Default.GetExtractedBusinessInfo', cid, aid, campaignId);\r\n return edmEntity.$makeCall({\r\n payload,\r\n }).toPromise();\r\n};\r\n\r\nexport const loadTargetRecommendation = (payload, cid, aid) => {\r\n const edmEntity = getEdmEntity('Default.GetTargetSuggestions', cid, aid);\r\n return edmEntity.$makeCall({\r\n payload,\r\n }).toPromise();\r\n};\r\n","import { useCallback } from 'react';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const useSearchLocationData = (aid, cid) => {\r\n const getLocation = useCallback(search => edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations.get({\r\n select: ['ParentLocations'],\r\n search,\r\n }).toPromise()\r\n .then(response => response)\r\n .catch(error => Promise.reject(error)), [aid, cid]);\r\n\r\n return {\r\n getLocation,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext, useMemo } from 'react';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { useCustomerLevelVariables, usePostponeReadVariables } from '@bingads-webui-campaign-react/basic-context-utils';\r\nimport { DEFAULT_BUDGET_VALUE_FOR_CURRENCY } from '@bingads-webui-campaign/ads-globalization';\r\nimport { useCountryCurrenciesMappings } from '@bingads-webui/overreact-cc';\r\nimport { usePromisify } from '@bingads-webui-react/overreact';\r\n\r\nimport { usePreference, preferenceNames } from './use-preference';\r\n\r\nconst defaultBudgetValue = 25;\r\n\r\nexport function useGetDefaultBudgetValueForCountry() {\r\n const customerLevelVariables = useCustomerLevelVariables();\r\n const postponeReadConfig = usePostponeReadVariables();\r\n\r\n const [, { read: readCountryCurrenciesMappingsFn }]\r\n = useCountryCurrenciesMappings(customerLevelVariables, postponeReadConfig);\r\n const [readCountryCurrenciesMappingsAsync] = usePromisify([readCountryCurrenciesMappingsFn]);\r\n const readCountryCurrenciesMappings = useCallback(\r\n (args = {}, ...rest) => readCountryCurrenciesMappingsAsync(args, ...rest),\r\n [readCountryCurrenciesMappingsAsync]\r\n );\r\n\r\n const instrumentation = useContext(InstrumentationContext);\r\n const readCurrencyActivity = useMemo(() => {\r\n if (instrumentation && instrumentation.pmaxLiteSignup) {\r\n const scenario = instrumentation.pmaxLiteSignup.create();\r\n return scenario.currencyCountryMapping.create();\r\n }\r\n return { trace: _.noop, error: _.noop };\r\n }, [instrumentation]);\r\n\r\n const [{ value: countryPreference }] = usePreference(preferenceNames.SelectedCountry);\r\n\r\n const getDefaultBudgetValueForCountry = useCallback(\r\n (selectedCountry = countryPreference) => readCountryCurrenciesMappings()\r\n .then((countryCurrenciesMappings) => {\r\n if (_.isEmpty(countryCurrenciesMappings) || _.isEmpty(selectedCountry)) {\r\n return defaultBudgetValue;\r\n }\r\n\r\n const c = selectedCountry.toUpperCase();\r\n const countryCurrency = _.findWhere(countryCurrenciesMappings, { country: c });\r\n\r\n const allowedCurrencies = _.get(countryCurrency, 'currencies');\r\n const defaultCurrency = _.get(countryCurrency, 'defaultCurrency');\r\n\r\n const targetCurrency = _.contains(allowedCurrencies, defaultCurrency)\r\n ? defaultCurrency : _.first(allowedCurrencies);\r\n\r\n if (targetCurrency && DEFAULT_BUDGET_VALUE_FOR_CURRENCY[targetCurrency]) {\r\n return DEFAULT_BUDGET_VALUE_FOR_CURRENCY[targetCurrency];\r\n }\r\n\r\n return defaultBudgetValue;\r\n })\r\n .catch((error) => {\r\n readCurrencyActivity.trace(`Error in readCountryCurrenciesMappings: ${JSON.stringify(error)}`);\r\n return defaultBudgetValue;\r\n }),\r\n [countryPreference, readCountryCurrenciesMappings, readCurrencyActivity]\r\n );\r\n\r\n return { getDefaultBudgetValueForCountry };\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\nimport { createOrUpdateCampaign, readCampaigns, deleteCampaign } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\n\r\nimport { usePreference, preferenceNames } from './use-preference';\r\nimport { useGetDefaultBudgetValueForCountry } from './use-get-budget-default-value-for-country';\r\n\r\nexport function usePmaxCampaignCRUD({\r\n onCreateCampaignDone = _.noop,\r\n onCreateCampaignError = _.noop,\r\n} = {}) {\r\n const { scope } = useContext(ScopeContext);\r\n const { cid, aid, campaignId } = scope.values;\r\n\r\n const [{ value: languagePreference }] = usePreference(preferenceNames.SelectedLanguage);\r\n const { getDefaultBudgetValueForCountry } = useGetDefaultBudgetValueForCountry();\r\n\r\n const readCampaignsPromise = useCallback(() => readCampaigns(cid, aid).then((res) => {\r\n const campaigns = res.value;\r\n return Promise.resolve(campaigns);\r\n }), [aid, cid]);\r\n\r\n const deleteCampaignPromise = useCallback((deleteCampaignId) => {\r\n if (deleteCampaignId) {\r\n return deleteCampaign(deleteCampaignId).then(() => {\r\n scope.remove(['campaignId', 'assetGroupId']);\r\n scope.history.replace({\r\n pathname: scope.history.location.pathname,\r\n search: scope.stringify(),\r\n });\r\n });\r\n }\r\n\r\n return Promise.resolve();\r\n }, [scope]);\r\n\r\n const createOrUpdateCampaignPromise = useCallback(\r\n () => getDefaultBudgetValueForCountry().then((defaultBudgetValue) => {\r\n const campaignData = {\r\n Name: `Performance-Max-${Math.floor(Math.random() * 100)}`,\r\n Budget: {\r\n Amount: defaultBudgetValue,\r\n Type: 'DailyStandard',\r\n },\r\n Status: 'Active',\r\n TimeZone: 'PacificTimeUSCanadaTijuana',\r\n CampaignType: 'PerformanceMax',\r\n BiddingScheme: {\r\n Type: 'MaxConversions', // Enhanced CPC will be supported for Performance Max campaigns in Q1\r\n },\r\n Languages: [languagePreference],\r\n };\r\n\r\n let campaignPromise = () => Promise.resolve();\r\n if (!campaignId) {\r\n campaignPromise = () => createOrUpdateCampaign(campaignData).then((campaign) => {\r\n scope.append({ campaignId: campaign.Id });\r\n scope.history.replace({\r\n pathname: scope.history.location.pathname,\r\n search: scope.stringify(),\r\n });\r\n return campaign;\r\n });\r\n }\r\n\r\n return campaignPromise()\r\n .then((campaign) => {\r\n onCreateCampaignDone();\r\n return campaign;\r\n })\r\n .catch((error) => {\r\n onCreateCampaignError(error);\r\n throw new Error(error);\r\n });\r\n }),\r\n [campaignId, getDefaultBudgetValueForCountry, languagePreference,\r\n onCreateCampaignDone, onCreateCampaignError, scope]\r\n );\r\n\r\n return {\r\n createOrUpdateCampaignPromise,\r\n deleteCampaignPromise,\r\n readCampaignsPromise,\r\n };\r\n}\r\n","import { useContext, useMemo } from 'react';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nexport const useOdataOptions = (pathOverride = undefined) => {\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n CurrentCustomer: currentCustomer,\r\n CurrentAccount: currentAccount,\r\n ServicesEndpoints: { CampaignAPI: host },\r\n CampaignAPIPath: path,\r\n Token: token,\r\n Urls: { SignOutUrl = null } = {},\r\n } = serverContext;\r\n\r\n const cid = currentAccount ? currentCustomer.Id : '';\r\n const aid = currentAccount ? currentAccount.Id : '';\r\n\r\n const oDataOption = useMemo(() => ({\r\n contentType: 'application/json',\r\n host,\r\n path: path || pathOverride,\r\n oDataToken: token,\r\n SignOutUrl,\r\n }), [SignOutUrl, host, path, token, pathOverride]);\r\n\r\n const extraFields = useMemo(() => ({ cid, aid }), [aid, cid]);\r\n\r\n return [oDataOption, extraFields];\r\n};\r\n","import { usePreference, preferenceNames } from './use-preference';\r\n\r\nconst ESTIMATION_API_SUPPORT_LOCALE = ['US', 'ES', 'FR', 'GE', 'IT', 'NE', 'SW', 'DE'];\r\n\r\nexport const useIsEstimationApiSupportedLocale = () => {\r\n const [{ value: countryPreference }] = usePreference(preferenceNames.SelectedCountry);\r\n\r\n if (countryPreference) {\r\n const locale = countryPreference.toUpperCase();\r\n return ESTIMATION_API_SUPPORT_LOCALE.includes(locale);\r\n }\r\n\r\n return false;\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { useDeepMemo } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { useOdataOptions } from './use-odata-options';\r\nimport { useIsEstimationApiSupportedLocale } from './use-is-estimation-api-supported-locale';\r\n\r\nexport const useAudienceReachEstimationV2 = (targets, isEnabled = false) => {\r\n const [OdataOptions, { aid, cid }] = useOdataOptions();\r\n const isEstimationApiSupportedLocale = useIsEstimationApiSupportedLocale();\r\n\r\n const endPoint = `Customers(${cid})/Accounts(${aid})/Default.AudienceEstimationV2`;\r\n\r\n const options = useMemo(() => ({\r\n ...OdataOptions,\r\n path: 'AdInsight/V2/', // override the default path\r\n url: endPoint,\r\n }), [OdataOptions, endPoint]);\r\n\r\n const payload = useDeepMemo({\r\n request: targets,\r\n });\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [data, setData] = useState(null);\r\n\r\n const getAudienceReachEstimation = useCallback(() => {\r\n if (_.isEmpty(payload.request) || !isEstimationApiSupportedLocale || !isEnabled) {\r\n const defaultData = {\r\n EstAudienceSize: {\r\n Value: 0,\r\n Unit: 'None',\r\n },\r\n };\r\n setData(defaultData);\r\n\r\n return Promise.resolve(defaultData);\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n return odata.post({\r\n ...options,\r\n data: payload,\r\n })\r\n .then((res) => {\r\n setData(res);\r\n return res;\r\n })\r\n .catch(err => Promise.reject(err))\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [isEnabled, isEstimationApiSupportedLocale, options, payload]);\r\n\r\n useEffect(() => {\r\n if (!_.isEmpty(payload.request)) {\r\n getAudienceReachEstimation();\r\n }\r\n }, [getAudienceReachEstimation, payload.request]);\r\n\r\n return [{ isLoading, data }, getAudienceReachEstimation];\r\n};\r\n","import _ from 'underscore';\r\n\r\n// currency minimum value comes from:\r\n// https://microsoft.sharepoint.com/:x:/t/MAPPMteamFTE/EchxuPoGaFROg-tM4pgNVngB45DJBXsBQQilJDSQEWh7fw?e=Fep9xL\r\nconst CURRENCY_FALLBACK_MINIMUM_BUDGET = {\r\n ArgentinePeso: 0.05,\r\n AustralianDollar: 0.05,\r\n BrazilianReal: 0.1,\r\n CanadianDollar: 0.05,\r\n ChileanPeso: 5.1,\r\n ColombianPeso: 18.05,\r\n DanishKrone: 0.06,\r\n Euro: 0.05,\r\n HongKongDollar: 1,\r\n IndianRupee: 0.82,\r\n IndonesianRupiah: 480,\r\n JapaneseYen: 5,\r\n MalaysianRingit: 0.15,\r\n MexicanPeso: 0.14,\r\n NewZealandDollar: 0.05,\r\n NigerianNaira: 0.05,\r\n NorwegianKrone: 0.06,\r\n PeruvianNuevoSol: 0.05,\r\n PhilippinePeso: 2,\r\n PolishZloty: 0.05,\r\n SaudiRiyal: 0.05,\r\n SingaporeDollar: 0.05,\r\n SouthAfricanRand: 0.05,\r\n SwedishKrona: 0.07,\r\n SwissFranc: 0.05,\r\n ThaiBaht: 2,\r\n TurkishLira: 0.05,\r\n UKPound: 0.05,\r\n UsDollar: 0.05,\r\n};\r\n\r\n// this is for fallback value,\r\n// if the getUPBudgetSuggestion api return error, or the api doesn't support the locale.\r\n// for currency that in CURRENCY_FALLBACK_MINIMUM_BUDGET,\r\n// we use the value from CURRENCY_FALLBACK_MINIMUM_BUDGET as minimum budget value.\r\n// if currency not in CURRENCY_FALLBACK_MINIMUM_BUDGET, we use the fixed value 0.001 as minimum budget value.\r\n// all currency has the same maximum budget value 50000.\r\nexport const getFallbackEstimates = (currency) => {\r\n const minimumBudget = _.get(CURRENCY_FALLBACK_MINIMUM_BUDGET, currency);\r\n if (minimumBudget) {\r\n return {\r\n GlobalMinimumBudget: {\r\n DailyBudget: minimumBudget, MonthlyBudget: minimumBudget * 20,\r\n },\r\n MinimumBudget: {\r\n DailyBudget: minimumBudget, MonthlyBudget: minimumBudget * 20,\r\n },\r\n CompetitorBudgetLowerBound: null,\r\n SuggestedBudget: {\r\n DailyBudget: 10, MonthlyBudget: 200,\r\n },\r\n CompetitorBudgetUpperBound: null,\r\n MaximumBudget: {\r\n DailyBudget: 20000, MonthlyBudget: 400000,\r\n },\r\n GlobalMaximumBudget: {\r\n DailyBudget: 50000, MonthlyBudget: 1000000,\r\n },\r\n Currency: currency,\r\n };\r\n }\r\n\r\n return {\r\n GlobalMinimumBudget: {\r\n DailyBudget: 0.001, MonthlyBudget: 0.02,\r\n },\r\n MinimumBudget: {\r\n DailyBudget: 0.001, MonthlyBudget: 0.02,\r\n },\r\n CompetitorBudgetLowerBound: null,\r\n SuggestedBudget: {\r\n DailyBudget: 10, MonthlyBudget: 200,\r\n },\r\n CompetitorBudgetUpperBound: null,\r\n MaximumBudget: {\r\n DailyBudget: 20000, MonthlyBudget: 400000,\r\n },\r\n GlobalMaximumBudget: {\r\n DailyBudget: 50000, MonthlyBudget: 1000000,\r\n },\r\n Currency: currency || 'UsDollar',\r\n };\r\n};\r\n\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const addAsset = (payload, cid, aid) => {\r\n const edmEntity = edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Folders['Default.AddAsset'];\r\n\r\n return edmEntity.$makeCall({ payload }).toPromise();\r\n};\r\n","// import _ from 'underscore';\r\nimport { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport { odata } from '@bingads-webui/http-util';\r\n\r\nimport { useOdataOptions } from './use-odata-options';\r\n\r\nexport const useAudienceData = ({ postponeFetch = false, pathOverride = undefined, audienceType = undefined } = {}) => {\r\n const [OdataOptions, { aid, cid }] = useOdataOptions(pathOverride);\r\n\r\n const endPoint = `Customers(${cid})/Accounts(${aid})/Audiences`;\r\n\r\n const options = useMemo(() => ({\r\n ...OdataOptions,\r\n url: endPoint,\r\n data: {\r\n $orderby: 'Name',\r\n audiencetype: audienceType || 'Remessaging,Custom,InMarket,Product,RemarketingSimilar,CustomerList,CombinedList',\r\n deliverychannel: 'BingAds,AIM',\r\n },\r\n }), [OdataOptions, endPoint, audienceType]);\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [data, setData] = useState([]);\r\n\r\n const getAudienceData = useCallback(() => {\r\n setIsLoading(true);\r\n\r\n return odata.get(options)\r\n .then((res) => {\r\n const { value = [] } = res || {};\r\n setData(value);\r\n\r\n return value;\r\n })\r\n .catch(err => Promise.reject(err))\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [options]);\r\n\r\n useEffect(() => {\r\n if (!postponeFetch) {\r\n getAudienceData();\r\n }\r\n }, [getAudienceData, postponeFetch]);\r\n\r\n return [{ isLoading, data }, getAudienceData];\r\n};\r\n","import _ from 'underscore';\r\nimport { useContext, useEffect, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n useCustomerLevelVariables,\r\n useAccountLevelVariables,\r\n usePostponeReadVariables,\r\n} from '@bingads-webui-campaign-react/basic-context-utils';\r\nimport { getTimezoneI18nString } from '@bingads-webui-campaign-react/help';\r\nimport { CurrencyUtils } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { usePromisify, FetchPolicy } from '@bingads-webui-react/overreact';\r\nimport {\r\n useCountries,\r\n useAccount,\r\n useTimeZones,\r\n useCurrencyCountriesMappings,\r\n useCurrencies,\r\n useSubGeographies,\r\n useCountryTimeZonesMapping,\r\n} from '@bingads-webui/overreact-cc';\r\n\r\nimport { useGetSupportedCountryList } from './use-get-supported-country-list';\r\n\r\nfunction convertTimeZonesForCcForm(i18n, timeZones) {\r\n return _.map(timeZones, item => ({\r\n Value: item.id,\r\n Text: i18n.getString(getTimezoneI18nString(item.id)),\r\n }));\r\n}\r\n\r\nexport const useLoadAccountInfo = ({ countryCode, timezonePrefillEnabled }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const customerLevelVariables = useCustomerLevelVariables();\r\n const accountLevelVariables = useAccountLevelVariables();\r\n const postponeReadConfig = usePostponeReadVariables();\r\n\r\n const [{ data: countries }] = useCountries(customerLevelVariables);\r\n const [{ data: account }] = useAccount(accountLevelVariables);\r\n const [{ data: tZones }] = useTimeZones(customerLevelVariables);\r\n const [{ data: currencyCountriesMappings }] = useCurrencyCountriesMappings(customerLevelVariables);\r\n const [{ data: currencies }] = useCurrencies(customerLevelVariables);\r\n const [{ data: countryTimeZonesMapping }, { read: readCountryTimeZonesMapping }]\r\n = useCountryTimeZonesMapping(customerLevelVariables, postponeReadConfig);\r\n const [{ data: statesOrProvinces }, { read: readStatesOrProvinces }]\r\n = useSubGeographies(customerLevelVariables, postponeReadConfig);\r\n const [readStatesOrProvincesAsync, readCountryTimeZonesMappingAsync]\r\n = usePromisify([readStatesOrProvinces, readCountryTimeZonesMapping]);\r\n\r\n const { supportedCountryList, getSupportedCountryList } = useGetSupportedCountryList();\r\n\r\n const isAccountInfoLoaded = account && countries && tZones\r\n && currencyCountriesMappings && currencies && statesOrProvinces\r\n && (!timezonePrefillEnabled || (timezonePrefillEnabled && countryTimeZonesMapping));\r\n\r\n const prefillTimezone = _.isEmpty(countryTimeZonesMapping) ? undefined :\r\n _.first(_.get(_.findWhere(countryTimeZonesMapping, { country: countryCode }), 'timeZones'));\r\n\r\n const preferredTimeZoneCode = timezonePrefillEnabled ? prefillTimezone : _.get(account, ['TimeZone']);\r\n\r\n const timeZones = useMemo(() => (\r\n convertTimeZonesForCcForm(i18n, tZones)\r\n ), [i18n, tZones]);\r\n\r\n const sortedCurrencies = useMemo(() => {\r\n const sorted = CurrencyUtils.sortCurrencies(_.pluck(currencies, 'value'));\r\n return sorted;\r\n }, [currencies]);\r\n\r\n useEffect(() => {\r\n if (_.isEmpty(supportedCountryList)) {\r\n getSupportedCountryList();\r\n }\r\n }, [getSupportedCountryList, supportedCountryList]);\r\n\r\n useEffect(() => {\r\n if (_.isEmpty(statesOrProvinces) && countryCode) {\r\n readStatesOrProvincesAsync({\r\n variables: {\r\n countryCode,\r\n options: {\r\n fetchPolicy: FetchPolicy.NetworkOnly,\r\n },\r\n },\r\n });\r\n }\r\n }, [statesOrProvinces, readStatesOrProvincesAsync, countryCode]);\r\n\r\n useEffect(() => {\r\n if (timezonePrefillEnabled && _.isEmpty(countryTimeZonesMapping)) {\r\n readCountryTimeZonesMappingAsync();\r\n }\r\n }, [countryTimeZonesMapping, readCountryTimeZonesMappingAsync, timezonePrefillEnabled]);\r\n\r\n return {\r\n account,\r\n countries,\r\n timeZones,\r\n currencies: sortedCurrencies,\r\n preferredTimeZoneCode,\r\n statesOrProvinces,\r\n supportedCountryList,\r\n isAccountInfoLoaded,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useState, useMemo, useCallback, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { useCreatePromise } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { SignupUserInfoDialog, useUserInfo } from '@bingads-webui-campaign-react/signup-user-info-form';\r\nimport { usePilotsValue } from '@bingads-webui-campaign-react/basic-context-utils';\r\nimport { useCreateUser } from './use-create-user';\r\n\r\nconst UserCreationContext = React.createContext({\r\n isCreatingUser: false,\r\n createUser: _.noop,\r\n createUserPromise: {},\r\n});\r\n\r\nexport const useUserCreationContext = () => useContext(UserCreationContext);\r\n\r\nexport const UserCreationContextProvider = (props) => {\r\n const {\r\n children,\r\n devConfig,\r\n } = props;\r\n const serverContext = useContext(ServerContext);\r\n const { CurrentAccount, AuthType } = serverContext;\r\n const isChinaSignup = usePilotsValue('isCNMarketExpansionEnabled');\r\n\r\n const createUserPromiseRef = useRef();\r\n const [showUserInfoForm, userInfo, setUserInfo] = useUserInfo(serverContext);\r\n const [isCreatingUser, setIsCreatingUser] = useState(showUserInfoForm);\r\n const [hasError, setHasError] = useState(false);\r\n\r\n const [, {\r\n createPromise,\r\n resolveLastCreatedPromise,\r\n rejectLastCreatedPromise,\r\n }] = useCreatePromise();\r\n\r\n createUserPromiseRef.current = createUserPromiseRef.current || createPromise();\r\n\r\n const instrumentation = useContext(InstrumentationContext);\r\n const uiActivity = useMemo(() => {\r\n if (instrumentation && instrumentation.pmaxLiteSignup) {\r\n const scenario = instrumentation.pmaxLiteSignup.create();\r\n return scenario.userCreation.create();\r\n }\r\n\r\n return { trace: _.noop, error: _.noop };\r\n }, [instrumentation]);\r\n\r\n const onUserCreationStart = useCallback(() => {\r\n setIsCreatingUser(true);\r\n createUserPromiseRef.current = createUserPromiseRef.current || createPromise();\r\n uiActivity.trace('[PMaxLiteSignup] Start creating user');\r\n }, [createPromise, uiActivity]);\r\n\r\n const onUserCreationComplete = useCallback((newServerContext) => {\r\n uiActivity.trace('[PMaxLiteSignup] User created');\r\n resolveLastCreatedPromise(newServerContext);\r\n setIsCreatingUser(false);\r\n }, [resolveLastCreatedPromise, uiActivity]);\r\n\r\n const onUserCreationError = useCallback((error) => {\r\n uiActivity.trace(`[PMaxLiteSignup] User creation failed. Error: ${JSON.stringify(error)}`);\r\n rejectLastCreatedPromise();\r\n createUserPromiseRef.current = undefined;\r\n setHasError(true);\r\n setIsCreatingUser(false);\r\n }, [rejectLastCreatedPromise, uiActivity]);\r\n\r\n const createUser = useCreateUser({\r\n devConfig,\r\n authType: AuthType,\r\n uiActivity,\r\n userInfo,\r\n isChinaSignup,\r\n onUserCreationStart,\r\n onUserCreationComplete,\r\n onUserCreationError,\r\n });\r\n\r\n useEffect(() => {\r\n if (!CurrentAccount && !isCreatingUser && !hasError && !showUserInfoForm) {\r\n createUser();\r\n }\r\n }, [CurrentAccount, createUser, hasError, isCreatingUser, showUserInfoForm]);\r\n\r\n useEffect(() => {\r\n if (CurrentAccount) {\r\n resolveLastCreatedPromise(serverContext);\r\n setIsCreatingUser(false);\r\n }\r\n }, [CurrentAccount, resolveLastCreatedPromise, serverContext, setIsCreatingUser]);\r\n\r\n const onConfirmUserInfo = useCallback((newUserInfo) => {\r\n setUserInfo(newUserInfo);\r\n createUser(newUserInfo);\r\n }, [createUser, setUserInfo]);\r\n\r\n return (\r\n \r\n {children}\r\n {\r\n showUserInfoForm &&\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nUserCreationContextProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n devConfig: PropTypes.shape({}),\r\n};\r\n\r\nUserCreationContextProvider.defaultProps = {\r\n devConfig: {},\r\n};\r\n","export const surveySchema = {\r\n scenario: [{\r\n name: 'appScenario',\r\n value: 'Survey App Activity',\r\n activity: [{\r\n name: 'appActivity',\r\n value: 'Survey Activity logger',\r\n }],\r\n }],\r\n};\r\n\r\nexport const pmaxLiteSchemas = {\r\n scenario: [\r\n {\r\n name: 'defaultScenario',\r\n value: 'Default Scenario',\r\n activity: [{\r\n name: 'logger',\r\n value: 'Default logger of default scenario',\r\n }],\r\n },\r\n {\r\n name: 'appPreloadScenario',\r\n value: 'App preload Scenario',\r\n activity: [\r\n {\r\n name: 'appPreload',\r\n value: 'App preload',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'signupFlowScenario',\r\n value: 'signup flow',\r\n activity: [\r\n {\r\n name: 'signupFlow',\r\n value: 'signup flow',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'customerJourneyScenario',\r\n value: 'customer journey',\r\n activity: [\r\n {\r\n name: 'customerJourney',\r\n value: 'customer journey',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'usageReport',\r\n value: 'UsageReport Scenario',\r\n activity: [\r\n {\r\n name: 'signUpBundleLogin',\r\n value: 'Login sign up bundle',\r\n }, {\r\n name: 'signUpBundleResume',\r\n value: 'Resume sign up bundle',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'overreactRequest',\r\n value: 'Overreact Request',\r\n activity: [\r\n {\r\n name: 'logger',\r\n value: 'Overreact Request logger',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'pmaxLiteLanding',\r\n value: 'Pmax Lite Landing Scenario',\r\n activity: [\r\n {\r\n name: 'logger',\r\n value: 'Pmax Lite Landing logger',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'pmaxLiteSignup',\r\n value: 'Pmax Lite Signup Scenario',\r\n activity: [\r\n {\r\n name: 'scope',\r\n value: 'Scope Change logger',\r\n }, {\r\n name: 'supportControl',\r\n value: 'Support Control logger',\r\n }, {\r\n name: 'userCreation',\r\n value: 'User Creation logger',\r\n }, {\r\n name: 'smartPageStep',\r\n value: 'Smart Page Step logger',\r\n }, {\r\n name: 'cancelDialog',\r\n value: 'Cancel dialog logger',\r\n }, {\r\n name: 'coupon',\r\n value: 'Coupon logger',\r\n }, {\r\n name: 'suggestion',\r\n value: 'Suggestion service logger',\r\n }, {\r\n name: 'addFundsStep',\r\n value: 'Add Funds Step logger',\r\n }, {\r\n name: 'languageCountryStep',\r\n value: 'Language Country Step logger',\r\n }, {\r\n name: 'websiteStep',\r\n value: 'Website Step logger',\r\n }, {\r\n name: 'campaignModeStep',\r\n value: 'Campaign Mode Step logger',\r\n }, {\r\n name: 'conversionUpsellStep',\r\n value: 'Conversion Upsell Step logger',\r\n }, {\r\n name: 'currencyCountryMapping',\r\n value: 'CurrencyCountryMapping logger',\r\n }, {\r\n name: 'readSupportedCountryList',\r\n value: 'SupportedCountryList logger',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'pmaxLiteAdAssets',\r\n value: 'Pmax Lite Signup Ad Assets Scenario',\r\n activity: [\r\n {\r\n name: 'adAssetsStep',\r\n value: 'Ad assets logger',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'pmaxLiteTargeting',\r\n value: 'Pmax Lite Signup Targeting Scenario',\r\n activity: [\r\n {\r\n name: 'locationTargeting',\r\n value: 'location targeting logger',\r\n },\r\n {\r\n name: 'audienceSignalTargeting',\r\n value: 'audience signal logger',\r\n },\r\n {\r\n name: 'searchThemesTargeting',\r\n value: 'search themes logger',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'pmaxLiteBudget',\r\n value: 'Pmax Lite Signup Budget Scenario',\r\n activity: [\r\n {\r\n name: 'budgetStep',\r\n value: 'Budget logger',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'pmaxLiteAccountDetails',\r\n value: 'Pmax Lite Signup Account Details Scenario',\r\n activity: [\r\n {\r\n name: 'accountDetailsStep',\r\n value: 'AccountDetails logger',\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n","import { isInternalUrl } from '@bingads-webui/url-util';\r\nimport { AjaxStub, AjaxEventHandler, ErrorStub } from '@bingads-webui/instrumentation-stubs';\r\nimport { getInstrumentation as getInstrumentationInstance } from '@bingads-webui-campaign/instrumentation-setup';\r\nimport {\r\n OdataErrorMapper,\r\n CampaignApiErrorMapper,\r\n UrlErrorMapper,\r\n odataErrorCodes,\r\n campaignApiErrorCodes,\r\n invalidDomains,\r\n} from '@bingads-webui-campaign/instrumentation';\r\nimport { pmaxLiteSchemas } from './pmax-lite-schemas';\r\n\r\nexport const SUB_SYSTEM_NAMES = {\r\n PMaxLiteSignup: 'pmax-lite-signup',\r\n};\r\n\r\nconst errorMappers = {\r\n odataErrorMapper: new OdataErrorMapper(odataErrorCodes),\r\n campaignApiErrorMapper: new CampaignApiErrorMapper(campaignApiErrorCodes),\r\n urlErrorMapper: new UrlErrorMapper(invalidDomains),\r\n};\r\n\r\nfunction stub(instrumentation, serverContext) {\r\n const stubOptions = {\r\n pageTrackingId: serverContext && serverContext.PageTrackingId,\r\n lcid: serverContext && serverContext.CultureLcid,\r\n };\r\n\r\n const shouldAddHeaders = ajaxContext => isInternalUrl(ajaxContext.url);\r\n const eventHandler = new AjaxEventHandler({\r\n errorMappers,\r\n shouldAddHeaders,\r\n });\r\n\r\n const ajaxStub = new AjaxStub({\r\n stubOptions,\r\n eventHandler,\r\n instrumentation,\r\n });\r\n\r\n const errorStub = new ErrorStub({\r\n instrumentation,\r\n });\r\n\r\n ajaxStub.init();\r\n errorStub.init();\r\n}\r\n\r\nexport const getInstrumentationService = ({ instrumentation, serverContext }) => {\r\n instrumentation.addScenario(pmaxLiteSchemas);\r\n const defaultScenario = instrumentation.defaultScenario.create();\r\n const logger = defaultScenario.logger.create();\r\n\r\n stub(instrumentation, serverContext);\r\n\r\n return {\r\n instrumentation,\r\n logger,\r\n };\r\n};\r\n\r\nexport const getInstrumentation = ({\r\n serverContext,\r\n devConfig,\r\n subSystemName = SUB_SYSTEM_NAMES.PMaxLiteSignup,\r\n}) => {\r\n const {\r\n CurrentCustomer,\r\n CurrentAccount,\r\n CurrentUser,\r\n } = serverContext;\r\n\r\n const userContext = {\r\n CurrentCustomer: CurrentCustomer || {},\r\n CurrentAccount: CurrentAccount || {},\r\n CurrentUser: CurrentUser || {},\r\n };\r\n\r\n return getInstrumentationInstance({\r\n pageTrackingId: serverContext.PageTrackingId,\r\n errorMappers,\r\n isInDevelopmentMode: devConfig.isInDevelopmentMode,\r\n userContext,\r\n applicationName: {\r\n systemName: 'campaign',\r\n subSystemName,\r\n },\r\n serverContext: {\r\n // Ui Next is using dynamic permissions config\r\n // We don't have that in sign up bundle context. Enable it for all users to expose errors.\r\n DynamicPermissions: {\r\n EnableLoggingForUnhandledPromiseRejections: true,\r\n },\r\n ...serverContext,\r\n ...userContext,\r\n },\r\n objectsToStub: [],\r\n });\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useState, memo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\n\r\nexport const InstrumentationServiceContext = React.createContext([null, _.noop]);\r\n\r\nexport const InstrumentationWithServiceProvider = memo((props) => {\r\n const {\r\n context,\r\n children,\r\n } = props;\r\n\r\n const [instrumentationService, setInstrumentationService] = useState(context);\r\n const { instrumentation = null } = instrumentationService || {};\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n});\r\n\r\nInstrumentationWithServiceProvider.propTypes = {\r\n context: PropTypes.shape({\r\n logger: PropTypes.shape({}).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]).isRequired,\r\n};\r\n","import { checkUserQueryParams } from '@bingads-webui-campaign/global-app-init';\r\nimport { keepAliveInstance } from '@bingads-webui/keep-alive';\r\nimport { updateGlobalQualtricsData } from '@bingads-webui-campaign/qualtrics';\r\n\r\nimport { getInstrumentation, getInstrumentationService } from '../instrumentation';\r\n\r\nexport function setupInstrumentation({\r\n serverContext,\r\n devConfig,\r\n setInstrumentationService,\r\n subSystemName,\r\n}) {\r\n // Create new instrumentationScenario and make it available to the rest of the wizard\r\n const instrumentation = getInstrumentation({\r\n serverContext,\r\n devConfig,\r\n subSystemName,\r\n });\r\n const instrumentationService = getInstrumentationService({ instrumentation, serverContext });\r\n setInstrumentationService(instrumentationService);\r\n\r\n return instrumentation;\r\n}\r\n\r\nexport function setupGlobal({\r\n serverContext,\r\n devConfig,\r\n setInstrumentationService,\r\n subSystemName,\r\n}) {\r\n // Update url with new User\r\n checkUserQueryParams(serverContext, true);\r\n\r\n // Valid user cookie should be set now, safe to start keep-alive polling\r\n keepAliveInstance.start();\r\n\r\n updateGlobalQualtricsData(serverContext);\r\n\r\n return setupInstrumentation({\r\n serverContext,\r\n devConfig,\r\n setInstrumentationService,\r\n subSystemName,\r\n });\r\n}\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\n\r\nconst getStyles = () => ({\r\n shimmerWrapper: {\r\n height: '100%',\r\n padding: '30px 0',\r\n background: '#fff',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n alignItems: 'center',\r\n borderRadius: '2px',\r\n '& .header-shimmer': {\r\n margin: '20px 0',\r\n },\r\n '& .select-shimmer, .label-shimmer': {\r\n marginTop: 5,\r\n },\r\n },\r\n});\r\n\r\nexport const LanguageCountryStepShimmer = () => {\r\n const classes = useDefaultStyles(getStyles);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n const isSmallSize = displayMode === 's';\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","import React, { useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\n\r\nconst getStyles = () => ({\r\n shimmerWrapper: {\r\n height: '100%',\r\n padding: '30px 0',\r\n background: '#fff',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n alignItems: 'center',\r\n borderRadius: '2px',\r\n '& .header-shimmer': {\r\n margin: '20px 0',\r\n },\r\n '& .option-container': {\r\n marginBottom: 18,\r\n width: 400,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n '& .option-shimmer': {\r\n display: 'inline-block',\r\n width: 192,\r\n height: 146,\r\n },\r\n },\r\n '& .input-shimmer, .label-shimmer': {\r\n marginTop: 8,\r\n },\r\n },\r\n 'shimmerWrapper-s': {\r\n '& .option-container': {\r\n width: 280,\r\n '& .option-shimmer': {\r\n display: 'inline-block',\r\n width: 132,\r\n height: 146,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const WebsiteStepShimmer = () => {\r\n const classes = useDefaultStyles(getStyles);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n const isSmallSize = displayMode === 's';\r\n\r\n const optionShimmer = useMemo(() => (\r\n \r\n ), [isSmallSize]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {optionShimmer}\r\n {optionShimmer}\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\n\r\nconst getStyles = () => ({\r\n shimmerWrapper: {\r\n height: '100%',\r\n padding: '30px 0',\r\n background: '#fff',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n alignItems: 'center',\r\n borderRadius: '2px',\r\n '& .header-shimmer': {\r\n margin: '20px 0',\r\n },\r\n '& .option-container': {\r\n width: 500,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n '& .option-shimmer': {\r\n display: 'inline-block',\r\n width: 240,\r\n height: 300,\r\n marginBottom: 18,\r\n },\r\n },\r\n },\r\n 'shimmerWrapper-m': {\r\n '& .option-container': {\r\n width: 280,\r\n flexDirection: 'column',\r\n '& .option-shimmer': {\r\n width: 280,\r\n height: 250,\r\n },\r\n },\r\n },\r\n 'shimmerWrapper-s': {\r\n '& .option-container': {\r\n width: 240,\r\n flexDirection: 'column',\r\n '& .option-shimmer': {\r\n width: 240,\r\n height: 200,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const CampaignModeStepShimmer = () => {\r\n const classes = useDefaultStyles(getStyles);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n\r\n const { optionHeight, optionWidth } = useMemo(() => {\r\n if (displayMode === 's') {\r\n return {\r\n optionHeight: 200,\r\n optionWidth: 240,\r\n };\r\n }\r\n if (displayMode === 'm') {\r\n return {\r\n optionHeight: 250,\r\n optionWidth: 280,\r\n };\r\n }\r\n return {\r\n optionHeight: 300,\r\n optionWidth: 240,\r\n };\r\n }, [displayMode]);\r\n\r\n const optionShimmer = useMemo(() => (\r\n \r\n ), [optionHeight, optionWidth]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {optionShimmer}\r\n {optionShimmer}\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst getAdAssetsFormShimmer = () => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n width: '100%',\r\n gap: '16px',\r\n },\r\n title: {\r\n marginBottom: '8px',\r\n },\r\n description: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n gap: '8px',\r\n width: '100%',\r\n marginBottom: '16px',\r\n\r\n '& div:not(:last-child)': {\r\n width: '100%',\r\n },\r\n },\r\n section: {\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport const AdAssetsFormShimmer = () => {\r\n const classes = useDefaultStyles(getAdAssetsFormShimmer);\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst getAdAssetsPreviewerShimmerStyles = () => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n width: '400px',\r\n gap: '8px',\r\n },\r\n});\r\n\r\nexport const AdAssetsPreviewerShimmer = () => {\r\n const classes = useDefaultStyles(getAdAssetsPreviewerShimmerStyles);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n","export const SMART_PAGE_PATHS = {\r\n // Smart page\r\n SMART_PAGE_SIGNUP: 'SMART_PAGE_SIGNUP',\r\n SMART_PAGE_EDITOR: 'SMART_PAGE_EDITOR',\r\n SMART_PAGE_CUSTOM_DOMAIN: 'SMART_PAGE_CUSTOM_DOMAIN',\r\n};\r\n\r\nexport const ONBOARDING_PATHS = {\r\n CAMPAIGN_CREATION_METHOD: 'CAMPAIGN_CREATION_METHOD',\r\n LANGUAGE_COUNTRY: 'LANGUAGE_COUNTRY',\r\n WEBSITE: 'WEBSITE',\r\n CAMPAIGN_MODE: 'CAMPAIGN_MODE',\r\n\r\n // Import\r\n GOOGLE_IMPORT: 'GOOGLE_IMPORT',\r\n FACEBOOK_IMPORT: 'FACEBOOK_IMPORT',\r\n\r\n ...SMART_PAGE_PATHS,\r\n};\r\n\r\nexport const PREVIEW_TO_NON_PREVIEW_MAPPING = {\r\n PREVIEW_ASSETS: 'AD_ASSETS',\r\n PREVIEW_ACCOUNT: 'ACCOUNT_DETAILS',\r\n PREVIEW_PAYMENT: 'PAYMENT',\r\n PREVIEW_ADD_FUNDS: 'ADD_FUNDS',\r\n};\r\n\r\nexport const NON_PREVIEW_TO_PREVIEW_MAPPING = {\r\n AD_ASSETS: 'PREVIEW_ASSETS',\r\n TARGETING: 'PREVIEW_ASSETS',\r\n BUDGET: 'PREVIEW_ASSETS',\r\n ACCOUNT_DETAILS: 'PREVIEW_ACCOUNT',\r\n PAYMENT: 'PREVIEW_PAYMENT',\r\n ADD_FUNDS: 'PREVIEW_ADD_FUNDS',\r\n};\r\n\r\nexport const CAMPAIGN_CREATION_PATHS = {\r\n // PMAX campaign creation\r\n AD_ASSETS: 'AD_ASSETS',\r\n TARGETING: 'TARGETING',\r\n BUDGET: 'BUDGET',\r\n PREVIEW_ASSETS: 'PREVIEW_ASSETS',\r\n};\r\n\r\nexport const PMAX_LITE_WIZARD_STEP_PATHS = {\r\n ...ONBOARDING_PATHS,\r\n ...CAMPAIGN_CREATION_PATHS,\r\n\r\n // Account and payment\r\n ACCOUNT_DETAILS: 'ACCOUNT_DETAILS',\r\n PAYMENT: 'PAYMENT',\r\n ADD_FUNDS: 'ADD_FUNDS',\r\n\r\n PREVIEW_ACCOUNT: 'PREVIEW_ACCOUNT',\r\n PREVIEW_PAYMENT: 'PREVIEW_PAYMENT',\r\n PREVIEW_ADD_FUNDS: 'PREVIEW_ADD_FUNDS',\r\n\r\n CONVERSION_UPSELL: 'CONVERSION_UPSELL',\r\n IMPORT_COMPLETE: 'IMPORT_COMPLETE',\r\n};\r\n\r\nexport const CARD_STYLE_PATHS = [\r\n ONBOARDING_PATHS.CAMPAIGN_CREATION_METHOD,\r\n ONBOARDING_PATHS.LANGUAGE_COUNTRY,\r\n ONBOARDING_PATHS.WEBSITE,\r\n ONBOARDING_PATHS.CAMPAIGN_MODE,\r\n ONBOARDING_PATHS.SMART_PAGE_SIGNUP,\r\n];\r\n\r\nexport const stepToPage = {\r\n [PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD]: 'pmaxlite010.creationMethod',\r\n // Start Import\r\n [PMAX_LITE_WIZARD_STEP_PATHS.GOOGLE_IMPORT]: 'pmaxlite020.googleImport',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.FACEBOOK_IMPORT]: 'pmaxlite020.facebookImport',\r\n // End Import\r\n [PMAX_LITE_WIZARD_STEP_PATHS.LANGUAGE_COUNTRY]: 'pmaxlite020.languageCountry',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.WEBSITE]: 'pmaxlite030.website',\r\n // Start Smart Page\r\n [PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_SIGNUP]: 'pmaxlite030.smartpage.signup',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_EDITOR]: 'pmaxlite030.smartpage.editor',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_CUSTOM_DOMAIN]: 'pmaxlite030.smartpage.customDomain',\r\n // End Smart Page\r\n [PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_MODE]: 'pmaxlite040.campaignMode',\r\n // Start PMax Campaign\r\n [PMAX_LITE_WIZARD_STEP_PATHS.AD_ASSETS]: 'pmaxlite050.pmax.buildAds',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.TARGETING]: 'pmaxlite050.pmax.targeting',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.BUDGET]: 'pmaxlite050.pmax.budget',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ASSETS]: 'pmaxlite050.pmax.buildAds',\r\n // End PMax Campaign\r\n [PMAX_LITE_WIZARD_STEP_PATHS.ACCOUNT_DETAILS]: 'pmaxlite060.accountDetails',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.PAYMENT]: 'pmaxlite070.payment',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.ADD_FUNDS]: 'pmaxlite075.paymentAddFunds',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ACCOUNT]: 'pmaxlite060.accountDetails',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_PAYMENT]: 'pmaxlite070.payment',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ADD_FUNDS]: 'pmaxlite075.paymentAddFunds',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.CONVERSION_UPSELL]: 'pmaxlite080.conversionUpsell',\r\n [PMAX_LITE_WIZARD_STEP_PATHS.IMPORT_COMPLETE]: 'pmaxlite085.importComplete',\r\n};\r\n","import { SIGNUP_SUB_FLOW } from '@bingads-webui-campaign-react/shared-app-capi';\r\nimport { PMAX_LITE_WIZARD_STEP_PATHS, PREVIEW_TO_NON_PREVIEW_MAPPING, NON_PREVIEW_TO_PREVIEW_MAPPING } from './constants';\r\n\r\nexport const getFlow = ({\r\n isSmartPage,\r\n isSmartPageCustomDomainSupported,\r\n isSkipCampaign,\r\n isGoogleImport,\r\n isFacebookImport,\r\n isChinaSignup,\r\n psd2Country,\r\n isPreviewFlow,\r\n} = {}) => {\r\n const paymentStep = isPreviewFlow\r\n ? PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_PAYMENT\r\n : PMAX_LITE_WIZARD_STEP_PATHS.PAYMENT;\r\n\r\n const addFundsStep = isPreviewFlow\r\n ? PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ADD_FUNDS\r\n : PMAX_LITE_WIZARD_STEP_PATHS.ADD_FUNDS;\r\n\r\n // psd2Country will be set if user choose prepay + credit card + pds2Country (Eg. Germany)\r\n const paymentSteps = psd2Country ? [\r\n paymentStep,\r\n addFundsStep,\r\n ] : [\r\n paymentStep,\r\n ];\r\n\r\n const accountStep = isPreviewFlow\r\n ? PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ACCOUNT\r\n : PMAX_LITE_WIZARD_STEP_PATHS.ACCOUNT_DETAILS;\r\n\r\n const campaignCreationSteps = isPreviewFlow ? [PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ASSETS] : [\r\n PMAX_LITE_WIZARD_STEP_PATHS.AD_ASSETS,\r\n PMAX_LITE_WIZARD_STEP_PATHS.TARGETING,\r\n PMAX_LITE_WIZARD_STEP_PATHS.BUDGET,\r\n ];\r\n\r\n if (isFacebookImport) {\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n PMAX_LITE_WIZARD_STEP_PATHS.FACEBOOK_IMPORT,\r\n ];\r\n }\r\n\r\n if (isGoogleImport) {\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n PMAX_LITE_WIZARD_STEP_PATHS.GOOGLE_IMPORT,\r\n ];\r\n }\r\n\r\n if (isChinaSignup) {\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n accountStep,\r\n ];\r\n }\r\n\r\n if (isSmartPage) {\r\n if (isSmartPageCustomDomainSupported) {\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n PMAX_LITE_WIZARD_STEP_PATHS.LANGUAGE_COUNTRY,\r\n PMAX_LITE_WIZARD_STEP_PATHS.WEBSITE,\r\n PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_SIGNUP,\r\n PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_EDITOR,\r\n PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_CUSTOM_DOMAIN,\r\n ...campaignCreationSteps,\r\n accountStep,\r\n ...paymentSteps,\r\n ];\r\n }\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n PMAX_LITE_WIZARD_STEP_PATHS.LANGUAGE_COUNTRY,\r\n PMAX_LITE_WIZARD_STEP_PATHS.WEBSITE,\r\n PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_SIGNUP,\r\n PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_EDITOR,\r\n ...campaignCreationSteps,\r\n accountStep,\r\n ...paymentSteps,\r\n ];\r\n }\r\n\r\n if (isSkipCampaign) {\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n PMAX_LITE_WIZARD_STEP_PATHS.LANGUAGE_COUNTRY,\r\n PMAX_LITE_WIZARD_STEP_PATHS.WEBSITE,\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_MODE,\r\n accountStep,\r\n ...paymentSteps,\r\n ];\r\n }\r\n\r\n // default is pmax campaign creation flow\r\n return [\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_CREATION_METHOD,\r\n PMAX_LITE_WIZARD_STEP_PATHS.LANGUAGE_COUNTRY,\r\n PMAX_LITE_WIZARD_STEP_PATHS.WEBSITE,\r\n PMAX_LITE_WIZARD_STEP_PATHS.CAMPAIGN_MODE,\r\n ...campaignCreationSteps,\r\n accountStep,\r\n ...paymentSteps,\r\n PMAX_LITE_WIZARD_STEP_PATHS.CONVERSION_UPSELL,\r\n ];\r\n};\r\n\r\nexport const convertStepIdForPreviewFlow = (isPreviewFlow, currentStepId) => {\r\n if (isPreviewFlow) {\r\n return NON_PREVIEW_TO_PREVIEW_MAPPING[currentStepId] || currentStepId;\r\n }\r\n return PREVIEW_TO_NON_PREVIEW_MAPPING[currentStepId] || currentStepId;\r\n};\r\n\r\nexport const getSubFlowFromCurrentFlow = (currentFlow) => {\r\n // currentFlow is an array of step ids\r\n if (currentFlow.includes(PMAX_LITE_WIZARD_STEP_PATHS.FACEBOOK_IMPORT)) {\r\n return SIGNUP_SUB_FLOW.FacebookImport;\r\n }\r\n if (currentFlow.includes(PMAX_LITE_WIZARD_STEP_PATHS.GOOGLE_IMPORT)) {\r\n return SIGNUP_SUB_FLOW.GoogleImport;\r\n }\r\n if (currentFlow.includes(PMAX_LITE_WIZARD_STEP_PATHS.SMART_PAGE_SIGNUP)) {\r\n return SIGNUP_SUB_FLOW.SmartPage;\r\n }\r\n if (!currentFlow.includes(PMAX_LITE_WIZARD_STEP_PATHS.AD_ASSETS)\r\n && !currentFlow.includes(PMAX_LITE_WIZARD_STEP_PATHS.PREVIEW_ASSETS)) {\r\n return SIGNUP_SUB_FLOW.SkipCampaign;\r\n }\r\n return SIGNUP_SUB_FLOW.CampaignCreation;\r\n};\r\n","import { useCallback, useContext } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { usePilotsValue } from '@bingads-webui-campaign-react/basic-context-utils';\r\nimport { getCampaignPageUrl, getUrlForPath } from '@bingads-webui-campaign-react/shared-app-capi';\r\nimport { isSDK, isFirefoxSDKSignupScenario, getSDKParams } from '@bingads-webui-campaign-react/sdk-utils';\r\n\r\nexport const useSubmitToMainBundle = () => {\r\n const { scope } = useContext(ScopeContext);\r\n const { campaignId, assetGroupId } = scope.values;\r\n const serverContext = useContext(ServerContext);\r\n const isChinaSignup = usePilotsValue('isCNMarketExpansionEnabled');\r\n\r\n const submitToMainBundle = useCallback(({ goToUrl } = {}) => {\r\n let mainBundleUrl;\r\n if (isSDK()) {\r\n const { mkt } = getSDKParams();\r\n mainBundleUrl = getCampaignPageUrl(serverContext, 'sdkcampaignoverview', {\r\n campaignId,\r\n assetGroupId,\r\n isSDK: true,\r\n mkt,\r\n });\r\n\r\n // For firefox, we need to navigate to sdkintermediate who will call document.requestStorageAccess silently\r\n // to gain the storage permission of ui.ads.microsoft.com\r\n if (isFirefoxSDKSignupScenario()) {\r\n mainBundleUrl = getUrlForPath(serverContext, 'campaign/sdkintermediate', {\r\n RURL: mainBundleUrl,\r\n });\r\n }\r\n } else if (isChinaSignup) {\r\n mainBundleUrl = getCampaignPageUrl(serverContext, 'overview');\r\n } else {\r\n mainBundleUrl = campaignId\r\n ? getCampaignPageUrl(serverContext, 'overview', { campaignId })\r\n : getCampaignPageUrl(serverContext, 'createcampaign/objective');\r\n }\r\n if (goToUrl) {\r\n goToUrl(mainBundleUrl);\r\n } else {\r\n window.location.replace(mainBundleUrl);\r\n }\r\n }, [isChinaSignup, serverContext, campaignId, assetGroupId]);\r\n\r\n return submitToMainBundle;\r\n};\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\n\r\nexport const initLegacyOdata = (serverContext) => {\r\n const hostname = document.location.origin.toLowerCase();\r\n const isLocal = () => {\r\n // For sign up local environment, the hostname is ccui.devdev.bingads.microsoft.com\r\n if (hostname.indexOf('devdev') > -1) {\r\n return true;\r\n }\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n config.set('odata.url', serverContext.ServicesEndpoints.CampaignAPI);\r\n config.set('odata.path', odataPath);\r\n config.set('odata.token', serverContext.Token);\r\n};\r\n","import React, { useContext } from 'react';\r\n\r\nexport const SuggestionsContext = React.createContext({});\r\n\r\nexport const useSuggestionsContext = () => useContext(SuggestionsContext);\r\n","import React, { useContext, useMemo, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useSuggestionsService, STATES } from '@bingads-webui-campaign-react/simplified-sign-up-suggestions';\r\n\r\nimport { SuggestionsContext } from './suggestions-context';\r\nimport { useLoadBISuggestions } from './services/use-load-bi-suggestions';\r\nimport { useLoadTargetsSuggestions } from './services/use-load-target-suggestions';\r\n\r\nfunction SuggestionsContextInt(props) {\r\n const {\r\n updateValue,\r\n } = props;\r\n\r\n const { loadBISuggestions } = useLoadBISuggestions();\r\n const { loadTargetsSuggestions } = useLoadTargetsSuggestions();\r\n\r\n const {\r\n state,\r\n send,\r\n } = useSuggestionsService({\r\n loadBISuggestions,\r\n loadTargetsSuggestions,\r\n });\r\n\r\n const {\r\n isRSADone,\r\n isImagesDone,\r\n isTargetsDone,\r\n isBIDone,\r\n allDone,\r\n } = state.context.flags;\r\n const {\r\n rsa,\r\n images,\r\n targets,\r\n bi,\r\n } = state.context.outputs;\r\n\r\n const isInitState = state.matches(STATES.INIT);\r\n\r\n const value = useMemo(() => ({\r\n isRSADone,\r\n isImagesDone,\r\n isTargetsDone,\r\n isBIDone,\r\n allDone,\r\n rsa,\r\n images,\r\n targets,\r\n bi,\r\n send,\r\n isInitState,\r\n }), [allDone, bi, images, isBIDone, isImagesDone, isInitState, isRSADone, isTargetsDone, rsa, send, targets]);\r\n\r\n useEffect(() => {\r\n updateValue(value);\r\n }, [updateValue, value]);\r\n\r\n return null;\r\n}\r\n\r\nSuggestionsContextInt.propTypes = {\r\n updateValue: PropTypes.func.isRequired,\r\n};\r\n\r\nexport function SuggestionsContextProvider(props) {\r\n const {\r\n children,\r\n } = props;\r\n\r\n const { scope } = useContext(ScopeContext);\r\n const { aid } = scope.values;\r\n const [value, updateValue] = useState({});\r\n\r\n return (\r\n \r\n {children}\r\n {aid &&\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\nSuggestionsContextProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext, useMemo } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { loadBusinessInfoRecommendation } from '@bingads-webui-campaign-react/pmax-lite-data';\r\n\r\nexport function useLoadBISuggestions() {\r\n const { scope } = useContext(ScopeContext);\r\n const {\r\n cid, aid,\r\n } = scope.values;\r\n\r\n const instrumentation = useContext(InstrumentationContext);\r\n const activity = useMemo(() => {\r\n if (instrumentation && instrumentation.pmaxLiteSignup) {\r\n const scenario = instrumentation.pmaxLiteSignup.create();\r\n return scenario.suggestion.create();\r\n }\r\n return { trace: _.noop, error: _.noop };\r\n }, [instrumentation]);\r\n\r\n const loadBISuggestions = useCallback((context) => {\r\n const {\r\n url,\r\n language,\r\n } = context.inputs;\r\n\r\n if (!url) {\r\n activity.trace('loadBISuggestions - url is empty');\r\n return Promise.resolve();\r\n }\r\n\r\n const payload = { url, language };\r\n\r\n activity.trace(`loadBISuggestions - payload: ${JSON.stringify(payload)}, cid: ${cid}, aid: ${aid}`);\r\n\r\n return loadBusinessInfoRecommendation(payload, cid, aid)\r\n .timeout(5000)\r\n .then((response) => {\r\n const {\r\n BusinessName,\r\n InternationalPhoneNumber,\r\n PhoneNumber,\r\n Addresses,\r\n } = response;\r\n\r\n return {\r\n businessName: BusinessName,\r\n businessAddress: _.first(Addresses),\r\n internationalPhoneNumber: InternationalPhoneNumber,\r\n phoneNumber: PhoneNumber,\r\n };\r\n })\r\n .catch((error) => {\r\n // Do not show error message to user since suggestion is nice to have\r\n activity.trace(`loadBISuggestions failed - error: ${JSON.stringify(error)}. payload: ${JSON.stringify(payload)}`);\r\n });\r\n }, [activity, aid, cid]);\r\n\r\n return {\r\n loadBISuggestions,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext, useMemo } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { loadTargetRecommendation } from '@bingads-webui-campaign-react/pmax-lite-data';\r\n\r\nexport function useLoadTargetsSuggestions() {\r\n const { scope } = useContext(ScopeContext);\r\n const {\r\n cid, aid,\r\n } = scope.values;\r\n\r\n const instrumentation = useContext(InstrumentationContext);\r\n const activity = useMemo(() => {\r\n if (instrumentation && instrumentation.pmaxLiteSignup) {\r\n const scenario = instrumentation.pmaxLiteSignup.create();\r\n return scenario.suggestion.create();\r\n }\r\n return { trace: _.noop, error: _.noop };\r\n }, [instrumentation]);\r\n\r\n const loadTargetsSuggestions = useCallback((context) => {\r\n const {\r\n url,\r\n } = context.inputs;\r\n\r\n if (!url) {\r\n activity.trace('loadTargetsSuggestions - url is empty');\r\n return Promise.resolve();\r\n }\r\n\r\n const payload = { url };\r\n\r\n activity.trace(`loadTargetRecommendation - payload: ${JSON.stringify(payload)}, cid: ${cid}, aid: ${aid}`);\r\n\r\n return loadTargetRecommendation(payload, cid, aid)\r\n .timeout(5000)\r\n .then(response => response.value)\r\n .catch((error) => {\r\n // Do not show error message to user since suggestion is nice to have\r\n activity.trace(`loadTargetRecommendation failed - error: ${JSON.stringify(error)}. payload: ${JSON.stringify(payload)}`);\r\n });\r\n }, [activity, aid, cid]);\r\n\r\n return {\r\n loadTargetsSuggestions,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { useEffect, useState } from 'react';\r\nimport { usePreference, preferenceNames } from '@bingads-webui-campaign-react/pmax-lite-data';\r\nimport { useWizardService, getCurrentStepId, getFlowFactor, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { EVENTS } from '@bingads-webui-campaign-react/simplified-sign-up-suggestions';\r\nimport { ONBOARDING_PATHS } from '@bingads-webui-campaign-react/pmax-lite-wizard-utils';\r\n\r\nimport { useSuggestionsContext } from './suggestions-context';\r\n\r\nexport const SuggestionsResumer = () => {\r\n const { state } = useWizardService();\r\n const currentStepId = getCurrentStepId(state);\r\n const isSmartPage = getFlowFactor(state, 'isSmartPage');\r\n const { cache } = getWizardData(state);\r\n const { website: websiteFromCache } = cache || {};\r\n\r\n const [{ value: languagePreference }] = usePreference(preferenceNames.SelectedLanguage);\r\n const [{ value: websitePreference }] = usePreference(preferenceNames.WebsiteUrl);\r\n const [{ value: smartPageUrlPreference }] = usePreference(preferenceNames.SmartPageUrl);\r\n const urlForSuggestionService = isSmartPage ? smartPageUrlPreference : (websitePreference || websiteFromCache);\r\n\r\n const [isSuggestionInitialized, setIsSuggestionInitialized] = useState(false);\r\n const { send, isInitState } = useSuggestionsContext();\r\n\r\n useEffect(() => {\r\n if (!isSuggestionInitialized && isInitState && languagePreference\r\n && !_.contains(ONBOARDING_PATHS, currentStepId)) {\r\n const suggestionsPayload = {\r\n isSmartMode: false,\r\n isPMaxLite: true,\r\n url: urlForSuggestionService,\r\n language: languagePreference,\r\n };\r\n\r\n setIsSuggestionInitialized(true);\r\n send(EVENTS.LOAD, suggestionsPayload);\r\n }\r\n }, [currentStepId, isInitState, isSuggestionInitialized, languagePreference, send, urlForSuggestionService]);\r\n\r\n return null;\r\n};\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport { targetOptions } from '@bingads-webui-campaign-react/location-targeting';\r\nimport { formatGenders, formatAgeRanges } from '@bingads-webui-campaign-react/audience-demographic';\r\n\r\nexport const getLocationTargetsEditorStrings = i18n => ({\r\n noResultsMessage: i18n.getString(_TL_('Location does not exist or cannot be targeted. Enter a new location or add a radius around a location.')),\r\n description: i18n.getString(_TL_('For example, coordinates, ZIP/postal code, state/province, or country/region.')),\r\n label: i18n.getString(_TL_('Search for location')),\r\n choiceGroupLabel: i18n.getString(_TL_('I want to target:')),\r\n boundaryOption: i18n.getString(_TL_('Specific location')),\r\n radiusOption: i18n.getString(_TL_('Radius around a point')),\r\n});\r\n\r\nexport const buildLocationTargetingData = ({\r\n isPeopleInLocationChecked,\r\n isPeopleSearchingForLocationChecked,\r\n selectedLocationOption,\r\n negativeLocationTargets,\r\n positiveLocationTargets,\r\n}) => ({\r\n isPeopleInLocationChecked: _.isUndefined(isPeopleInLocationChecked) ? true : isPeopleInLocationChecked,\r\n isPeopleSearchingForLocationChecked: _.isUndefined(isPeopleSearchingForLocationChecked) ? true : isPeopleSearchingForLocationChecked,\r\n selectedLocationOption: selectedLocationOption || targetOptions.specific,\r\n negativeLocationTargets: negativeLocationTargets || [],\r\n positiveLocationTargets: positiveLocationTargets || [],\r\n});\r\n\r\nexport function shouldSelectQuickOption(quickOptionCountry, savedTargets, suggestedTargets) {\r\n const {\r\n positiveLocationTargets = [],\r\n negativeLocationTargets = [],\r\n } = savedTargets || {};\r\n\r\n if (_.isEmpty(suggestedTargets) && _.isEmpty(savedTargets)) {\r\n return true;\r\n }\r\n\r\n if (\r\n quickOptionCountry\r\n && positiveLocationTargets.length === 1\r\n && positiveLocationTargets[0].location\r\n && positiveLocationTargets[0].location.Id === quickOptionCountry.Id\r\n && _.isEmpty(negativeLocationTargets)\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const getLocationSummary = (targets, i18n) => _.map(targets, (target) => {\r\n const {\r\n radiusDescription,\r\n locationDescription,\r\n } = target.getGridRowText(i18n);\r\n return `${radiusDescription} ${locationDescription}`;\r\n}).join('; ');\r\n\r\nexport const getLocationTargetTitleDetails = (includedLocations, excludedLocations, targetOption, i18n) => {\r\n if (targetOption === targetOptions.everywhere) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n const includedLocationsString = getLocationSummary(includedLocations, i18n);\r\n const excludedLocationsString = getLocationSummary(excludedLocations, i18n);\r\n\r\n let finalizedString = '';\r\n if (includedLocations.length) {\r\n finalizedString += `${i18n.getString(_TL_('Included locations: '))}${includedLocationsString}. `;\r\n }\r\n if (excludedLocationsString.length) {\r\n finalizedString += `${i18n.getString(_TL_('Excluded locations: '))}${excludedLocationsString}. `;\r\n }\r\n\r\n return finalizedString;\r\n};\r\n\r\nexport const getDemographicsDetails = (ageRanges, genderTypes, i18n) => {\r\n if (_.isEmpty(ageRanges) || _.isEmpty(genderTypes)) {\r\n return '';\r\n }\r\n\r\n const ages = formatAgeRanges(ageRanges, i18n);\r\n const genders = formatGenders(genderTypes, i18n);\r\n\r\n return `${ages}; ${genders}`;\r\n};\r\n\r\nexport const getSearchThemeDetails = (i18n, searchThemes) => {\r\n const selected = searchThemes && searchThemes.filter(item => item.Status !== 'Deleted');\r\n if (selected && selected.length > 0) {\r\n return selected.map(item => item.SearchTheme).join(',');\r\n }\r\n return i18n.getString(_TL_('No search themes added'));\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LocationTargeting, targetOptions } from '@bingads-webui-campaign-react/location-targeting';\r\nimport {\r\n isLegacyLocationAndRadiusEqual,\r\n BingMapsContextProvider,\r\n getIsRadiusTarget as defaultGetIsRadiusTarget,\r\n TARGETING_TYPE,\r\n SEARCH_TYPE,\r\n LocationTarget,\r\n} from '@bingads-webui-react/bing-maps';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useSearchLocationData } from '@bingads-webui-campaign-react/pmax-lite-data';\r\n\r\nimport { getLocationTargetsEditorStrings } from '../utils/common';\r\n\r\nconst BING_MAPS_API_KEY = 'AgRuCtepgsuuCYV9J6S6w1j8ay2JJwnu8f5EPgv4kkoJoIuka8yui-NzKrvlESTQ';\r\n\r\nexport const TargetingLocation = ({\r\n data,\r\n onDataChange,\r\n quickOption,\r\n logger,\r\n isLoading,\r\n}) => {\r\n const mapRef = useRef();\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext);\r\n const { cid, aid } = scope.values;\r\n\r\n const {\r\n isPeopleInLocationChecked = true,\r\n isPeopleSearchingForLocationChecked = true,\r\n selectedLocationOption,\r\n negativeLocationTargets = [],\r\n positiveLocationTargets = [],\r\n } = data;\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { getLocation } = useSearchLocationData(aid, cid);\r\n\r\n // Save location targets selected under specific location option\r\n const [tempLocationTargets, setTempLocationTargets] = useState({\r\n positiveLocationTargets,\r\n negativeLocationTargets,\r\n });\r\n\r\n const locationTargetsEditorStrings = useMemo(() => (getLocationTargetsEditorStrings(i18n)), [i18n]);\r\n\r\n const optionConfigs = useMemo(() => ([\r\n {\r\n key: targetOptions.quick,\r\n // eslint-disable-next-line max-len\r\n text: quickOption.location && (i18n.getString(quickOption.location.ExpandedName) || quickOption.location.ExpandedName),\r\n },\r\n targetOptions.everywhere,\r\n targetOptions.specific,\r\n ]), [quickOption]);\r\n\r\n const onPositiveLocationTargetsChange = useCallback((newTargets) => {\r\n onDataChange({ positiveLocationTargets: newTargets });\r\n setTempLocationTargets(prev => ({\r\n ...prev,\r\n positiveLocationTargets: newTargets,\r\n }));\r\n }, [onDataChange]);\r\n\r\n const onNegativeLocationTargetsChange = useCallback((newTargets) => {\r\n onDataChange({ negativeLocationTargets: newTargets });\r\n setTempLocationTargets(prev => ({\r\n ...prev,\r\n positiveLocationTargets: newTargets,\r\n }));\r\n }, [onDataChange]);\r\n\r\n const onPeopleInLocationChange = useCallback((checked) => {\r\n onDataChange({\r\n isPeopleInLocationChecked: checked,\r\n });\r\n }, [onDataChange]);\r\n\r\n const onPeopleSearchingForLocationChange = useCallback((checked) => {\r\n onDataChange({\r\n isPeopleSearchingForLocationChecked: checked,\r\n });\r\n }, [onDataChange]);\r\n\r\n const onSelectedLocationOptionChange = useCallback((newOption) => {\r\n if (newOption === targetOptions.quick) {\r\n onDataChange({\r\n selectedLocationOption: newOption,\r\n positiveLocationTargets: [quickOption],\r\n locationsErrorString: null,\r\n isPeopleInLocationChecked: true,\r\n isPeopleSearchingForLocationChecked: true,\r\n });\r\n } else if (newOption === targetOptions.specific) {\r\n onDataChange({\r\n ...tempLocationTargets,\r\n selectedLocationOption: newOption,\r\n isPeopleInLocationChecked: true,\r\n isPeopleSearchingForLocationChecked: true,\r\n });\r\n } else if (newOption === targetOptions.everywhere) {\r\n onDataChange({\r\n positiveLocationTargets: [],\r\n negativeLocationTargets: [],\r\n selectedLocationOption: newOption,\r\n isPeopleInLocationChecked: true,\r\n isPeopleSearchingForLocationChecked: true,\r\n });\r\n }\r\n }, [onDataChange, quickOption, tempLocationTargets]);\r\n\r\n const onValidationComplete = useCallback((errorMessage) => {\r\n onDataChange({\r\n locationsErrorString: errorMessage,\r\n });\r\n }, [onDataChange]);\r\n\r\n const getIsRadiusTarget = useCallback((location, targetingType) => {\r\n if (targetingType) {\r\n return defaultGetIsRadiusTarget(location, targetingType) &&\r\n targetingType === TARGETING_TYPE.Included;\r\n }\r\n return defaultGetIsRadiusTarget(location, targetingType);\r\n }, []);\r\n\r\n const searchOptions = useMemo(() => ({\r\n getLocations: search => getLocation(search).then((result) => {\r\n logger.trace(`search location \"${search}\": ${JSON.stringify(result)}`);\r\n return result;\r\n }).catch((err) => {\r\n logger.error(`search location \"${search}\" with error: ${JSON.stringify(err)}`);\r\n throw new Error(err);\r\n }),\r\n }), [getLocation, logger]);\r\n\r\n useEffect(() => {\r\n if (\r\n selectedLocationOption === targetOptions.specific\r\n && (\r\n tempLocationTargets.positiveLocationTargets.length !== positiveLocationTargets.length\r\n || tempLocationTargets.negativeLocationTargets.length !== negativeLocationTargets.length\r\n )\r\n ) {\r\n setTempLocationTargets({\r\n positiveLocationTargets,\r\n negativeLocationTargets,\r\n });\r\n }\r\n }, [negativeLocationTargets, positiveLocationTargets, selectedLocationOption, tempLocationTargets]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTargetingLocation.propTypes = {\r\n data: PropTypes.shape({\r\n isPeopleInLocationChecked: PropTypes.bool,\r\n isPeopleSearchingForLocationChecked: PropTypes.bool,\r\n selectedLocationOption: PropTypes.string,\r\n negativeLocationTargets: PropTypes.arrayOf(PropTypes.instanceOf(LocationTarget)),\r\n positiveLocationTargets: PropTypes.arrayOf(PropTypes.instanceOf(LocationTarget)),\r\n }),\r\n onDataChange: PropTypes.func,\r\n quickOption: PropTypes.instanceOf(LocationTarget),\r\n logger: PropTypes.shape({\r\n trace: PropTypes.func.isRequired,\r\n error: PropTypes.func.isRequired,\r\n }),\r\n isLoading: PropTypes.bool,\r\n};\r\n\r\nTargetingLocation.defaultProps = {\r\n data: {\r\n isPeopleInLocationChecked: true,\r\n isPeopleSearchingForLocationChecked: true,\r\n selectedLocationOption: targetOptions.specific,\r\n negativeLocationTargets: [],\r\n positiveLocationTargets: [],\r\n },\r\n onDataChange: _.noop,\r\n quickOption: {},\r\n logger: {\r\n trace: _.noop,\r\n error: _.noop,\r\n },\r\n isLoading: false,\r\n};\r\n","import _ from 'underscore';\r\nimport { useContext, useMemo } from 'react';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\n\r\nexport const useTargetInstrument = () => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const backupLogger = useMemo(() => ({\r\n trace: _.noop,\r\n error: _.noop,\r\n }), []);\r\n\r\n return useMemo(() => {\r\n if (instrumentation && instrumentation.pmaxLiteTargeting) {\r\n const scenario = instrumentation.pmaxLiteTargeting.create();\r\n return {\r\n locationLogger: scenario.locationTargeting.create(),\r\n audienceSignalLogger: scenario.audienceSignalTargeting.create(),\r\n searchThemesLogger: scenario.searchThemesTargeting.create(),\r\n };\r\n }\r\n return {\r\n locationLogger: backupLogger,\r\n audienceSignalLogger: backupLogger,\r\n searchThemesLogger: backupLogger,\r\n };\r\n }, [backupLogger, instrumentation]);\r\n};\r\n","import _ from 'underscore';\r\nimport { targetOptions } from '@bingads-webui-campaign-react/location-targeting';\r\n\r\nconst ERROR_MAP = {\r\n LOCATION_CONFLICT: {\r\n type: 'LOCATION_CONFLICT',\r\n errorString: _TL_('There are conflicts between your included and excluded locations. '),\r\n },\r\n NO_INTENT_SELECTED: {\r\n type: 'NO_INTENT_SELECTED',\r\n errorString: _TL_('Please select at least one intent. '),\r\n },\r\n EMPTY_LOCATION: {\r\n type: 'EMPTY_LOCATION',\r\n errorString: _TL_('Please select at least one location. '),\r\n },\r\n};\r\n\r\nexport const validateConflictLocations = (includedLocations, excludedLocations) => {\r\n let exclusiveIds = [];\r\n _.forEach(includedLocations, (locationTarget) => {\r\n const parentIds = _.pluck(locationTarget.ParentLocations, 'Id');\r\n exclusiveIds.push(locationTarget.LocationId, ...parentIds);\r\n });\r\n // TODO: Check if we need to remove duplicates, for example, targeting \"new york\" and \"US\" will cause duplication.\r\n exclusiveIds = _.uniq(exclusiveIds);\r\n\r\n const negativeIds = _.uniq(_.map(excludedLocations, locationTarget => locationTarget.LocationId));\r\n\r\n // exclusiveIds can't be shown in negativeIds\r\n if (_.union(exclusiveIds, negativeIds).length < exclusiveIds.length + negativeIds.length) {\r\n return ERROR_MAP.LOCATION_CONFLICT;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const validateIntent = (peopleInLocation, peopleSearchingForLocation) => {\r\n if (!peopleInLocation && !peopleSearchingForLocation) {\r\n return ERROR_MAP.NO_INTENT_SELECTED;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Validate location targeting.\r\n * 1. Targeted locations can't be shown in excluded locations.\r\n * 2. At least one intent should be selected.\r\n * 3. At least one location should be selected.\r\n * @param {object} targets location targeting data\r\n * @returns {string} validation result\r\n */\r\nexport const validateLocations = ({\r\n negativeLocationTargets,\r\n positiveLocationTargets,\r\n isPeopleInLocationChecked,\r\n isPeopleSearchingForLocationChecked,\r\n selectedLocationOption,\r\n} = {}) => {\r\n const conflictError = validateConflictLocations(positiveLocationTargets, negativeLocationTargets);\r\n if (conflictError) {\r\n return conflictError.errorString;\r\n }\r\n\r\n const intentError = validateIntent(isPeopleInLocationChecked, isPeopleSearchingForLocationChecked);\r\n if (intentError) {\r\n return intentError.errorString;\r\n }\r\n\r\n if (\r\n selectedLocationOption === targetOptions.specific\r\n && _.isEmpty(negativeLocationTargets)\r\n && _.isEmpty(positiveLocationTargets)\r\n ) {\r\n return ERROR_MAP.EMPTY_LOCATION.errorString;\r\n }\r\n\r\n return '';\r\n};\r\n","import React, { useContext, useCallback, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Collapse, TextTitle, TitleBarError, useCollapseState } from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport LocationIcon from '../media/location.svg';\r\n\r\nimport { TargetingLocation } from './targeting-location';\r\nimport { getLocationTargetTitleDetails } from '../utils/common';\r\nimport { useTargetInstrument } from '../use-target-instrument';\r\nimport { validateLocations } from '../utils/validation';\r\n\r\nexport const CollapsibleLocation = ({\r\n data,\r\n onDataChange,\r\n isLoading,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const { locationLogger } = useTargetInstrument();\r\n\r\n const { targets, quickOptionCountry } = data || {};\r\n const {\r\n negativeLocationTargets = [],\r\n positiveLocationTargets = [],\r\n selectedLocationOption,\r\n } = targets || {};\r\n\r\n const [\r\n allSections,\r\n expandedSections,\r\n setExpandedSections,\r\n ] = useCollapseState(['locations'], ['locations']);\r\n\r\n const locationDetails = useMemo(() => getLocationTargetTitleDetails(\r\n positiveLocationTargets,\r\n negativeLocationTargets,\r\n selectedLocationOption,\r\n i18n\r\n ), [i18n, negativeLocationTargets, positiveLocationTargets, selectedLocationOption]);\r\n\r\n const onLocationChange = useCallback((newTargets) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n targets: {\r\n ...prevData.targets,\r\n ...newTargets,\r\n },\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const locationsErrorString = useMemo(() => {\r\n const errorString = validateLocations(targets);\r\n return errorString ? i18n.getString(errorString) : '';\r\n }, [i18n, targets]);\r\n\r\n // Update error string into state machine context\r\n useEffect(() => {\r\n onLocationChange({ locationError: locationsErrorString });\r\n }, [locationsErrorString, onLocationChange]);\r\n\r\n return (\r\n \r\n }\r\n error={!isLoading && }\r\n >\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCollapsibleLocation.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n isLoading: PropTypes.bool,\r\n};\r\n\r\nCollapsibleLocation.defaultProps = {\r\n isLoading: false,\r\n};\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport { AgeRanges, Genders } from '@bingads-webui-campaign-react/audience-demographic';\r\n\r\nconst ROOT = 'root';\r\n\r\nexport const getInterestNames = (name = '') => {\r\n if (typeof name !== 'string') {\r\n return { isValid: false };\r\n }\r\n\r\n const levels = name.split('/');\r\n\r\n // Name might start with \"/\", so the first element of levels might be empty string\r\n if (levels[0] === '') {\r\n levels.shift();\r\n }\r\n\r\n // If there are only one element after split, then it is a leaf node\r\n if (levels.length === 1) {\r\n return {\r\n name: `${ROOT}/${levels[0]}`,\r\n parent: undefined,\r\n isValid: true,\r\n };\r\n }\r\n\r\n // If there are more than one element after split, pick up the parent node and leaf node\r\n if (levels.length > 1) {\r\n return {\r\n name: `${levels[0]}/${levels[levels.length - 1]}`,\r\n parent: levels[0],\r\n isValid: true,\r\n };\r\n }\r\n\r\n return { isValid: false };\r\n};\r\n\r\nexport const getAudienceValue = (name = '') => {\r\n const array = name.split('/');\r\n return array[array.length - 1];\r\n};\r\n\r\nexport const formatAudienceListToFlatTree = (audiences = []) => {\r\n const hierarchy = {\r\n root: [],\r\n };\r\n const valueToAudience = {};\r\n const valueToFlatItem = {};\r\n\r\n audiences.forEach((audience) => {\r\n const {\r\n Reach, Name, Description, Id,\r\n } = audience;\r\n // The name includes parent value to avoid the a certain value is both child and parent, this will make Tree structure incorrect.\r\n // For example, \"Food\" is parent node and contains 6 children, it's also the child for \"Food & Groceries\"\r\n const { name, parent, isValid } = getInterestNames(Name);\r\n\r\n if (!isValid) {\r\n return;\r\n }\r\n\r\n const structure = {\r\n value: name,\r\n content: name,\r\n parentValue: parent,\r\n allowedCheck: true,\r\n showTips: true,\r\n description: Description,\r\n reachEstimation: Reach,\r\n id: Id,\r\n };\r\n\r\n if (parent === undefined) {\r\n hierarchy.root.push(structure);\r\n } else {\r\n if (!hierarchy[parent]) {\r\n hierarchy[parent] = [];\r\n }\r\n\r\n hierarchy[parent].push(structure);\r\n }\r\n\r\n valueToAudience[name] = audience;\r\n valueToFlatItem[name] = structure;\r\n });\r\n\r\n const formattedItems = [];\r\n Object.keys(hierarchy).forEach((parent) => {\r\n if (parent !== 'root') {\r\n // Push parent first\r\n formattedItems.push({\r\n value: parent,\r\n content: parent,\r\n allowedCheck: false,\r\n showTips: false,\r\n });\r\n // Push all children\r\n formattedItems.push(...hierarchy[parent]);\r\n } else {\r\n formattedItems.push(...hierarchy[parent]);\r\n }\r\n });\r\n\r\n return [formattedItems, valueToAudience, valueToFlatItem];\r\n};\r\n\r\nexport const dimensionFormatter = {\r\n ageRanges: ageRanges => (_.isEmpty(ageRanges) ? _.keys(AgeRanges) : ageRanges),\r\n genderTypes: genderTypes => (_.isEmpty(genderTypes) ? _.keys(Genders) : genderTypes),\r\n};\r\n\r\nexport const modelToViewModelForAudienceGroup = (audienceGroupModel) => {\r\n const audiences = _.chain(audienceGroupModel)\r\n .result('Dimensions', [])\r\n .filter(dimension => dimension.Type === 'Audience')\r\n .map(dimension => _.result(dimension, 'Audiences'))\r\n .flatten()\r\n .compact();\r\n\r\n // Leave for later features\r\n // const customerData = audiences\r\n // .filter(audience => audience.Type !== 'InMarket')\r\n // .value();\r\n\r\n const interests = audiences\r\n .filter(audience => audience.Type === 'InMarket')\r\n .map(audience => getInterestNames(audience.Name).name)\r\n .value();\r\n\r\n const ageRanges = _.chain(audienceGroupModel)\r\n .result('Dimensions', [])\r\n .filter(dimension => dimension.Type === 'Age')\r\n .first()\r\n .result('AgeRanges')\r\n .value();\r\n\r\n const genderTypes = _.chain(audienceGroupModel)\r\n .result('Dimensions', [])\r\n .filter(dimension => dimension.Type === 'Gender')\r\n .first()\r\n .result('GenderTypes')\r\n .value();\r\n\r\n return {\r\n interests,\r\n ageRanges: dimensionFormatter.ageRanges(ageRanges),\r\n genderTypes: dimensionFormatter.genderTypes(genderTypes),\r\n };\r\n};\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nexport const radiusShimmerElement = [\r\n { type: ShimmerElementType.line, width: 20, height: 20 },\r\n { type: ShimmerElementType.gap, width: 5 },\r\n { type: ShimmerElementType.line, height: 16, width: 300 },\r\n { type: ShimmerElementType.gap, height: 20, width: '100%' },\r\n];\r\n\r\nexport const SectionShimmer = () => (\r\n
\r\n \r\n \r\n \r\n
\r\n);\r\n","/* eslint-disable max-lines */\r\n/* eslint-disable quote-props */\r\n/* eslint-disable quotes */\r\nexport const AUDIENCE_MAP = {\r\n \"Apparel & Accessories\": _TL_(\"Apparel & Accessories\"),\r\n \"Autos & Vehicles\": _TL_(\"Autos & Vehicles\"),\r\n \"Business Owner\": _TL_(\"Business Owner\"),\r\n \"Home & Garden\": _TL_(\"Home & Garden\"),\r\n \"Home & Garden Services\": _TL_(\"Home & Garden Services\"),\r\n \"Home Inspection Services\": _TL_(\"Home Inspection Services\"),\r\n \"Job Title\": _TL_(\"Job Title\"),\r\n \"Consultant\": _TL_(\"Consultant\"),\r\n \"Real Estate\": _TL_(\"Real Estate\"),\r\n \"Residential Properties\": _TL_(\"Residential Properties\"),\r\n \"Residential Properties (For Rent)\": _TL_(\"Residential Properties (For Rent)\"),\r\n \"Sports & Fitness\": _TL_(\"Sports & Fitness\"),\r\n \"Business and Industrial\": _TL_(\"Business and Industrial\"),\r\n \"Agriculture\": _TL_(\"Agriculture\"),\r\n \"Building Construction and Maintenance\": _TL_(\"Building Construction and Maintenance\"),\r\n \"Building Materials and Supplies\": _TL_(\"Building Materials and Supplies\"),\r\n \"Hardware Tools and Accessories\": _TL_(\"Hardware Tools and Accessories\"),\r\n \"Business Management\": _TL_(\"Business Management\"),\r\n \"Advertising and Marketing\": _TL_(\"Advertising and Marketing\"),\r\n \"Design and Engineering\": _TL_(\"Design and Engineering\"),\r\n \"Food Service Industry\": _TL_(\"Food Service Industry\"),\r\n \"Industrial Goods and Manufacturing\": _TL_(\"Industrial Goods and Manufacturing\"),\r\n \"Industrial Manufacturing\": _TL_(\"Industrial Manufacturing\"),\r\n \"Metals\": _TL_(\"Metals\"),\r\n \"Precious Metals\": _TL_(\"Precious Metals\"),\r\n \"Office\": _TL_(\"Office\"),\r\n \"Business Cards, Stationery and Forms\": _TL_(\"Business Cards, Stationery and Forms\"),\r\n \"Office Appliances\": _TL_(\"Office Appliances\"),\r\n \"Desktop Printers\": _TL_(\"Desktop Printers\"),\r\n \"Retail Trade\": _TL_(\"Retail Trade\"),\r\n \"Computers and Consumer Electronics\": _TL_(\"Computers and Consumer Electronics\"),\r\n \"Computers\": _TL_(\"Computers\"),\r\n \"Computer Hardware\": _TL_(\"Computer Hardware\"),\r\n \"Software\": _TL_(\"Software\"),\r\n \"Business and Productivity Software\": _TL_(\"Business and Productivity Software\"),\r\n \"E-Commerce and Retail Software\": _TL_(\"E-Commerce and Retail Software\"),\r\n \"Device Drivers\": _TL_(\"Device Drivers\"),\r\n \"Graphics and Multimedia Software\": _TL_(\"Graphics and Multimedia Software\"),\r\n \"Internet Software and Web Goodies\": _TL_(\"Internet Software and Web Goodies\"),\r\n \"Network Security Software\": _TL_(\"Network Security Software\"),\r\n \"Anti-Virus Software\": _TL_(\"Anti-Virus Software\"),\r\n \"Web Browsers\": _TL_(\"Web Browsers\"),\r\n \"Consumer Electronics\": _TL_(\"Consumer Electronics\"),\r\n \"Dining and Nightlife\": _TL_(\"Dining and Nightlife\"),\r\n \"Dining and Nightlife Reviews, Guides and Listings\": _TL_(\"Dining and Nightlife Reviews, Guides and Listings\"),\r\n \"Restaurants\": _TL_(\"Restaurants\"),\r\n \"Restaurant Take-out and Delivery\": _TL_(\"Restaurant Take-out and Delivery\"),\r\n \"Family and Community\": _TL_(\"Family and Community\"),\r\n \"Community Service and Social Organizations\": _TL_(\"Community Service and Social Organizations\"),\r\n \"Romance and Relationships\": _TL_(\"Romance and Relationships\"),\r\n \"Finance\": _TL_(\"Finance\"),\r\n \"Accounting and Auditing\": _TL_(\"Accounting and Auditing\"),\r\n \"Tax Preparation and Planning\": _TL_(\"Tax Preparation and Planning\"),\r\n \"Credit and Lending\": _TL_(\"Credit and Lending\"),\r\n \"Credit Cards\": _TL_(\"Credit Cards\"),\r\n \"Loans\": _TL_(\"Loans\"),\r\n \"Insurance\": _TL_(\"Insurance\"),\r\n \"Health Insurance\": _TL_(\"Health Insurance\"),\r\n \"Supplemental Health Insurance\": _TL_(\"Supplemental Health Insurance\"),\r\n \"Vehicle Insurance\": _TL_(\"Vehicle Insurance\"),\r\n \"Car Insurance\": _TL_(\"Car Insurance\"),\r\n \"Investing\": _TL_(\"Investing\"),\r\n \"Food and Groceries\": _TL_(\"Food and Groceries\"),\r\n \"Food\": _TL_(\"Food\"),\r\n \"Health\": _TL_(\"Health\"),\r\n \"Health Care Services\": _TL_(\"Health Care Services\"),\r\n \"Health Conditions and Concerns\": _TL_(\"Health Conditions and Concerns\"),\r\n \"Digestive Health and Disorders\": _TL_(\"Digestive Health and Disorders\"),\r\n \"Headache and Pain Management\": _TL_(\"Headache and Pain Management\"),\r\n \"Pharmacy\": _TL_(\"Pharmacy\"),\r\n \"Hobbies and Leisure\": _TL_(\"Hobbies and Leisure\"),\r\n \"Antiques and Collectibles\": _TL_(\"Antiques and Collectibles\"),\r\n \"Pets and Animals\": _TL_(\"Pets and Animals\"),\r\n \"Toys and Games\": _TL_(\"Toys and Games\"),\r\n \"Games\": _TL_(\"Games\"),\r\n \"Card Games\": _TL_(\"Card Games\"),\r\n \"Online Games and Puzzles\": _TL_(\"Online Games and Puzzles\"),\r\n \"Table Games\": _TL_(\"Table Games\"),\r\n \"Pool and Billiards\": _TL_(\"Pool and Billiards\"),\r\n \"Video Games, Consoles and Accessories\": _TL_(\"Video Games, Consoles and Accessories\"),\r\n \"Computer and Video Games\": _TL_(\"Computer and Video Games\"),\r\n \"Casual Games\": _TL_(\"Casual Games\"),\r\n \"Free-To-Play Games\": _TL_(\"Free-To-Play Games\"),\r\n \"Toys\": _TL_(\"Toys\"),\r\n \"Children's Dolls, Dress-Up Toys and Costumes\": _TL_(\"Children's Dolls, Dress-Up Toys and Costumes\"),\r\n \"Online Doll Dress-Up and Girl Games\": _TL_(\"Online Doll Dress-Up and Girl Games\"),\r\n \"Home and Garden\": _TL_(\"Home and Garden\"),\r\n \"Home Decor and Interior Decorating\": _TL_(\"Home Decor and Interior Decorating\"),\r\n \"Home Furniture\": _TL_(\"Home Furniture\"),\r\n \"Kitchen and Dining\": _TL_(\"Kitchen and Dining\"),\r\n \"Yard, Garden and Patio\": _TL_(\"Yard, Garden and Patio\"),\r\n \"Yard and Garden Equipment and Supplies\": _TL_(\"Yard and Garden Equipment and Supplies\"),\r\n \"Internet and Telecom\": _TL_(\"Internet and Telecom\"),\r\n \"Internet\": _TL_(\"Internet\"),\r\n \"Telephony\": _TL_(\"Telephony\"),\r\n \"Jobs and Education\": _TL_(\"Jobs and Education\"),\r\n \"Education and Training\": _TL_(\"Education and Training\"),\r\n \"Jobs and Careers\": _TL_(\"Jobs and Careers\"),\r\n \"Job Listings\": _TL_(\"Job Listings\"),\r\n \"Retail Jobs\": _TL_(\"Retail Jobs\"),\r\n \"Law and Government\": _TL_(\"Law and Government\"),\r\n \"Legal\": _TL_(\"Legal\"),\r\n \"Occasions and Gifts\": _TL_(\"Occasions and Gifts\"),\r\n \"Cards and Greetings\": _TL_(\"Cards and Greetings\"),\r\n \"Gifts\": _TL_(\"Gifts\"),\r\n \"Gift Delivery\": _TL_(\"Gift Delivery\"),\r\n \"Real Estate Listings\": _TL_(\"Real Estate Listings\"),\r\n \"Bank-Owned and Foreclosed Listings\": _TL_(\"Bank-Owned and Foreclosed Listings\"),\r\n \"Rental Listings\": _TL_(\"Rental Listings\"),\r\n \"Apartment Rentals\": _TL_(\"Apartment Rentals\"),\r\n \"Retailers and General Merchandise\": _TL_(\"Retailers and General Merchandise\"),\r\n \"Coupons and Rebates\": _TL_(\"Coupons and Rebates\"),\r\n \"Sports and Fitness\": _TL_(\"Sports and Fitness\"),\r\n \"Sporting Goods\": _TL_(\"Sporting Goods\"),\r\n \"Sports\": _TL_(\"Sports\"),\r\n \"Travel and Tourism\": _TL_(\"Travel and Tourism\"),\r\n \"Accommodations\": _TL_(\"Accommodations\"),\r\n \"Hotels, Motels and Resorts\": _TL_(\"Hotels, Motels and Resorts\"),\r\n \"Hotels\": _TL_(\"Hotels\"),\r\n \"Resorts\": _TL_(\"Resorts\"),\r\n \"Vacation Rentals\": _TL_(\"Vacation Rentals\"),\r\n \"Air Travel\": _TL_(\"Air Travel\"),\r\n \"Airline Tickets, Fares and Flights\": _TL_(\"Airline Tickets, Fares and Flights\"),\r\n \"Cruises and Cruise Services\": _TL_(\"Cruises and Cruise Services\"),\r\n \"Last Minute Travel\": _TL_(\"Last Minute Travel\"),\r\n \"Last Minute Airfares and Flights\": _TL_(\"Last Minute Airfares and Flights\"),\r\n \"Specialty Travel\": _TL_(\"Specialty Travel\"),\r\n \"Tourist Attractions and Destinations\": _TL_(\"Tourist Attractions and Destinations\"),\r\n \"Transportation and Excursions\": _TL_(\"Transportation and Excursions\"),\r\n \"Car Rental Services\": _TL_(\"Car Rental Services\"),\r\n \"Travel Booking Services\": _TL_(\"Travel Booking Services\"),\r\n \"Travel Media and Publications\": _TL_(\"Travel Media and Publications\"),\r\n \"City and Local Guides\": _TL_(\"City and Local Guides\"),\r\n \"Vehicles\": _TL_(\"Vehicles\"),\r\n \"Motor Vehicles\": _TL_(\"Motor Vehicles\"),\r\n \"Cars and Trucks\": _TL_(\"Cars and Trucks\"),\r\n \"Used Motor Vehicles\": _TL_(\"Used Motor Vehicles\"),\r\n \"Vehicle Parts and Accessories\": _TL_(\"Vehicle Parts and Accessories\"),\r\n \"Car Parts and Accessories\": _TL_(\"Car Parts and Accessories\"),\r\n \"Replacement Car Parts\": _TL_(\"Replacement Car Parts\"),\r\n \"Vehicle Tires and Tire Parts\": _TL_(\"Vehicle Tires and Tire Parts\"),\r\n \"Car and Truck Tires\": _TL_(\"Car and Truck Tires\"),\r\n \"Activewear\": _TL_(\"Activewear\"),\r\n \"Running Apparel\": _TL_(\"Running Apparel\"),\r\n \"Yoga Apparel\": _TL_(\"Yoga Apparel\"),\r\n \"Backpacks\": _TL_(\"Backpacks\"),\r\n \"Clothing\": _TL_(\"Clothing\"),\r\n \"Apparel\": _TL_(\"Apparel\"),\r\n \"Costumes\": _TL_(\"Costumes\"),\r\n \"Eyewear\": _TL_(\"Eyewear\"),\r\n \"Eyeglasses & Contact Lenses\": _TL_(\"Eyeglasses & Contact Lenses\"),\r\n \"Sunglasses\": _TL_(\"Sunglasses\"),\r\n \"Formal Wear\": _TL_(\"Formal Wear\"),\r\n \"Bridal Wear\": _TL_(\"Bridal Wear\"),\r\n \"Suits & Business Attire\": _TL_(\"Suits & Business Attire\"),\r\n \"Handbags\": _TL_(\"Handbags\"),\r\n \"Hats\": _TL_(\"Hats\"),\r\n \"Jewelry & Watches\": _TL_(\"Jewelry & Watches\"),\r\n \"Fine Jewelry\": _TL_(\"Fine Jewelry\"),\r\n \"Necklaces\": _TL_(\"Necklaces\"),\r\n \"Watches\": _TL_(\"Watches\"),\r\n \"Wedding & Engagement Rings\": _TL_(\"Wedding & Engagement Rings\"),\r\n \"Lingerie\": _TL_(\"Lingerie\"),\r\n \"Luggage\": _TL_(\"Luggage\"),\r\n \"Men's Apparel\": _TL_(\"Men's Apparel\"),\r\n \"Outerwear\": _TL_(\"Outerwear\"),\r\n \"Pants\": _TL_(\"Pants\"),\r\n \"Perfumes & Fragrances\": _TL_(\"Perfumes & Fragrances\"),\r\n \"Shirts & Tops\": _TL_(\"Shirts & Tops\"),\r\n \"Shoes\": _TL_(\"Shoes\"),\r\n \"Athletic Shoes\": _TL_(\"Athletic Shoes\"),\r\n \"Boots\": _TL_(\"Boots\"),\r\n \"Dress Shoes\": _TL_(\"Dress Shoes\"),\r\n \"Socks\": _TL_(\"Socks\"),\r\n \"Swimwear\": _TL_(\"Swimwear\"),\r\n \"Underwear\": _TL_(\"Underwear\"),\r\n \"Wallets, Briefcases & Leather Goods\": _TL_(\"Wallets, Briefcases & Leather Goods\"),\r\n \"Wallets\": _TL_(\"Wallets\"),\r\n \"Women's Apparel\": _TL_(\"Women's Apparel\"),\r\n \"Women's Clothing\": _TL_(\"Women's Clothing\"),\r\n \"Dresses\": _TL_(\"Dresses\"),\r\n \"Arts & Crafts Supplies\": _TL_(\"Arts & Crafts Supplies\"),\r\n \"Arts & Entertainment\": _TL_(\"Arts & Entertainment\"),\r\n \"Comics & Graphic Novels\": _TL_(\"Comics & Graphic Novels\"),\r\n \"Comic Strips\": _TL_(\"Comic Strips\"),\r\n \"Manga\": _TL_(\"Manga\"),\r\n \"Entertainment Industry\": _TL_(\"Entertainment Industry\"),\r\n \"Film & TV Industry\": _TL_(\"Film & TV Industry\"),\r\n \"TV Broadcasting\": _TL_(\"TV Broadcasting\"),\r\n \"TV Shows & Programs\": _TL_(\"TV Shows & Programs\"),\r\n \"TV Comedies\": _TL_(\"TV Comedies\"),\r\n \"TV Game Shows\": _TL_(\"TV Game Shows\"),\r\n \"TV Reality Shows\": _TL_(\"TV Reality Shows\"),\r\n \"TV Talk Shows\": _TL_(\"TV Talk Shows\"),\r\n \"Event Entertainment\": _TL_(\"Event Entertainment\"),\r\n \"Movies & Films\": _TL_(\"Movies & Films\"),\r\n \"Arts and Entertainment\": _TL_(\"Arts and Entertainment\"),\r\n \"Movies and Films\": _TL_(\"Movies and Films\"),\r\n \"Action & Adventure Films\": _TL_(\"Action & Adventure Films\"),\r\n \"Superhero Films\": _TL_(\"Superhero Films\"),\r\n \"Animated Films\": _TL_(\"Animated Films\"),\r\n \"Bollywood & South Asian Film\": _TL_(\"Bollywood & South Asian Film\"),\r\n \"Drama Films\": _TL_(\"Drama Films\"),\r\n \"Musical Films\": _TL_(\"Musical Films\"),\r\n \"Science Fiction & Fantasy Films\": _TL_(\"Science Fiction & Fantasy Films\"),\r\n \"Music & Audio\": _TL_(\"Music & Audio\"),\r\n \"Music and Audio\": _TL_(\"Music and Audio\"),\r\n \"Classical Music\": _TL_(\"Classical Music\"),\r\n \"Country Music\": _TL_(\"Country Music\"),\r\n \"Dance & Electronic Music\": _TL_(\"Dance & Electronic Music\"),\r\n \"Jazz & Blues\": _TL_(\"Jazz & Blues\"),\r\n \"Blues\": _TL_(\"Blues\"),\r\n \"Jazz\": _TL_(\"Jazz\"),\r\n \"Music Videos\": _TL_(\"Music Videos\"),\r\n \"Musical Instruments & Equipment\": _TL_(\"Musical Instruments & Equipment\"),\r\n \"Drums & Percussion\": _TL_(\"Drums & Percussion\"),\r\n \"Guitars\": _TL_(\"Guitars\"),\r\n \"Pop Music\": _TL_(\"Pop Music\"),\r\n \"Religious Music\": _TL_(\"Religious Music\"),\r\n \"Christian & Gospel Music\": _TL_(\"Christian & Gospel Music\"),\r\n \"Rock Music\": _TL_(\"Rock Music\"),\r\n \"Metal (Music)\": _TL_(\"Metal (Music)\"),\r\n \"Urban & Hip-Hop\": _TL_(\"Urban & Hip-Hop\"),\r\n \"Rap & Hip-Hop\": _TL_(\"Rap & Hip-Hop\"),\r\n \"Soul & R&B\": _TL_(\"Soul & R&B\"),\r\n \"Sports Entertainment\": _TL_(\"Sports Entertainment\"),\r\n \"Visual Art & Design\": _TL_(\"Visual Art & Design\"),\r\n \"Painting\": _TL_(\"Painting\"),\r\n \"Auto Parts & Accessories\": _TL_(\"Auto Parts & Accessories\"),\r\n \"Auto Exterior Parts & Accessories\": _TL_(\"Auto Exterior Parts & Accessories\"),\r\n \"Auto Interior Parts & Accessories\": _TL_(\"Auto Interior Parts & Accessories\"),\r\n \"Automotive Electronic Components\": _TL_(\"Automotive Electronic Components\"),\r\n \"Car Batteries\": _TL_(\"Car Batteries\"),\r\n \"Car Brakes\": _TL_(\"Car Brakes\"),\r\n \"Engine & Transmission\": _TL_(\"Engine & Transmission\"),\r\n \"High Performance & Aftermarket Auto Parts\": _TL_(\"High Performance & Aftermarket Auto Parts\"),\r\n \"Replacement Auto Parts\": _TL_(\"Replacement Auto Parts\"),\r\n \"Wheels & Tires\": _TL_(\"Wheels & Tires\"),\r\n \"Auto Repair & Maintenance\": _TL_(\"Auto Repair & Maintenance\"),\r\n \"Brake Service & Repair\": _TL_(\"Brake Service & Repair\"),\r\n \"Collision & Auto Body Repair\": _TL_(\"Collision & Auto Body Repair\"),\r\n \"Glass Repair & Replacement\": _TL_(\"Glass Repair & Replacement\"),\r\n \"Oil Changes\": _TL_(\"Oil Changes\"),\r\n \"Transmission Repair\": _TL_(\"Transmission Repair\"),\r\n \"Cars & Trucks\": _TL_(\"Cars & Trucks\"),\r\n \"Motor Vehicles (New)\": _TL_(\"Motor Vehicles (New)\"),\r\n \"Motor Vehicles (Used)\": _TL_(\"Motor Vehicles (Used)\"),\r\n \"Motor Vehicles by Brand\": _TL_(\"Motor Vehicles by Brand\"),\r\n \"Acura\": _TL_(\"Acura\"),\r\n \"Alfa Romeo\": _TL_(\"Alfa Romeo\"),\r\n \"Audi\": _TL_(\"Audi\"),\r\n \"BMW\": _TL_(\"BMW\"),\r\n \"Buick\": _TL_(\"Buick\"),\r\n \"Cadillac\": _TL_(\"Cadillac\"),\r\n \"Chevrolet\": _TL_(\"Chevrolet\"),\r\n \"Chrysler\": _TL_(\"Chrysler\"),\r\n \"Citroën\": _TL_(\"Citroën\"),\r\n \"Dacia\": _TL_(\"Dacia\"),\r\n \"Dodge\": _TL_(\"Dodge\"),\r\n \"Fiat\": _TL_(\"Fiat\"),\r\n \"Ford\": _TL_(\"Ford\"),\r\n \"GMC\": _TL_(\"GMC\"),\r\n \"Honda\": _TL_(\"Honda\"),\r\n \"Hyundai\": _TL_(\"Hyundai\"),\r\n \"Infiniti\": _TL_(\"Infiniti\"),\r\n \"Isuzu\": _TL_(\"Isuzu\"),\r\n \"Jaguar\": _TL_(\"Jaguar\"),\r\n \"Jeep\": _TL_(\"Jeep\"),\r\n \"Kia\": _TL_(\"Kia\"),\r\n \"Land Rover\": _TL_(\"Land Rover\"),\r\n \"Lexus\": _TL_(\"Lexus\"),\r\n \"Lincoln\": _TL_(\"Lincoln\"),\r\n \"Maserati\": _TL_(\"Maserati\"),\r\n \"Mazda\": _TL_(\"Mazda\"),\r\n \"Mercedes-Benz\": _TL_(\"Mercedes-Benz\"),\r\n \"Mini\": _TL_(\"Mini\"),\r\n \"Mitsubishi\": _TL_(\"Mitsubishi\"),\r\n \"Nissan\": _TL_(\"Nissan\"),\r\n \"Peugeot\": _TL_(\"Peugeot\"),\r\n \"Porsche\": _TL_(\"Porsche\"),\r\n \"Ram Trucks\": _TL_(\"Ram Trucks\"),\r\n \"Renault\": _TL_(\"Renault\"),\r\n \"SEAT\": _TL_(\"SEAT\"),\r\n \"Skoda\": _TL_(\"Skoda\"),\r\n \"Smart\": _TL_(\"Smart\"),\r\n \"Subaru\": _TL_(\"Subaru\"),\r\n \"Suzuki\": _TL_(\"Suzuki\"),\r\n \"Toyota\": _TL_(\"Toyota\"),\r\n \"Vauxhall-Opel\": _TL_(\"Vauxhall-Opel\"),\r\n \"Volkswagen\": _TL_(\"Volkswagen\"),\r\n \"Volvo\": _TL_(\"Volvo\"),\r\n \"Motor Vehicles by Type\": _TL_(\"Motor Vehicles by Type\"),\r\n \"Classic Vehicles\": _TL_(\"Classic Vehicles\"),\r\n \"Compact Cars\": _TL_(\"Compact Cars\"),\r\n \"Compact Cars (New)\": _TL_(\"Compact Cars (New)\"),\r\n \"Compact Cars (Used)\": _TL_(\"Compact Cars (Used)\"),\r\n \"Convertibles\": _TL_(\"Convertibles\"),\r\n \"Convertibles (New)\": _TL_(\"Convertibles (New)\"),\r\n \"Convertibles (Used)\": _TL_(\"Convertibles (Used)\"),\r\n \"Coupes\": _TL_(\"Coupes\"),\r\n \"Coupes (New)\": _TL_(\"Coupes (New)\"),\r\n \"Coupes (Used)\": _TL_(\"Coupes (Used)\"),\r\n \"Crossovers\": _TL_(\"Crossovers\"),\r\n \"Crossovers (New)\": _TL_(\"Crossovers (New)\"),\r\n \"Crossovers (Used)\": _TL_(\"Crossovers (Used)\"),\r\n \"Diesel Vehicles\": _TL_(\"Diesel Vehicles\"),\r\n \"Hatchbacks\": _TL_(\"Hatchbacks\"),\r\n \"Hatchbacks (New)\": _TL_(\"Hatchbacks (New)\"),\r\n \"Hatchbacks (Used)\": _TL_(\"Hatchbacks (Used)\"),\r\n \"Hybrid & Alternative Vehicles\": _TL_(\"Hybrid & Alternative Vehicles\"),\r\n \"Hybrid & Alternative Vehicles (New)\": _TL_(\"Hybrid & Alternative Vehicles (New)\"),\r\n \"Hybrid & Alternative Vehicles (Used)\": _TL_(\"Hybrid & Alternative Vehicles (Used)\"),\r\n \"Luxury Vehicles\": _TL_(\"Luxury Vehicles\"),\r\n \"Luxury Vehicles (New)\": _TL_(\"Luxury Vehicles (New)\"),\r\n \"Luxury Vehicles (Used)\": _TL_(\"Luxury Vehicles (Used)\"),\r\n \"Microcars & Subcompacts\": _TL_(\"Microcars & Subcompacts\"),\r\n \"Microcars & Subcompacts (New)\": _TL_(\"Microcars & Subcompacts (New)\"),\r\n \"Microcars & Subcompacts (Used)\": _TL_(\"Microcars & Subcompacts (Used)\"),\r\n \"Motorcycles\": _TL_(\"Motorcycles\"),\r\n \"Motorcycles (New)\": _TL_(\"Motorcycles (New)\"),\r\n \"Motorcycles (Used)\": _TL_(\"Motorcycles (Used)\"),\r\n \"Off-Road Vehicles\": _TL_(\"Off-Road Vehicles\"),\r\n \"Off-Road Vehicles (New)\": _TL_(\"Off-Road Vehicles (New)\"),\r\n \"Off-Road Vehicles (Used)\": _TL_(\"Off-Road Vehicles (Used)\"),\r\n \"Pickup Trucks\": _TL_(\"Pickup Trucks\"),\r\n \"Pickup Trucks (New)\": _TL_(\"Pickup Trucks (New)\"),\r\n \"Pickup Trucks (Used)\": _TL_(\"Pickup Trucks (Used)\"),\r\n \"Scooters & Mopeds\": _TL_(\"Scooters & Mopeds\"),\r\n \"Scooters & Mopeds (New)\": _TL_(\"Scooters & Mopeds (New)\"),\r\n \"Scooters & Mopeds (Used)\": _TL_(\"Scooters & Mopeds (Used)\"),\r\n \"Sedans\": _TL_(\"Sedans\"),\r\n \"Sedans (New)\": _TL_(\"Sedans (New)\"),\r\n \"Sports Cars\": _TL_(\"Sports Cars\"),\r\n \"Sports Cars (New)\": _TL_(\"Sports Cars (New)\"),\r\n \"Sports Cars (Used)\": _TL_(\"Sports Cars (Used)\"),\r\n \"Station Wagons\": _TL_(\"Station Wagons\"),\r\n \"Station Wagons (New)\": _TL_(\"Station Wagons (New)\"),\r\n \"Station Wagons (Used)\": _TL_(\"Station Wagons (Used)\"),\r\n \"SUVs\": _TL_(\"SUVs\"),\r\n \"SUVs (New)\": _TL_(\"SUVs (New)\"),\r\n \"Vans & Minivans\": _TL_(\"Vans & Minivans\"),\r\n \"Vans & Minivans (New)\": _TL_(\"Vans & Minivans (New)\"),\r\n \"Vans & Minivans (Used)\": _TL_(\"Vans & Minivans (Used)\"),\r\n \"Vehicle Parts & Accessories\": _TL_(\"Vehicle Parts & Accessories\"),\r\n \"Car Parts & Accessories\": _TL_(\"Car Parts & Accessories\"),\r\n \"Vehicles (Other)\": _TL_(\"Vehicles (Other)\"),\r\n \"Bicycles & Accessories\": _TL_(\"Bicycles & Accessories\"),\r\n \"Boats & Watercraft\": _TL_(\"Boats & Watercraft\"),\r\n \"Campers & RVs\": _TL_(\"Campers & RVs\"),\r\n \"Commercial Vehicles\": _TL_(\"Commercial Vehicles\"),\r\n \"Baby & Children's Products\": _TL_(\"Baby & Children's Products\"),\r\n \"Baby & Children's Apparel\": _TL_(\"Baby & Children's Apparel\"),\r\n \"Baby & Toddler Apparel\": _TL_(\"Baby & Toddler Apparel\"),\r\n \"Children's Apparel\": _TL_(\"Children's Apparel\"),\r\n \"Child Car Seats\": _TL_(\"Child Car Seats\"),\r\n \"Childcare & Education\": _TL_(\"Childcare & Education\"),\r\n \"Childcare\": _TL_(\"Childcare\"),\r\n \"Early Childhood Education\": _TL_(\"Early Childhood Education\"),\r\n \"Diapers & Baby Hygiene Products\": _TL_(\"Diapers & Baby Hygiene Products\"),\r\n \"Infant & Toddler Feeding\": _TL_(\"Infant & Toddler Feeding\"),\r\n \"Infant Feeding Supplies\": _TL_(\"Infant Feeding Supplies\"),\r\n \"Toddler Meals\": _TL_(\"Toddler Meals\"),\r\n \"Strollers & Baby Carriages\": _TL_(\"Strollers & Baby Carriages\"),\r\n \"Toys & Games\": _TL_(\"Toys & Games\"),\r\n \"Beauty & Personal Care\": _TL_(\"Beauty & Personal Care\"),\r\n \"Body Art\": _TL_(\"Body Art\"),\r\n \"Fashion & Style\": _TL_(\"Fashion & Style\"),\r\n \"Fashion Designers & Collections\": _TL_(\"Fashion Designers & Collections\"),\r\n \"Beauty Products & Services\": _TL_(\"Beauty Products & Services\"),\r\n \"Bath & Body Products\": _TL_(\"Bath & Body Products\"),\r\n \"Hair Care Products\": _TL_(\"Hair Care Products\"),\r\n \"Makeup & Cosmetics\": _TL_(\"Makeup & Cosmetics\"),\r\n \"Eye Makeup\": _TL_(\"Eye Makeup\"),\r\n \"Face Makeup\": _TL_(\"Face Makeup\"),\r\n \"Lip Makeup\": _TL_(\"Lip Makeup\"),\r\n \"Nail Care Products\": _TL_(\"Nail Care Products\"),\r\n \"Skin Care Products\": _TL_(\"Skin Care Products\"),\r\n \"Anti-Aging Skin Care Products\": _TL_(\"Anti-Aging Skin Care Products\"),\r\n \"Face Lotions & Moisturizers\": _TL_(\"Face Lotions & Moisturizers\"),\r\n \"Facial Cleansers & Makeup Removers\": _TL_(\"Facial Cleansers & Makeup Removers\"),\r\n \"Spas & Beauty Services\": _TL_(\"Spas & Beauty Services\"),\r\n \"Manicures & Pedicures\": _TL_(\"Manicures & Pedicures\"),\r\n \"Tanning & Sun Care Products\": _TL_(\"Tanning & Sun Care Products\"),\r\n \"Business & Industrial Products\": _TL_(\"Business & Industrial Products\"),\r\n \"Food Service Equipment\": _TL_(\"Food Service Equipment\"),\r\n \"Industrial Goods & Manufacturing\": _TL_(\"Industrial Goods & Manufacturing\"),\r\n \"Material Handling Equipment\": _TL_(\"Material Handling Equipment\"),\r\n \"Signage\": _TL_(\"Signage\"),\r\n \"Work Safety Protective Gear\": _TL_(\"Work Safety Protective Gear\"),\r\n \"Business & Industrial\": _TL_(\"Business & Industrial\"),\r\n \"Aerospace & Defense\": _TL_(\"Aerospace & Defense\"),\r\n \"Design & Engineering\": _TL_(\"Design & Engineering\"),\r\n \"Graphic Design\": _TL_(\"Graphic Design\"),\r\n \"Scientific Equipment & Services\": _TL_(\"Scientific Equipment & Services\"),\r\n \"Business Services\": _TL_(\"Business Services\"),\r\n \"Advertising & Marketing Services\": _TL_(\"Advertising & Marketing Services\"),\r\n \"Email Marketing Services\": _TL_(\"Email Marketing Services\"),\r\n \"SEO & SEM Services\": _TL_(\"SEO & SEM Services\"),\r\n \"Building Construction & Maintenance\": _TL_(\"Building Construction & Maintenance\"),\r\n \"Building Materials & Supplies\": _TL_(\"Building Materials & Supplies\"),\r\n \"Business Financial Services\": _TL_(\"Business Financial Services\"),\r\n \"Business Printing & Document Services\": _TL_(\"Business Printing & Document Services\"),\r\n \"Business Technology\": _TL_(\"Business Technology\"),\r\n \"Business & Productivity Software\": _TL_(\"Business & Productivity Software\"),\r\n \"E-Commerce & Retail Software\": _TL_(\"E-Commerce & Retail Software\"),\r\n \"Enterprise Software\": _TL_(\"Enterprise Software\"),\r\n \"Collaboration & Conferencing Tools\": _TL_(\"Collaboration & Conferencing Tools\"),\r\n \"CRM Solutions\": _TL_(\"CRM Solutions\"),\r\n \"ERP Solutions\": _TL_(\"ERP Solutions\"),\r\n \"Helpdesk & Customer Support Solutions\": _TL_(\"Helpdesk & Customer Support Solutions\"),\r\n \"Network Systems & Services\": _TL_(\"Network Systems & Services\"),\r\n \"Hosted Data & Cloud Storage\": _TL_(\"Hosted Data & Cloud Storage\"),\r\n \"Network & Enterprise Security\": _TL_(\"Network & Enterprise Security\"),\r\n \"Network Equipment & Virtualization\": _TL_(\"Network Equipment & Virtualization\"),\r\n \"Network Management\": _TL_(\"Network Management\"),\r\n \"Web Services\": _TL_(\"Web Services\"),\r\n \"Domain Registration\": _TL_(\"Domain Registration\"),\r\n \"Web Design & Development\": _TL_(\"Web Design & Development\"),\r\n \"Web Hosting\": _TL_(\"Web Hosting\"),\r\n \"Corporate Event Planning\": _TL_(\"Corporate Event Planning\"),\r\n \"Office Supplies\": _TL_(\"Office Supplies\"),\r\n \"Business Cards, Stationery & Forms\": _TL_(\"Business Cards, Stationery & Forms\"),\r\n \"Office Furniture\": _TL_(\"Office Furniture\"),\r\n \"Payment Processing & Merchant Services\": _TL_(\"Payment Processing & Merchant Services\"),\r\n \"Payroll Services\": _TL_(\"Payroll Services\"),\r\n \"Physical Security & Access Control\": _TL_(\"Physical Security & Access Control\"),\r\n \"Staffing & Recruitment Services\": _TL_(\"Staffing & Recruitment Services\"),\r\n \"Company Size\": _TL_(\"Company Size\"),\r\n \"1-10 Employees\": _TL_(\"1-10 Employees\"),\r\n \"Company size\": _TL_(\"Company size\"),\r\n \"1-10 employees\": _TL_(\"1-10 employees\"),\r\n \"10,001+ Employees\": _TL_(\"10,001+ Employees\"),\r\n \"10,001+ employees\": _TL_(\"10,001+ employees\"),\r\n \"1001-5000 Employees\": _TL_(\"1001-5000 Employees\"),\r\n \"1001-5000 employees\": _TL_(\"1001-5000 employees\"),\r\n \"11-50 Employees\": _TL_(\"11-50 Employees\"),\r\n \"11-50 employees\": _TL_(\"11-50 employees\"),\r\n \"201-500 Employees\": _TL_(\"201-500 Employees\"),\r\n \"201-500 employees\": _TL_(\"201-500 employees\"),\r\n \"5001-10,000 Employees\": _TL_(\"5001-10,000 Employees\"),\r\n \"5001-10,000 employees\": _TL_(\"5001-10,000 employees\"),\r\n \"501-1000 Employees\": _TL_(\"501-1000 Employees\"),\r\n \"501-1000 employees\": _TL_(\"501-1000 employees\"),\r\n \"51-200 Employees\": _TL_(\"51-200 Employees\"),\r\n \"51-200 employees\": _TL_(\"51-200 employees\"),\r\n \"Self-Employed\": _TL_(\"Self-Employed\"),\r\n \"Self-employed\": _TL_(\"Self-employed\"),\r\n \"Computers & Consumer Electronics\": _TL_(\"Computers & Consumer Electronics\"),\r\n \"Computer Components\": _TL_(\"Computer Components\"),\r\n \"Computer Processors\": _TL_(\"Computer Processors\"),\r\n \"Computer Memory & Storage Devices\": _TL_(\"Computer Memory & Storage Devices\"),\r\n \"External Hard Drives\": _TL_(\"External Hard Drives\"),\r\n \"Computer Monitors & Projectors\": _TL_(\"Computer Monitors & Projectors\"),\r\n \"Electronic Projectors\": _TL_(\"Electronic Projectors\"),\r\n \"Computer Servers\": _TL_(\"Computer Servers\"),\r\n \"Freeware & Shareware\": _TL_(\"Freeware & Shareware\"),\r\n \"Internet Software & Web Goodies\": _TL_(\"Internet Software & Web Goodies\"),\r\n \"GPS & Navigation\": _TL_(\"GPS & Navigation\"),\r\n \"GPS Devices\": _TL_(\"GPS Devices\"),\r\n \"Portable Media Devices\": _TL_(\"Portable Media Devices\"),\r\n \"Digital Book Readers\": _TL_(\"Digital Book Readers\"),\r\n \"Computers & Peripherals\": _TL_(\"Computers & Peripherals\"),\r\n \"Computer Accessories & Components\": _TL_(\"Computer Accessories & Components\"),\r\n \"Computer Monitors\": _TL_(\"Computer Monitors\"),\r\n \"Memory & Storage\": _TL_(\"Memory & Storage\"),\r\n \"Desktop Computers\": _TL_(\"Desktop Computers\"),\r\n \"Laptops & Notebooks\": _TL_(\"Laptops & Notebooks\"),\r\n \"Tablets & Ultraportable Devices\": _TL_(\"Tablets & Ultraportable Devices\"),\r\n \"Printers, Scanners & Faxes\": _TL_(\"Printers, Scanners & Faxes\"),\r\n \"Printers\": _TL_(\"Printers\"),\r\n \"Audio\": _TL_(\"Audio\"),\r\n \"Car Audio\": _TL_(\"Car Audio\"),\r\n \"Headphones & Headsets\": _TL_(\"Headphones & Headsets\"),\r\n \"MP3 Players\": _TL_(\"MP3 Players\"),\r\n \"Pro Musician & DJ Equipment\": _TL_(\"Pro Musician & DJ Equipment\"),\r\n \"Speakers\": _TL_(\"Speakers\"),\r\n \"Stereo Systems\": _TL_(\"Stereo Systems\"),\r\n \"Batteries\": _TL_(\"Batteries\"),\r\n \"Camcorders\": _TL_(\"Camcorders\"),\r\n \"Cameras\": _TL_(\"Cameras\"),\r\n \"Camera Lenses\": _TL_(\"Camera Lenses\"),\r\n \"Digital SLRs\": _TL_(\"Digital SLRs\"),\r\n \"Point & Shoots\": _TL_(\"Point & Shoots\"),\r\n \"DVD & Blu-Ray Players\": _TL_(\"DVD & Blu-Ray Players\"),\r\n \"Game Consoles\": _TL_(\"Game Consoles\"),\r\n \"Nintendo Consoles\": _TL_(\"Nintendo Consoles\"),\r\n \"Nintendo (Wii)\": _TL_(\"Nintendo (Wii)\"),\r\n \"Sony PlayStation\": _TL_(\"Sony PlayStation\"),\r\n \"Xbox\": _TL_(\"Xbox\"),\r\n \"Home Theater Systems\": _TL_(\"Home Theater Systems\"),\r\n \"Mobile Phones\": _TL_(\"Mobile Phones\"),\r\n \"Android Phones\": _TL_(\"Android Phones\"),\r\n \"iOS Phones\": _TL_(\"iOS Phones\"),\r\n \"Power Adapters & Chargers\": _TL_(\"Power Adapters & Chargers\"),\r\n \"Televisions\": _TL_(\"Televisions\"),\r\n \"HDTVs\": _TL_(\"HDTVs\"),\r\n \"LCD TVs\": _TL_(\"LCD TVs\"),\r\n \"Plasma TVs\": _TL_(\"Plasma TVs\"),\r\n \"Dating Services\": _TL_(\"Dating Services\"),\r\n \"Dining & Nightlife\": _TL_(\"Dining & Nightlife\"),\r\n \"Nightclubs, Bars & Music Clubs\": _TL_(\"Nightclubs, Bars & Music Clubs\"),\r\n \"Dine-In Restaurants\": _TL_(\"Dine-In Restaurants\"),\r\n \"Fast Food Restaurants\": _TL_(\"Fast Food Restaurants\"),\r\n \"Education\": _TL_(\"Education\"),\r\n \"Foreign Language Study\": _TL_(\"Foreign Language Study\"),\r\n \"Post-Secondary Education\": _TL_(\"Post-Secondary Education\"),\r\n \"Arts & Design Education\": _TL_(\"Arts & Design Education\"),\r\n \"Business Education\": _TL_(\"Business Education\"),\r\n \"Cosmetology Education & Training\": _TL_(\"Cosmetology Education & Training\"),\r\n \"Health Care Education\": _TL_(\"Health Care Education\"),\r\n \"Nursing Education\": _TL_(\"Nursing Education\"),\r\n \"Technology Education\": _TL_(\"Technology Education\"),\r\n \"Primary & Secondary Schools (K-12)\": _TL_(\"Primary & Secondary Schools (K-12)\"),\r\n \"Study Abroad Programs\": _TL_(\"Study Abroad Programs\"),\r\n \"Test Preparation & Tutoring\": _TL_(\"Test Preparation & Tutoring\"),\r\n \"Employment\": _TL_(\"Employment\"),\r\n \"Accounting & Finance Jobs\": _TL_(\"Accounting & Finance Jobs\"),\r\n \"Career Consulting Services\": _TL_(\"Career Consulting Services\"),\r\n \"Clerical & Administrative Jobs\": _TL_(\"Clerical & Administrative Jobs\"),\r\n \"Education Jobs\": _TL_(\"Education Jobs\"),\r\n \"Executive & Management Jobs\": _TL_(\"Executive & Management Jobs\"),\r\n \"Government & Public Sector Jobs\": _TL_(\"Government & Public Sector Jobs\"),\r\n \"Health & Medical Jobs\": _TL_(\"Health & Medical Jobs\"),\r\n \"Internships\": _TL_(\"Internships\"),\r\n \"IT & Technical Jobs\": _TL_(\"IT & Technical Jobs\"),\r\n \"Jobs & Careers\": _TL_(\"Jobs & Careers\"),\r\n \"Legal Jobs\": _TL_(\"Legal Jobs\"),\r\n \"Resumes & Portfolios\": _TL_(\"Resumes & Portfolios\"),\r\n \"Sales & Marketing Jobs\": _TL_(\"Sales & Marketing Jobs\"),\r\n \"Temporary & Seasonal Jobs\": _TL_(\"Temporary & Seasonal Jobs\"),\r\n \"Event Tickets\": _TL_(\"Event Tickets\"),\r\n \"Concert & Music Festival Tickets\": _TL_(\"Concert & Music Festival Tickets\"),\r\n \"Performing Arts Tickets\": _TL_(\"Performing Arts Tickets\"),\r\n \"Broadway & Theater Tickets\": _TL_(\"Broadway & Theater Tickets\"),\r\n \"Sports Tickets\": _TL_(\"Sports Tickets\"),\r\n \"Family & Community\": _TL_(\"Family & Community\"),\r\n \"Baby, Parenting & Family\": _TL_(\"Baby, Parenting & Family\"),\r\n \"Parenting & Family\": _TL_(\"Parenting & Family\"),\r\n \"Community Service & Social Organizations\": _TL_(\"Community Service & Social Organizations\"),\r\n \"Community Outreach\": _TL_(\"Community Outreach\"),\r\n \"Environmentalism\": _TL_(\"Environmentalism\"),\r\n \"Social Issues & Advocacy\": _TL_(\"Social Issues & Advocacy\"),\r\n \"Environmental Activism\": _TL_(\"Environmental Activism\"),\r\n \"Volunteer Opportunities\": _TL_(\"Volunteer Opportunities\"),\r\n \"Faith & Belief\": _TL_(\"Faith & Belief\"),\r\n \"Meditation\": _TL_(\"Meditation\"),\r\n \"Romance & Relationships\": _TL_(\"Romance & Relationships\"),\r\n \"Dating & Marriage Matching\": _TL_(\"Dating & Marriage Matching\"),\r\n \"Banking\": _TL_(\"Banking\"),\r\n \"Bank Accounts\": _TL_(\"Bank Accounts\"),\r\n \"Private Banking\": _TL_(\"Private Banking\"),\r\n \"Business Finance\": _TL_(\"Business Finance\"),\r\n \"Investment Banking\": _TL_(\"Investment Banking\"),\r\n \"Mutual Funds\": _TL_(\"Mutual Funds\"),\r\n \"Securities\": _TL_(\"Securities\"),\r\n \"Stocks\": _TL_(\"Stocks\"),\r\n \"Financial Services\": _TL_(\"Financial Services\"),\r\n \"Accounting & Auditing\": _TL_(\"Accounting & Auditing\"),\r\n \"Banking Services\": _TL_(\"Banking Services\"),\r\n \"Debit & Checking Services\": _TL_(\"Debit & Checking Services\"),\r\n \"Savings Accounts\": _TL_(\"Savings Accounts\"),\r\n \"Credit & Lending\": _TL_(\"Credit & Lending\"),\r\n \"Auto Loans\": _TL_(\"Auto Loans\"),\r\n \"Business Loans\": _TL_(\"Business Loans\"),\r\n \"Credit Reports & Monitoring Services\": _TL_(\"Credit Reports & Monitoring Services\"),\r\n \"Mortgage\": _TL_(\"Mortgage\"),\r\n \"Home Equity Loans\": _TL_(\"Home Equity Loans\"),\r\n \"Home Purchase Loans\": _TL_(\"Home Purchase Loans\"),\r\n \"Mortgage Refinancing\": _TL_(\"Mortgage Refinancing\"),\r\n \"Personal Loans\": _TL_(\"Personal Loans\"),\r\n \"Student Loans\": _TL_(\"Student Loans\"),\r\n \"Financial Planning\": _TL_(\"Financial Planning\"),\r\n \"Estate Planning\": _TL_(\"Estate Planning\"),\r\n \"Retirement Planning\": _TL_(\"Retirement Planning\"),\r\n \"Auto Insurance\": _TL_(\"Auto Insurance\"),\r\n \"Home Insurance\": _TL_(\"Home Insurance\"),\r\n \"Life Insurance\": _TL_(\"Life Insurance\"),\r\n \"Travel Insurance\": _TL_(\"Travel Insurance\"),\r\n \"Investment Services\": _TL_(\"Investment Services\"),\r\n \"Tax Services\": _TL_(\"Tax Services\"),\r\n \"Food & Groceries\": _TL_(\"Food & Groceries\"),\r\n \"Beverages\": _TL_(\"Beverages\"),\r\n \"Alcoholic Beverages\": _TL_(\"Alcoholic Beverages\"),\r\n \"Beer\": _TL_(\"Beer\"),\r\n \"Liquor\": _TL_(\"Liquor\"),\r\n \"Wine\": _TL_(\"Wine\"),\r\n \"Non-Alcoholic Beverages\": _TL_(\"Non-Alcoholic Beverages\"),\r\n \"Coffee\": _TL_(\"Coffee\"),\r\n \"Energy Drinks\": _TL_(\"Energy Drinks\"),\r\n \"Juice\": _TL_(\"Juice\"),\r\n \"Soft Drinks\": _TL_(\"Soft Drinks\"),\r\n \"Tea\": _TL_(\"Tea\"),\r\n \"Desserts\": _TL_(\"Desserts\"),\r\n \"Fish & Seafood\": _TL_(\"Fish & Seafood\"),\r\n \"Organic & Natural Foods\": _TL_(\"Organic & Natural Foods\"),\r\n \"Baked Goods\": _TL_(\"Baked Goods\"),\r\n \"Candy & Chocolate\": _TL_(\"Candy & Chocolate\"),\r\n \"Condiments & Sauces\": _TL_(\"Condiments & Sauces\"),\r\n \"Cooking & Baking Ingredients\": _TL_(\"Cooking & Baking Ingredients\"),\r\n \"Grocery Delivery\": _TL_(\"Grocery Delivery\"),\r\n \"Restaurant Delivery & Takeout\": _TL_(\"Restaurant Delivery & Takeout\"),\r\n \"Gifts & Occasions\": _TL_(\"Gifts & Occasions\"),\r\n \"Cards & Greetings\": _TL_(\"Cards & Greetings\"),\r\n \"Flowers\": _TL_(\"Flowers\"),\r\n \"Gift Baskets\": _TL_(\"Gift Baskets\"),\r\n \"Holiday & Seasonal Items\": _TL_(\"Holiday & Seasonal Items\"),\r\n \"Christmas Items & Decor\": _TL_(\"Christmas Items & Decor\"),\r\n \"Halloween Items & Decor\": _TL_(\"Halloween Items & Decor\"),\r\n \"Valentine's Day Items & Decor\": _TL_(\"Valentine's Day Items & Decor\"),\r\n \"Party Supplies & Planning\": _TL_(\"Party Supplies & Planning\"),\r\n \"Event Planning Services\": _TL_(\"Event Planning Services\"),\r\n \"Party Supplies\": _TL_(\"Party Supplies\"),\r\n \"Personalized Gifts\": _TL_(\"Personalized Gifts\"),\r\n \"Photo & Video Services\": _TL_(\"Photo & Video Services\"),\r\n \"Event Photographers & Studios\": _TL_(\"Event Photographers & Studios\"),\r\n \"Photo Printing Services\": _TL_(\"Photo Printing Services\"),\r\n \"Wedding Planning\": _TL_(\"Wedding Planning\"),\r\n \"Hospice & Home Nursing Care\": _TL_(\"Hospice & Home Nursing Care\"),\r\n \"Hobbies & Leisure\": _TL_(\"Hobbies & Leisure\"),\r\n \"Camping & Outdoor Recreation\": _TL_(\"Camping & Outdoor Recreation\"),\r\n \"Cooking\": _TL_(\"Cooking\"),\r\n \"Cuisines\": _TL_(\"Cuisines\"),\r\n \"Asian Cuisine\": _TL_(\"Asian Cuisine\"),\r\n \"Chinese Cuisine\": _TL_(\"Chinese Cuisine\"),\r\n \"French Cuisine\": _TL_(\"French Cuisine\"),\r\n \"Indian Cuisine\": _TL_(\"Indian Cuisine\"),\r\n \"Latin American Cuisine\": _TL_(\"Latin American Cuisine\"),\r\n \"Mexican Cuisine\": _TL_(\"Mexican Cuisine\"),\r\n \"Mediterranean Cuisine\": _TL_(\"Mediterranean Cuisine\"),\r\n \"Spanish Cuisine\": _TL_(\"Spanish Cuisine\"),\r\n \"Vegetarian Cuisine\": _TL_(\"Vegetarian Cuisine\"),\r\n \"Vegetarian & Vegan Foods\": _TL_(\"Vegetarian & Vegan Foods\"),\r\n \"Pets & Animals\": _TL_(\"Pets & Animals\"),\r\n \"Pet Food & Supplies\": _TL_(\"Pet Food & Supplies\"),\r\n \"Pet Food & Treats\": _TL_(\"Pet Food & Treats\"),\r\n \"Photo & Video\": _TL_(\"Photo & Video\"),\r\n \"Photographic & Digital Arts\": _TL_(\"Photographic & Digital Arts\"),\r\n \"Board Games\": _TL_(\"Board Games\"),\r\n \"Online Games & Puzzles\": _TL_(\"Online Games & Puzzles\"),\r\n \"Massive Multiplayer Online Games\": _TL_(\"Massive Multiplayer Online Games\"),\r\n \"Puzzles & Brainteasers\": _TL_(\"Puzzles & Brainteasers\"),\r\n \"Roleplaying Games\": _TL_(\"Roleplaying Games\"),\r\n \"Strategy Games\": _TL_(\"Strategy Games\"),\r\n \"Pool & Billiards\": _TL_(\"Pool & Billiards\"),\r\n \"Video Games, Consoles & Accessories\": _TL_(\"Video Games, Consoles & Accessories\"),\r\n \"Computer & Video Games\": _TL_(\"Computer & Video Games\"),\r\n \"Driving & Racing Games\": _TL_(\"Driving & Racing Games\"),\r\n \"Shooter Games\": _TL_(\"Shooter Games\"),\r\n \"Simulation Games\": _TL_(\"Simulation Games\"),\r\n \"Sports Games\": _TL_(\"Sports Games\"),\r\n \"Children's Dolls, Dress-Up Toys & Costumes\": _TL_(\"Children's Dolls, Dress-Up Toys & Costumes\"),\r\n \"Online Doll Dress-Up & Girl Games\": _TL_(\"Online Doll Dress-Up & Girl Games\"),\r\n \"Cookware & Bakeware\": _TL_(\"Cookware & Bakeware\"),\r\n \"Architectural Services\": _TL_(\"Architectural Services\"),\r\n \"Carpet Installation\": _TL_(\"Carpet Installation\"),\r\n \"Door & Window Installation\": _TL_(\"Door & Window Installation\"),\r\n \"Electrician Services\": _TL_(\"Electrician Services\"),\r\n \"Flooring Services\": _TL_(\"Flooring Services\"),\r\n \"General Contracting & Remodeling Services\": _TL_(\"General Contracting & Remodeling Services\"),\r\n \"Home Cleaning Services\": _TL_(\"Home Cleaning Services\"),\r\n \"Interior Design & Decorating Services\": _TL_(\"Interior Design & Decorating Services\"),\r\n \"Landscape Design\": _TL_(\"Landscape Design\"),\r\n \"Lawn & Garden Maintenance\": _TL_(\"Lawn & Garden Maintenance\"),\r\n \"Locksmith Services\": _TL_(\"Locksmith Services\"),\r\n \"Painting Services\": _TL_(\"Painting Services\"),\r\n \"Pest Control Services\": _TL_(\"Pest Control Services\"),\r\n \"Pest Control\": _TL_(\"Pest Control\"),\r\n \"Plumbing Services\": _TL_(\"Plumbing Services\"),\r\n \"Roofing Services\": _TL_(\"Roofing Services\"),\r\n \"Yard Garden & Patio\": _TL_(\"Yard Garden & Patio\"),\r\n \"Yard Garden and Patio\": _TL_(\"Yard Garden and Patio\"),\r\n \"Yard & Garden Equipment & Supplies\": _TL_(\"Yard & Garden Equipment & Supplies\"),\r\n \"Home Appliances\": _TL_(\"Home Appliances\"),\r\n \"Climate Control Appliances\": _TL_(\"Climate Control Appliances\"),\r\n \"Air Conditioners\": _TL_(\"Air Conditioners\"),\r\n \"Fans\": _TL_(\"Fans\"),\r\n \"Cooking Ranges & Stoves\": _TL_(\"Cooking Ranges & Stoves\"),\r\n \"Dishwashers\": _TL_(\"Dishwashers\"),\r\n \"Kitchen Appliance Accessories\": _TL_(\"Kitchen Appliance Accessories\"),\r\n \"Coffee Maker & Espresso Machine Accessories\": _TL_(\"Coffee Maker & Espresso Machine Accessories\"),\r\n \"Mixer & Blender Accessories\": _TL_(\"Mixer & Blender Accessories\"),\r\n \"Refrigerator Accessories\": _TL_(\"Refrigerator Accessories\"),\r\n \"Microwaves\": _TL_(\"Microwaves\"),\r\n \"Refrigerators\": _TL_(\"Refrigerators\"),\r\n \"Small Appliances\": _TL_(\"Small Appliances\"),\r\n \"Coffee & Espresso Makers\": _TL_(\"Coffee & Espresso Makers\"),\r\n \"Juicers & Blenders\": _TL_(\"Juicers & Blenders\"),\r\n \"Mixers\": _TL_(\"Mixers\"),\r\n \"Vacuums\": _TL_(\"Vacuums\"),\r\n \"Washers & Dryers\": _TL_(\"Washers & Dryers\"),\r\n \"Home Decor\": _TL_(\"Home Decor\"),\r\n \"Bedding\": _TL_(\"Bedding\"),\r\n \"Curtains & Window Treatments\": _TL_(\"Curtains & Window Treatments\"),\r\n \"Curtains & Drapes\": _TL_(\"Curtains & Drapes\"),\r\n \"Window Blinds & Shades\": _TL_(\"Window Blinds & Shades\"),\r\n \"Fine Art\": _TL_(\"Fine Art\"),\r\n \"Fireplaces\": _TL_(\"Fireplaces\"),\r\n \"Lights & Fixtures\": _TL_(\"Lights & Fixtures\"),\r\n \"Ceiling Light Fixtures\": _TL_(\"Ceiling Light Fixtures\"),\r\n \"Wall Light Fixtures\": _TL_(\"Wall Light Fixtures\"),\r\n \"Linens\": _TL_(\"Linens\"),\r\n \"Rugs & Carpets\": _TL_(\"Rugs & Carpets\"),\r\n \"Home Furnishings\": _TL_(\"Home Furnishings\"),\r\n \"Antiques & Collectibles\": _TL_(\"Antiques & Collectibles\"),\r\n \"Bedroom\": _TL_(\"Bedroom\"),\r\n \"Beds & Bed Frames\": _TL_(\"Beds & Bed Frames\"),\r\n \"Mattresses\": _TL_(\"Mattresses\"),\r\n \"Home Office\": _TL_(\"Home Office\"),\r\n \"Desks\": _TL_(\"Desks\"),\r\n \"Office Chairs\": _TL_(\"Office Chairs\"),\r\n \"Home Storage & Shelving\": _TL_(\"Home Storage & Shelving\"),\r\n \"Kitchen & Dining Room\": _TL_(\"Kitchen & Dining Room\"),\r\n \"Kitchen & Dining Room Tables\": _TL_(\"Kitchen & Dining Room Tables\"),\r\n \"Stools\": _TL_(\"Stools\"),\r\n \"Living Room\": _TL_(\"Living Room\"),\r\n \"Accent Tables\": _TL_(\"Accent Tables\"),\r\n \"Sofas\": _TL_(\"Sofas\"),\r\n \"Nursery\": _TL_(\"Nursery\"),\r\n \"Home Improvement\": _TL_(\"Home Improvement\"),\r\n \"Flooring\": _TL_(\"Flooring\"),\r\n \"Kitchen & Bathroom Cabinets\": _TL_(\"Kitchen & Bathroom Cabinets\"),\r\n \"Kitchen & Bathroom Counters\": _TL_(\"Kitchen & Bathroom Counters\"),\r\n \"Paint\": _TL_(\"Paint\"),\r\n \"Plumbing Fixture Hardware & Parts\": _TL_(\"Plumbing Fixture Hardware & Parts\"),\r\n \"Plumbing Fixtures\": _TL_(\"Plumbing Fixtures\"),\r\n \"Power & Electrical Supplies\": _TL_(\"Power & Electrical Supplies\"),\r\n \"Tools\": _TL_(\"Tools\"),\r\n \"Measuring Tools & Sensors\": _TL_(\"Measuring Tools & Sensors\"),\r\n \"Home Security\": _TL_(\"Home Security\"),\r\n \"Household Supplies\": _TL_(\"Household Supplies\"),\r\n \"Household Cleaning Supplies\": _TL_(\"Household Cleaning Supplies\"),\r\n \"Pest Control Supplies\": _TL_(\"Pest Control Supplies\"),\r\n \"Kitchen & Dining\": _TL_(\"Kitchen & Dining\"),\r\n \"Kitchen Tools & Utensils\": _TL_(\"Kitchen Tools & Utensils\"),\r\n \"Outdoor Items\": _TL_(\"Outdoor Items\"),\r\n \"BBQ & Grill Accessories\": _TL_(\"BBQ & Grill Accessories\"),\r\n \"BBQs & Grills\": _TL_(\"BBQs & Grills\"),\r\n \"Garden & Outdoor Furniture\": _TL_(\"Garden & Outdoor Furniture\"),\r\n \"Outdoor Furniture Sets\": _TL_(\"Outdoor Furniture Sets\"),\r\n \"Garden Sheds & Outdoor Structures\": _TL_(\"Garden Sheds & Outdoor Structures\"),\r\n \"Lawn Care & Gardening Supplies\": _TL_(\"Lawn Care & Gardening Supplies\"),\r\n \"Lawn Mowers\": _TL_(\"Lawn Mowers\"),\r\n \"Pools & Spas\": _TL_(\"Pools & Spas\"),\r\n \"Pet Supplies\": _TL_(\"Pet Supplies\"),\r\n \"Cat Food & Supplies\": _TL_(\"Cat Food & Supplies\"),\r\n \"Dog Food & Supplies\": _TL_(\"Dog Food & Supplies\"),\r\n \"Tableware\": _TL_(\"Tableware\"),\r\n \"Internet & Telecom\": _TL_(\"Internet & Telecom\"),\r\n \"Social Networks & Online Communities\": _TL_(\"Social Networks & Online Communities\"),\r\n \"Mobile Social Networks\": _TL_(\"Mobile Social Networks\"),\r\n \"3d Artist\": _TL_(\"3d Artist\"),\r\n \"3d Designer\": _TL_(\"3d Designer\"),\r\n \"Accountant\": _TL_(\"Accountant\"),\r\n \"Accounts Payable Clerk\": _TL_(\"Accounts Payable Clerk\"),\r\n \"Accounts Receivable Clerk\": _TL_(\"Accounts Receivable Clerk\"),\r\n \"Actuary\": _TL_(\"Actuary\"),\r\n \"Administrative Employee\": _TL_(\"Administrative Employee\"),\r\n \"Advertising Specialist\": _TL_(\"Advertising Specialist\"),\r\n \"Agriculturist\": _TL_(\"Agriculturist\"),\r\n \"Alternative Medicine Practitioner\": _TL_(\"Alternative Medicine Practitioner\"),\r\n \"Animator\": _TL_(\"Animator\"),\r\n \"Archaeology and History Researcher\": _TL_(\"Archaeology and History Researcher\"),\r\n \"Architect\": _TL_(\"Architect\"),\r\n \"Art Curator\": _TL_(\"Art Curator\"),\r\n \"Arts Professional\": _TL_(\"Arts Professional\"),\r\n \"Asset Manager\": _TL_(\"Asset Manager\"),\r\n \"Audio-Visual Specialist\": _TL_(\"Audio-Visual Specialist\"),\r\n \"Auditor\": _TL_(\"Auditor\"),\r\n \"Author\": _TL_(\"Author\"),\r\n \"Automotive Salesperson\": _TL_(\"Automotive Salesperson\"),\r\n \"Avionics and Flight Engineer\": _TL_(\"Avionics and Flight Engineer\"),\r\n \"Banking Consultant\": _TL_(\"Banking Consultant\"),\r\n \"Banking Sales Consultant\": _TL_(\"Banking Sales Consultant\"),\r\n \"Benefits Specialist\": _TL_(\"Benefits Specialist\"),\r\n \"Bioinformatician\": _TL_(\"Bioinformatician\"),\r\n \"Branch Bank Employee\": _TL_(\"Branch Bank Employee\"),\r\n \"Business Analyst\": _TL_(\"Business Analyst\"),\r\n \"Business Development Specialist\": _TL_(\"Business Development Specialist\"),\r\n \"Business Intelligence Consultant\": _TL_(\"Business Intelligence Consultant\"),\r\n \"Business Intern\": _TL_(\"Business Intern\"),\r\n \"business intern\": _TL_(\"business intern\"),\r\n \"Business Strategist\": _TL_(\"Business Strategist\"),\r\n \"Buyer\": _TL_(\"Buyer\"),\r\n \"Buyer Sourcing\": _TL_(\"Buyer Sourcing\"),\r\n \"Camp Counselor\": _TL_(\"Camp Counselor\"),\r\n \"Campaign Coordinator\": _TL_(\"Campaign Coordinator\"),\r\n \"Capital Markets Specialist\": _TL_(\"Capital Markets Specialist\"),\r\n \"Career Counselor\": _TL_(\"Career Counselor\"),\r\n \"Caregiver\": _TL_(\"Caregiver\"),\r\n \"Category Manager\": _TL_(\"Category Manager\"),\r\n \"Chemical Process Engineer\": _TL_(\"Chemical Process Engineer\"),\r\n \"Chemist\": _TL_(\"Chemist\"),\r\n \"Chief Information Officer\": _TL_(\"Chief Information Officer\"),\r\n \"Chief of Department\": _TL_(\"Chief of Department\"),\r\n \"chief of department\": _TL_(\"chief of department\"),\r\n \"Chief Technology Officer\": _TL_(\"Chief Technology Officer\"),\r\n \"Civil Engineer\": _TL_(\"Civil Engineer\"),\r\n \"Claims Specialist\": _TL_(\"Claims Specialist\"),\r\n \"Clinical Research Specialist\": _TL_(\"Clinical Research Specialist\"),\r\n \"Commercial Banker\": _TL_(\"Commercial Banker\"),\r\n \"Commercial Loan Officer\": _TL_(\"Commercial Loan Officer\"),\r\n \"Commercial Real Estate Specialist\": _TL_(\"Commercial Real Estate Specialist\"),\r\n \"Community Development Specialist\": _TL_(\"Community Development Specialist\"),\r\n \"Compensation Specialist\": _TL_(\"Compensation Specialist\"),\r\n \"Compliance Specialist\": _TL_(\"Compliance Specialist\"),\r\n \"Computer Aided Designer\": _TL_(\"Computer Aided Designer\"),\r\n \"Construction Engineer\": _TL_(\"Construction Engineer\"),\r\n \"Construction Project Planner\": _TL_(\"Construction Project Planner\"),\r\n \"Contract Administrator\": _TL_(\"Contract Administrator\"),\r\n \"Contract Worker\": _TL_(\"Contract Worker\"),\r\n \"contract worker\": _TL_(\"contract worker\"),\r\n \"Control Systems Engineer\": _TL_(\"Control Systems Engineer\"),\r\n \"Corporate Board Member\": _TL_(\"Corporate Board Member\"),\r\n \"Corporate Finance Specialist\": _TL_(\"Corporate Finance Specialist\"),\r\n \"Corporate Merger Specialist\": _TL_(\"Corporate Merger Specialist\"),\r\n \"Corporate Tax Specialist\": _TL_(\"Corporate Tax Specialist\"),\r\n \"Corporate Trainer\": _TL_(\"Corporate Trainer\"),\r\n \"Creative Designer\": _TL_(\"Creative Designer\"),\r\n \"Credit Analyst\": _TL_(\"Credit Analyst\"),\r\n \"Customer Service Specialist\": _TL_(\"Customer Service Specialist\"),\r\n \"Data Analyst\": _TL_(\"Data Analyst\"),\r\n \"Data Entry Clerk\": _TL_(\"Data Entry Clerk\"),\r\n \"Database Developer\": _TL_(\"Database Developer\"),\r\n \"Database Marketing Specialist\": _TL_(\"Database Marketing Specialist\"),\r\n \"Datacenter Manager\": _TL_(\"Datacenter Manager\"),\r\n \"Dentist\": _TL_(\"Dentist\"),\r\n \"Dietitian\": _TL_(\"Dietitian\"),\r\n \"Document Controller\": _TL_(\"Document Controller\"),\r\n \"E-Commerce Specialist\": _TL_(\"E-Commerce Specialist\"),\r\n \"Economist\": _TL_(\"Economist\"),\r\n \"Education Administrator\": _TL_(\"Education Administrator\"),\r\n \"Electrical Engineer\": _TL_(\"Electrical Engineer\"),\r\n \"Embedded Software Engineer\": _TL_(\"Embedded Software Engineer\"),\r\n \"Engineer\": _TL_(\"Engineer\"),\r\n \"Entertainment Administrator\": _TL_(\"Entertainment Administrator\"),\r\n \"Environmental Specialist\": _TL_(\"Environmental Specialist\"),\r\n \"Equity Analyst\": _TL_(\"Equity Analyst\"),\r\n \"Equity Research Analyst\": _TL_(\"Equity Research Analyst\"),\r\n \"ERP Consultant\": _TL_(\"ERP Consultant\"),\r\n \"Event Planner\": _TL_(\"Event Planner\"),\r\n \"Executive Director\": _TL_(\"Executive Director\"),\r\n \"Export Sales Specialist\": _TL_(\"Export Sales Specialist\"),\r\n \"Facilities Manager\": _TL_(\"Facilities Manager\"),\r\n \"Factory Worker\": _TL_(\"Factory Worker\"),\r\n \"Fashion Designer\": _TL_(\"Fashion Designer\"),\r\n \"Federal Salesperson\": _TL_(\"Federal Salesperson\"),\r\n \"Finance Specialist\": _TL_(\"Finance Specialist\"),\r\n \"Financial Advisor\": _TL_(\"Financial Advisor\"),\r\n \"Financial Aid Specialist\": _TL_(\"Financial Aid Specialist\"),\r\n \"Financial Research Analyst\": _TL_(\"Financial Research Analyst\"),\r\n \"Flight Crew\": _TL_(\"Flight Crew\"),\r\n \"Food Service Professional\": _TL_(\"Food Service Professional\"),\r\n \"Food Technologist\": _TL_(\"Food Technologist\"),\r\n \"Founder\": _TL_(\"Founder\"),\r\n \"Fraud Analyst\": _TL_(\"Fraud Analyst\"),\r\n \"Fund Accountant\": _TL_(\"Fund Accountant\"),\r\n \"Fundraiser\": _TL_(\"Fundraiser\"),\r\n \"Game Designer\": _TL_(\"Game Designer\"),\r\n \"Geologist\": _TL_(\"Geologist\"),\r\n \"GIS Specialist\": _TL_(\"GIS Specialist\"),\r\n \"Global Financial Representative\": _TL_(\"Global Financial Representative\"),\r\n \"global financial representative\": _TL_(\"global financial representative\"),\r\n \"Government Policy Specialist\": _TL_(\"Government Policy Specialist\"),\r\n \"Graphic Designer\": _TL_(\"Graphic Designer\"),\r\n \"graphic designer\": _TL_(\"graphic designer\"),\r\n \"Hardware Engineer\": _TL_(\"Hardware Engineer\"),\r\n \"Health Specialist\": _TL_(\"Health Specialist\"),\r\n \"Healthcare Administrator\": _TL_(\"Healthcare Administrator\"),\r\n \"Heavy Equipment Supervisor\": _TL_(\"Heavy Equipment Supervisor\"),\r\n \"Homemaker\": _TL_(\"Homemaker\"),\r\n \"homemaker\": _TL_(\"homemaker\"),\r\n \"Hospitality Professional\": _TL_(\"Hospitality Professional\"),\r\n \"Human Resources Information System Consultant\": _TL_(\"Human Resources Information System Consultant\"),\r\n \"Human Resources Legal Consultant\": _TL_(\"Human Resources Legal Consultant\"),\r\n \"Human Resources Specialist\": _TL_(\"Human Resources Specialist\"),\r\n \"Illustrator\": _TL_(\"Illustrator\"),\r\n \"Industrial Designer\": _TL_(\"Industrial Designer\"),\r\n \"Information Security Specialist\": _TL_(\"Information Security Specialist\"),\r\n \"Information Technology Auditor\": _TL_(\"Information Technology Auditor\"),\r\n \"Information Technology Consultant\": _TL_(\"Information Technology Consultant\"),\r\n \"Information Technology Engineer\": _TL_(\"Information Technology Engineer\"),\r\n \"Information Technology Support Specialist\": _TL_(\"Information Technology Support Specialist\"),\r\n \"Information Technology System Administrator\": _TL_(\"Information Technology System Administrator\"),\r\n \"Innovation Manager\": _TL_(\"Innovation Manager\"),\r\n \"Institutional Investment Salesperson\": _TL_(\"Institutional Investment Salesperson\"),\r\n \"Instructional Designer\": _TL_(\"Instructional Designer\"),\r\n \"Insurance Agent\": _TL_(\"Insurance Agent\"),\r\n \"Intellectual Property Specialist\": _TL_(\"Intellectual Property Specialist\"),\r\n \"Interim Executive\": _TL_(\"Interim Executive\"),\r\n \"interim executive\": _TL_(\"interim executive\"),\r\n \"Interior Designer\": _TL_(\"Interior Designer\"),\r\n \"International Trade Specialist\": _TL_(\"International Trade Specialist\"),\r\n \"Investment Banking Analyst\": _TL_(\"Investment Banking Analyst\"),\r\n \"Investment Portfolio Manager\": _TL_(\"Investment Portfolio Manager\"),\r\n \"Investment Trader\": _TL_(\"Investment Trader\"),\r\n \"Jeweler\": _TL_(\"Jeweler\"),\r\n \"Journalist\": _TL_(\"Journalist\"),\r\n \"Judge\": _TL_(\"Judge\"),\r\n \"Laboratory Scientist\": _TL_(\"Laboratory Scientist\"),\r\n \"Laboratory Technician\": _TL_(\"Laboratory Technician\"),\r\n \"Laborer\": _TL_(\"Laborer\"),\r\n \"laborer\": _TL_(\"laborer\"),\r\n \"Landscape Designer\": _TL_(\"Landscape Designer\"),\r\n \"Language and Localization Specialist\": _TL_(\"Language and Localization Specialist\"),\r\n \"Lawyer\": _TL_(\"Lawyer\"),\r\n \"Legal Administrative Professional\": _TL_(\"Legal Administrative Professional\"),\r\n \"Legal Contract Administrator\": _TL_(\"Legal Contract Administrator\"),\r\n \"Librarian\": _TL_(\"Librarian\"),\r\n \"Life Sciences and Medical Researcher\": _TL_(\"Life Sciences and Medical Researcher\"),\r\n \"Loan Officer\": _TL_(\"Loan Officer\"),\r\n \"Logistics Specialist\": _TL_(\"Logistics Specialist\"),\r\n \"Loss Prevention Specialist\": _TL_(\"Loss Prevention Specialist\"),\r\n \"Managed Services Specialist\": _TL_(\"Managed Services Specialist\"),\r\n \"Manufacturing Operations Manager\": _TL_(\"Manufacturing Operations Manager\"),\r\n \"Mariner\": _TL_(\"Mariner\"),\r\n \"Market Research Manager\": _TL_(\"Market Research Manager\"),\r\n \"Marketing Communications Specialist\": _TL_(\"Marketing Communications Specialist\"),\r\n \"Marketing Creative Designer\": _TL_(\"Marketing Creative Designer\"),\r\n \"Marketing Operations Specialist\": _TL_(\"Marketing Operations Specialist\"),\r\n \"Marketing Product Manager\": _TL_(\"Marketing Product Manager\"),\r\n \"Marketing Project Manager\": _TL_(\"Marketing Project Manager\"),\r\n \"Marketing Research Specialist\": _TL_(\"Marketing Research Specialist\"),\r\n \"Marketing Specialist\": _TL_(\"Marketing Specialist\"),\r\n \"Mechanic and Maintenance Tradesperson\": _TL_(\"Mechanic and Maintenance Tradesperson\"),\r\n \"Medical Advisor\": _TL_(\"Medical Advisor\"),\r\n \"Medical Assistant\": _TL_(\"Medical Assistant\"),\r\n \"Medical Representative\": _TL_(\"Medical Representative\"),\r\n \"Medical Research Advisor\": _TL_(\"Medical Research Advisor\"),\r\n \"Medical Researcher\": _TL_(\"Medical Researcher\"),\r\n \"Medical Salesperson\": _TL_(\"Medical Salesperson\"),\r\n \"Medical Writer\": _TL_(\"Medical Writer\"),\r\n \"Membership Director\": _TL_(\"Membership Director\"),\r\n \"Mental Health Professional\": _TL_(\"Mental Health Professional\"),\r\n \"Merchandiser\": _TL_(\"Merchandiser\"),\r\n \"Military Officer\": _TL_(\"Military Officer\"),\r\n \"Minister\": _TL_(\"Minister\"),\r\n \"Motion Graphics Designer\": _TL_(\"Motion Graphics Designer\"),\r\n \"Multimedia Specialist\": _TL_(\"Multimedia Specialist\"),\r\n \"Music Manager\": _TL_(\"Music Manager\"),\r\n \"Musician\": _TL_(\"Musician\"),\r\n \"Network Engineer\": _TL_(\"Network Engineer\"),\r\n \"New Home Salesperson\": _TL_(\"New Home Salesperson\"),\r\n \"Non-profit Board Member\": _TL_(\"Non-profit Board Member\"),\r\n \"Nurse\": _TL_(\"Nurse\"),\r\n \"Occupational Therapist\": _TL_(\"Occupational Therapist\"),\r\n \"Office Worker\": _TL_(\"Office Worker\"),\r\n \"Online Marketing Manager\": _TL_(\"Online Marketing Manager\"),\r\n \"Operations Specialist\": _TL_(\"Operations Specialist\"),\r\n \"Packaging Specialist\": _TL_(\"Packaging Specialist\"),\r\n \"Partner\": _TL_(\"Partner\"),\r\n \"Payroll Specialist\": _TL_(\"Payroll Specialist\"),\r\n \"Payroll Specialist Accounting\": _TL_(\"Payroll Specialist Accounting\"),\r\n \"Pension Manager\": _TL_(\"Pension Manager\"),\r\n \"Performer\": _TL_(\"Performer\"),\r\n \"Personal Banker\": _TL_(\"Personal Banker\"),\r\n \"Personal Stylist\": _TL_(\"Personal Stylist\"),\r\n \"Personal Tax Specialist\": _TL_(\"Personal Tax Specialist\"),\r\n \"Pet Services Specialist\": _TL_(\"Pet Services Specialist\"),\r\n \"Pharmaceutical Scientist\": _TL_(\"Pharmaceutical Scientist\"),\r\n \"Pharmacist\": _TL_(\"Pharmacist\"),\r\n \"Photographer\": _TL_(\"Photographer\"),\r\n \"Physical Therapist\": _TL_(\"Physical Therapist\"),\r\n \"Physician\": _TL_(\"Physician\"),\r\n \"Physicist\": _TL_(\"Physicist\"),\r\n \"Political Staff\": _TL_(\"Political Staff\"),\r\n \"Postal Worker\": _TL_(\"Postal Worker\"),\r\n \"Pricing Specialist\": _TL_(\"Pricing Specialist\"),\r\n \"Print Specialist\": _TL_(\"Print Specialist\"),\r\n \"Process Specialist\": _TL_(\"Process Specialist\"),\r\n \"Product Developer\": _TL_(\"Product Developer\"),\r\n \"Product Development Engineer\": _TL_(\"Product Development Engineer\"),\r\n \"Product Manager\": _TL_(\"Product Manager\"),\r\n \"Product Researcher\": _TL_(\"Product Researcher\"),\r\n \"Production Crew\": _TL_(\"Production Crew\"),\r\n \"Production Editor\": _TL_(\"Production Editor\"),\r\n \"Program Administrator\": _TL_(\"Program Administrator\"),\r\n \"Program Analyst\": _TL_(\"Program Analyst\"),\r\n \"Program Manager\": _TL_(\"Program Manager\"),\r\n \"Project Administrator\": _TL_(\"Project Administrator\"),\r\n \"Project Manager\": _TL_(\"Project Manager\"),\r\n \"Property Manager\": _TL_(\"Property Manager\"),\r\n \"Proposal Writer\": _TL_(\"Proposal Writer\"),\r\n \"Public Health Specialist\": _TL_(\"Public Health Specialist\"),\r\n \"Public Relations Specialist\": _TL_(\"Public Relations Specialist\"),\r\n \"Public Safety Professional\": _TL_(\"Public Safety Professional\"),\r\n \"Public Speaker\": _TL_(\"Public Speaker\"),\r\n \"Publisher\": _TL_(\"Publisher\"),\r\n \"Purchaser\": _TL_(\"Purchaser\"),\r\n \"Quality Assurance Tester\": _TL_(\"Quality Assurance Tester\"),\r\n \"Real Estate Broker\": _TL_(\"Real Estate Broker\"),\r\n \"Real Estate Specialist\": _TL_(\"Real Estate Specialist\"),\r\n \"Recreation Professional\": _TL_(\"Recreation Professional\"),\r\n \"Recruiter\": _TL_(\"Recruiter\"),\r\n \"Regulatory Specialist\": _TL_(\"Regulatory Specialist\"),\r\n \"Reporter\": _TL_(\"Reporter\"),\r\n \"Research Analyst\": _TL_(\"Research Analyst\"),\r\n \"Research Development Software Engineer\": _TL_(\"Research Development Software Engineer\"),\r\n \"research development software engineer\": _TL_(\"research development software engineer\"),\r\n \"Research Fellow\": _TL_(\"Research Fellow\"),\r\n \"Retail Salesperson\": _TL_(\"Retail Salesperson\"),\r\n \"Retired\": _TL_(\"Retired\"),\r\n \"retired\": _TL_(\"retired\"),\r\n \"Revenue Manager\": _TL_(\"Revenue Manager\"),\r\n \"Risk Management Specialist\": _TL_(\"Risk Management Specialist\"),\r\n \"Safety Specialist\": _TL_(\"Safety Specialist\"),\r\n \"Sales Engineer\": _TL_(\"Sales Engineer\"),\r\n \"Sales Specialist\": _TL_(\"Sales Specialist\"),\r\n \"Salesperson\": _TL_(\"Salesperson\"),\r\n \"School Teacher\": _TL_(\"School Teacher\"),\r\n \"Service Delivery Specialist\": _TL_(\"Service Delivery Specialist\"),\r\n \"Social Media Specialist\": _TL_(\"Social Media Specialist\"),\r\n \"Social Worker\": _TL_(\"Social Worker\"),\r\n \"Software Developer\": _TL_(\"Software Developer\"),\r\n \"Software Tester\": _TL_(\"Software Tester\"),\r\n \"Staff Manager\": _TL_(\"Staff Manager\"),\r\n \"Strategic Alliance Specialist\": _TL_(\"Strategic Alliance Specialist\"),\r\n \"Student\": _TL_(\"Student\"),\r\n \"Surgeon\": _TL_(\"Surgeon\"),\r\n \"Surveyor\": _TL_(\"Surveyor\"),\r\n \"Technical Sales Professional\": _TL_(\"Technical Sales Professional\"),\r\n \"Technical Support Representative\": _TL_(\"Technical Support Representative\"),\r\n \"Technical Writer\": _TL_(\"Technical Writer\"),\r\n \"Technician\": _TL_(\"Technician\"),\r\n \"Technology Instructor\": _TL_(\"Technology Instructor\"),\r\n \"Technology Manager\": _TL_(\"Technology Manager\"),\r\n \"Telecommunications Engineering Specialist\": _TL_(\"Telecommunications Engineering Specialist\"),\r\n \"Telecommunications Specialist\": _TL_(\"Telecommunications Specialist\"),\r\n \"Test Development Engineer\": _TL_(\"Test Development Engineer\"),\r\n \"Tour Guide\": _TL_(\"Tour Guide\"),\r\n \"tour guide\": _TL_(\"tour guide\"),\r\n \"Transportation Specialist\": _TL_(\"Transportation Specialist\"),\r\n \"Travel and Tourism Professional\": _TL_(\"Travel and Tourism Professional\"),\r\n \"Treasurer\": _TL_(\"Treasurer\"),\r\n \"Trust Officer\": _TL_(\"Trust Officer\"),\r\n \"Underwriter\": _TL_(\"Underwriter\"),\r\n \"University Professor\": _TL_(\"University Professor\"),\r\n \"Urban Planner\": _TL_(\"Urban Planner\"),\r\n \"User Experience Designer\": _TL_(\"User Experience Designer\"),\r\n \"Volunteer\": _TL_(\"Volunteer\"),\r\n \"volunteer\": _TL_(\"volunteer\"),\r\n \"Wealth Manager\": _TL_(\"Wealth Manager\"),\r\n \"Web Designer\": _TL_(\"Web Designer\"),\r\n \"Website Manager\": _TL_(\"Website Manager\"),\r\n \"Jobs & Education\": _TL_(\"Jobs & Education\"),\r\n \"Education & Training\": _TL_(\"Education & Training\"),\r\n \"Community & Continuing Education\": _TL_(\"Community & Continuing Education\"),\r\n \"Law & Government\": _TL_(\"Law & Government\"),\r\n \"Military\": _TL_(\"Military\"),\r\n \"Politics\": _TL_(\"Politics\"),\r\n \"Media\": _TL_(\"Media\"),\r\n \"Audio Streaming Subscription Services\": _TL_(\"Audio Streaming Subscription Services\"),\r\n \"Books\": _TL_(\"Books\"),\r\n \"Video Games\": _TL_(\"Video Games\"),\r\n \"Video Streaming Subscription Services\": _TL_(\"Video Streaming Subscription Services\"),\r\n \"Musical Instruments & Accessories\": _TL_(\"Musical Instruments & Accessories\"),\r\n \"News, Media & Publications\": _TL_(\"News, Media & Publications\"),\r\n \"Books & Literature\": _TL_(\"Books & Literature\"),\r\n \"E-Books\": _TL_(\"E-Books\"),\r\n \"Celebrities & Entertainment News\": _TL_(\"Celebrities & Entertainment News\"),\r\n \"Magazines & Magazine Subscriptions\": _TL_(\"Magazines & Magazine Subscriptions\"),\r\n \"Newspapers\": _TL_(\"Newspapers\"),\r\n \"Personal Services\": _TL_(\"Personal Services\"),\r\n \"Commercial Properties\": _TL_(\"Commercial Properties\"),\r\n \"Commercial Properties (For Rent)\": _TL_(\"Commercial Properties (For Rent)\"),\r\n \"Commercial Properties (For Sale)\": _TL_(\"Commercial Properties (For Sale)\"),\r\n \"Moving & Relocation\": _TL_(\"Moving & Relocation\"),\r\n \"Bank-Owned & Foreclosed Listings\": _TL_(\"Bank-Owned & Foreclosed Listings\"),\r\n \"Relocation & Household Moving\": _TL_(\"Relocation & Household Moving\"),\r\n \"Apartments (For Rent)\": _TL_(\"Apartments (For Rent)\"),\r\n \"Furnished Apartments\": _TL_(\"Furnished Apartments\"),\r\n \"Unfurnished Apartments\": _TL_(\"Unfurnished Apartments\"),\r\n \"Houses (For Rent)\": _TL_(\"Houses (For Rent)\"),\r\n \"Residential Properties (For Sale)\": _TL_(\"Residential Properties (For Sale)\"),\r\n \"Apartments (For Sale)\": _TL_(\"Apartments (For Sale)\"),\r\n \"New Apartments (For Sale)\": _TL_(\"New Apartments (For Sale)\"),\r\n \"Preowned Apartments (For Sale)\": _TL_(\"Preowned Apartments (For Sale)\"),\r\n \"Houses (For Sale)\": _TL_(\"Houses (For Sale)\"),\r\n \"New Houses (For Sale)\": _TL_(\"New Houses (For Sale)\"),\r\n \"Preowned Houses (For Sale)\": _TL_(\"Preowned Houses (For Sale)\"),\r\n \"Retailers & General Merchandise\": _TL_(\"Retailers & General Merchandise\"),\r\n \"Coupons & Rebates\": _TL_(\"Coupons & Rebates\"),\r\n \"Shopping Portals & Search Engines\": _TL_(\"Shopping Portals & Search Engines\"),\r\n \"Wholesalers & Liquidators\": _TL_(\"Wholesalers & Liquidators\"),\r\n \"Seasonal Shopping\": _TL_(\"Seasonal Shopping\"),\r\n \"Back-to-School Shopping\": _TL_(\"Back-to-School Shopping\"),\r\n \"Back-to-School Apparel & Accessories\": _TL_(\"Back-to-School Apparel & Accessories\"),\r\n \"Black Friday Shopping\": _TL_(\"Black Friday Shopping\"),\r\n \"In-Store Black Friday Shopping\": _TL_(\"In-Store Black Friday Shopping\"),\r\n \"Online Black Friday Shopping\": _TL_(\"Online Black Friday Shopping\"),\r\n \"Christmas Shopping\": _TL_(\"Christmas Shopping\"),\r\n \"After-Christmas Sale Shopping\": _TL_(\"After-Christmas Sale Shopping\"),\r\n \"In-Store Christmas Shopping\": _TL_(\"In-Store Christmas Shopping\"),\r\n \"Online Christmas Shopping\": _TL_(\"Online Christmas Shopping\"),\r\n \"India Independence Day\": _TL_(\"India Independence Day\"),\r\n \"Mother's Day Shopping\": _TL_(\"Mother's Day Shopping\"),\r\n \"Rakhi (Rakshabandhan) Festival\": _TL_(\"Rakhi (Rakshabandhan) Festival\"),\r\n \"Valentine's Day Shopping\": _TL_(\"Valentine's Day Shopping\"),\r\n \"Social\": _TL_(\"Social\"),\r\n \"Dining & Nightlife Reviews, Guides & Listings\": _TL_(\"Dining & Nightlife Reviews, Guides & Listings\"),\r\n \"Antivirus & Security Software\": _TL_(\"Antivirus & Security Software\"),\r\n \"Audio & Music Software\": _TL_(\"Audio & Music Software\"),\r\n \"Business Management Software\": _TL_(\"Business Management Software\"),\r\n \"Design Software\": _TL_(\"Design Software\"),\r\n \"Drawing & Animation Software\": _TL_(\"Drawing & Animation Software\"),\r\n \"Photo Software\": _TL_(\"Photo Software\"),\r\n \"Graphics & Multimedia Software\": _TL_(\"Graphics & Multimedia Software\"),\r\n \"Tax & Accounting Software\": _TL_(\"Tax & Accounting Software\"),\r\n \"Video Software\": _TL_(\"Video Software\"),\r\n \"Boating & Water Recreation\": _TL_(\"Boating & Water Recreation\"),\r\n \"Surfing & Windsurfing Gear\": _TL_(\"Surfing & Windsurfing Gear\"),\r\n \"Fitness\": _TL_(\"Fitness\"),\r\n \"Fitness Products & Services\": _TL_(\"Fitness Products & Services\"),\r\n \"Exercise Equipment\": _TL_(\"Exercise Equipment\"),\r\n \"Fitness Technology Products\": _TL_(\"Fitness Technology Products\"),\r\n \"Weights & Strength Training Equipment\": _TL_(\"Weights & Strength Training Equipment\"),\r\n \"Fitness Classes & Personal Training Services\": _TL_(\"Fitness Classes & Personal Training Services\"),\r\n \"Gyms & Athletic Clubs\": _TL_(\"Gyms & Athletic Clubs\"),\r\n \"Yoga & Pilates\": _TL_(\"Yoga & Pilates\"),\r\n \"Outdoor Recreational Equipment\": _TL_(\"Outdoor Recreational Equipment\"),\r\n \"Camping & Hiking Equipment\": _TL_(\"Camping & Hiking Equipment\"),\r\n \"Fishing Equipment\": _TL_(\"Fishing Equipment\"),\r\n \"Baseball Equipment\": _TL_(\"Baseball Equipment\"),\r\n \"Golf Equipment\": _TL_(\"Golf Equipment\"),\r\n \"Hockey Equipment\": _TL_(\"Hockey Equipment\"),\r\n \"Skateboarding Equipment\": _TL_(\"Skateboarding Equipment\"),\r\n \"Soccer Equipment\": _TL_(\"Soccer Equipment\"),\r\n \"Water Activities Equipment & Accessories\": _TL_(\"Water Activities Equipment & Accessories\"),\r\n \"Winter Sports Equipment & Accessories\": _TL_(\"Winter Sports Equipment & Accessories\"),\r\n \"American Football\": _TL_(\"American Football\"),\r\n \"Baseball\": _TL_(\"Baseball\"),\r\n \"Basketball\": _TL_(\"Basketball\"),\r\n \"College Sports\": _TL_(\"College Sports\"),\r\n \"Cycling\": _TL_(\"Cycling\"),\r\n \"Equestrian Sports\": _TL_(\"Equestrian Sports\"),\r\n \"Golf\": _TL_(\"Golf\"),\r\n \"Hunting & Shooting\": _TL_(\"Hunting & Shooting\"),\r\n \"Motor Sports\": _TL_(\"Motor Sports\"),\r\n \"Qatar 2022 football\": _TL_(\"Qatar 2022 football\"),\r\n \"World Cup Fans\": _TL_(\"World Cup Fans\"),\r\n \"Running & Walking\": _TL_(\"Running & Walking\"),\r\n \"Soccer\": _TL_(\"Soccer\"),\r\n \"Swimming & Aquatic Sports\": _TL_(\"Swimming & Aquatic Sports\"),\r\n \"Tennis\": _TL_(\"Tennis\"),\r\n \"Volleyball\": _TL_(\"Volleyball\"),\r\n \"Winter Sports\": _TL_(\"Winter Sports\"),\r\n \"Skiing\": _TL_(\"Skiing\"),\r\n \"Snowboarding\": _TL_(\"Snowboarding\"),\r\n \"Telecom\": _TL_(\"Telecom\"),\r\n \"Cable & Satellite TV Providers\": _TL_(\"Cable & Satellite TV Providers\"),\r\n \"Internet Service Providers\": _TL_(\"Internet Service Providers\"),\r\n \"Mobile Phone Service Providers\": _TL_(\"Mobile Phone Service Providers\"),\r\n \"Travel\": _TL_(\"Travel\"),\r\n \"Travel & Tourism\": _TL_(\"Travel & Tourism\"),\r\n \"Adventure Travel\": _TL_(\"Adventure Travel\"),\r\n \"Ecotourism\": _TL_(\"Ecotourism\"),\r\n \"Family Vacations & Travel\": _TL_(\"Family Vacations & Travel\"),\r\n \"Tourist Attractions & Destinations\": _TL_(\"Tourist Attractions & Destinations\"),\r\n \"Beaches & Islands\": _TL_(\"Beaches & Islands\"),\r\n \"Lakes & Rivers\": _TL_(\"Lakes & Rivers\"),\r\n \"Theme Parks\": _TL_(\"Theme Parks\"),\r\n \"Hotels, Motels & Resorts\": _TL_(\"Hotels, Motels & Resorts\"),\r\n \"Air Travel by Class\": _TL_(\"Air Travel by Class\"),\r\n \"Business & First Class\": _TL_(\"Business & First Class\"),\r\n \"Economy Class\": _TL_(\"Economy Class\"),\r\n \"Air Travel by Destination\": _TL_(\"Air Travel by Destination\"),\r\n \"Airline Tickets, Fares & Flights\": _TL_(\"Airline Tickets, Fares & Flights\"),\r\n \"Bus & Rail Travel\": _TL_(\"Bus & Rail Travel\"),\r\n \"Car Rental\": _TL_(\"Car Rental\"),\r\n \"Economy, Compact & Mid-size Car Rental\": _TL_(\"Economy, Compact & Mid-size Car Rental\"),\r\n \"Economy Compact & Mid-size Car Rental\": _TL_(\"Economy Compact & Mid-size Car Rental\"),\r\n \"Full-size & Standard Car Rental\": _TL_(\"Full-size & Standard Car Rental\"),\r\n \"Luxury, Convertible & Specialty Car Rental\": _TL_(\"Luxury, Convertible & Specialty Car Rental\"),\r\n \"Luxury Convertible & Specialty Car Rental\": _TL_(\"Luxury Convertible & Specialty Car Rental\"),\r\n \"Minivan & SUV Rental\": _TL_(\"Minivan & SUV Rental\"),\r\n \"Cruises\": _TL_(\"Cruises\"),\r\n \"Hotels & Accommodations\": _TL_(\"Hotels & Accommodations\"),\r\n \"Hotels Motels and Resorts\": _TL_(\"Hotels Motels and Resorts\"),\r\n \"Hotels by Star Rating\": _TL_(\"Hotels by Star Rating\"),\r\n \"1 & 2 Star Hotels\": _TL_(\"1 & 2 Star Hotels\"),\r\n \"3 Star Hotels\": _TL_(\"3 Star Hotels\"),\r\n \"4 Star Hotels\": _TL_(\"4 Star Hotels\"),\r\n \"5 Star Hotels\": _TL_(\"5 Star Hotels\"),\r\n \"Last Minute Airfares & Flights\": _TL_(\"Last Minute Airfares & Flights\"),\r\n \"Sightseeing Tours & Tourist Attractions\": _TL_(\"Sightseeing Tours & Tourist Attractions\"),\r\n \"Transportation & Excursions\": _TL_(\"Transportation & Excursions\"),\r\n \"Travel Media & Publications\": _TL_(\"Travel Media & Publications\"),\r\n \"City & Local Guides\": _TL_(\"City & Local Guides\"),\r\n \"Trips by Destination\": _TL_(\"Trips by Destination\"),\r\n \"Trips to Asia-Pacific\": _TL_(\"Trips to Asia-Pacific\"),\r\n \"Trips to Australia\": _TL_(\"Trips to Australia\"),\r\n \"Trips to Brisbane\": _TL_(\"Trips to Brisbane\"),\r\n \"Trips to Melbourne\": _TL_(\"Trips to Melbourne\"),\r\n \"Trips to Perth\": _TL_(\"Trips to Perth\"),\r\n \"Trips to Sydney\": _TL_(\"Trips to Sydney\"),\r\n \"Trips to China\": _TL_(\"Trips to China\"),\r\n \"Trips to Beijing\": _TL_(\"Trips to Beijing\"),\r\n \"Trips to Chengdu\": _TL_(\"Trips to Chengdu\"),\r\n \"Trips to Guangzhou\": _TL_(\"Trips to Guangzhou\"),\r\n \"Trips to Shanghai\": _TL_(\"Trips to Shanghai\"),\r\n \"Trips to Hong Kong\": _TL_(\"Trips to Hong Kong\"),\r\n \"Trips to India\": _TL_(\"Trips to India\"),\r\n \"Trips to Ahmedabad\": _TL_(\"Trips to Ahmedabad\"),\r\n \"Trips to Bangalore\": _TL_(\"Trips to Bangalore\"),\r\n \"Trips to Chennai\": _TL_(\"Trips to Chennai\"),\r\n \"Trips to Delhi\": _TL_(\"Trips to Delhi\"),\r\n \"Trips to Goa\": _TL_(\"Trips to Goa\"),\r\n \"Trips to Hyderabad\": _TL_(\"Trips to Hyderabad\"),\r\n \"Trips to Jaipur\": _TL_(\"Trips to Jaipur\"),\r\n \"Trips to Kochi (India)\": _TL_(\"Trips to Kochi (India)\"),\r\n \"Trips to Kolkata\": _TL_(\"Trips to Kolkata\"),\r\n \"Trips to Mumbai\": _TL_(\"Trips to Mumbai\"),\r\n \"Trips to Pune\": _TL_(\"Trips to Pune\"),\r\n \"Trips to Indonesia\": _TL_(\"Trips to Indonesia\"),\r\n \"Trips to Bali\": _TL_(\"Trips to Bali\"),\r\n \"Trips to Bandung\": _TL_(\"Trips to Bandung\"),\r\n \"Trips to Jakarta\": _TL_(\"Trips to Jakarta\"),\r\n \"Trips to Japan\": _TL_(\"Trips to Japan\"),\r\n \"Trips to Fukuoka\": _TL_(\"Trips to Fukuoka\"),\r\n \"Trips to Kyoto-Osaka-Kobe\": _TL_(\"Trips to Kyoto-Osaka-Kobe\"),\r\n \"Trips to Nagoya\": _TL_(\"Trips to Nagoya\"),\r\n \"Trips to Okinawa\": _TL_(\"Trips to Okinawa\"),\r\n \"Trips to Sapporo\": _TL_(\"Trips to Sapporo\"),\r\n \"Trips to Tokyo\": _TL_(\"Trips to Tokyo\"),\r\n \"Trips to Malaysia\": _TL_(\"Trips to Malaysia\"),\r\n \"Trips to Kuala Lumpur\": _TL_(\"Trips to Kuala Lumpur\"),\r\n \"Trips to Penang\": _TL_(\"Trips to Penang\"),\r\n \"Trips to Nepal\": _TL_(\"Trips to Nepal\"),\r\n \"Trips to New Zealand\": _TL_(\"Trips to New Zealand\"),\r\n \"Trips to Seoul\": _TL_(\"Trips to Seoul\"),\r\n \"Trips to Singapore\": _TL_(\"Trips to Singapore\"),\r\n \"Trips to Sri Lanka\": _TL_(\"Trips to Sri Lanka\"),\r\n \"Trips to Taipei\": _TL_(\"Trips to Taipei\"),\r\n \"Trips to Thailand\": _TL_(\"Trips to Thailand\"),\r\n \"Trips to Bangkok\": _TL_(\"Trips to Bangkok\"),\r\n \"Trips to Chiang Mai\": _TL_(\"Trips to Chiang Mai\"),\r\n \"Trips to Phuket\": _TL_(\"Trips to Phuket\"),\r\n \"Trips to the Philippines\": _TL_(\"Trips to the Philippines\"),\r\n \"Trips to Vietnam\": _TL_(\"Trips to Vietnam\"),\r\n \"Trips to Hanoi\": _TL_(\"Trips to Hanoi\"),\r\n \"Trips to Ho Chi Minh City\": _TL_(\"Trips to Ho Chi Minh City\"),\r\n \"Trips to Europe\": _TL_(\"Trips to Europe\"),\r\n \"Trips to Amsterdam\": _TL_(\"Trips to Amsterdam\"),\r\n \"Trips to Brussels\": _TL_(\"Trips to Brussels\"),\r\n \"Trips to Croatia\": _TL_(\"Trips to Croatia\"),\r\n \"Trips to Denmark\": _TL_(\"Trips to Denmark\"),\r\n \"Trips to Copenhagen\": _TL_(\"Trips to Copenhagen\"),\r\n \"Trips to France\": _TL_(\"Trips to France\"),\r\n \"Trips to Bordeaux\": _TL_(\"Trips to Bordeaux\"),\r\n \"Trips to Lyon\": _TL_(\"Trips to Lyon\"),\r\n \"Trips to Marseille\": _TL_(\"Trips to Marseille\"),\r\n \"Trips to Nice\": _TL_(\"Trips to Nice\"),\r\n \"Trips to Paris\": _TL_(\"Trips to Paris\"),\r\n \"Trips to Toulouse\": _TL_(\"Trips to Toulouse\"),\r\n \"Trips to Germany\": _TL_(\"Trips to Germany\"),\r\n \"Trips to Berlin\": _TL_(\"Trips to Berlin\"),\r\n \"Trips to Cologne\": _TL_(\"Trips to Cologne\"),\r\n \"Trips to Dusseldorf\": _TL_(\"Trips to Dusseldorf\"),\r\n \"Trips to Frankfurt\": _TL_(\"Trips to Frankfurt\"),\r\n \"Trips to Hamburg\": _TL_(\"Trips to Hamburg\"),\r\n \"Trips to Munich\": _TL_(\"Trips to Munich\"),\r\n \"Trips to Stuttgart\": _TL_(\"Trips to Stuttgart\"),\r\n \"Trips to Greece\": _TL_(\"Trips to Greece\"),\r\n \"Trips to Helsinki\": _TL_(\"Trips to Helsinki\"),\r\n \"Trips to Hungary\": _TL_(\"Trips to Hungary\"),\r\n \"Trips to Budapest\": _TL_(\"Trips to Budapest\"),\r\n \"Trips to Iceland\": _TL_(\"Trips to Iceland\"),\r\n \"Trips to Ireland\": _TL_(\"Trips to Ireland\"),\r\n \"Trips to Dublin\": _TL_(\"Trips to Dublin\"),\r\n \"Trips to Italy\": _TL_(\"Trips to Italy\"),\r\n \"Trips to Bologna\": _TL_(\"Trips to Bologna\"),\r\n \"Trips to Florence\": _TL_(\"Trips to Florence\"),\r\n \"Trips to Milan\": _TL_(\"Trips to Milan\"),\r\n \"Trips to Naples\": _TL_(\"Trips to Naples\"),\r\n \"Trips to Rome\": _TL_(\"Trips to Rome\"),\r\n \"Trips to Sicily\": _TL_(\"Trips to Sicily\"),\r\n \"Trips to Venice\": _TL_(\"Trips to Venice\"),\r\n \"Trips to Kiev\": _TL_(\"Trips to Kiev\"),\r\n \"Trips to Malta\": _TL_(\"Trips to Malta\"),\r\n \"Trips to Moscow\": _TL_(\"Trips to Moscow\"),\r\n \"Trips to Oslo\": _TL_(\"Trips to Oslo\"),\r\n \"Trips to Poland\": _TL_(\"Trips to Poland\"),\r\n \"Trips to Krakow\": _TL_(\"Trips to Krakow\"),\r\n \"Trips to Warsaw\": _TL_(\"Trips to Warsaw\"),\r\n \"Trips to Portugal\": _TL_(\"Trips to Portugal\"),\r\n \"Trips to Faro\": _TL_(\"Trips to Faro\"),\r\n \"Trips to Lisbon\": _TL_(\"Trips to Lisbon\"),\r\n \"Trips to Porto\": _TL_(\"Trips to Porto\"),\r\n \"Trips to Prague\": _TL_(\"Trips to Prague\"),\r\n \"Trips to Romania\": _TL_(\"Trips to Romania\"),\r\n \"Trips to Sofia\": _TL_(\"Trips to Sofia\"),\r\n \"Trips to Spain\": _TL_(\"Trips to Spain\"),\r\n \"Trips to Alicante\": _TL_(\"Trips to Alicante\"),\r\n \"Trips to Barcelona\": _TL_(\"Trips to Barcelona\"),\r\n \"Trips to Bilbao\": _TL_(\"Trips to Bilbao\"),\r\n \"Trips to Cordoba\": _TL_(\"Trips to Cordoba\"),\r\n \"Trips to Granada\": _TL_(\"Trips to Granada\"),\r\n \"Trips to Madrid\": _TL_(\"Trips to Madrid\"),\r\n \"Trips to Malaga\": _TL_(\"Trips to Malaga\"),\r\n \"Trips to Mallorca, Ibiza & Balearic Islands\": _TL_(\"Trips to Mallorca, Ibiza & Balearic Islands\"),\r\n \"Trips to Seville\": _TL_(\"Trips to Seville\"),\r\n \"Trips to the Canary Islands\": _TL_(\"Trips to the Canary Islands\"),\r\n \"Trips to Valencia\": _TL_(\"Trips to Valencia\"),\r\n \"Trips to St. Petersburg\": _TL_(\"Trips to St. Petersburg\"),\r\n \"Trips to Sweden\": _TL_(\"Trips to Sweden\"),\r\n \"Trips to Stockholm\": _TL_(\"Trips to Stockholm\"),\r\n \"Trips to Switzerland\": _TL_(\"Trips to Switzerland\"),\r\n \"Trips to Geneva\": _TL_(\"Trips to Geneva\"),\r\n \"Trips to Zurich\": _TL_(\"Trips to Zurich\"),\r\n \"Trips to the UK\": _TL_(\"Trips to the UK\"),\r\n \"Trips to Birmingham, UK\": _TL_(\"Trips to Birmingham, UK\"),\r\n \"Trips to Edinburgh\": _TL_(\"Trips to Edinburgh\"),\r\n \"Trips to Glasgow\": _TL_(\"Trips to Glasgow\"),\r\n \"Trips to London, UK\": _TL_(\"Trips to London, UK\"),\r\n \"Trips to Manchester, UK\": _TL_(\"Trips to Manchester, UK\"),\r\n \"Trips to Turkey\": _TL_(\"Trips to Turkey\"),\r\n \"Trips to Ankara\": _TL_(\"Trips to Ankara\"),\r\n \"Trips to Antalya\": _TL_(\"Trips to Antalya\"),\r\n \"Trips to Istanbul\": _TL_(\"Trips to Istanbul\"),\r\n \"Trips to Izmir\": _TL_(\"Trips to Izmir\"),\r\n \"Trips to Vienna\": _TL_(\"Trips to Vienna\"),\r\n \"Trips to Latin America\": _TL_(\"Trips to Latin America\"),\r\n \"Trips to Bogota\": _TL_(\"Trips to Bogota\"),\r\n \"Trips to Brazil\": _TL_(\"Trips to Brazil\"),\r\n \"Trips to Rio de Janeiro\": _TL_(\"Trips to Rio de Janeiro\"),\r\n \"Trips to Salvador\": _TL_(\"Trips to Salvador\"),\r\n \"Trips to São Paulo\": _TL_(\"Trips to São Paulo\"),\r\n \"Trips to Buenos Aires\": _TL_(\"Trips to Buenos Aires\"),\r\n \"Trips to Costa Rica\": _TL_(\"Trips to Costa Rica\"),\r\n \"Trips to Guatemala\": _TL_(\"Trips to Guatemala\"),\r\n \"Trips to Lima\": _TL_(\"Trips to Lima\"),\r\n \"Trips to Mexico\": _TL_(\"Trips to Mexico\"),\r\n \"Trips to Acapulco\": _TL_(\"Trips to Acapulco\"),\r\n \"Trips to Cancun & Playa del Carmen\": _TL_(\"Trips to Cancun & Playa del Carmen\"),\r\n \"Trips to Guadalajara\": _TL_(\"Trips to Guadalajara\"),\r\n \"Trips to Los Cabos\": _TL_(\"Trips to Los Cabos\"),\r\n \"Trips to Mexico City\": _TL_(\"Trips to Mexico City\"),\r\n \"Trips to Monterrey\": _TL_(\"Trips to Monterrey\"),\r\n \"Trips to Puerto Vallarta\": _TL_(\"Trips to Puerto Vallarta\"),\r\n \"Trips to Panama\": _TL_(\"Trips to Panama\"),\r\n \"Trips to Santiago\": _TL_(\"Trips to Santiago\"),\r\n \"Trips to the Caribbean\": _TL_(\"Trips to the Caribbean\"),\r\n \"Trips to Aruba\": _TL_(\"Trips to Aruba\"),\r\n \"Trips to Cuba\": _TL_(\"Trips to Cuba\"),\r\n \"Trips to Jamaica\": _TL_(\"Trips to Jamaica\"),\r\n \"Trips to Nassau\": _TL_(\"Trips to Nassau\"),\r\n \"Trips to Puerto Rico\": _TL_(\"Trips to Puerto Rico\"),\r\n \"Trips to the Dominican Republic\": _TL_(\"Trips to the Dominican Republic\"),\r\n \"Trips to North America\": _TL_(\"Trips to North America\"),\r\n \"Trips to Canada\": _TL_(\"Trips to Canada\"),\r\n \"Trips to Calgary\": _TL_(\"Trips to Calgary\"),\r\n \"Trips to Montreal\": _TL_(\"Trips to Montreal\"),\r\n \"Trips to Ottawa\": _TL_(\"Trips to Ottawa\"),\r\n \"Trips to Toronto\": _TL_(\"Trips to Toronto\"),\r\n \"Trips to Vancouver\": _TL_(\"Trips to Vancouver\"),\r\n \"Trips to the US\": _TL_(\"Trips to the US\"),\r\n \"Trips to Alaska\": _TL_(\"Trips to Alaska\"),\r\n \"Trips to Albuquerque\": _TL_(\"Trips to Albuquerque\"),\r\n \"Trips to Atlanta\": _TL_(\"Trips to Atlanta\"),\r\n \"Trips to Atlantic City\": _TL_(\"Trips to Atlantic City\"),\r\n \"Trips to Austin\": _TL_(\"Trips to Austin\"),\r\n \"Trips to Baltimore\": _TL_(\"Trips to Baltimore\"),\r\n \"Trips to Birmingham, AL\": _TL_(\"Trips to Birmingham, AL\"),\r\n \"Trips to Boston\": _TL_(\"Trips to Boston\"),\r\n \"Trips to Buffalo-Rochester Area\": _TL_(\"Trips to Buffalo-Rochester Area\"),\r\n \"Trips to California\": _TL_(\"Trips to California\"),\r\n \"Trips to Los Angeles\": _TL_(\"Trips to Los Angeles\"),\r\n \"Trips to Orange County, CA\": _TL_(\"Trips to Orange County, CA\"),\r\n \"Trips to San Diego\": _TL_(\"Trips to San Diego\"),\r\n \"Trips to San Francisco Bay Area\": _TL_(\"Trips to San Francisco Bay Area\"),\r\n \"Trips to Charleston, SC\": _TL_(\"Trips to Charleston, SC\"),\r\n \"Trips to Charlotte\": _TL_(\"Trips to Charlotte\"),\r\n \"Trips to Chicago\": _TL_(\"Trips to Chicago\"),\r\n \"Trips to Cincinnati\": _TL_(\"Trips to Cincinnati\"),\r\n \"Trips to Cleveland\": _TL_(\"Trips to Cleveland\"),\r\n \"Trips to Columbus\": _TL_(\"Trips to Columbus\"),\r\n \"Trips to Dallas-Fort Worth\": _TL_(\"Trips to Dallas-Fort Worth\"),\r\n \"Trips to Denver\": _TL_(\"Trips to Denver\"),\r\n \"Trips to Detroit\": _TL_(\"Trips to Detroit\"),\r\n \"Trips to Florida\": _TL_(\"Trips to Florida\"),\r\n \"Trips to Fort Lauderdale\": _TL_(\"Trips to Fort Lauderdale\"),\r\n \"Trips to Fort Myers\": _TL_(\"Trips to Fort Myers\"),\r\n \"Trips to Jacksonville\": _TL_(\"Trips to Jacksonville\"),\r\n \"Trips to Key West\": _TL_(\"Trips to Key West\"),\r\n \"Trips to Miami\": _TL_(\"Trips to Miami\"),\r\n \"Trips to Orlando\": _TL_(\"Trips to Orlando\"),\r\n \"Trips to Pensacola\": _TL_(\"Trips to Pensacola\"),\r\n \"Trips to Tampa Bay Area\": _TL_(\"Trips to Tampa Bay Area\"),\r\n \"Trips to Gatlinburg\": _TL_(\"Trips to Gatlinburg\"),\r\n \"Trips to Greenville, SC\": _TL_(\"Trips to Greenville, SC\"),\r\n \"Trips to Hartford\": _TL_(\"Trips to Hartford\"),\r\n \"Trips to Hawaii\": _TL_(\"Trips to Hawaii\"),\r\n \"Trips to Maui\": _TL_(\"Trips to Maui\"),\r\n \"Trips to Oahu\": _TL_(\"Trips to Oahu\"),\r\n \"Trips to the Big Island\": _TL_(\"Trips to the Big Island\"),\r\n \"Trips to Houston\": _TL_(\"Trips to Houston\"),\r\n \"Trips to Indianapolis\": _TL_(\"Trips to Indianapolis\"),\r\n \"Trips to Kansas City\": _TL_(\"Trips to Kansas City\"),\r\n \"Trips to Las Vegas\": _TL_(\"Trips to Las Vegas\"),\r\n \"Trips to Little Rock\": _TL_(\"Trips to Little Rock\"),\r\n \"Trips to Louisville\": _TL_(\"Trips to Louisville\"),\r\n \"Trips to Memphis\": _TL_(\"Trips to Memphis\"),\r\n \"Trips to Milwaukee\": _TL_(\"Trips to Milwaukee\"),\r\n \"Trips to Minneapolis-Saint Paul\": _TL_(\"Trips to Minneapolis-Saint Paul\"),\r\n \"Trips to Myrtle Beach & Grand Strand\": _TL_(\"Trips to Myrtle Beach & Grand Strand\"),\r\n \"Trips to Nashville\": _TL_(\"Trips to Nashville\"),\r\n \"Trips to New Orleans\": _TL_(\"Trips to New Orleans\"),\r\n \"Trips to New York City\": _TL_(\"Trips to New York City\"),\r\n \"Trips to Norfolk-Virginia Beach Region\": _TL_(\"Trips to Norfolk-Virginia Beach Region\"),\r\n \"Trips to Ocean City, MD\": _TL_(\"Trips to Ocean City, MD\"),\r\n \"Trips to Oklahoma City\": _TL_(\"Trips to Oklahoma City\"),\r\n \"Trips to Omaha\": _TL_(\"Trips to Omaha\"),\r\n \"Trips to Philadelphia\": _TL_(\"Trips to Philadelphia\"),\r\n \"Trips to Phoenix\": _TL_(\"Trips to Phoenix\"),\r\n \"Trips to Pittsburgh\": _TL_(\"Trips to Pittsburgh\"),\r\n \"Trips to Portland, OR\": _TL_(\"Trips to Portland, OR\"),\r\n \"Trips to Raleigh-Durham Area\": _TL_(\"Trips to Raleigh-Durham Area\"),\r\n \"Trips to Reno\": _TL_(\"Trips to Reno\"),\r\n \"Trips to Richmond, VA\": _TL_(\"Trips to Richmond, VA\"),\r\n \"Trips to Salt Lake City\": _TL_(\"Trips to Salt Lake City\"),\r\n \"Trips to San Antonio\": _TL_(\"Trips to San Antonio\"),\r\n \"Trips to Savannah\": _TL_(\"Trips to Savannah\"),\r\n \"Trips to Seattle\": _TL_(\"Trips to Seattle\"),\r\n \"Trips to St. Louis\": _TL_(\"Trips to St. Louis\"),\r\n \"Trips to Tucson\": _TL_(\"Trips to Tucson\"),\r\n \"Trips to Washington, D.C.\": _TL_(\"Trips to Washington, D.C.\"),\r\n \"Trips to the Middle East & Africa\": _TL_(\"Trips to the Middle East & Africa\"),\r\n \"Trips to Doha\": _TL_(\"Trips to Doha\"),\r\n \"Trips to Egypt\": _TL_(\"Trips to Egypt\"),\r\n \"Trips to Israel\": _TL_(\"Trips to Israel\"),\r\n \"Trips to Jeddah\": _TL_(\"Trips to Jeddah\"),\r\n \"Trips to Jordan\": _TL_(\"Trips to Jordan\"),\r\n \"Trips to Kenya\": _TL_(\"Trips to Kenya\"),\r\n \"Trips to Kuwait\": _TL_(\"Trips to Kuwait\"),\r\n \"Trips to Lebanon\": _TL_(\"Trips to Lebanon\"),\r\n \"Trips to Morocco\": _TL_(\"Trips to Morocco\"),\r\n \"Trips to Riyadh\": _TL_(\"Trips to Riyadh\"),\r\n \"Trips to South Africa\": _TL_(\"Trips to South Africa\"),\r\n \"Trips to Cape Town\": _TL_(\"Trips to Cape Town\"),\r\n \"Trips to Johannesburg\": _TL_(\"Trips to Johannesburg\"),\r\n \"Trips to Tehran\": _TL_(\"Trips to Tehran\"),\r\n \"Trips to the United Arab Emirates\": _TL_(\"Trips to the United Arab Emirates\"),\r\n \"Trips to Abu Dhabi\": _TL_(\"Trips to Abu Dhabi\"),\r\n \"Trips to Dubai\": _TL_(\"Trips to Dubai\"),\r\n \"Vacation Packages\": _TL_(\"Vacation Packages\"),\r\n \"Vehicle Tires & Tire Parts\": _TL_(\"Vehicle Tires & Tire Parts\"),\r\n};\r\n","import { map } from 'underscore';\r\nimport React, { useContext, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { DropdownTreeSelect } from '@bingads-webui-campaign-react/dropdown-tree-select';\r\nimport { ActionButton, IconButton } from '@fluentui/react';\r\nimport { Tooltip } from '@fluentui/react-components';\r\nimport { formatReachEstimation } from '@bingads-webui-campaign-react/ima-reach-representation';\r\n\r\nimport { getAudienceValue } from '../utils/audience-signal';\r\nimport { SectionShimmer } from './shimmer-element';\r\nimport { AUDIENCE_MAP } from '../utils/audience-name-mapping';\r\n\r\nconst getAudienceI18nName = (i18n, audienceName) => {\r\n const key = getAudienceValue(audienceName);\r\n return AUDIENCE_MAP[key] ? i18n.getString(AUDIENCE_MAP[key]) : key;\r\n};\r\n\r\nexport const AudienceInterests = React.memo(({\r\n isLoading,\r\n data,\r\n onDataChange,\r\n classes,\r\n customHeadline,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { audienceListInFlatTree, interests = [], valueToFlatItem = {} } = data || {};\r\n\r\n const [openItems, setOpenItems] = useState([]);\r\n\r\n const onChangeInterests = useCallback((newInterests) => {\r\n onDataChange({ interests: newInterests });\r\n }, [onDataChange]);\r\n\r\n const onRemoveInterests = useCallback((index) => {\r\n const newInterest = [\r\n ...interests.slice(0, index),\r\n ...interests.slice(index + 1),\r\n ];\r\n onChangeInterests(newInterest);\r\n }, [interests, onChangeInterests]);\r\n\r\n const onRemoveAllInterests = useCallback(() => {\r\n onChangeInterests([]);\r\n }, [onChangeInterests]);\r\n\r\n const onRenderTreeItem = useCallback(item => getAudienceI18nName(i18n, item.value), [i18n]);\r\n const customTreeItemFilter = useCallback((item, searchQuery) => {\r\n const audienceI18nName = getAudienceI18nName(i18n, item.value) || '';\r\n\r\n return audienceI18nName.toLowerCase().includes(searchQuery.toLowerCase());\r\n }, [i18n]);\r\n\r\n const onRenderTooltip = useCallback((item = {}) => {\r\n const {\r\n value,\r\n parentValue,\r\n reachEstimation,\r\n itemType,\r\n 'aria-level': ariaLevel,\r\n } = item;\r\n\r\n const isRootLeaf = (ariaLevel === 1 && itemType === 'leaf') || (parentValue === undefined && value);\r\n\r\n return (\r\n
\r\n
\r\n {!isRootLeaf &&
{getAudienceI18nName(i18n, parentValue)}
}\r\n
{getAudienceI18nName(i18n, value)}
\r\n
\r\n
\r\n {i18n.getString(_TL_('List size: '))}\r\n {formatReachEstimation(reachEstimation, i18n)}\r\n
\r\n
\r\n );\r\n }, [classes, i18n]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
{customHeadline || i18n.getString(_TL_('Add interests'))}
\r\n \r\n {i18n.getString(_TL_('Remove all'))}\r\n \r\n
\r\n {\r\n interests.length > 0 && (\r\n
\r\n {\r\n map(interests, (name, index) => (\r\n \r\n
\r\n {getAudienceI18nName(i18n, name)}\r\n onRemoveInterests(index)}\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\nAudienceInterests.propTypes = {\r\n isLoading: PropTypes.bool.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n customHeadline: PropTypes.string,\r\n classes: PropTypes.shape({\r\n interestsHeader: PropTypes.string.isRequired,\r\n tooltip: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nAudienceInterests.defaultProps = {\r\n customHeadline: null,\r\n};\r\n","import React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { FontIcon } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport {\r\n Demographic,\r\n AgeRanges,\r\n Genders,\r\n formatAgeRange,\r\n formatGender\r\n} from '@bingads-webui-campaign-react/audience-demographic';\r\n\r\nimport { SectionShimmer } from './shimmer-element';\r\n\r\nexport const AudienceDemographics = React.memo(({\r\n isLoading,\r\n data,\r\n onDataChange,\r\n classes,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { ageRanges = [], genderTypes = [] } = data || {};\r\n\r\n const onChangeAgeTypes = useCallback(newAgeRanges => onDataChange({ ageRanges: newAgeRanges }), [onDataChange]);\r\n const onChangeGenderTypes = useCallback(newGenderTypes => (\r\n onDataChange({ genderTypes: newGenderTypes })\r\n ), [onDataChange]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n )}\r\n message={i18n.getString(_TL_('We recommend you leave demographics set broadly, but you can adjust here.'))}\r\n />\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nAudienceDemographics.propTypes = {\r\n isLoading: PropTypes.bool.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n demographicsContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nAudienceDemographics.defaultProps = {};\r\n","/* eslint-disable max-len */\r\nimport React, { useContext, useCallback, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { FontIcon } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Collapse, TextTitle, useCollapseState, TitleBarError } from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport InterestIcon from '../media/interest.svg';\r\nimport DemographicIcon from '../media/demographic.svg';\r\nimport SparkleImg from '../media/sparkle.svg';\r\n\r\nimport { AudienceInterests } from './audience-interests';\r\nimport { AudienceDemographics } from './audience-demographics';\r\nimport { useTargetInstrument } from '../use-target-instrument';\r\nimport { getDemographicsDetails } from '../utils/common';\r\n\r\nexport const CollapsibleAudienceSignal = ({\r\n classes,\r\n isLoading,\r\n data,\r\n onDataChange,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const { audienceSignalLogger } = useTargetInstrument();\r\n\r\n const { audiencesSignal } = data || {};\r\n const {\r\n interests = [],\r\n ageRanges = [],\r\n genderTypes = [],\r\n genderErrors,\r\n ageErrors,\r\n } = audiencesSignal || {};\r\n\r\n const [\r\n allSections,\r\n expandedSections,\r\n setExpandedSections,\r\n ] = useCollapseState(\r\n ['interests', 'demographics'],\r\n ['interests', 'demographics']\r\n );\r\n\r\n const interestDetails = useMemo(() => (\r\n
\r\n {\r\n _.map(interests, interest => (\r\n {interest}\r\n ))\r\n }\r\n
\r\n ), [classes, interests]);\r\n\r\n const demographicsDetails = useMemo(() => {\r\n const details = getDemographicsDetails(ageRanges, genderTypes, i18n);\r\n if (!details) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {details}\r\n
\r\n );\r\n }, [ageRanges, genderTypes, i18n, classes]);\r\n\r\n const onAudienceChange = useCallback((newAudiences) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n audiencesSignal: {\r\n ...prevData.audiencesSignal,\r\n ...newAudiences,\r\n },\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n return (\r\n
\r\n
\r\n

\r\n {i18n.getString(_TL_('Audience signals'))} \r\n {i18n.getString(_TL_('(OPTIONAL)'))}\r\n

\r\n
\r\n \"\"\r\n {i18n.getString(_TL_('Performance Max finds the right audience for you'))}\r\n {i18n.getString(_TL_('We’ll use an audience signal to use as a starting point to reach the right customers.'))}\r\n
\r\n
\r\n \r\n }\r\n >\r\n \r\n \r\n }\r\n error={!_.contains(expandedSections, 'demographics') && }\r\n >\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nCollapsibleAudienceSignal.propTypes = {\r\n isLoading: PropTypes.bool.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n descriptionContainer: PropTypes.string.isRequired,\r\n h3LabelOptional: PropTypes.string.isRequired,\r\n audienceSignalDescription: PropTypes.string.isRequired,\r\n interestDetails: PropTypes.string.isRequired,\r\n demographicsDetails: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nCollapsibleAudienceSignal.defaultProps = {};\r\n","import React, { useContext, useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Collapse, TextTitle, useCollapseState } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { SearchThemeSelector } from '@bingads-webui-campaign-react/search-theme-selector';\r\n\r\nimport SearchThemesIcon from '../media/search-themes.svg';\r\n\r\nimport { SectionShimmer } from './shimmer-element';\r\nimport { getSearchThemeDetails } from '../utils/common';\r\nimport { useTargetInstrument } from '../use-target-instrument';\r\n\r\nconst getSearchThemeSelectorStyle = () => ({\r\n searchThemes: {\r\n '& .search-theme-selector-alert .alert-warning': {\r\n '& .alert-image': {\r\n marginRight: '0.5rem',\r\n },\r\n '& .close': {\r\n marginLeft: '0.5rem',\r\n fontSize: 'inherit',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const CollapsibleSearchThemes = ({\r\n data,\r\n onDataChange,\r\n isLoading,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getSearchThemeSelectorStyle);\r\n const { searchThemesLogger } = useTargetInstrument();\r\n\r\n const { searchThemes } = data || {};\r\n\r\n const [\r\n allSections,\r\n expandedSections,\r\n setExpandedSections,\r\n ] = useCollapseState(['search-themes'], ['search-themes']);\r\n\r\n const searchThemesDetails = getSearchThemeDetails(i18n, searchThemes);\r\n\r\n const onSearchThemesChange = useCallback((newSearchThemes) => {\r\n searchThemesLogger.trace(`Change search themes: ${JSON.stringify(newSearchThemes)}`);\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n searchThemes: newSearchThemes,\r\n }),\r\n });\r\n }, [onDataChange, searchThemesLogger]);\r\n\r\n return (\r\n \r\n }\r\n >\r\n {\r\n isLoading &&\r\n \r\n }\r\n {\r\n !isLoading &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nCollapsibleSearchThemes.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n isLoading: PropTypes.bool,\r\n};\r\n\r\nCollapsibleSearchThemes.defaultProps = {\r\n isLoading: false,\r\n};\r\n","/**\r\n * For impressions and clicks, 0-2 decimal places\r\n */\r\nexport const impreAndClicksOptions = {\r\n compact: 'short',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n};\r\n\r\n/**\r\n * For no decimals, 0 decimal places\r\n */\r\nexport const noDecimalOptions = {\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n};\r\n\r\nexport const formatBigDecimal = (value, i18n, boundary = 999999) => {\r\n if (value > boundary) {\r\n return i18n.formatDecimal(value, impreAndClicksOptions);\r\n }\r\n return i18n.formatDecimal(value, noDecimalOptions);\r\n};\r\n","import _ from 'underscore';\r\nimport { LocationTarget } from '@bingads-webui-react/bing-maps';\r\n\r\nexport const McaTargetModel = {\r\n LocationTarget: '#Model.LocationTarget',\r\n RadiusTarget: '#Model.RadiusTarget',\r\n AgeTarget: '#Model.AgeTarget',\r\n GenderTarget: '#Model.GenderTarget',\r\n};\r\n\r\nexport const DEFAULT_RADIUS_SIZE = 25;\r\nexport const DEFAULT_RADIUS_UNIT = 'mi';\r\nexport const MIN_LOCATION_TARGETS = 1;\r\nexport const MAX_LOCATION_TARGETS = 100;\r\nexport const MI_RADIUS_UNIT = 'mi';\r\nexport const KM_RADIUS_UNIT = 'km';\r\n\r\nexport const McaRadiusUnit = {\r\n Miles: 'Miles',\r\n Kilometers: 'Kilometers',\r\n};\r\n\r\nexport const formatSuggestedLocation = (location) => {\r\n const {\r\n LocationType,\r\n CountryCode,\r\n Latitude,\r\n Longitude,\r\n BingLocationId,\r\n Name,\r\n localizationKey,\r\n } = location;\r\n\r\n const locationData = {\r\n Type: LocationType,\r\n CountryCode,\r\n ExpandedName: !_.isEmpty(localizationKey) ? localizationKey : Name,\r\n GeoPoint: {\r\n Latitude,\r\n Longitude,\r\n },\r\n Id: BingLocationId,\r\n };\r\n\r\n return LocationTarget.CreateIncludedLocationTarget(locationData);\r\n};\r\n\r\nexport const convertFromLocationTarget = (locationTarget) => {\r\n // see: private/MultiChannelAds/BusinessMT/Model/Ads/Target.cs\r\n const mcaTarget = {\r\n Name: locationTarget.ExpandedName,\r\n Latitude: locationTarget.Latitude,\r\n Longitude: locationTarget.Longitude,\r\n BingLocationId: locationTarget.LocationId,\r\n CountryCode: locationTarget.CountryCode,\r\n };\r\n\r\n // set Id if it is available\r\n if (locationTarget.Id) {\r\n mcaTarget.Id = locationTarget.Id;\r\n }\r\n\r\n // find City and State values in locationTarget.location.ParentLocations array\r\n _.each(_.get(locationTarget, ['location', 'ParentLocations']), (parent) => {\r\n if (!mcaTarget.City && parent.Type === 'City') {\r\n mcaTarget.City = parent.ExpandedName;\r\n } else if (!mcaTarget.State && parent.Type === 'SubGeography') {\r\n mcaTarget.State = parent.ExpandedName;\r\n }\r\n });\r\n\r\n if (locationTarget.isRadiusLocationTarget) {\r\n // see: private/MultiChannelAds/BusinessMT/Model/Ads/RadiusTarget.cs\r\n _.extend(mcaTarget, {\r\n '@odata.type': McaTargetModel.RadiusTarget,\r\n BingLocationId: 0,\r\n RadiusLength: locationTarget.radiusSize,\r\n RadiusUnit: locationTarget.radiusUnit === KM_RADIUS_UNIT ? McaRadiusUnit.Kilometers : McaRadiusUnit.Miles,\r\n });\r\n } else {\r\n // see: private/MultiChannelAds/BusinessMT/Model/Ads/LocationTarget.cs\r\n _.extend(mcaTarget, {\r\n '@odata.type': McaTargetModel.LocationTarget,\r\n LocationType: locationTarget.LocationType,\r\n });\r\n }\r\n\r\n return mcaTarget;\r\n};\r\n","import _ from 'underscore';\r\nimport { convertFromLocationTarget } from './location-targets';\r\n\r\nexport const unitValueMap = {\r\n None: {\r\n value: 1,\r\n unit: '',\r\n },\r\n Thousand: {\r\n value: 1000,\r\n unit: 'K',\r\n },\r\n Million: {\r\n value: 1000000,\r\n unit: 'M',\r\n },\r\n Billion: {\r\n value: 1000000000,\r\n unit: 'B',\r\n },\r\n};\r\n\r\nexport const getEstimationAudienceValueV2 = (estimationDataV2) => {\r\n const estimationAudienceUnit = _.get(estimationDataV2, ['EstAudienceSize', 'Unit']) || 'None';\r\n const estimationAudienceValue = unitValueMap[estimationAudienceUnit].value * (_.get(estimationDataV2, ['EstAudienceSize', 'Value']) || 0);\r\n return estimationAudienceValue;\r\n};\r\n\r\nexport const getFormattedTargetsPayload = (data, isV2) => {\r\n const {\r\n targets = {},\r\n audiencesSignal = {},\r\n } = data || {};\r\n\r\n const {\r\n ageRanges = [],\r\n genderTypes = [],\r\n audienceListInFlatTree = [],\r\n interests = [],\r\n } = audiencesSignal;\r\n\r\n if (isV2) {\r\n return ({\r\n Age: {\r\n Includes: ageRanges,\r\n Excludes: [],\r\n },\r\n Gender: {\r\n Includes: genderTypes,\r\n Excludes: [],\r\n },\r\n Audience: {\r\n Includes: _.map(_.map(interests, interest => _.find(audienceListInFlatTree, aud => _.get(aud, 'value', '') === interest)), o => _.get(o, 'id')),\r\n Excludes: [],\r\n },\r\n Location: {\r\n Includes: _.compact(_.get(targets, 'positiveLocationTargets', []).map(locationTarget => _.get(locationTarget, ['location', 'Id']))),\r\n Excludes: _.compact(_.get(targets, 'negativeLocationTargets', []).map(locationTarget => _.get(locationTarget, ['location', 'Id']))),\r\n },\r\n // comment out the following fields as pmax campaign type is not supported in the API\r\n // CampaignBiddingStrategy: null,\r\n // AutoTargeting: true,\r\n // CampaignSubType: null,\r\n });\r\n }\r\n\r\n return _.map(\r\n _.get(targets, 'positiveLocationTargets', []),\r\n (locationTarget) => {\r\n const formattedTarget = convertFromLocationTarget(locationTarget);\r\n formattedTarget.Id = String(formattedTarget.Id);\r\n\r\n return formattedTarget;\r\n }\r\n );\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PerformanceTile } from '@bingads-webui-campaign-react/performance-tile';\r\nimport {\r\n useAudienceReachEstimationV2,\r\n} from '@bingads-webui-campaign-react/pmax-lite-data';\r\n\r\nimport { formatBigDecimal } from '../utils/format-big-decimal';\r\nimport { getEstimationAudienceValueV2, getFormattedTargetsPayload } from '../utils/audience-estimation';\r\n\r\nexport const TargetingEstimation = ({ data }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const formattedTargets = useMemo(() => (\r\n getFormattedTargetsPayload(data, true)\r\n ), [data]);\r\n\r\n const [{\r\n isLoading: isRecommendationDataLoadingV2,\r\n data: estimationDataV2,\r\n }] = useAudienceReachEstimationV2(formattedTargets, !!data);\r\n\r\n const estimations = useMemo(() => {\r\n const estimationAudienceValue = getEstimationAudienceValueV2(estimationDataV2);\r\n if (estimationAudienceValue === 0) {\r\n return null;\r\n }\r\n return [{\r\n className: 'audience-reach',\r\n title: i18n.getString(_TL_('Audience size')),\r\n dashColor: '#00188F',\r\n estimation: formatBigDecimal(estimationAudienceValue, i18n),\r\n }];\r\n }, [estimationDataV2, i18n]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nTargetingEstimation.propTypes = {\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nTargetingEstimation.defaultProps = {\r\n data: undefined,\r\n};\r\n","export const getTargetingStepStyle = (_, { palette }) => ({\r\n stepShell: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .step-title': {\r\n margin: 0,\r\n fontWeight: 'bold',\r\n fontSize: 26,\r\n lineHeight: '36px',\r\n },\r\n '& .step-description': {\r\n margin: '16px 0 0 0',\r\n fontSize: 14,\r\n color: palette.neutralSecondary,\r\n lineHeight: '20px',\r\n },\r\n '& .collapse-panel:not(.isCollapse)': {\r\n '& .collapse-title-bar': {\r\n borderBottom: `1px solid ${palette.neutralLight}`,\r\n },\r\n },\r\n },\r\n 'stepShell-s': {\r\n '& .step-title': {\r\n fontSize: 20,\r\n lineHeight: '26px',\r\n },\r\n },\r\n mainContent: {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n minWidth: 300,\r\n },\r\n 'mainContent-l': {\r\n flexDirection: 'column',\r\n '& .performance-tile-container': {\r\n position: 'static',\r\n },\r\n },\r\n 'mainContent-m': {\r\n flexDirection: 'column',\r\n maxWidth: 480,\r\n '& .performance-tile-container': {\r\n position: 'static',\r\n },\r\n },\r\n 'mainContent-s': {\r\n flexDirection: 'column',\r\n maxWidth: 400,\r\n '& .performance-tile-container': {\r\n position: 'absolute',\r\n },\r\n },\r\n estimationPart: {\r\n minWidth: 300,\r\n position: 'sticky',\r\n top: 24,\r\n },\r\n targetsPart: {\r\n marginRight: 26,\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n maxWidth: 680,\r\n '& .title-item': {\r\n width: 'auto',\r\n maxWidth: '100%',\r\n },\r\n '& .error-string-wrapper': {\r\n left: '160px',\r\n right: '46px',\r\n display: 'flex',\r\n '& span': {\r\n marginLeft: 'auto',\r\n },\r\n },\r\n '& .collapse-panel': {\r\n padding: 0,\r\n '& .collapse-title-bar': {\r\n padding: 24,\r\n },\r\n '& .helpbutton': {\r\n '&::before': {\r\n verticalAlign: 'initial',\r\n },\r\n },\r\n '& .collapse-content.content-show': {\r\n padding: '16px 24px',\r\n },\r\n },\r\n '& .interests': {\r\n '& .collapse-content.content-show': {\r\n overflow: 'visible',\r\n },\r\n },\r\n '& .audience-dimensions': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n gap: '4px',\r\n margin: '8px 0',\r\n\r\n '& .audience-dimension': {\r\n alignItems: 'center',\r\n backgroundColor: palette.neutralLighter,\r\n borderRadius: 3,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '6px',\r\n fontWeight: 600,\r\n padding: '6px 2px 6px 12px',\r\n\r\n '& button': {\r\n color: palette.neutralSecondary,\r\n height: 'auto',\r\n\r\n '& .ms-Icon': {\r\n fontSize: 12,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n 'targetsPart-l': {\r\n marginRight: 0,\r\n },\r\n 'targetsPart-m': {\r\n marginRight: 0,\r\n width: '100%',\r\n },\r\n 'targetsPart-s': {\r\n marginRight: 0,\r\n width: '100%',\r\n },\r\n 'estimationPart-m': {\r\n width: '100%',\r\n },\r\n 'estimationPart-s': {\r\n width: '100%',\r\n },\r\n\r\n interestsHeader: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n fontSize: 14,\r\n },\r\n\r\n demographicsContainer: {\r\n '& .alert-info .ms-Icon': {\r\n marginRight: 8,\r\n },\r\n },\r\n\r\n descriptionContainer: {\r\n marginBottom: '16px',\r\n\r\n '& .section-title': {\r\n marginBottom: '16px',\r\n },\r\n },\r\n\r\n h3LabelOptional: {\r\n fontSize: 14,\r\n color: palette.neutralSecondary,\r\n },\r\n\r\n audienceSignalDescription: {\r\n display: 'grid',\r\n gridTemplateColumns: 'auto 1fr',\r\n columnGap: 12,\r\n fontSize: 14,\r\n\r\n '& > img': {\r\n gridRow: '1 / 3',\r\n },\r\n\r\n '& .audience-signal-main-description': {\r\n fontWeight: 600,\r\n },\r\n\r\n '& .audience-signal-sub-description': {\r\n color: palette.neutralSecondary,\r\n },\r\n },\r\n\r\n tooltip: {\r\n padding: '12px 5px',\r\n\r\n '& .tooltip-header': {\r\n paddingBottom: 8,\r\n borderBottom: `1px solid ${palette.neutralLight}`,\r\n marginBottom: 8,\r\n\r\n '& .interest-category': {\r\n fontSize: 10,\r\n lineHeight: '14px',\r\n },\r\n\r\n '& .interest-name': {\r\n fontSize: 16,\r\n fontWeight: 600,\r\n lineHeight: '22px',\r\n },\r\n },\r\n\r\n '& .interest-reach': {\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n\r\n '& span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n },\r\n\r\n demographicsDetails: {\r\n '& i': {\r\n marginRight: 8,\r\n },\r\n },\r\n\r\n interestDetails: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n fontSize: 13,\r\n gap: '4px',\r\n\r\n '& .audience-interest': {\r\n backgroundColor: palette.neutralLighter,\r\n borderRadius: 4,\r\n padding: '4px 8px',\r\n wordBreak: 'break-word',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-react/form';\r\nimport { StepHeader } from '@bingads-webui-campaign-react/pmax-common';\r\nimport { useIsEstimationApiSupportedLocale } from '@bingads-webui-campaign-react/pmax-lite-data';\r\nimport { isSDK } from '@bingads-webui-campaign-react/sdk-utils';\r\n\r\nimport { CollapsibleLocation } from './collapsible-location';\r\nimport { CollapsibleAudienceSignal } from './collapsible-audience-signal';\r\nimport { CollapsibleSearchThemes } from './collapsible-search-themes';\r\nimport { TargetingEstimation } from './targeting-estimation';\r\nimport { getTargetingStepStyle } from '../styles/targeting-step-style';\r\n\r\nexport const TargetingStep = ({\r\n data,\r\n onDataChange,\r\n hideStepInfo,\r\n hideEstimationTile,\r\n}) => {\r\n const isAudienceSignalEnabled = !isSDK();\r\n const isSearchThemesEnabled = !isSDK();\r\n\r\n const classes = useDefaultStyles(getTargetingStepStyle);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n const { state } = useFormService();\r\n\r\n const isLoading = state.matches(FORM_STATES.LOADING);\r\n const showEstimationTile = useIsEstimationApiSupportedLocale() && !hideEstimationTile;\r\n\r\n return (\r\n
\r\n {!hideStepInfo && }\r\n
\r\n
\r\n \r\n {\r\n isAudienceSignalEnabled && (\r\n \r\n )\r\n }\r\n {\r\n (isSearchThemesEnabled &&\r\n \r\n )\r\n }\r\n
\r\n {showEstimationTile &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nTargetingStep.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n hideStepInfo: PropTypes.bool,\r\n hideEstimationTile: PropTypes.bool,\r\n};\r\n\r\nTargetingStep.defaultProps = {\r\n hideStepInfo: false,\r\n hideEstimationTile: false,\r\n};\r\n","/* eslint-disable prefer-destructuring */\r\nimport _ from 'underscore';\r\nimport { useCallback, useContext, useMemo, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { handleBulkErrors } from '@bingads-webui-campaign-react/pmax-common';\r\nimport {\r\n ENTITY_ACTION_TYPES,\r\n targetOptions,\r\n LocationTargetTypes,\r\n getIntentValue,\r\n getIntentCriterionValues,\r\n getIntentCriterion,\r\n getLocationsToSave,\r\n generateIntentTargetValues,\r\n fromLocationCriterionToBingMapTarget,\r\n fromBingMapTargetToLocationTargetEDM\r\n} from '@bingads-webui-campaign-react/location-targeting';\r\nimport { readLocationCriterions, createOrUpdateCampaign } from '@bingads-webui-campaign-react/perf-max-data';\r\n\r\nexport function useTargetAdapter(logger) {\r\n const { scope } = useContext(ScopeContext);\r\n const { cid, aid, campaignId } = scope.values;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n // Maintain internal states to do comparison\r\n const [internalLocationTargets, setInternalLocationTargets] = useState([]);\r\n const [internalNegativeLocationTargets, setInternalNegativeLocationTargets] = useState([]);\r\n\r\n const [internalIntentCriterion, setInternalIntentCriterion] = useState(null);\r\n const [internalPeopleInLocation, setInternalPeopleInLocation] = useState(null);\r\n const [internalPeopleSearchingForLocation, setInternalPeopleSearchingForLocation] = useState(null);\r\n\r\n const internalPeopleInOrSearchingForLocation = internalPeopleInLocation && internalPeopleSearchingForLocation;\r\n\r\n const readTargets = useCallback(() => {\r\n setIsLoading(true);\r\n\r\n logger.trace('Start reading location criterions');\r\n return readLocationCriterions(cid, aid, campaignId).then((res) => {\r\n const criterions = res.value;\r\n logger.trace(`read location criterions: ${JSON.stringify(criterions)}`);\r\n\r\n if (_.isEmpty(criterions)) {\r\n return {};\r\n }\r\n\r\n const initialTargets = fromLocationCriterionToBingMapTarget(criterions);\r\n const intentCriterion = getIntentCriterion(criterions);\r\n\r\n const initialLocationTargets = _.filter(\r\n initialTargets,\r\n target => target.targetingType === LocationTargetTypes.Included\r\n );\r\n const initialNegativeLocationTargets = _.filter(\r\n initialTargets,\r\n target => target.targetingType === LocationTargetTypes.Excluded\r\n );\r\n\r\n const { peopleInLocation, peopleSearchingForLocation } = getIntentCriterionValues(intentCriterion);\r\n\r\n setInternalLocationTargets(initialLocationTargets);\r\n setInternalNegativeLocationTargets(initialNegativeLocationTargets);\r\n\r\n setInternalPeopleInLocation(peopleInLocation);\r\n setInternalPeopleSearchingForLocation(peopleSearchingForLocation);\r\n setInternalIntentCriterion(intentCriterion);\r\n\r\n const selectedLocationOption = (!_.isEmpty(initialLocationTargets) || !_.isEmpty(initialNegativeLocationTargets))\r\n ? targetOptions.specific\r\n : targetOptions.everywhere;\r\n\r\n return {\r\n positiveLocationTargets: initialLocationTargets,\r\n negativeLocationTargets: initialNegativeLocationTargets,\r\n isPeopleInLocationChecked: peopleInLocation,\r\n isPeopleSearchingForLocationChecked: peopleSearchingForLocation,\r\n selectedLocationOption,\r\n };\r\n }).catch((e) => {\r\n logger.error(`read location failed, body: ${campaignId}, error: ${JSON.stringify(e)}`);\r\n throw new Error(e);\r\n }).finally(() => {\r\n setIsLoading(false);\r\n logger.trace('Finish reading location criterions');\r\n });\r\n }, [aid, campaignId, cid, logger]);\r\n\r\n // Calculate the difference between currentTargets and initialTargets and create/delete as needed\r\n const writeLocationTargetChanges = useCallback(({\r\n positiveLocationTargets,\r\n negativeLocationTargets,\r\n selectedLocationOption,\r\n isPeopleInLocationChecked,\r\n isPeopleSearchingForLocationChecked,\r\n }) => {\r\n let locationsToAdd = [];\r\n let locationsToDelete = [];\r\n\r\n const currentLocationTargets = _.union(positiveLocationTargets, negativeLocationTargets);\r\n const initialLocationTargets = _.union(internalLocationTargets, internalNegativeLocationTargets);\r\n\r\n if (selectedLocationOption === targetOptions.everywhere) {\r\n // if everywhere is selected, set all locations for delete\r\n locationsToDelete = initialLocationTargets;\r\n } else {\r\n const locationsToSave = getLocationsToSave(initialLocationTargets, currentLocationTargets);\r\n locationsToAdd = locationsToSave.locationsToAdd;\r\n locationsToDelete = locationsToSave.locationsToDelete;\r\n }\r\n\r\n locationsToAdd = fromBingMapTargetToLocationTargetEDM(\r\n locationsToAdd,\r\n campaignId,\r\n ENTITY_ACTION_TYPES.Add\r\n );\r\n locationsToDelete = fromBingMapTargetToLocationTargetEDM(\r\n locationsToDelete,\r\n campaignId,\r\n ENTITY_ACTION_TYPES.Delete\r\n );\r\n\r\n locationsToDelete = _.map(\r\n locationsToDelete,\r\n deletedValue => _.extend(deletedValue, { Status: 'Deleted' })\r\n );\r\n\r\n const internalIntent = getIntentValue({\r\n peopleInLocation: internalPeopleInLocation,\r\n peopleSearchingForLocation: internalPeopleSearchingForLocation,\r\n peopleInOrSearchingForLocation: internalPeopleInOrSearchingForLocation,\r\n });\r\n\r\n const newIntent = getIntentValue({\r\n peopleInLocation: isPeopleInLocationChecked,\r\n peopleSearchingForLocation: isPeopleSearchingForLocationChecked,\r\n peopleInOrSearchingForLocation: isPeopleSearchingForLocationChecked && isPeopleInLocationChecked,\r\n });\r\n\r\n const isIntentValueChanged = internalIntent !== newIntent;\r\n\r\n const intentTargets = generateIntentTargetValues(newIntent, internalIntentCriterion, campaignId);\r\n\r\n if (_.isEmpty(locationsToAdd) && _.isEmpty(locationsToDelete) && !isIntentValueChanged) {\r\n return Promise.resolve();\r\n }\r\n\r\n const modelToSave = {\r\n Id: campaignId,\r\n CampaignCriterions: _.union(\r\n locationsToAdd,\r\n locationsToDelete,\r\n intentTargets\r\n ),\r\n };\r\n\r\n logger.trace(`Start writing location targets: ${JSON.stringify(modelToSave)}`);\r\n\r\n return createOrUpdateCampaign(modelToSave).then(() => {\r\n logger.trace(`Write location targets successfully: ${JSON.stringify(modelToSave)}`);\r\n }).catch((error) => {\r\n logger.error(`Write location targets failed, body: ${JSON.stringify(modelToSave)}, error: ${JSON.stringify(error)}`);\r\n\r\n handleBulkErrors(error, i18n);\r\n\r\n return Promise.reject(error);\r\n }).finally(() => {\r\n setIsLoading(false);\r\n logger.trace('Finish writing location targets');\r\n });\r\n }, [\r\n campaignId, internalLocationTargets, internalNegativeLocationTargets,\r\n internalIntentCriterion, internalPeopleInLocation, internalPeopleInOrSearchingForLocation,\r\n internalPeopleSearchingForLocation, i18n, logger,\r\n ]);\r\n\r\n const entityState = useMemo(() => ({\r\n isLoading,\r\n }), [isLoading]);\r\n\r\n return [entityState, {\r\n readTargets,\r\n writeLocationTargetChanges,\r\n }];\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst AssetGroupNegativeReferenceId = -21;\r\n\r\nexport const viewModelToBulkModelForSearchThemes = (searchThemes, assetGroupId = AssetGroupNegativeReferenceId) => {\r\n const searchThemesresult =\r\n _.compact(searchThemes.map((item) => {\r\n if (item.Status === 'Deleted') {\r\n return ({\r\n AssetGroupId: assetGroupId,\r\n SearchTheme: item.SearchTheme,\r\n AssetGroupSearchThemeId: item.Id,\r\n Status: item.Status,\r\n });\r\n }\r\n\r\n if (item.Id) {\r\n return '';\r\n }\r\n\r\n return ({\r\n AssetGroupId: assetGroupId,\r\n SearchTheme: item.SearchTheme,\r\n });\r\n }));\r\n return { AssetGroupSearchThemes: searchThemesresult };\r\n};\r\n","/* eslint-disable no-unused-vars */\r\nimport _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\nimport { useCreateHookResultPromise } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { useSuggestionsContext } from '@bingads-webui-campaign-react/pmax-suggestion-service';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport {\r\n useSearchLocationData,\r\n usePreference,\r\n preferenceNames,\r\n useAudienceData,\r\n} from '@bingads-webui-campaign-react/pmax-lite-data';\r\nimport { LocationTarget } from '@bingads-webui-react/bing-maps';\r\nimport { targetOptions } from '@bingads-webui-campaign-react/location-targeting';\r\nimport { readAssetGroup, createOrUpdateAssetGroup } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { isSDK } from '@bingads-webui-campaign-react/sdk-utils';\r\nimport { usePilotsValue } from '@bingads-webui-campaign-react/basic-context-utils';\r\n\r\nimport { useTargetInstrument } from './use-target-instrument';\r\nimport { useTargetAdapter } from './use-target-adapter';\r\nimport { buildLocationTargetingData, shouldSelectQuickOption } from './utils/common';\r\nimport { formatAudienceListToFlatTree, modelToViewModelForAudienceGroup, dimensionFormatter } from './utils/audience-signal';\r\nimport { formatSuggestedLocation } from './utils/location-targets';\r\nimport { viewModelToBulkModelForSearchThemes } from './utils/search-themes';\r\n\r\nexport const createOrUpdateAudienceGroup = (data) => {\r\n const audienceGroupEDM = edmCampaign.types.resolve('Model.AudienceGroup');\r\n const audienceGroupResource = new audienceGroupEDM.ResourceIdentifier();\r\n const createOrUpdateCall = data && data.Id > 0 ?\r\n audienceGroupResource.bulkUpdate.bind(audienceGroupResource) :\r\n audienceGroupResource.bulkCreate.bind(audienceGroupResource);\r\n\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nexport const useTargetingRepository = () => {\r\n const { scope } = useContext(ScopeContext);\r\n const isAudienceSignalEnabled = !isSDK();\r\n const isSearchThemesEnabled = !isSDK();\r\n\r\n const { locationLogger, audienceSignalLogger } = useTargetInstrument();\r\n const {\r\n cid, aid, campaignId, assetGroupId,\r\n } = scope.values;\r\n\r\n const {\r\n isTargetsDone,\r\n targets: preLoadedTargetsSuggestions,\r\n } = useSuggestionsContext();\r\n\r\n const [, getAudienceData] = useAudienceData({ postponeFetch: true });\r\n\r\n const createSuggestionPromise = useCreateHookResultPromise({\r\n result: isTargetsDone && (preLoadedTargetsSuggestions || []),\r\n });\r\n\r\n const [, { readTargets, writeLocationTargetChanges }] = useTargetAdapter(locationLogger);\r\n const { getLocation } = useSearchLocationData(aid, cid);\r\n\r\n const [{ value: countryPreference }] = usePreference(preferenceNames.SelectedCountry);\r\n\r\n const loadQuickOptionCountry = useCallback(() => getLocation(countryPreference).then((result) => {\r\n locationLogger.trace(`Load quick option location ${countryPreference}: ${JSON.stringify(result)}`);\r\n\r\n const bundleCountries = _.filter(result.value, item => item.Type === 'Country' && item.CountryCode === countryPreference);\r\n\r\n return bundleCountries[0];\r\n }).catch((error) => {\r\n locationLogger.error(`Load quick option location ${countryPreference} failed: ${JSON.stringify(error)}`);\r\n return Promise.reject(error);\r\n }), [countryPreference, getLocation, locationLogger]);\r\n\r\n const loadAssetGroup = useCallback(\r\n () => readAssetGroup(cid, aid, campaignId, assetGroupId, isSearchThemesEnabled)\r\n .then((assetGroup) => {\r\n locationLogger.trace(`Load website URL: ${JSON.stringify(assetGroup)}`);\r\n\r\n return {\r\n website: _.first(assetGroup.FinalUrls),\r\n audienceGroup: assetGroup.AudienceGroup || {},\r\n searchThemes: assetGroup.AssetGroupSearchThemes || [],\r\n };\r\n }).catch((error) => {\r\n locationLogger.error(`Load website URL Failed: ${JSON.stringify(error)}`);\r\n\r\n return Promise.reject(error);\r\n })\r\n , [aid, assetGroupId, campaignId, cid, locationLogger, isSearchThemesEnabled]\r\n );\r\n\r\n const loadAudienceData = useCallback(() => {\r\n if (isAudienceSignalEnabled) {\r\n return getAudienceData().then((audienceList) => {\r\n audienceSignalLogger.trace(`Load audience data: ${JSON.stringify(audienceList)}`);\r\n\r\n return audienceList;\r\n }).catch((error) => {\r\n audienceSignalLogger.error(`Load audience data failed: ${JSON.stringify(error)}`);\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n return new Promise(resolve => resolve([]));\r\n }, [isAudienceSignalEnabled, getAudienceData, audienceSignalLogger]);\r\n\r\n const load = useCallback(() => {\r\n const initialRequests = [\r\n loadQuickOptionCountry(),\r\n readTargets(), // Load user saved targets\r\n createSuggestionPromise(), // Load suggested targets\r\n loadAssetGroup(),\r\n loadAudienceData(), // Load audience data\r\n ];\r\n\r\n return Promise.all(initialRequests).then((res) => {\r\n const [quickOptionCountry, savedTargets, targetsSuggestion, assetGroup, audienceList] = res;\r\n const { website, audienceGroup, searchThemes } = assetGroup;\r\n\r\n const formattedSuggestedTargets = _.map(targetsSuggestion, item => formatSuggestedLocation(item));\r\n const suggestedLocationTargets = buildLocationTargetingData({\r\n positiveLocationTargets: formattedSuggestedTargets,\r\n });\r\n\r\n const shouldCheckQuickOption = shouldSelectQuickOption(\r\n quickOptionCountry,\r\n savedTargets,\r\n targetsSuggestion\r\n );\r\n const targets = _.isEmpty(savedTargets) ? suggestedLocationTargets : savedTargets;\r\n const quickOptionLocationTarget = LocationTarget.CreateIncludedLocationTarget(quickOptionCountry);\r\n const [audienceListInFlatTree, valueToAudience, valueToFlatItem] = formatAudienceListToFlatTree(audienceList);\r\n\r\n return {\r\n targets: {\r\n ...targets,\r\n selectedLocationOption: shouldCheckQuickOption ? targetOptions.quick : targets.selectedLocationOption,\r\n positiveLocationTargets: shouldCheckQuickOption\r\n ? [quickOptionLocationTarget]\r\n : targets.positiveLocationTargets,\r\n },\r\n quickOptionCountry: quickOptionLocationTarget,\r\n website,\r\n audiencesSignal: {\r\n audienceGroupId: audienceGroup.Id,\r\n audienceGroupName: audienceGroup.Name,\r\n valueToAudience,\r\n valueToFlatItem,\r\n audienceListInFlatTree,\r\n ...modelToViewModelForAudienceGroup(audienceGroup),\r\n },\r\n searchThemes,\r\n };\r\n });\r\n }, [createSuggestionPromise, loadAssetGroup, loadAudienceData, loadQuickOptionCountry, readTargets]);\r\n\r\n const save = ({ data }) => {\r\n const { targets = {}, audiencesSignal = {}, searchThemes = {} } = data || {};\r\n const {\r\n positiveLocationTargets,\r\n negativeLocationTargets,\r\n isPeopleInLocationChecked,\r\n isPeopleSearchingForLocationChecked,\r\n selectedLocationOption,\r\n locationError,\r\n } = targets;\r\n const {\r\n interests,\r\n ageRanges,\r\n genderTypes,\r\n valueToAudience,\r\n audienceGroupId,\r\n audienceGroupName,\r\n } = audiencesSignal;\r\n\r\n if (locationError) {\r\n return Promise.reject(locationError);\r\n }\r\n\r\n const audienceData = {\r\n AgeRanges: dimensionFormatter.ageRanges(ageRanges),\r\n GenderTypes: dimensionFormatter.genderTypes(genderTypes),\r\n Audiences: interests.map(interest => valueToAudience[interest]),\r\n Id: audienceGroupId || -100,\r\n Name: audienceGroupName || `Default-${Date.now()}`,\r\n };\r\n\r\n const updateAudience = () => {\r\n if (isAudienceSignalEnabled) {\r\n return createOrUpdateAudienceGroup(audienceData).then((result) => {\r\n const patchData = {\r\n AudienceGroupAssetGroupAssociations: [{\r\n AudienceGroupId: result.Id,\r\n AssetGroupId: assetGroupId,\r\n Status: 'Active',\r\n }],\r\n Id: assetGroupId,\r\n Campaign: { Id: campaignId },\r\n };\r\n\r\n return patchData;\r\n });\r\n }\r\n\r\n return new Promise(resolve => resolve({}));\r\n };\r\n\r\n const updateAssetGroup = () => {\r\n if (isSearchThemesEnabled) {\r\n return updateAudience().then((audiencePatchData) => {\r\n const patchData = {\r\n ...(!_.isEmpty(audiencePatchData) ? audiencePatchData : {}),\r\n ...(!_.isEmpty(searchThemes) ? viewModelToBulkModelForSearchThemes(searchThemes, assetGroupId) : {}),\r\n };\r\n\r\n if (_.isEmpty(patchData)) {\r\n return new Promise(resolve => resolve({}));\r\n }\r\n\r\n return createOrUpdateAssetGroup(patchData);\r\n });\r\n }\r\n\r\n return updateAudience().then((audiencePatchData) => {\r\n if (_.isEmpty(audiencePatchData)) {\r\n return new Promise(resolve => resolve({}));\r\n }\r\n\r\n return createOrUpdateAssetGroup(audiencePatchData);\r\n });\r\n };\r\n\r\n const updateLocations = () => writeLocationTargetChanges({\r\n positiveLocationTargets,\r\n negativeLocationTargets,\r\n isPeopleInLocationChecked,\r\n isPeopleSearchingForLocationChecked,\r\n selectedLocationOption,\r\n });\r\n\r\n const saveRequests = [\r\n updateAssetGroup(),\r\n updateLocations(),\r\n ];\r\n\r\n return Promise.all(saveRequests);\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","export const mockRecommendations = {\r\n Headlines: [\r\n { text: 'Best Nike Shoes' },\r\n { text: 'Nike Com Shoes' },\r\n { text: 'Fitness Gear For All You Do' },\r\n ],\r\n LongHeadlines: [\r\n { text: 'Style your summer. Discover your summer color. The latest from Nike basketball' },\r\n { text: 'Shipping on all orders. Customize your so-you shoes.' },\r\n { text: 'Shop member exclusive styles' },\r\n ],\r\n Descriptions: [\r\n { text: 'Discover you summer color. The latest from Nike.' },\r\n { text: 'Shop member exclusive styles' },\r\n ],\r\n};\r\n\r\nexport const unlocalizedRecommendationTitle = {\r\n Headlines: _TL_('View recommended healines'),\r\n LongHeadlines: _TL_('View recommended long healines'),\r\n Descriptions: _TL_('View recommended descriptions'),\r\n};\r\n","export const getTextAssetRecommendationsStyles = () => ({\r\n TextAssetRecommendationsContent: {\r\n '& .text-recommendation-title': {\r\n fontWeight: 'bold',\r\n fontSize: '14px',\r\n padding: '8px 9px 8px 9px',\r\n },\r\n '& .ms-Button': {\r\n border: 'none',\r\n textAlign: 'left',\r\n paddingLeft: '5px',\r\n marginLeft: '0px',\r\n marginBottom: '5px',\r\n '& .ms-Button-label': {\r\n fontWeight: 'normal',\r\n fontSize: '14px',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const getFinalUrlRecommendationsStyles = () => ({\r\n TextFinalUrlRecommendationsContent: {\r\n '& .text-recommendation-title': {\r\n fontWeight: 'bold',\r\n fontSize: '14px',\r\n padding: '8px 9px 8px 9px',\r\n },\r\n '& .ms-Button': {\r\n border: 'none',\r\n textAlign: 'left',\r\n paddingLeft: '5px',\r\n marginLeft: '0px',\r\n marginBottom: '5px',\r\n '& .ms-Button-label': {\r\n fontWeight: 'normal',\r\n fontSize: '14px',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const getTextAssetRecommendationsDropdownStyles = () => ({\r\n TextAssetRecommendationsDropdown: {\r\n listStyle: 'none',\r\n margin: 0,\r\n padding: 0,\r\n maxHeight: 250,\r\n width: '100%',\r\n\r\n '& li': {\r\n display: 'list-item',\r\n fontSize: 14,\r\n height: 36,\r\n },\r\n\r\n '& .text-asset-recommendation-theme-icon': {\r\n position: 'absolute',\r\n left: 12,\r\n marginTop: 12,\r\n },\r\n\r\n '& .text-asset-recommendation-theme-title': {\r\n borderTop: '1px solid #f3f2f1',\r\n fontWeight: 'bold',\r\n padding: '12px 8px 0 36px',\r\n },\r\n\r\n '& .text-asset-recommendation-asset': {\r\n '& .ms-Button': {\r\n border: 'none',\r\n height: 36,\r\n width: '100%',\r\n margin: 0,\r\n padding: '0 8px 0 32px',\r\n textAlign: 'left',\r\n\r\n '& .ms-Button-label': {\r\n fontWeight: 'normal',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { contains, filter, map, property, values, size, isEmpty, negate, isFunction } from 'underscore';\r\nimport React, { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton, PrimaryButton, Panel, PanelType, Stack } from '@bingads-webui-react/fluent-controls';\r\nimport { SuggestedItemsMultiSelect } from '@bingads-webui-campaign-react/pill-item-components';\r\n\r\nconst SUGGESTED_ITEMS_PANEL_DESRCIPTION = _TL_('These are sourced from existing ads that share the same Final URL as the current asset group or from your website. Microsoft Adverting’s advanced AI models may generate asset recommendations based on your website content.');\r\n\r\nconst deriveSuggestedItems = (availableRecommendations, fieldValues) => () => {\r\n const selectedRecommendations = filter(fieldValues, text => contains(availableRecommendations, text));\r\n\r\n return map(availableRecommendations, text => ({\r\n key: text,\r\n itemText: text,\r\n isSelected: contains(selectedRecommendations, text),\r\n }));\r\n};\r\n\r\nexport const TextAssetRecommendationsPanel = ({\r\n i18n, onSave, onCancel, collection, availableRecommendations, maxCollectionSize, title, disabledSuggestionTooltip, reportDisplayedRecommendations,\r\n}) => {\r\n const fieldValues = useMemo(() => values(collection), [collection]);\r\n const [suggestedItems, setSuggestedItems] = useState(deriveSuggestedItems(availableRecommendations, fieldValues));\r\n const selectedItemsCount = useMemo(() => size(suggestedItems.filter(property('isSelected'))), [suggestedItems]);\r\n const emptyFieldsCount = useMemo(() => maxCollectionSize - size(filter(fieldValues, negate(isEmpty))), [maxCollectionSize, fieldValues]);\r\n const remaningItemsCount = emptyFieldsCount - selectedItemsCount;\r\n\r\n useEffect(() => {\r\n if (!isEmpty(availableRecommendations) && isFunction(reportDisplayedRecommendations)) {\r\n reportDisplayedRecommendations(availableRecommendations);\r\n }\r\n }, [availableRecommendations, reportDisplayedRecommendations]);\r\n\r\n const onSuggestedItemToggle = useCallback((itemIndex, itemText) => {\r\n setSuggestedItems(suggestedItems.map(item => ({\r\n ...item,\r\n isSelected: item.itemText === itemText ? !item.isSelected : item.isSelected,\r\n })));\r\n }, [suggestedItems]);\r\n\r\n const onSaveClick = useCallback(() => {\r\n onSave(suggestedItems.filter(property('isSelected')).map(item => item.itemText));\r\n }, [suggestedItems, onSave]);\r\n const onCancelClick = useCallback(() => {\r\n onCancel();\r\n }, [onCancel]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n \r\n \r\n 0)}>\r\n {i18n.getString(_TL_('Add'))}\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n \r\n \r\n ), [i18n, onSaveClick, onCancelClick, selectedItemsCount]);\r\n\r\n return (\r\n \r\n 0)}\r\n disabledSuggestionTooltip={disabledSuggestionTooltip}\r\n />\r\n \r\n );\r\n};\r\n\r\nTextAssetRecommendationsPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n collection: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n availableRecommendations: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n disabledSuggestionTooltip: PropTypes.string.isRequired,\r\n reportDisplayedRecommendations: PropTypes.func,\r\n};\r\n\r\nTextAssetRecommendationsPanel.defaultProps = {\r\n reportDisplayedRecommendations: undefined,\r\n};\r\n","import { chain, contains, filter, isEmpty, isFunction, map, negate, noop, property, size, values } from 'underscore';\r\nimport React, { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton, PrimaryButton, Panel, PanelType, Stack } from '@bingads-webui-react/fluent-controls';\r\nimport { FluentProvider, makeStyles, webLightTheme } from '@fluentui/react-components';\r\nimport { SuggestedItemsMultiSelect } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport { CopilotTab, CopilotTabItem } from '@bingads-webui/inline-copilot-ui';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\n\r\nconst useInlineCopilotUIStyles = makeStyles({\r\n header: {\r\n display: 'flex',\r\n fontSize: '20px',\r\n fontWeight: '600',\r\n lineHeight: '27px',\r\n justifyContent: 'flex-start',\r\n paddingLeft: '24px',\r\n paddingRight: '24px',\r\n width: '100%',\r\n\r\n '& button': {\r\n marginLeft: '8px',\r\n },\r\n },\r\n theme: {\r\n marginTop: '10px',\r\n marginBottom: '16px',\r\n },\r\n summary: {\r\n marginLeft: '16px',\r\n },\r\n});\r\n\r\nconst deriveSuggestedItems = (recommendations, fieldValues) => () =>\r\n chain(recommendations)\r\n .map(({ name, assets }) => ({\r\n assets: map(assets, asset => ({\r\n key: asset,\r\n itemText: asset,\r\n theme: name,\r\n })),\r\n }))\r\n .pluck('assets')\r\n .flatten()\r\n .filter(({ itemText }) => !contains(fieldValues, itemText))\r\n .value();\r\n\r\nexport const TextAssetRecommendationsWithThemesPanel = ({\r\n i18n,\r\n onSave,\r\n onCancel,\r\n collection,\r\n availableRecommendations,\r\n maxCollectionSize,\r\n title,\r\n topicKey,\r\n topicAriaLabel,\r\n disabledSuggestionTooltip,\r\n reportDisplayedRecommendations,\r\n DKIThemeName,\r\n replaceMode,\r\n}) => {\r\n const [activeTheme, setActiveTheme] = useState(i18n.getString(_TL_('All')));\r\n\r\n const fieldValues = useMemo(() => values(collection), [collection]);\r\n const [allSuggestedItems, setAllSuggestedItems] = useState(deriveSuggestedItems(availableRecommendations, fieldValues));\r\n const [suggestedItems, setSuggestedItems] = useState(allSuggestedItems);\r\n\r\n const selectedItemsCount = useMemo(() => size(allSuggestedItems.filter(property('isSelected'))), [allSuggestedItems]);\r\n const emptyFieldsCount = useMemo(() => (replaceMode? 1: maxCollectionSize - size(filter(fieldValues, negate(isEmpty)))), [maxCollectionSize, fieldValues, replaceMode]);\r\n const remaningItemsCount = useMemo(() => (replaceMode? (1 - selectedItemsCount) : emptyFieldsCount - selectedItemsCount), [emptyFieldsCount, selectedItemsCount, replaceMode]);\r\n\r\n const styles = useInlineCopilotUIStyles();\r\n\r\n useEffect(() => {\r\n if (!isEmpty(availableRecommendations) && isFunction(reportDisplayedRecommendations)) {\r\n // TODO: Logging\r\n // reportDisplayedRecommendations(availableRecommendations);\r\n }\r\n }, [availableRecommendations, reportDisplayedRecommendations]);\r\n\r\n const onSwitchTheme = useCallback((theme) => {\r\n setActiveTheme(theme);\r\n if (theme === i18n.getString(_TL_('All'))) {\r\n setSuggestedItems(allSuggestedItems);\r\n } else {\r\n setSuggestedItems(filter(allSuggestedItems, item => item.theme === theme));\r\n }\r\n }, [allSuggestedItems, i18n]);\r\n\r\n const onSuggestedItemToggle = useCallback((itemIndex, itemText) => {\r\n setSuggestedItems(suggestedItems.map(item => ({\r\n ...item,\r\n isSelected: item.itemText === itemText ? !item.isSelected : item.isSelected,\r\n })));\r\n setAllSuggestedItems(allSuggestedItems.map(item => ({\r\n ...item,\r\n isSelected: item.itemText === itemText ? !item.isSelected : item.isSelected,\r\n })));\r\n }, [allSuggestedItems, suggestedItems]);\r\n\r\n const onSaveClick = useCallback(() => {\r\n onSave(allSuggestedItems.filter(property('isSelected')).map(item => item.itemText));\r\n }, [allSuggestedItems, onSave]);\r\n\r\n const onCancelClick = useCallback(() => {\r\n onCancel();\r\n }, [onCancel]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n
\r\n {title}\r\n \r\n
\r\n ), [styles.header, title, topicAriaLabel, topicKey]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n \r\n \r\n 0)}>\r\n {replaceMode? i18n.getString(_TL_('Replace')) : i18n.getString(_TL_('Add'))}\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('{{count}} selected'), { count: selectedItemsCount })}\r\n \r\n \r\n \r\n ), [onSaveClick, selectedItemsCount, i18n, onCancelClick, styles.summary, replaceMode]);\r\n\r\n return (\r\n \r\n \r\n
\r\n onSwitchTheme(key)}\r\n >\r\n \r\n {i18n.getString(_TL_('All'))}\r\n \r\n {map(availableRecommendations, ({ name }) => (\r\n \r\n {name === DKIThemeName ? i18n.getString(DKIThemeName) : name}\r\n \r\n ))}\r\n \r\n
\r\n 0)}\r\n disabledSuggestionTooltip={disabledSuggestionTooltip}\r\n />\r\n
\r\n \r\n );\r\n};\r\n\r\nTextAssetRecommendationsWithThemesPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n collection: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n availableRecommendations: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n topicKey: PropTypes.string.isRequired,\r\n topicAriaLabel: PropTypes.string.isRequired,\r\n disabledSuggestionTooltip: PropTypes.string.isRequired,\r\n reportDisplayedRecommendations: PropTypes.func,\r\n DKIThemeName: PropTypes.string,\r\n replaceMode: PropTypes.bool,\r\n};\r\n\r\nTextAssetRecommendationsWithThemesPanel.defaultProps = {\r\n reportDisplayedRecommendations: undefined,\r\n DKIThemeName: '',\r\n replaceMode: false,\r\n};\r\n","import { chain, findKey, isEmpty, isFunction, result, size } from 'underscore';\r\nimport React, { useCallback, useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Separator } from '@bingads-webui-react/fluent-controls';\r\nimport { SuggestionSectionCollapse } from '@bingads-webui-campaign-react/pill-item-components';\r\n\r\nimport RecommendationsSectionIcon from '../media/recommendations-section.svg';\r\nimport { useCircularBufferView } from './use-circular-buffer-view';\r\nimport { TextAssetRecommendationsPanel } from './text-asset-recommendations-panel';\r\nimport { TextAssetRecommendationsWithThemesPanel } from './text-asset-recommendations-with-themes-panel';\r\n\r\nexport const MAX_INLINE_RECOMMENDATIONS_PER_PAGE = 5;\r\nexport const MAX_DKI_INLINE_RECOMMENDATIONS_PER_PAGE = 1;\r\n\r\nconst keyIsEmpty = ([text] = []) => isEmpty(text);\r\n\r\nexport const InlineRecommendations = ({\r\n i18n, collection, maxCollectionSize, availableRecommendations, singleAssetValidationPropsField,\r\n inlineRecommendationsHelpTopicKey, inlineRecommendationsHelpTopicAriaLabel, inlineRecommendationsTitle,\r\n inlineRecommendationsDisabledItemTooltip, applyRecommendation, applyRecommendations,\r\n reportDisplayedRecommendations, permissions, enableCopilotRecommendations,\r\n hideAddAllSuggestionsButton, enableDKI, DKIThemeName, replaceMode,\r\n}) => {\r\n const flattenedAvailableRecommendations = useMemo(() => {\r\n if (enableCopilotRecommendations) {\r\n return chain(availableRecommendations)\r\n .map(theme => result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .value();\r\n }\r\n return availableRecommendations;\r\n }, [availableRecommendations, enableCopilotRecommendations]);\r\n\r\n const flattenedAllAvailableRecommendations = useMemo(() => {\r\n if (enableCopilotRecommendations && enableDKI) {\r\n const flattenedAvailableDKIRecommendations = chain(availableRecommendations.filter(theme => theme.name === DKIThemeName))\r\n .map(theme => result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .uniq() // dedup\r\n .value();\r\n\r\n const flattenedAvailableNoDKIRecommendations = chain(availableRecommendations.filter(theme => theme.name !== DKIThemeName))\r\n .map(theme => result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .uniq() // dedup\r\n .value();\r\n return [...flattenedAvailableDKIRecommendations.slice(0, MAX_DKI_INLINE_RECOMMENDATIONS_PER_PAGE), ...flattenedAvailableNoDKIRecommendations];\r\n }\r\n return flattenedAvailableRecommendations;\r\n }, [DKIThemeName, availableRecommendations, enableCopilotRecommendations, enableDKI, flattenedAvailableRecommendations]);\r\n\r\n const [availableInlineRecommendations, canMoveNext, moveNext] = useCircularBufferView(flattenedAllAvailableRecommendations, MAX_INLINE_RECOMMENDATIONS_PER_PAGE);\r\n\r\n useEffect(() => {\r\n if (!isEmpty(availableInlineRecommendations) && isFunction(reportDisplayedRecommendations)) {\r\n reportDisplayedRecommendations(availableInlineRecommendations);\r\n }\r\n }, [availableInlineRecommendations, reportDisplayedRecommendations]);\r\n\r\n const firstAvailableKey = useMemo(() => {\r\n let keyToUpdate = findKey(collection, keyIsEmpty);\r\n\r\n if (!keyToUpdate) {\r\n if (size(collection) < maxCollectionSize) {\r\n keyToUpdate = `${singleAssetValidationPropsField}${size(collection)}`;\r\n } else if (replaceMode) {\r\n keyToUpdate = `${singleAssetValidationPropsField}${size(collection) -1}`;\r\n }\r\n }\r\n return keyToUpdate;\r\n }, [collection, singleAssetValidationPropsField, maxCollectionSize, replaceMode]);\r\n\r\n const [prevAvailbleKeyWasDefined, setPrevAvailbleKeyWasDefined] = useState(!!firstAvailableKey);\r\n const [shouldForceCloseCollapse, setShouldForceCloseCollapse] = useState(!firstAvailableKey);\r\n useEffect(() => {\r\n const firstAvailableKeyIsDefined = !!firstAvailableKey;\r\n if (prevAvailbleKeyWasDefined !== firstAvailableKeyIsDefined) {\r\n if (!shouldForceCloseCollapse && (prevAvailbleKeyWasDefined && !firstAvailableKeyIsDefined)) {\r\n setShouldForceCloseCollapse(true);\r\n } else if (shouldForceCloseCollapse && (!prevAvailbleKeyWasDefined && firstAvailableKeyIsDefined)) {\r\n setShouldForceCloseCollapse(false);\r\n }\r\n setPrevAvailbleKeyWasDefined(firstAvailableKeyIsDefined);\r\n }\r\n }, [firstAvailableKey, prevAvailbleKeyWasDefined, shouldForceCloseCollapse]);\r\n\r\n const onAddSuggestedItem = useCallback(\r\n (itemIndex, itemText) => firstAvailableKey && applyRecommendation(firstAvailableKey, itemText),\r\n [firstAvailableKey, applyRecommendation]\r\n );\r\n\r\n const onAddAllSuggestedItems = useCallback(\r\n () => applyRecommendations(availableInlineRecommendations),\r\n [availableInlineRecommendations, applyRecommendations]\r\n );\r\n\r\n const [isSuggestionsPanelOpen, setIsSuggestionsPanelOpen] = useState(false);\r\n\r\n const onMoreSuggestionsButtonClick = useCallback(() => {\r\n setIsSuggestionsPanelOpen(true);\r\n reportDisplayedRecommendations(flattenedAvailableRecommendations);\r\n }, [flattenedAvailableRecommendations, reportDisplayedRecommendations]);\r\n\r\n const onCancelAddingMultipleRecommendations = useCallback(\r\n () => setIsSuggestionsPanelOpen(false),\r\n []\r\n );\r\n\r\n const onAddMultipleRecommendations = useCallback(\r\n (recommendations) => {\r\n applyRecommendations(recommendations, replaceMode);\r\n setIsSuggestionsPanelOpen(false);\r\n },\r\n [applyRecommendations, replaceMode]\r\n );\r\n\r\n if (!isEmpty(availableInlineRecommendations)) {\r\n return (\r\n <>\r\n \r\n ({ itemText, key: itemText }))}\r\n onAddSuggestedItem={onAddSuggestedItem}\r\n onAddAllSuggestedItems={onAddAllSuggestedItems}\r\n suggestedSectionTitle={i18n.getString(inlineRecommendationsTitle)}\r\n showSuggestionsSectionShimmer={false}\r\n showMoreSuggestionsInlineButton={canMoveNext}\r\n onMoreSuggestionsInlineButtonClick={moveNext}\r\n showAddAllSuggestionsButton={!hideAddAllSuggestionsButton && !!firstAvailableKey}\r\n addAllSuggestionsButtonText={i18n.getString(_TL_('Add all'))}\r\n showMoreSuggestionsButton={canMoveNext}\r\n moreSuggestionsButtonText={i18n.getString(_TL_('View more'))}\r\n disableAllSuggestions={!firstAvailableKey}\r\n disabledSuggestionTooltip={i18n.getString(inlineRecommendationsDisabledItemTooltip)}\r\n useStyleFluent2\r\n onMoreSuggestionsButtonClick={onMoreSuggestionsButtonClick}\r\n forceClose={shouldForceCloseCollapse}\r\n />\r\n {isSuggestionsPanelOpen && (enableCopilotRecommendations ?\r\n :\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nInlineRecommendations.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n collection: PropTypes.objectOf(PropTypes.string).isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n availableRecommendations: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n singleAssetValidationPropsField: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicKey: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicAriaLabel: PropTypes.string.isRequired,\r\n inlineRecommendationsTitle: PropTypes.string.isRequired,\r\n inlineRecommendationsDisabledItemTooltip: PropTypes.string.isRequired,\r\n applyRecommendation: PropTypes.func.isRequired,\r\n applyRecommendations: PropTypes.func.isRequired,\r\n reportDisplayedRecommendations: PropTypes.func,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n hideAddAllSuggestionsButton: PropTypes.bool,\r\n enableDKI: PropTypes.bool,\r\n DKIThemeName: PropTypes.string,\r\n replaceMode: PropTypes.bool,\r\n};\r\n\r\nInlineRecommendations.defaultProps = {\r\n reportDisplayedRecommendations: undefined,\r\n enableCopilotRecommendations: true,\r\n hideAddAllSuggestionsButton: false,\r\n enableDKI: false,\r\n DKIThemeName: '',\r\n replaceMode: false,\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\n\r\nexport const useCircularBufferView = (collection, pageSize) => {\r\n const [page, setPage] = useState([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n if (collection.length === 0) {\r\n setPage([]);\r\n return;\r\n }\r\n\r\n const newPage = [];\r\n let index = currentIndex % collection.length;\r\n let count = 0;\r\n while (count < pageSize && count < collection.length) {\r\n newPage.push(collection[index]);\r\n index = (index + 1) % collection.length;\r\n count += 1;\r\n }\r\n setPage(newPage);\r\n }, [collection, currentIndex, pageSize]);\r\n\r\n const canMoveNext = collection.length > pageSize;\r\n\r\n const moveNext = useCallback(() => {\r\n setCurrentIndex((currentIndex + pageSize) % collection.length);\r\n }, [currentIndex, collection.length, pageSize]);\r\n\r\n return [page, canMoveNext, moveNext];\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { DefaultButton, FontIcon } from '@bingads-webui-react/fluent-controls';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getTextAssetRecommendationsDropdownStyles } from './styles';\r\nimport copilot from '../media/copilot.svg';\r\n\r\nregisterIcons({\r\n icons: {\r\n copilot: (\"copilot\"),\r\n },\r\n});\r\n\r\nconst TextAssetRecommendationsDropdownUnstyled = ({\r\n classes,\r\n assetKey,\r\n applyRecommendation,\r\n recommendations,\r\n i18n,\r\n DKIThemeName,\r\n}) => (\r\n
    \r\n {\r\n recommendations.map(({ name, assets }) => (\r\n <>\r\n \r\n
  • \r\n {name === DKIThemeName ? i18n.getString(DKIThemeName) : name}\r\n
  • \r\n {\r\n assets.map(asset => (\r\n
  • \r\n applyRecommendation(assetKey, asset)}>\r\n {asset}\r\n \r\n
  • \r\n ))\r\n }\r\n \r\n ))\r\n }\r\n
\r\n);\r\n\r\nTextAssetRecommendationsDropdownUnstyled.propTypes = {\r\n classes: PropTypes.shape({\r\n TextAssetRecommendationsDropdown: PropTypes.string,\r\n }).isRequired,\r\n assetKey: PropTypes.string.isRequired,\r\n applyRecommendation: PropTypes.func.isRequired,\r\n recommendations: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n assets: PropTypes.arrayOf(PropTypes.string),\r\n })).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n DKIThemeName: PropTypes.string,\r\n};\r\n\r\nTextAssetRecommendationsDropdownUnstyled.defaultProps = {\r\n DKIThemeName: '',\r\n};\r\n\r\nexport const TextAssetRecommendationsDropdown = withDefaultStyles(TextAssetRecommendationsDropdownUnstyled, getTextAssetRecommendationsDropdownStyles);\r\n","import _ from 'underscore';\r\nimport { propertyIs } from '@bingads-webui-campaign-react/form-error';\r\n\r\nexport const DKIThemeDefaultName = 'Asset_Theme_For_DKI';\r\nconst pmaxCollectionConfig = {\r\n headlines: {\r\n labelText: _TL_('Short headlines (up to 15)'),\r\n placeholderText: _TL_('Enter your short headline'),\r\n fieldName: 'short-headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your short headline'),\r\n deleteButtonLabel: _TL_('Remove short headline'),\r\n minCollectionSize: 3,\r\n maxCollectionSize: 15,\r\n errorMessage: _TL_('At least three short headlines are required'),\r\n helpPopupTopic: ' pop_BA_CampaignCreate_AudAds_ShortHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended short headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Shortheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about short headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of short headlines. Please remove one short headline if you\\'d like to add this recommended short headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('Headlines') },\r\n },\r\n longHeadlines: {\r\n labelText: _TL_('Long headlines (up to five)'),\r\n placeholderText: _TL_('Enter your long headline'),\r\n fieldName: 'long-headline',\r\n singleAssetValidationPropsField: 'LongHeadline',\r\n validationPropsField: 'LongHeadlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your long headline'),\r\n deleteButtonLabel: _TL_('Remove long headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 5,\r\n errorMessage: _TL_('At least one long headline is required'),\r\n helpPopupTopic: 'pop_BA_CampaignCreate_AudAds_LongHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about long headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended long headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Longheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about long headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of long headlines. Please remove one long headline if you\\'d like to add this recommended long headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('LongHeadlines') },\r\n },\r\n descriptions: {\r\n labelText: _TL_('Descriptions (up to five)'),\r\n placeholderText: _TL_('Enter your description'),\r\n fieldName: 'description',\r\n singleAssetValidationPropsField: 'Description',\r\n validationPropsField: 'Descriptions',\r\n addButtonText: _TL_('Add description'),\r\n copilotButtonLabel: _TL_('Get recommendations for your description'),\r\n deleteButtonLabel: _TL_('Remove description'),\r\n minCollectionSize: 2,\r\n maxCollectionSize: 5,\r\n errorMessage: _TL_('At least two descriptions are required'),\r\n helpPopupTopic: 'pop_BA_PMAX_Description',\r\n helpPopupAriaLabel: _TL_('Click to learn more about descriptions'),\r\n inlineRecommendationsTitle: _TL_('Recommended descriptions '),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Descriptions',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about descriptions recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of descriptions. Please remove one description if you\\'d like to add this recommended description.'),\r\n duplicateErrorMessage: _TL_('Duplicate descriptions are not allowed'),\r\n formErrorProps: { filter: propertyIs('Descriptions') },\r\n },\r\n};\r\n\r\nconst unifiedAppAdsConfig = {\r\n headlines: {\r\n labelText: _TL_('Short headlines (up to 15)'),\r\n placeholderText: _TL_('Enter your short headline'),\r\n fieldName: 'short-headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your short headline'),\r\n deleteButtonLabel: _TL_('Remove short headline'),\r\n minCollectionSize: 2,\r\n maxCollectionSize: 15,\r\n errorMessage: _TL_('At least two short headlines are required'),\r\n helpPopupTopic: ' pop_BA_CampaignCreate_AudAds_ShortHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended short headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Apps_Headlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about short headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of short headlines. Please remove one short headline if you\\'d like to add this recommended short headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('Headlines') },\r\n },\r\n descriptions: {\r\n labelText: _TL_('Descriptions (up to five)'),\r\n placeholderText: _TL_('Enter your description'),\r\n fieldName: 'description',\r\n singleAssetValidationPropsField: 'Description',\r\n validationPropsField: 'Descriptions',\r\n addButtonText: _TL_('Add description'),\r\n copilotButtonLabel: _TL_('Get recommendations for your description'),\r\n deleteButtonLabel: _TL_('Remove description'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 5,\r\n errorMessage: _TL_('At least two descriptions are required'),\r\n helpPopupTopic: 'pop_BA_PMAX_Description',\r\n helpPopupAriaLabel: _TL_('Click to learn more about descriptions'),\r\n inlineRecommendationsTitle: _TL_('Recommended descriptions '),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Apps_Descriptions',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about descriptions recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of descriptions. Please remove one description if you\\'d like to add this recommended description.'),\r\n duplicateErrorMessage: _TL_('Duplicate descriptions are not allowed'),\r\n formErrorProps: { filter: propertyIs('Descriptions') },\r\n },\r\n};\r\n\r\nconst windowsStoreAdsConfig = {\r\n headlines: {\r\n labelText: _TL_('Short headlines (up to 1)'),\r\n placeholderText: _TL_('Enter your short headline'),\r\n fieldName: 'short-headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your short headline'),\r\n deleteButtonLabel: _TL_('Remove short headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 1,\r\n errorMessage: _TL_('At least two short headlines are required'),\r\n helpPopupTopic: ' pop_BA_CampaignCreate_AudAds_ShortHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended short headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Shortheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about short headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of short headlines. Please remove one short headline if you\\'d like to add this recommended short headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('Headlines') },\r\n },\r\n};\r\n\r\nexport const pmaxLiteCollectionConfig = {\r\n headlines: {\r\n fieldName: 'short-headline',\r\n validationPropsField: 'Headlines',\r\n singleAssetValidationPropsField: 'Headline',\r\n maxCollectionSize: 15,\r\n minCollectionSize: 3,\r\n labelText: _TL_('Short headlines'),\r\n placeholderText: _TL_('Enter your headline'),\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your short headline'),\r\n deleteButtonLabel: _TL_('Remove short headline'),\r\n errorMessage: _TL_('At least 3 short headlines are required'),\r\n helpPopupTopic: ' pop_BA_CampaignCreate_AudAds_ShortHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended short headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Shortheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about short headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of short headlines. Please remove one short headline if you\\'d like to add this recommended short headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('Headlines') },\r\n },\r\n longHeadlines: {\r\n fieldName: 'long-headline',\r\n validationPropsField: 'LongHeadlines',\r\n singleAssetValidationPropsField: 'LongHeadline',\r\n maxCollectionSize: 5,\r\n minCollectionSize: 1,\r\n labelText: _TL_('Long headlines'),\r\n placeholderText: _TL_('Enter your long headline'),\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your long headline'),\r\n deleteButtonLabel: _TL_('Remove long headline'),\r\n errorMessage: _TL_('At least 1 long headline is required'),\r\n helpPopupTopic: 'pop_BA_CampaignCreate_AudAds_LongHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about long headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended long headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Longheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about long headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of long headlines. Please remove one long headline if you\\'d like to add this recommended long headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('LongHeadlines') },\r\n },\r\n descriptions: {\r\n fieldName: 'description',\r\n validationPropsField: 'Descriptions',\r\n singleAssetValidationPropsField: 'Description',\r\n maxCollectionSize: 5,\r\n minCollectionSize: 2,\r\n labelText: _TL_('Descriptions'),\r\n placeholderText: _TL_('Enter your description'),\r\n addButtonText: _TL_('Add description'),\r\n copilotButtonLabel: _TL_('Get recommendations for your description'),\r\n deleteButtonLabel: _TL_('Remove description'),\r\n errorMessage: _TL_('At least 2 descriptions are required'),\r\n helpPopupTopic: 'pop_BA_PMAX_Description',\r\n helpPopupAriaLabel: _TL_('Click to learn more about descriptions'),\r\n inlineRecommendationsTitle: _TL_('Recommended descriptions '),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Descriptions',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about descriptions recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of descriptions. Please remove one description if you\\'d like to add this recommended description.'),\r\n duplicateErrorMessage: _TL_('Duplicate descriptions are not allowed'),\r\n formErrorProps: { filter: propertyIs('Descriptions') },\r\n },\r\n};\r\n\r\nexport const displayPlusCollectionConfig = {\r\n headlines: {\r\n labelText: _TL_('Short headlines (up to 15)'),\r\n placeholderText: _TL_('Enter your short headline'),\r\n fieldName: 'short-headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your short headline'),\r\n deleteButtonLabel: _TL_('Remove short headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 15,\r\n errorMessage: _TL_('At least one short headline are required'),\r\n helpPopupTopic: ' pop_BA_CampaignCreate_AudAds_ShortHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended short headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Shortheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about short headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of short headlines. Please remove one short headline if you\\'d like to add this recommended short headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('Headlines') },\r\n },\r\n longHeadlines: {\r\n labelText: _TL_('Long headlines (up to five)'),\r\n placeholderText: _TL_('Enter your long headline'),\r\n fieldName: 'long-headline',\r\n singleAssetValidationPropsField: 'LongHeadline',\r\n validationPropsField: 'LongHeadlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your long headline'),\r\n deleteButtonLabel: _TL_('Remove long headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 5,\r\n errorMessage: _TL_('At least one long headline is required'),\r\n helpPopupTopic: 'pop_BA_CampaignCreate_AudAds_LongHeadline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about long headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended long headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Longheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about long headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of long headlines. Please remove one long headline if you\\'d like to add this recommended long headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('LongHeadlines') },\r\n },\r\n descriptions: {\r\n labelText: _TL_('Descriptions (up to five)'),\r\n placeholderText: _TL_('Enter a description'),\r\n fieldName: 'description',\r\n singleAssetValidationPropsField: 'Description',\r\n validationPropsField: 'Descriptions',\r\n addButtonText: _TL_('Add description'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 5,\r\n errorMessage: _TL_('At least one description is required'),\r\n helpPopupTopic: 'pop_BA_Onboarding_Descriptions',\r\n helpPopupAriaLabel: _TL_('Click to learn more about descriptions'),\r\n inlineRecommendationsTitle: _TL_('Recommended descriptions '),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_Pmax_Descriptions',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about descriptions recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You’ve reached the maximum number of descriptions. Please remove one description if you’d like to add this recommended description.'),\r\n duplicateErrorMessage: _TL_('Duplicate descriptions are not allowed'),\r\n formErrorProps: { filter: propertyIs('Descriptions') },\r\n },\r\n};\r\n\r\nexport const searchMMACollectionConfig = {\r\n ...pmaxLiteCollectionConfig,\r\n longHeadlines: {\r\n ...pmaxLiteCollectionConfig.longHeadlines,\r\n addButtonText: _TL_('Add long headline'),\r\n formErrorProps: { filter: propertyIs('ResponsiveAdLongHeadlines') },\r\n },\r\n headlines: {\r\n ...pmaxLiteCollectionConfig.headlines,\r\n minCollectionSize: 1,\r\n maxCollectionSize: 15,\r\n errorMessage: _TL_('At least 1 short headline is required'),\r\n formErrorProps: { filter: propertyIs('ResponsiveAdHeadlines') },\r\n enableDKI: true,\r\n DKIThemeName: _TL_('Headline with dynamic keyword'),\r\n },\r\n descriptions: {\r\n ...pmaxLiteCollectionConfig.descriptions,\r\n labelText: _TL_('Ad text'),\r\n minCollectionSize: 1,\r\n errorMessage: _TL_('At least 1 description is required'),\r\n formErrorProps: { filter: propertyIs('ResponsiveAdDescriptions') },\r\n },\r\n};\r\n\r\nexport const linkedinAdCollectionConfig = {\r\n headlines: {\r\n labelText: _TL_('Headline'),\r\n placeholderText: _TL_('Enter your headline'),\r\n fieldName: 'headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add headline'),\r\n copilotButtonLabel: _TL_('Get recommendations for your headline'),\r\n deleteButtonLabel: _TL_('Remove headline'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 1,\r\n errorMessage: _TL_('At least one headline are required'),\r\n helpPopupTopic: 'pop_BA_LinkedIn_Headline',\r\n helpPopupAriaLabel: _TL_('Click to learn more about short headlines'),\r\n inlineRecommendationsTitle: _TL_('Recommended headlines'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_LinkedIn_Headline',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You\\'ve reached the maximum number of headlines. Please remove one headline if you\\'d like to add this recommended headline.'),\r\n duplicateErrorMessage: _TL_('Duplicate headlines are not allowed'),\r\n formErrorProps: { filter: propertyIs('Headline') },\r\n hideAddButtonWhenLimitReached: true,\r\n hideAddAllSuggestionsButton: true,\r\n showAssetLabelledBy: true,\r\n replaceMode: true,\r\n },\r\n};\r\n\r\nexport const featureConfigMapping = {\r\n pmax: pmaxCollectionConfig,\r\n pmaxLite: pmaxLiteCollectionConfig,\r\n searchMMA: searchMMACollectionConfig,\r\n displayPlus: displayPlusCollectionConfig,\r\n linkedin: linkedinAdCollectionConfig,\r\n unifiedAppAds: unifiedAppAdsConfig,\r\n windowsStoreAds: windowsStoreAdsConfig,\r\n};\r\n\r\nexport const getTextAssetCollectionConfig = (collectionName, i18n, collectionConfig = pmaxCollectionConfig) => {\r\n const unlocalizedArgs = _.result(collectionConfig, collectionName, undefined);\r\n\r\n if (!unlocalizedArgs) {\r\n throw new Error(`Invalid text asset collection name: ${collectionName}`);\r\n }\r\n\r\n const localizedArgs = {\r\n ...unlocalizedArgs,\r\n labelText: i18n.getString(unlocalizedArgs.labelText),\r\n placeholderText: i18n.getString(unlocalizedArgs.placeholderText),\r\n addButtonText: i18n.getString(unlocalizedArgs.addButtonText),\r\n errorMessage: i18n.getString(unlocalizedArgs.errorMessage),\r\n helpPopupAriaLabel: i18n.getString(unlocalizedArgs.helpPopupAriaLabel),\r\n duplicateErrorMessage: i18n.getString(unlocalizedArgs.duplicateErrorMessage),\r\n };\r\n\r\n if (unlocalizedArgs.copilotButtonLabel) {\r\n localizedArgs.copilotButtonLabel = i18n.getString(unlocalizedArgs.copilotButtonLabel);\r\n }\r\n if (unlocalizedArgs.deleteButtonLabel) {\r\n localizedArgs.deleteButtonLabel = i18n.getString(unlocalizedArgs.deleteButtonLabel);\r\n }\r\n\r\n return localizedArgs;\r\n};\r\n","import React, { useCallback, useMemo, useContext, useState, useEffect } from 'react';\r\nimport { Callout, Stack, DefaultButton } from '@bingads-webui-react/fluent-controls';\r\nimport _, { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { useId } from '@fluentui/react-hooks';\r\nimport {\r\n AssetEventRecordType,\r\n AssetPropertyName,\r\n AssetType,\r\n useEventLog,\r\n POST_ASSET_EVENT_NAME,\r\n EMPTY_ASSET_HINTS,\r\n NOT_SUPPORT_DYNAMIC_TEXT,\r\n NO_FINAL_URL_HINT\r\n} from '@bingads-webui-campaign-react/copilot-common';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { UnvalidatedTextAssetCollection } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { CopilotTextAssetRecommendation } from '@bingads-webui/inline-copilot';\r\nimport { getCharCountExcludingAdCustomizers } from '@bingads-webui-campaign/ad-customizers-next';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\n\r\nimport { unlocalizedRecommendationTitle } from './recommendations-constants';\r\nimport { getTextAssetRecommendationsStyles } from './styles';\r\nimport { InlineRecommendations } from './inline-recommendations';\r\nimport { TextAssetRecommendationsDropdown } from './text-asset-recommendations-dropdown';\r\nimport { DKIThemeDefaultName } from './pmax-text-asset-collection-config';\r\n\r\nconst recommendationFieldMap = {\r\n Headlines: 'headlines',\r\n LongHeadlines: 'longHeadlines',\r\n Descriptions: 'descriptions',\r\n};\r\n\r\nconst recommendationAssetTypeMap = {\r\n Headlines: 'headline',\r\n LongHeadlines: 'longHeadline',\r\n Descriptions: 'description',\r\n};\r\n\r\nconst propertyNameSingularMap = {\r\n Headlines: AssetPropertyName.HEADLINE,\r\n LongHeadlines: AssetPropertyName.LONG_HEADLINE,\r\n Descriptions: AssetPropertyName.DESCRIPTION,\r\n};\r\n\r\nconst textAssetCollectionStyleOverridesForInlineRecommendations = {\r\n AddAssetButton: {\r\n marginBottom: 'unset',\r\n },\r\n};\r\n\r\nexport const UnvalidatedTextAssetCollectionWithRecommendations = React.memo((props) => {\r\n const {\r\n validationPropsField,\r\n validationProps,\r\n updateValidation,\r\n maxCollectionSize,\r\n inlineRecommendationsTitle,\r\n inlineRecommendationsHelpTopicKey,\r\n inlineRecommendationsHelpTopicAriaLabel,\r\n inlineRecommendationsDisabledItemTooltip,\r\n singleAssetValidationPropsField,\r\n i18n,\r\n permissions,\r\n withInlineRecommendations,\r\n withDeleteIconDisabled,\r\n setAddTextAssetCallback,\r\n copilotButtonLabel,\r\n onFocusTextAsset,\r\n onApplyRecommendation,\r\n enableCopilotRecommendations,\r\n onDeleteTextAsset,\r\n enableCustomizer,\r\n hideAddAllSuggestionsButton,\r\n showAssetLabelledBy,\r\n isAudienceAd,\r\n enableDKI,\r\n DKIThemeName,\r\n replaceMode,\r\n } = props;\r\n\r\n const isAmplifyEnabled = _.chain(permissions).result('IsAmplifyEnabled').value();\r\n const is40CharHeadlinePilotEnabled = _.chain(permissions).result('dynamic').result('AudienceCampaignExpandedHeadlineCharLimits').value();\r\n const isExpandedHeadlineCharLimitEnabled = (isAudienceAd && !isAmplifyEnabled && is40CharHeadlinePilotEnabled);\r\n const updatedValidationSchema = {\r\n ...validationProps,\r\n schema: {\r\n ...validationProps.schema,\r\n properties: {\r\n ...validationProps.schema.properties,\r\n Headlines: {\r\n ...validationProps.schema.properties.Headlines,\r\n schema: {\r\n ...validationProps.schema.properties.Headlines.schema,\r\n properties: Object.fromEntries(Object.entries(validationProps.schema.properties.Headlines.schema.properties).map(([key, property]) =>\r\n [\r\n key,\r\n { ...property, maxLength: 40 },\r\n ])),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n const newValidationProps = isExpandedHeadlineCharLimitEnabled ? updatedValidationSchema : validationProps;\r\n\r\n const { data } = validationProps;\r\n const collection = _.result(data, validationPropsField, {});\r\n const [viewedCopilotCollectionObj, setViewedCopilotCollectionObj] = useState();\r\n\r\n const finalUrlForRecommendation = useMemo(() => _.result(data, 'FinalUrlForRecommendation', false), [data]);\r\n\r\n const classes = useDefaultStyles(getTextAssetRecommendationsStyles);\r\n const [visibleCalloutKey, setVisibleCalloutKey] = React.useState();\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { postAssetEventLog = noop, copilotTracking } = recommendationContext;\r\n\r\n const serverContext = useContext(ServerContext);\r\n const [isCopilotEnabled, setIsCopilotEnabled] = useState();\r\n useEffect(() => {\r\n if (enableCopilotRecommendations) {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(isRestricted => setIsCopilotEnabled(!isRestricted));\r\n } else {\r\n setIsCopilotEnabled(false);\r\n }\r\n }, [enableCopilotRecommendations, permissions, serverContext]);\r\n\r\n const logCopilotSuggestions = useCallback((suggestionIds) => {\r\n if (copilotTracking) {\r\n const suggestionsToLog = copilotTracking.getUntrackedViewedSuggestionIds(suggestionIds);\r\n if (suggestionsToLog.length > 0) {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n AssetType: _.map(suggestionsToLog, () => AssetType.TEXT),\r\n SuggestionIds: suggestionsToLog,\r\n RecordType: AssetEventRecordType.VIEWED,\r\n },\r\n });\r\n copilotTracking.trackViewedSuggestionIds(suggestionsToLog);\r\n }\r\n }\r\n }, [copilotTracking, postAssetEventLog]);\r\n\r\n const {\r\n logTextAssetMenuOpen,\r\n logTextAssetDialogOpen,\r\n logRefineTextAsset,\r\n logRefineTextAssetSucceeded,\r\n logTextAssetApplied,\r\n logRemoveSingleAsset,\r\n } = useEventLog(postAssetEventLog);\r\n\r\n const onSuggestionsRendered = useCallback((finalUrl, params, textSuggestions) => {\r\n const textSuggestionIds = _.pluck(textSuggestions, 'RecommendationId');\r\n logRefineTextAssetSucceeded(finalUrl, params, textSuggestionIds);\r\n\r\n if (copilotTracking) {\r\n copilotTracking.trackReturnedTextAssets({ TextAssets: textSuggestions });\r\n copilotTracking.trackViewedSuggestionIds(textSuggestionIds);\r\n }\r\n }, [copilotTracking, logRefineTextAssetSucceeded]);\r\n\r\n const recommendationsField = recommendationFieldMap[validationPropsField];\r\n const collectionRecommendations = useMemo(() => {\r\n if (isCopilotEnabled) {\r\n const { themes } = recommendationContext;\r\n return _.map(themes, theme => ({\r\n name: theme.name,\r\n assets: _.result(theme, recommendationsField),\r\n }));\r\n }\r\n return _.result(recommendationContext, recommendationsField);\r\n }, [isCopilotEnabled, recommendationContext, recommendationsField]);\r\n\r\n const currentCollectionTexts = useMemo(\r\n () => _.chain(data).result(validationPropsField, {}).values().value(),\r\n [data, validationPropsField]\r\n );\r\n\r\n const availableRecommendations = useMemo(\r\n () => {\r\n if (isCopilotEnabled) {\r\n let availableCollectionRecommendations = collectionRecommendations.filter(theme => theme.name !== DKIThemeDefaultName);\r\n if (permissions && permissions.dynamic && permissions.dynamic.CopilotDKIRecommendation && enableDKI) {\r\n const DKItheme = collectionRecommendations.filter(theme => theme.name === DKIThemeDefaultName);\r\n availableCollectionRecommendations = [...DKItheme, ...availableCollectionRecommendations];\r\n }\r\n return _.chain(availableCollectionRecommendations)\r\n .map(theme => ({\r\n name: theme.name === DKIThemeDefaultName ? DKIThemeName : theme.name,\r\n assets: _.chain(theme.assets)\r\n .map(_.property('Text'))\r\n .filter(recommendation => !_.contains(currentCollectionTexts, recommendation))\r\n .value(),\r\n }))\r\n .filter(theme => !_.isEmpty(theme.assets))\r\n .value();\r\n }\r\n return _.chain(collectionRecommendations)\r\n .map(_.property('Text'))\r\n .filter(recommendation => !_.contains(currentCollectionTexts, recommendation))\r\n .value();\r\n },\r\n [DKIThemeName, collectionRecommendations, currentCollectionTexts, enableDKI, isCopilotEnabled, permissions]\r\n );\r\n\r\n const recommendationsMap = useMemo(() => {\r\n if (isCopilotEnabled) {\r\n return _.chain(collectionRecommendations)\r\n .map(theme => _.chain(theme.assets)\r\n .map(recommendation => [\r\n _.property('Text')(recommendation),\r\n {\r\n Text: _.property('Text')(recommendation),\r\n SuggestionId: _.property('RecommendationId')(recommendation),\r\n },\r\n ])\r\n .object()\r\n .value())\r\n .reduce((result, theme) => _.extend(result, theme), {})\r\n .value();\r\n }\r\n return _.chain(collectionRecommendations)\r\n .map(recommendation => [\r\n recommendation.Text,\r\n {\r\n ...recommendation,\r\n SuggestionId: recommendation.SuggestionId,\r\n },\r\n ])\r\n .object()\r\n .value();\r\n }, [collectionRecommendations, isCopilotEnabled]);\r\n\r\n const reportDisplayedRecommendations = useCallback((recommendations) => {\r\n const displayedRecommendations = _.chain(recommendations)\r\n .map(recommendation => recommendationsMap[recommendation])\r\n .compact()\r\n .value();\r\n\r\n if (!_.isEmpty(displayedRecommendations)) {\r\n const displayedRecommendationsIds = _.pluck(displayedRecommendations, 'SuggestionId');\r\n reportRecommendations({\r\n view: displayedRecommendationsIds,\r\n });\r\n if (isCopilotEnabled) {\r\n logCopilotSuggestions(displayedRecommendationsIds);\r\n }\r\n }\r\n }, [logCopilotSuggestions, isCopilotEnabled, recommendationsMap, reportRecommendations]);\r\n\r\n useEffect(() => {\r\n if (viewedCopilotCollectionObj && recommendationContext) {\r\n reportDisplayedRecommendations(viewedCopilotCollectionObj);\r\n }\r\n }, [recommendationContext, reportDisplayedRecommendations, viewedCopilotCollectionObj]);\r\n\r\n const applyRecommendation = useCallback((key, text) => {\r\n const collectionData = cloneDeep(collection);\r\n collectionData[key] = text;\r\n const newData = {\r\n ...data,\r\n [validationPropsField]: collectionData,\r\n };\r\n\r\n setVisibleCalloutKey(null);\r\n updateValidation(null, newData);\r\n\r\n onApplyRecommendation(key);\r\n }, [collection, data, onApplyRecommendation, updateValidation, validationPropsField]);\r\n\r\n const applyRecommendations = useCallback((recommendations, replaceExistingAssets) => {\r\n const availableRecommendationsStack = [...recommendations].reverse();\r\n const collectionObj = _.result(data, validationPropsField, {});\r\n const fieldsToSet = Math.max(maxCollectionSize, _.size(collectionObj));\r\n\r\n // Remove all existing assets if replaceExistingAssets is true\r\n if (replaceExistingAssets) {\r\n for (let currentFieldIndex = 0; currentFieldIndex < fieldsToSet; currentFieldIndex += 1) {\r\n delete collectionObj[`${singleAssetValidationPropsField}${currentFieldIndex}`];\r\n }\r\n }\r\n\r\n for (let currentFieldIndex = 0; currentFieldIndex < fieldsToSet && !_.isEmpty(availableRecommendationsStack); currentFieldIndex += 1) {\r\n const key = `${singleAssetValidationPropsField}${currentFieldIndex}`;\r\n if (_.isEmpty(collectionObj[key])) {\r\n const recommendation = availableRecommendationsStack.pop();\r\n collectionObj[key] = recommendation;\r\n }\r\n }\r\n\r\n const newData = {\r\n [validationPropsField]: collectionObj,\r\n };\r\n updateValidation([], newData);\r\n if (isCopilotEnabled) {\r\n setViewedCopilotCollectionObj(collectionObj);\r\n }\r\n }, [data, maxCollectionSize, isCopilotEnabled, singleAssetValidationPropsField, updateValidation, validationPropsField]);\r\n\r\n if (_.isFunction(setAddTextAssetCallback)) {\r\n setAddTextAssetCallback((recommendations, replaceExistingAssets) => {\r\n const filteredRecommendations = !replaceExistingAssets\r\n ? recommendations.filter(recommendation => !_.contains(currentCollectionTexts, recommendation))\r\n : recommendations;\r\n\r\n applyRecommendations(filteredRecommendations, replaceExistingAssets);\r\n });\r\n }\r\n\r\n const headlineTitle = useMemo(() => i18n.getString(unlocalizedRecommendationTitle[validationPropsField]), [i18n, validationPropsField]);\r\n\r\n const renderRecommendations = useCallback((key, itemValue) => {\r\n const filteredRecommendations = isCopilotEnabled\r\n ? _.chain(availableRecommendations)\r\n .map((theme) => {\r\n if (theme.name === DKIThemeName) {\r\n return {\r\n ...theme,\r\n assets: _.filter(theme.assets, recommendation => recommendation.toLowerCase().startsWith(itemValue.toLowerCase())).slice(0, 2),\r\n };\r\n }\r\n return {\r\n ...theme,\r\n assets: _.filter(theme.assets, recommendation => recommendation.toLowerCase().startsWith(itemValue.toLowerCase())),\r\n };\r\n })\r\n .filter(theme => !_.isEmpty(theme.assets))\r\n .value()\r\n : _.filter(availableRecommendations, recommendation => recommendation.toLowerCase().startsWith(itemValue.toLowerCase()));\r\n\r\n const displayedRecommendations = isCopilotEnabled\r\n ? _.chain(availableRecommendations)\r\n .map(theme => _.filter(theme.assets, recommendation => recommendation.toLowerCase().startsWith(itemValue.toLowerCase())))\r\n .flatten()\r\n .value()\r\n : filteredRecommendations;\r\n\r\n if (_.isEmpty(filteredRecommendations)) {\r\n return null;\r\n }\r\n\r\n reportDisplayedRecommendations(displayedRecommendations);\r\n\r\n return isCopilotEnabled ? (\r\n \r\n ) : (\r\n
\r\n \r\n {headlineTitle}\r\n {filteredRecommendations.map(recommendation => applyRecommendation(key, recommendation)}>{recommendation})}\r\n \r\n
\r\n );\r\n }, [isCopilotEnabled, availableRecommendations, reportDisplayedRecommendations, classes.TextAssetRecommendationsContent, headlineTitle, applyRecommendation]);\r\n\r\n const { Headlines, LongHeadlines, Descriptions } = data || {};\r\n const existingAssets = useMemo(() => ({\r\n shortHeadlines: _.values(Headlines),\r\n longHeadlines: _.values(LongHeadlines),\r\n descriptions: _.values(Descriptions),\r\n }), [Headlines, LongHeadlines, Descriptions]);\r\n\r\n const handleDeleteTextAsset = useCallback((key, deletedValue) => {\r\n onDeleteTextAsset(key);\r\n\r\n const propertyName = propertyNameSingularMap[validationPropsField];\r\n if (!isCopilotEnabled || !copilotTracking || !copilotTracking.isInRemainingInitialSuggestions(propertyName, deletedValue)) { return; }\r\n\r\n copilotTracking.removeInitialSuggestion(propertyNameSingularMap[validationPropsField], deletedValue);\r\n\r\n const recommendationId = _.chain(collectionRecommendations)\r\n .map('assets')\r\n .flatten()\r\n .filter(recommendation => recommendation.Text === deletedValue)\r\n .map('RecommendationId')\r\n .first()\r\n .value();\r\n\r\n if (recommendationId) {\r\n logRemoveSingleAsset(propertyName, recommendationId);\r\n }\r\n }, [onDeleteTextAsset, isCopilotEnabled, collectionRecommendations, validationPropsField, logRemoveSingleAsset, copilotTracking]);\r\n\r\n const renderInlineCopilot = useCallback((key, itemValue) => {\r\n const assetType = recommendationAssetTypeMap[validationPropsField];\r\n\r\n let disableReason;\r\n if (!finalUrlForRecommendation) {\r\n disableReason = i18n.getString(NO_FINAL_URL_HINT);\r\n }\r\n if (_.isEmpty(itemValue.trim())) {\r\n disableReason = i18n.getString(EMPTY_ASSET_HINTS[assetType]);\r\n }\r\n\r\n if (enableCustomizer) {\r\n if (getCharCountExcludingAdCustomizers({\r\n text: itemValue,\r\n adType: 'ResponsiveAd',\r\n field: validationPropsField,\r\n }) !== itemValue.length) {\r\n disableReason = i18n.getString(NOT_SUPPORT_DYNAMIC_TEXT);\r\n }\r\n }\r\n\r\n const currentAssetIndex = parseInt(key.match(/\\d+/)[0], 10);\r\n\r\n const onSelect = (assets, operationName) => {\r\n const text = _.get(assets, ['value', 0, 'text']);\r\n logTextAssetApplied(assetType, operationName);\r\n return applyRecommendation(key, text);\r\n };\r\n\r\n return (\r\n \r\n );\r\n }, [\r\n applyRecommendation,\r\n copilotButtonLabel,\r\n existingAssets,\r\n finalUrlForRecommendation,\r\n i18n,\r\n logRefineTextAsset,\r\n logTextAssetApplied,\r\n logTextAssetDialogOpen,\r\n logTextAssetMenuOpen,\r\n onSuggestionsRendered,\r\n validationPropsField,\r\n enableCustomizer,\r\n permissions,\r\n ]);\r\n\r\n const labelledById = useId('textAssetLabel');\r\n\r\n const renderFunction = useCallback((key, renderItemFunction, itemValue) => {\r\n const onClickOrChangeHandler = () => setVisibleCalloutKey(availableRecommendations.length > 0 && key);\r\n\r\n const additionalTextFieldProps = {\r\n id: key,\r\n onClick: onClickOrChangeHandler,\r\n onChange: onClickOrChangeHandler,\r\n renderInlineCopilot: isCopilotEnabled ? renderInlineCopilot : null,\r\n onFocus: () => onFocusTextAsset(key),\r\n };\r\n\r\n if (isCopilotEnabled && availableRecommendations.length > 0) {\r\n // when inline recommendations are available, hide the browser's native autocomplete\r\n additionalTextFieldProps.autoComplete = 'off';\r\n }\r\n\r\n if (showAssetLabelledBy) {\r\n additionalTextFieldProps['aria-labelledBy'] = labelledById;\r\n }\r\n\r\n return (\r\n \r\n {renderItemFunction(additionalTextFieldProps)}\r\n {visibleCalloutKey === key &&\r\n setVisibleCalloutKey(undefined)}\r\n calloutMinWidth={435}\r\n >\r\n {renderRecommendations(key, itemValue)}\r\n \r\n }\r\n );\r\n }, [availableRecommendations.length, isCopilotEnabled, labelledById, onFocusTextAsset, renderInlineCopilot, renderRecommendations, showAssetLabelledBy, visibleCalloutKey]);\r\n\r\n return (\r\n \r\n \r\n {withInlineRecommendations &&\r\n \r\n }\r\n \r\n );\r\n});\r\n\r\nUnvalidatedTextAssetCollectionWithRecommendations.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n validationPropsField: PropTypes.string.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n getLocale: PropTypes.func.isRequired,\r\n }).isRequired,\r\n singleAssetValidationPropsField: PropTypes.string.isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n inlineRecommendationsTitle: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicKey: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicAriaLabel: PropTypes.string.isRequired,\r\n inlineRecommendationsDisabledItemTooltip: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.element,\r\n PropTypes.arrayOf(PropTypes.element),\r\n ]).isRequired,\r\n withInlineRecommendations: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n setAddTextAssetCallback: PropTypes.func,\r\n copilotButtonLabel: PropTypes.string,\r\n onFocusTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n onDeleteTextAsset: PropTypes.func,\r\n enableCustomizer: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n isAmplifyEnabled: PropTypes.bool,\r\n AudienceCampaignExpandedHeadlineCharLimits: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n hideAddAllSuggestionsButton: PropTypes.bool,\r\n showAssetLabelledBy: PropTypes.bool,\r\n isAudienceAd: PropTypes.bool,\r\n enableDKI: PropTypes.bool,\r\n DKIThemeName: PropTypes.string,\r\n replaceMode: PropTypes.bool,\r\n};\r\n\r\nUnvalidatedTextAssetCollectionWithRecommendations.defaultProps = {\r\n withInlineRecommendations: false,\r\n withDeleteIconDisabled: false,\r\n setAddTextAssetCallback: noop,\r\n copilotButtonLabel: undefined,\r\n onFocusTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n enableCopilotRecommendations: true,\r\n onDeleteTextAsset: noop,\r\n enableCustomizer: false,\r\n hideAddAllSuggestionsButton: false,\r\n showAssetLabelledBy: false,\r\n isAudienceAd: false,\r\n enableDKI: false,\r\n DKIThemeName: '',\r\n replaceMode: false,\r\n};\r\n\r\nexport const TextAssetCollectionWithRecommendations = withPermissions(withCustomValidation(UnvalidatedTextAssetCollectionWithRecommendations));\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextAssetCollectionWithRecommendations } from './text-asset-collection-with-recommendations';\r\nimport { getTextAssetCollectionConfig } from './pmax-text-asset-collection-config';\r\n\r\nexport const TextAssetCollections = React.memo((props) => {\r\n const {\r\n isOptional, showDeleteButton, renderInlineCopilot, textAssetConfig, validationProps, withInlineRecommendations,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const headlineConfig = useMemo(() => getTextAssetCollectionConfig('headlines', i18n, textAssetConfig), [i18n, textAssetConfig]);\r\n const longHeadlineConfig = useMemo(() => getTextAssetCollectionConfig('longHeadlines', i18n, textAssetConfig), [i18n, textAssetConfig]);\r\n const descriptionsConfig = useMemo(() => getTextAssetCollectionConfig('descriptions', i18n, textAssetConfig), [i18n, textAssetConfig]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
);\r\n});\r\n\r\nTextAssetCollections.propTypes = {\r\n isOptional: PropTypes.bool,\r\n showDeleteButton: PropTypes.bool,\r\n renderInlineCopilot: PropTypes.func,\r\n textAssetConfig: PropTypes.shape({\r\n headlines: PropTypes.shape({}),\r\n longHeadlines: PropTypes.shape({}),\r\n descriptions: PropTypes.shape({}),\r\n }),\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Headline: PropTypes.shape({}),\r\n LongHeadlines: PropTypes.shape({}),\r\n Descriptions: PropTypes.shape({}),\r\n }),\r\n }),\r\n withInlineRecommendations: PropTypes.bool,\r\n};\r\n\r\nTextAssetCollections.defaultProps = {\r\n isOptional: false,\r\n showDeleteButton: false,\r\n renderInlineCopilot: null,\r\n textAssetConfig: {\r\n headlines: {},\r\n longHeadlines: {},\r\n descriptions: {},\r\n },\r\n validationProps: {\r\n data: {\r\n Headline: {},\r\n LongHeadlines: {},\r\n Descriptions: {},\r\n },\r\n },\r\n withInlineRecommendations: false,\r\n};\r\n","import { noop } from 'underscore';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStoreFromProviderId } from '@bingads-webui-campaign-react/with-store-details';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { BusinessNameWithValidation } from '@bingads-webui-campaign-react/business-name';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst BusinessNameMaxLength = 25;\r\n\r\nconst StoreBackedBusinessName = (props) => {\r\n const {\r\n id,\r\n storeDetails,\r\n i18n,\r\n validationProps,\r\n updateValidation,\r\n } = props;\r\n\r\n const { data } = validationProps;\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const currentBusinessName = (data && data.BusinessName) || '';\r\n const storeName = storeDetails && storeDetails.name;\r\n const [prepopulated, setPrepopulated] = useState(false);\r\n\r\n const activity = useContext(ActivityContext);\r\n const businessNameRecommendationText = recommendationContext && recommendationContext.businessName && recommendationContext.businessName.Text;\r\n\r\n const [prevRecommendation, setPrevRecommendation] = useState();\r\n\r\n // handle prepopulate of store name on mount if there's no pre-existing business name\r\n useEffect(() => {\r\n if (!prepopulated) {\r\n setPrepopulated(true);\r\n if (storeName && !currentBusinessName) {\r\n updateValidation([], { BusinessName: storeName }, false /* shouldDirty */);\r\n\r\n if (activity) {\r\n activity.signal(`onBusinessNameChanged - name: ${storeName}`);\r\n }\r\n }\r\n }\r\n }, [prepopulated, storeName, currentBusinessName, updateValidation]);\r\n\r\n // triggered on recommendation change to populate recommendation if field is empty\r\n useEffect(() => {\r\n if (!prepopulated || prevRecommendation === businessNameRecommendationText) {\r\n // if we havn't yet prepopulated the business name, or if the recommendation hasn't changed, do nothing\r\n return;\r\n }\r\n\r\n // set the prev recommendation so we don't trigger this flow again\r\n setPrevRecommendation(businessNameRecommendationText);\r\n if (!currentBusinessName && businessNameRecommendationText) {\r\n updateValidation([], { BusinessName: businessNameRecommendationText }, false /* shouldDirty */);\r\n }\r\n }, [prepopulated, prevRecommendation, businessNameRecommendationText, currentBusinessName, updateValidation]);\r\n\r\n return (\r\n );\r\n};\r\n\r\nStoreBackedBusinessName.propTypes = {\r\n id: PropTypes.string,\r\n storeDetails: PropTypes.shape({\r\n name: PropTypes.string,\r\n }),\r\n i18n: PropTypes.shape({}).isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n BusinessName: PropTypes.string,\r\n }),\r\n }),\r\n updateValidation: PropTypes.func,\r\n recommendationContext: PropTypes.shape({\r\n businessName: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nStoreBackedBusinessName.defaultProps = {\r\n id: undefined,\r\n updateValidation: noop,\r\n storeDetails: undefined,\r\n validationProps: undefined,\r\n};\r\n\r\nexport const ValidatedStoreBackedBusinessName\r\n = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(withStoreFromProviderId(React.memo(StoreBackedBusinessName))))));\r\n","import { noop } from 'underscore';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { BusinessNameWithValidation } from '@bingads-webui-campaign-react/business-name';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\n\r\nconst BusinessNameMaxLength = 25;\r\n\r\nconst BusinessNameWithRecommendation = (props) => {\r\n const {\r\n id,\r\n i18n,\r\n validationProps,\r\n updateValidation,\r\n } = props;\r\n\r\n const { data } = validationProps;\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const currentBusinessName = (data && data.BusinessName) || '';\r\n const businessNameRecommendationText = recommendationContext && recommendationContext.businessName && recommendationContext.businessName.Text;\r\n const [prevRecommendation, setPrevRecommendation] = useState();\r\n\r\n // triggered on recommendation change to populate recommendation if field is empty\r\n useEffect(() => {\r\n if (prevRecommendation === businessNameRecommendationText) {\r\n // if we havn't yet prepopulated the business name, or if the recommendation hasn't changed, do nothing\r\n return;\r\n }\r\n\r\n // set the prev recommendation so we don't trigger this flow again\r\n setPrevRecommendation(businessNameRecommendationText);\r\n if (!currentBusinessName && businessNameRecommendationText) {\r\n updateValidation([], { BusinessName: businessNameRecommendationText }, false /* shouldDirty */);\r\n }\r\n }, [prevRecommendation, businessNameRecommendationText, currentBusinessName, updateValidation]);\r\n\r\n return (\r\n );\r\n};\r\n\r\nBusinessNameWithRecommendation.propTypes = {\r\n id: PropTypes.string,\r\n storeDetails: PropTypes.shape({\r\n name: PropTypes.string,\r\n }),\r\n i18n: PropTypes.shape({}).isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n BusinessName: PropTypes.string,\r\n }),\r\n }),\r\n updateValidation: PropTypes.func,\r\n recommendationContext: PropTypes.shape({\r\n businessName: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nBusinessNameWithRecommendation.defaultProps = {\r\n id: undefined,\r\n updateValidation: noop,\r\n storeDetails: undefined,\r\n validationProps: undefined,\r\n};\r\n\r\nexport const ValidatedBusinessNameWithRecommendation\r\n = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(React.memo(BusinessNameWithRecommendation)))));\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { andComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\n\r\nimport { ValidatedBusinessNameWithRecommendation } from './business-name-with-recommendation';\r\nimport BusinessNameImg from '../media/business-name.svg';\r\n\r\nconst getBusinessNameProp = (entity) => {\r\n const businessNameProp = andComp(entityIs(entity), propertyIs('BusinessName'));\r\n return businessNameProp;\r\n};\r\n\r\nexport const ValidatedBusinessNameWithRecommendationSection = React.memo((props) => {\r\n const {\r\n businessName, expand, entity, ...rest\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const nativeAdBusinessNameProp = useMemo(() => getBusinessNameProp(entity), [entity]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'business-name',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n});\r\n\r\nValidatedBusinessNameWithRecommendationSection.propTypes = {\r\n businessName: PropTypes.string.isRequired,\r\n entity: PropTypes.string.isRequired,\r\n expand: PropTypes.func.isRequired,\r\n};\r\n","import React, { useCallback, useState, useContext, useMemo } from 'react';\r\nimport { isArray, result, first, noop, difference } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Stack, Callout, DefaultButton } from '@bingads-webui-react/fluent-controls';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useEventLog } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { withFluentSwitcher } from '@bingads-webui-react/fluent-version-switcher';\r\nimport { ValidatedFinalUrl as ValidatedFinalUrlV1 } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { ValidatedFinalUrl as ValidatedFinalUrlV2 } from '@bingads-webui-campaign-react/validated-url-input-fluent-v2';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { getUrlPrefixAndDestination } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { getFinalUrlRecommendationsStyles } from './styles';\r\n\r\nconst FinalURlKey = 'FinalUrls';\r\n\r\nconst ValidatedFinalUrl = withFluentSwitcher(ValidatedFinalUrlV1, ValidatedFinalUrlV2);\r\n\r\nexport const ValidatedFinalUrlWithRecommendations= (props) => {\r\n const {\r\n updateValidation,\r\n validationProps,\r\n additionalProperties,\r\n i18n,\r\n enableUrlRecommendation,\r\n enableCopilotRecommendations,\r\n enableSpecialCharactersValidation,\r\n } = props;\r\n const classes = useDefaultStyles(getFinalUrlRecommendationsStyles);\r\n const createFinalUrlsViewModel = urls => ({ [FinalURlKey]: urls });\r\n const [showFinalUrlRecommendations, setShowFinalUrlRecommendations] = useState(false);\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n\r\n const { postAssetEventLog = noop, copilotTracking } = recommendationContext;\r\n const { logFinalUrlRecommendations } = useEventLog(postAssetEventLog);\r\n\r\n const logCopilotSuggestions = useCallback((suggestions) => {\r\n if (copilotTracking) {\r\n const suggestionsToLog = difference(suggestions, copilotTracking.trackingData.viewedSuggestions);\r\n if (suggestionsToLog.length > 0) {\r\n logFinalUrlRecommendations(suggestionsToLog);\r\n }\r\n copilotTracking.trackViewedSuggestionIds(suggestionsToLog);\r\n }\r\n }, [copilotTracking, logFinalUrlRecommendations]);\r\n\r\n const currentFinalUrlDestinationValue = useMemo(() => {\r\n const { data } = validationProps;\r\n const finalUrls = result(data, FinalURlKey, undefined);\r\n const [, dest] = getUrlPrefixAndDestination(first(finalUrls));\r\n return dest;\r\n }, [validationProps]);\r\n\r\n const onClickOrChangeHandler = useCallback(() => {\r\n setShowFinalUrlRecommendations(isArray(recommendationContext.finalUrls) && recommendationContext.finalUrls.length > 0);\r\n }, [recommendationContext.finalUrls]);\r\n\r\n const onDismissFinalUrlRecommendations = useCallback(() => {\r\n setShowFinalUrlRecommendations(false);\r\n }, []);\r\n\r\n const applyRecommendation = useCallback((finalUrlRecommendation) => {\r\n updateValidation([], createFinalUrlsViewModel([finalUrlRecommendation]));\r\n onDismissFinalUrlRecommendations();\r\n }, [onDismissFinalUrlRecommendations, updateValidation]);\r\n\r\n const renderRecommendations = useCallback(() => {\r\n const filteredRecommendations = recommendationContext.finalUrls.filter((recommendation) => {\r\n const [, recommendationDestination] = getUrlPrefixAndDestination(recommendation);\r\n\r\n return recommendationDestination.toLowerCase().startsWith(currentFinalUrlDestinationValue.toLowerCase());\r\n });\r\n\r\n if (filteredRecommendations.length === 0) {\r\n return null;\r\n }\r\n if (enableCopilotRecommendations) {\r\n logCopilotSuggestions(filteredRecommendations);\r\n }\r\n\r\n return (\r\n
\r\n \r\n {i18n.getString(_TL_('Recommended Final URL'))}\r\n {filteredRecommendations.map(finalUrlRecommendation => applyRecommendation(finalUrlRecommendation)}>{finalUrlRecommendation})}\r\n \r\n
);\r\n }, [recommendationContext.finalUrls, enableCopilotRecommendations, classes.TextFinalUrlRecommendationsContent, i18n, currentFinalUrlDestinationValue, logCopilotSuggestions, applyRecommendation]);\r\n\r\n return (\r\n \r\n \r\n {enableUrlRecommendation && showFinalUrlRecommendations &&\r\n \r\n {renderRecommendations()}\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nValidatedFinalUrlWithRecommendations.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n updateOnMount: PropTypes.bool,\r\n }).isRequired,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n enableUrlRecommendation: PropTypes.bool,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n additionalProperties: PropTypes.shape({}),\r\n};\r\n\r\nValidatedFinalUrlWithRecommendations.defaultProps = {\r\n additionalProperties: {},\r\n enableCopilotRecommendations: true,\r\n enableUrlRecommendation: true,\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport { isFunction, noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withFinalUrlRecommendationUpdate } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n Collapse,\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedFixedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { entityIs, andComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\n\r\nimport { ValidatedFinalUrlWithRecommendations } from './validated-final-url-with-recommendations';\r\nimport FinalUrlImg from '../media/final-url.svg';\r\n\r\nconst getServerValidatedFinalUrl = (entity) => {\r\n const finalUrlsProp = andComp(entityIs(entity), propertyIs('FinalUrls'));\r\n const ValidatedFinalUrlWithStoreURL = withError(withCustomValidation(withFinalUrlRecommendationUpdate(ValidatedFinalUrlWithRecommendations)));\r\n const ServerValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedFinalUrlWithStoreURL, { filter: finalUrlsProp }));\r\n return ServerValidatedFinalUrl;\r\n};\r\n\r\nconst finalUrl = 'final-url';\r\nconst finalUrlSection = [finalUrl];\r\n\r\nexport const ValidatedFinalUrlWithRecommendationsSection = (props) => {\r\n const {\r\n customUrlProtocol,\r\n finalUrls,\r\n onFinalURLFocusOut,\r\n onFinalURLEnterKeyUp,\r\n entity,\r\n enableCopilotRecommendations,\r\n enableUrlRecommendation,\r\n } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n const ServerValidatedFinalUrl = useMemo(() => getServerValidatedFinalUrl(entity), [entity]);\r\n\r\n const finalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n FinalUrls: finalUrls,\r\n },\r\n initialValue: {\r\n FinalUrls: finalUrls,\r\n },\r\n debounce: 700,\r\n }), [finalUrls]);\r\n\r\n const onKeyUp = useMemo(() => {\r\n if (!isFunction(onFinalURLEnterKeyUp)) {\r\n return undefined;\r\n }\r\n\r\n return (keyboardEvent) => {\r\n if (keyboardEvent.key === 'Enter') {\r\n onFinalURLEnterKeyUp();\r\n }\r\n };\r\n }, [onFinalURLEnterKeyUp]);\r\n\r\n return (\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nValidatedFinalUrlWithRecommendationsSection.propTypes = {\r\n entity: PropTypes.string,\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n onFinalURLEnterKeyUp: PropTypes.func,\r\n permissions: PropTypes.shape({}).isRequired,\r\n finalUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n customUrlProtocol: PropTypes.bool,\r\n enableUrlRecommendation: PropTypes.bool,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n};\r\n\r\nValidatedFinalUrlWithRecommendationsSection.defaultProps = {\r\n customUrlProtocol: false,\r\n entity: 'ResponsiveAd',\r\n enableUrlRecommendation: true,\r\n enableCopilotRecommendations: true,\r\n onFinalURLEnterKeyUp: undefined,\r\n};\r\n","\r\nimport { featureConfigMapping } from './pmax-text-asset-collection-config';\r\n\r\nexport const getTextAssetCollectionConfigByFeature = ({\r\n featureName,\r\n}) => featureConfigMapping[featureName];\r\n","import React, { useContext, useMemo, useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextAssetCollectionWithRecommendations } from './text-asset-collection-with-recommendations';\r\nimport { getTextAssetCollectionConfig } from './pmax-text-asset-collection-config';\r\nimport { getTextAssetCollectionConfigByFeature } from './utils';\r\n\r\nexport const DescriptionAssetCollection = React.memo((props) => {\r\n const {\r\n featureName, enableCopilotRecommendations, enableCustomizer, isOptional, withDeleteIconDisabled, showDeleteButton, renderInlineCopilot, setAddNewDescriptionCallback, onFocusTextAsset, onDeleteTextAsset, onApplyRecommendation,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const textAssetCollectionConfig = useMemo(() => getTextAssetCollectionConfigByFeature({ featureName }), [featureName]);\r\n\r\n const descriptionsConfig = useMemo(() => getTextAssetCollectionConfig('descriptions', i18n, textAssetCollectionConfig), [i18n, textAssetCollectionConfig]);\r\n const addNewHeadlinesCallback = useRef(noop);\r\n\r\n useEffect(() => {\r\n if (setAddNewDescriptionCallback) {\r\n setAddNewDescriptionCallback(() => (recommendations) => {\r\n addNewHeadlinesCallback.current(recommendations);\r\n });\r\n }\r\n }, [setAddNewDescriptionCallback]);\r\n\r\n return (\r\n
\r\n { addNewHeadlinesCallback.current = callback; }}\r\n enableCopilotRecommendations={enableCopilotRecommendations}\r\n enableCustomizer={enableCustomizer}\r\n withDeleteIconDisabled={withDeleteIconDisabled}\r\n />\r\n
);\r\n});\r\n\r\nDescriptionAssetCollection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n showDeleteButton: PropTypes.bool,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n renderInlineCopilot: PropTypes.func,\r\n setAddNewDescriptionCallback: PropTypes.func,\r\n onFocusTextAsset: PropTypes.func,\r\n featureName: PropTypes.string,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n enableCustomizer: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n};\r\n\r\nDescriptionAssetCollection.defaultProps = {\r\n isOptional: false,\r\n showDeleteButton: false,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n renderInlineCopilot: null,\r\n setAddNewDescriptionCallback: null,\r\n onFocusTextAsset: noop,\r\n featureName: undefined,\r\n enableCopilotRecommendations: true,\r\n enableCustomizer: false,\r\n withDeleteIconDisabled: true,\r\n};\r\n","import React, { useContext, useMemo, useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextAssetCollectionWithRecommendations } from './text-asset-collection-with-recommendations';\r\nimport { getTextAssetCollectionConfig } from './pmax-text-asset-collection-config';\r\nimport { getTextAssetCollectionConfigByFeature } from './utils';\r\n\r\nexport const HeadlineAssetCollection = React.memo((props) => {\r\n const {\r\n featureName,\r\n enableCopilotRecommendations,\r\n enableCustomizer,\r\n isOptional,\r\n showDeleteButton,\r\n renderInlineCopilot,\r\n setAddNewShortHeadlinesCallback,\r\n onFocusTextAsset,\r\n onDeleteTextAsset,\r\n onApplyRecommendation,\r\n isAudienceAd,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const textAssetCollectionConfig = useMemo(() => getTextAssetCollectionConfigByFeature({ featureName }), [featureName]);\r\n\r\n const headlineConfig = useMemo(() => getTextAssetCollectionConfig('headlines', i18n, textAssetCollectionConfig), [i18n, textAssetCollectionConfig]);\r\n const addNewHeadlinesCallback = useRef(noop);\r\n\r\n useEffect(() => {\r\n if (setAddNewShortHeadlinesCallback) {\r\n setAddNewShortHeadlinesCallback(() => (recommendations, replaceExistingAssets) => {\r\n addNewHeadlinesCallback.current(recommendations, replaceExistingAssets);\r\n });\r\n }\r\n }, [setAddNewShortHeadlinesCallback]);\r\n\r\n return (\r\n
\r\n { addNewHeadlinesCallback.current = callback; }}\r\n enableCopilotRecommendations={enableCopilotRecommendations}\r\n enableCustomizer={enableCustomizer}\r\n withDeleteIconDisabled\r\n isAudienceAd={isAudienceAd}\r\n />\r\n
);\r\n});\r\n\r\nHeadlineAssetCollection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n showDeleteButton: PropTypes.bool,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n renderInlineCopilot: PropTypes.func,\r\n setAddNewShortHeadlinesCallback: PropTypes.func,\r\n onFocusTextAsset: PropTypes.func,\r\n featureName: PropTypes.string,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n enableCustomizer: PropTypes.bool,\r\n isAudienceAd: PropTypes.bool,\r\n};\r\n\r\nHeadlineAssetCollection.defaultProps = {\r\n isOptional: false,\r\n showDeleteButton: false,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n renderInlineCopilot: null,\r\n setAddNewShortHeadlinesCallback: null,\r\n onFocusTextAsset: noop,\r\n featureName: undefined,\r\n enableCopilotRecommendations: true,\r\n enableCustomizer: false,\r\n isAudienceAd: false,\r\n};\r\n","import React, { useContext, useMemo, useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextAssetCollectionWithRecommendations } from './text-asset-collection-with-recommendations';\r\nimport { getTextAssetCollectionConfig } from './pmax-text-asset-collection-config';\r\nimport { getTextAssetCollectionConfigByFeature } from './utils';\r\n\r\nexport const LongHeadlineAssetCollection = React.memo((props) => {\r\n const {\r\n featureName, enableCopilotRecommendations, enableCustomizer, isOptional, withDeleteIconDisabled, showDeleteButton, renderInlineCopilot, setAddNewLongHeadlinesCallback, onFocusTextAsset, onDeleteTextAsset, onApplyRecommendation,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const textAssetCollectionConfig = useMemo(() => getTextAssetCollectionConfigByFeature({ featureName }), [featureName]);\r\n\r\n const longHeadlineConfig = useMemo(() => getTextAssetCollectionConfig('longHeadlines', i18n, textAssetCollectionConfig), [i18n, textAssetCollectionConfig]);\r\n\r\n const addNewHeadlinesCallback = useRef(noop);\r\n\r\n useEffect(() => {\r\n if (setAddNewLongHeadlinesCallback) {\r\n setAddNewLongHeadlinesCallback(() => (recommendations) => {\r\n addNewHeadlinesCallback.current(recommendations);\r\n });\r\n }\r\n }, [setAddNewLongHeadlinesCallback]);\r\n\r\n return (\r\n
\r\n { addNewHeadlinesCallback.current = callback; }}\r\n enableCopilotRecommendations={enableCopilotRecommendations}\r\n enableCustomizer={enableCustomizer}\r\n withDeleteIconDisabled={withDeleteIconDisabled}\r\n />\r\n
);\r\n});\r\n\r\nLongHeadlineAssetCollection.propTypes = {\r\n isLite: PropTypes.bool,\r\n isOptional: PropTypes.bool,\r\n showDeleteButton: PropTypes.bool,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n renderInlineCopilot: PropTypes.func,\r\n setAddNewLongHeadlinesCallback: PropTypes.func,\r\n onFocusTextAsset: PropTypes.func,\r\n featureName: PropTypes.string,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n enableCustomizer: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n};\r\n\r\nLongHeadlineAssetCollection.defaultProps = {\r\n isLite: false,\r\n isOptional: false,\r\n showDeleteButton: false,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n renderInlineCopilot: null,\r\n setAddNewLongHeadlinesCallback: null,\r\n onFocusTextAsset: noop,\r\n featureName: undefined,\r\n enableCopilotRecommendations: true,\r\n enableCustomizer: false,\r\n withDeleteIconDisabled: true,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getDescriptionsCardSummaryDetails } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport { DescriptionAssetCollection } from './description-asset-collection';\r\nimport TextAssetsImg from '../media/text-assets.svg';\r\n\r\nexport const DescriptionAssetCollectionSection = React.memo((props) => {\r\n const {\r\n featureName, enableCopilotRecommendations, descriptions, expand, setAddNewDescriptionCallback, enableCustomizer, ...rest\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const descriptionsCardSummaryDetails = useMemo(() => getDescriptionsCardSummaryDetails(i18n, descriptions), [descriptions, i18n]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'descriptions',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n});\r\n\r\nDescriptionAssetCollectionSection.propTypes = {\r\n featureName: PropTypes.string,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n descriptions: PropTypes.shape({}).isRequired,\r\n expand: PropTypes.func.isRequired,\r\n setAddNewDescriptionCallback: PropTypes.func.isRequired,\r\n enableCustomizer: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n};\r\n\r\nDescriptionAssetCollectionSection.defaultProps = {\r\n featureName: undefined,\r\n enableCopilotRecommendations: true,\r\n enableCustomizer: true,\r\n withDeleteIconDisabled: true,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getHeadlinesCardSummaryDetails } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport { HeadlineAssetCollection } from './headline-asset-collection';\r\nimport TextAssetsImg from '../media/text-assets.svg';\r\n\r\nexport const HeadlineAssetCollectionSection = React.memo((props) => {\r\n const {\r\n featureName, enableCopilotRecommendations, headlines, expand, setAddNewShortHeadlinesCallback, enableCustomizer, ...rest\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const headlinesCardSummaryDetails = useMemo(() => getHeadlinesCardSummaryDetails(i18n, headlines), [headlines, i18n]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'headlines',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n});\r\n\r\nHeadlineAssetCollectionSection.propTypes = {\r\n featureName: PropTypes.string,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n headlines: PropTypes.shape({}).isRequired,\r\n expand: PropTypes.func.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n enableCustomizer: PropTypes.bool,\r\n};\r\n\r\nHeadlineAssetCollectionSection.defaultProps = {\r\n featureName: undefined,\r\n enableCopilotRecommendations: true,\r\n enableCustomizer: true,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getLongHeadlinesCardSummaryDetails } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport { LongHeadlineAssetCollection } from './long-headline-asset-collection';\r\nimport TextAssetsImg from '../media/text-assets.svg';\r\n\r\nexport const LongHeadlineAssetCollectionSection = React.memo((props) => {\r\n const {\r\n featureName, enableCopilotRecommendations, longHeadlines, expand, isOptional, setAddNewLongHeadlinesCallback, enableCustomizer, ...rest\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const longHeadlinesCardSummaryDetails = useMemo(() => getLongHeadlinesCardSummaryDetails(i18n, longHeadlines), [longHeadlines, i18n]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'long-headlines',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n});\r\n\r\nLongHeadlineAssetCollectionSection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n featureName: PropTypes.string,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n longHeadlines: PropTypes.shape({}).isRequired,\r\n expand: PropTypes.func.isRequired,\r\n setAddNewLongHeadlinesCallback: PropTypes.func.isRequired,\r\n enableCustomizer: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n};\r\n\r\nLongHeadlineAssetCollectionSection.defaultProps = {\r\n isOptional: false,\r\n featureName: undefined,\r\n enableCopilotRecommendations: true,\r\n enableCustomizer: true,\r\n withDeleteIconDisabled: true,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport odataSchemas from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { Label } from '@bingads-webui-react/primitive';\r\nimport { ValidationGroup, Input } from '@bingads-webui-react/primitive-validation';\r\n\r\nconst schema = odataSchemas.PortfolioBidStrategy;\r\n\r\nfunction getStyles() {\r\n return {\r\n nameInput: {\r\n width: '320px',\r\n '& div[role=alert]': {\r\n color: '#a4262c',\r\n paddingTop: 5,\r\n fontSize: 12, // If not set, the default font size is 14px\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction PortfolioNameInput(props) {\r\n const {\r\n classes, i18n, name, showValidationError,\r\n } = props;\r\n\r\n function onChange(result) {\r\n props.onValidate(result.isValid);\r\n props.onChangeName(result.data.Name);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nPortfolioNameInput.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n classes: PropTypes.shape({}).isRequired,\r\n name: PropTypes.string.isRequired,\r\n onChangeName: PropTypes.func.isRequired,\r\n onValidate: PropTypes.func.isRequired,\r\n showValidationError: PropTypes.bool,\r\n};\r\n\r\nPortfolioNameInput.defaultProps = {\r\n showValidationError: false,\r\n};\r\n\r\nconst Wrapped = _.compose(\r\n withI18nConsumer,\r\n Comp => withDefaultStyles(Comp, getStyles)\r\n)(PortfolioNameInput);\r\n\r\nexport { Wrapped as PortfolioNameInput };\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Dropdown } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { i18nMap } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\n\r\nconst { supportedBidStrategyTypeWithPilot, portfolioBidStrategyTypeWithPilot } = i18nMap;\r\n\r\nfunction getErrorMessage(portfolioType) {\r\n if (_.isEmpty(portfolioType)) {\r\n return _TL_(\"You haven't selected any portfolio bid strategy type.\");\r\n }\r\n\r\n return _TL_('');\r\n}\r\n\r\nexport function validator(portfolioType) {\r\n return _.isEmpty(getErrorMessage(portfolioType));\r\n}\r\n\r\nfunction getStyles() {\r\n return {\r\n portfolioBidStrategyTypeDropdown: {\r\n width: '320px',\r\n marginBottom: '16px',\r\n },\r\n };\r\n}\r\n\r\nfunction PortfolioBidStrategyTypeDropdown(props) {\r\n const {\r\n classes, campaignType, portfolioType, showValidationError, permissions,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const bidStrategyType = portfolioBidStrategyTypeWithPilot(permissions);\r\n const supportedBidStrategyType = supportedBidStrategyTypeWithPilot(permissions);\r\n\r\n const options = _.map(bidStrategyType, (text, key) => ({\r\n key,\r\n text: i18n.getString(text),\r\n title: i18n.getString(text),\r\n disabled: (campaignType in supportedBidStrategyType) && !supportedBidStrategyType[campaignType][key],\r\n }));\r\n const errorMessage = showValidationError ? i18n.getString(getErrorMessage(portfolioType)) : '';\r\n\r\n function onChange(event, item) {\r\n props.onSelectPortfolioType(item.key);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nPortfolioBidStrategyTypeDropdown.propTypes = {\r\n classes: PropTypes.shape({}).isRequired,\r\n portfolioType: PropTypes.string,\r\n campaignType: PropTypes.string.isRequired,\r\n onSelectPortfolioType: PropTypes.func.isRequired,\r\n showValidationError: PropTypes.bool,\r\n permissions: PropTypes.shape({}),\r\n};\r\n\r\nPortfolioBidStrategyTypeDropdown.defaultProps = {\r\n portfolioType: '',\r\n showValidationError: false,\r\n permissions: {},\r\n};\r\n\r\nconst Wrapped = withDefaultStyles(PortfolioBidStrategyTypeDropdown, getStyles);\r\nexport { Wrapped as PortfolioTypeDropdown };\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Dropdown, Stack, Label } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { i18nMap } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport { HelpIcon } from '@bingads-webui-campaign-react/help';\r\n\r\nconst { supportedBidStrategyTypeWithPilot, portfolioCampaignType } = i18nMap;\r\n\r\nfunction getErrorMessage(campaignType) {\r\n if (_.isEmpty(campaignType)) {\r\n return _TL_(\"You haven't selected any campaign type.\");\r\n }\r\n\r\n return _TL_('');\r\n}\r\n\r\nexport function validator(campaignType) {\r\n return _.isEmpty(getErrorMessage(campaignType));\r\n}\r\n\r\nfunction getStyles() {\r\n return {\r\n campaignTypeDropdown: {\r\n width: '320px',\r\n marginTop: '16px',\r\n },\r\n };\r\n}\r\n\r\nfunction onRenderLabel({ label }) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nonRenderLabel.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n};\r\n\r\nfunction PortfolioCampaignTypeDropdown(props) {\r\n const {\r\n classes, campaignType, portfolioType, showValidationError, readonly, permissions,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const supportedBidStrategyType = supportedBidStrategyTypeWithPilot(permissions);\r\n\r\n const options = _.map(portfolioCampaignType, (text, key) => ({\r\n key,\r\n text: i18n.getString(text),\r\n title: i18n.getString(text),\r\n disabled: (portfolioType in supportedBidStrategyType[key]) && !supportedBidStrategyType[key][portfolioType],\r\n }));\r\n const errorMessage = showValidationError ? i18n.getString(getErrorMessage(campaignType)) : '';\r\n\r\n function onChange(event, item) {\r\n props.onSelectCampaignType(item.key);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nPortfolioCampaignTypeDropdown.propTypes = {\r\n classes: PropTypes.shape({}).isRequired,\r\n campaignType: PropTypes.string,\r\n portfolioType: PropTypes.string.isRequired,\r\n onSelectCampaignType: PropTypes.func.isRequired,\r\n showValidationError: PropTypes.bool,\r\n readonly: PropTypes.bool,\r\n permissions: PropTypes.shape({}),\r\n};\r\n\r\nPortfolioCampaignTypeDropdown.defaultProps = {\r\n campaignType: '',\r\n showValidationError: false,\r\n readonly: false,\r\n permissions: {},\r\n};\r\n\r\nconst Wrapped = withDefaultStyles(PortfolioCampaignTypeDropdown, getStyles);\r\nexport { Wrapped as PortfolioCampaignTypeDropdown };\r\n","/* eslint-disable jsx-a11y/label-has-for */\r\nimport React, { useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { withLegacyDeps } from '@bingads-webui-campaign-react/legacy-deps-context';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { CampaignSelector } from '@bingads-webui-campaign-react/campaign-selector';\r\nimport { i18nMap, Error } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport { campaignMultiSelectorWithoutDropdownStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Dialog, DialogType, DialogFooter, PrimaryButton, DefaultButton } from '@bingads-webui-react/fabric-control';\r\n// import { notificationApi } from '@bingads-webui-react/notification-center';\r\n\r\nconst { portfolioCampaignTypeToODataFilter, individualBidStrategyType, budgetType } = i18nMap;\r\n\r\nconst PAGE_SIZE = 20;\r\n\r\nfunction getStyles(dummy, { palette = {} }) {\r\n const textOverflowStyle = {\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n };\r\n\r\n return {\r\n campaignSelector: {\r\n ...campaignMultiSelectorWithoutDropdownStyle({ palette }),\r\n '& .ba-campaign-selector .multi-selector-content > .ba-entity-selector': {\r\n minWidth: 600,\r\n },\r\n marginTop: 16,\r\n position: 'relative',\r\n },\r\n rowItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: 8,\r\n maxWidth: 'unset !important',\r\n },\r\n campaignNameColumn: {\r\n width: 300,\r\n marginRight: 10,\r\n ...textOverflowStyle,\r\n },\r\n bidStrategyColumn: {\r\n width: 180,\r\n marginRight: 10,\r\n ...textOverflowStyle,\r\n },\r\n budgetColumn: {\r\n width: 100,\r\n marginRight: 25, // Avoid overlap with the + icon\r\n ...textOverflowStyle,\r\n },\r\n budgetNameCell: {\r\n ...textOverflowStyle,\r\n },\r\n arrowIcon: {\r\n marginLeft: '0 !important',\r\n marginRight: '0 !important',\r\n },\r\n selectionCount: {\r\n position: 'absolute',\r\n top: 36,\r\n left: 9,\r\n background: '#fff',\r\n pointerEvents: 'none',\r\n },\r\n };\r\n}\r\n\r\nfunction getErrorMessage(/* selectedCampaigns */) {\r\n // We allow creating an empty portfolio without any campaigns\r\n // if (_.isEmpty(selectedCampaigns)) {\r\n // return _TL_(\"You haven't selected any campaigns.\");\r\n // }\r\n\r\n return _TL_('');\r\n}\r\n\r\nexport function validator(selectedCampaigns) {\r\n return _.isEmpty(getErrorMessage(selectedCampaigns));\r\n}\r\n\r\nfunction renderHeaderFactory({ classes, i18n, isSelected }) {\r\n return function renderHeader(itemCount) {\r\n return (\r\n
\r\n
\r\n \r\n {`${i18n.getString(isSelected ? _TL_('Selected campaigns:') : _TL_('Campaigns:'))} ${itemCount}`}\r\n \r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Bid strategy'))}\r\n \r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Budget'))}\r\n \r\n
\r\n
\r\n );\r\n };\r\n}\r\n\r\nfunction renderItemFactory({ classes, i18n, isSelected }) {\r\n return function renderItem(item, index, forwardedRef) {\r\n const { isAddedToResultList } = item;\r\n const rowItemClass = isAddedToResultList ? 'added-to-result-list' : '';\r\n const addIconClass = isAddedToResultList ? 'disabled' : 'enabled';\r\n\r\n return (\r\n
\r\n
\r\n {item.name}\r\n
\r\n
\r\n {individualBidStrategyType[item.BiddingScheme.Type] ?\r\n i18n.getString(individualBidStrategyType[item.BiddingScheme.Type]) :\r\n item.BiddingScheme.Type\r\n }\r\n
\r\n
\r\n
\r\n {item.Budget.Name}\r\n
\r\n
\r\n {i18n.formatDecimalToFixed(item.Budget.Amount)}\r\n /\r\n {budgetType[item.Budget.Type] ?\r\n i18n.getString(budgetType[item.Budget.Type]) :\r\n item.Budget.Type\r\n }\r\n
\r\n
\r\n {isSelected ?\r\n :\r\n \r\n }\r\n
\r\n );\r\n };\r\n}\r\n\r\n\r\nfunction PortfolioCampaignSelector(props) {\r\n const {\r\n classes, i18n,\r\n legacyDeps: { jsdata },\r\n campaignType,\r\n selectedCampaigns,\r\n showValidationError,\r\n } = props;\r\n\r\n const [showSharedBudgetAlert, setSharedBudgetAlert] = useState(false);\r\n\r\n const selectorRef = useRef(null);\r\n\r\n const errorMessage = showValidationError ? i18n.getString(getErrorMessage(selectedCampaigns)) : '';\r\n\r\n function fetchCampaigns({\r\n pageNumber,\r\n pageSize,\r\n query,\r\n }) {\r\n const odataParams = {\r\n select: ['Id', 'Name', 'BiddingScheme'],\r\n limit: pageSize,\r\n offset: pageNumber * pageSize,\r\n where: {\r\n ...portfolioCampaignTypeToODataFilter[campaignType],\r\n },\r\n };\r\n\r\n if (query) {\r\n odataParams.where = {\r\n $and: [\r\n odataParams.where,\r\n {\r\n Name: { $contains: query },\r\n },\r\n ],\r\n };\r\n }\r\n\r\n return jsdata.Campaign.findAll(odataParams)\r\n .then((cmps) => {\r\n const { totalCount } = cmps;\r\n const items = _.map(cmps, cmp => ({\r\n Id: cmp.Id,\r\n name: cmp.Name,\r\n BiddingScheme: cmp.BiddingScheme,\r\n Budget: cmp.Budget,\r\n }));\r\n\r\n return {\r\n items,\r\n totalCount,\r\n };\r\n })\r\n .catch(() =>\r\n // notificationApi.showWarning(localizeApiError(error, i18n));\r\n\r\n ({\r\n items: [],\r\n totalCount: 0,\r\n }));\r\n }\r\n\r\n function saveSelection(items) {\r\n props.onSelectCampaigns(items);\r\n }\r\n\r\n function onSelectDone(items) {\r\n const hasSharedBudget = _.any(items, ({ Budget }) => Budget.Id > 0);\r\n\r\n if (hasSharedBudget) {\r\n setSharedBudgetAlert(true);\r\n selectorRef.current.setState({ isToggled: true });\r\n }\r\n\r\n saveSelection(items);\r\n }\r\n\r\n function onSelectCancel() {\r\n // Nothing to do\r\n }\r\n\r\n function onDismissDialog() {\r\n setSharedBudgetAlert(false);\r\n selectorRef.current.setState({ isToggled: true });\r\n }\r\n\r\n function onConfirmDialog() {\r\n setSharedBudgetAlert(false);\r\n selectorRef.current.setState({ isToggled: false });\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {\r\n selectedCampaigns.length > 0 &&\r\n
\r\n {i18n.getString(_TL_('{{count}} campaign(s) selected'), { count: selectedCampaigns.length })}\r\n
\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nPortfolioCampaignSelector.propTypes = {\r\n classes: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n legacyDeps: PropTypes.shape({}).isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n selectedCampaigns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onSelectCampaigns: PropTypes.func.isRequired,\r\n showValidationError: PropTypes.bool,\r\n};\r\n\r\nPortfolioCampaignSelector.defaultProps = {\r\n showValidationError: PropTypes.false,\r\n};\r\n\r\nconst Wrapped = _.compose(\r\n React.memo,\r\n withLegacyDeps,\r\n withI18nConsumer,\r\n Comp => withDefaultStyles(Comp, getStyles)\r\n)(PortfolioCampaignSelector);\r\n\r\nexport { Wrapped as PortfolioCampaignSelector };\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { BackboneInstanceWrapper } from '@bingads-webui-react/backbone-instance-wrapper';\r\nimport { withLegacyDeps } from '@bingads-webui-campaign-react/legacy-deps-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { i18nMap } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\n\r\nconst { portfolioCampaignTypeDefaultValue, portfolioCampaignTypeToUIValue } = i18nMap;\r\n\r\nfunction getStyles() {\r\n return {\r\n additionalSettings: {\r\n marginTop: 16,\r\n '& .bid-strategy-details-container': {\r\n '& > .control-label': {\r\n float: 'none',\r\n padding: 0,\r\n width: '100%',\r\n '& > span': {\r\n display: 'flex', // align help icon with text\r\n },\r\n },\r\n '& > .col-sm-6': {\r\n float: 'none',\r\n padding: 0,\r\n width: '100%',\r\n '#setTargetRoasBidError': {\r\n maxWidth: 600,\r\n },\r\n '& .builkEdit-bid.custom-param__key-field, & .target-impression-share-percent-field': {\r\n display: 'inline-block',\r\n width: 85,\r\n marginLeft: 5,\r\n marginRight: 5,\r\n },\r\n '& .max-cpc-container': {\r\n '& > label': {\r\n display: 'inline-block',\r\n verticalAlign: '-2px', // align help icon with text\r\n },\r\n '& .max-cpc-input-row': {\r\n marginLeft: 0,\r\n marginRight: 0,\r\n '& > .col-sm-3.input-group': {\r\n width: 125,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n '& div[role=alert]': {\r\n color: '#a4262c',\r\n paddingTop: 5,\r\n fontSize: 12, // If not set, the default font size is 14px\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction PortfolioAdditionalSettings(props) {\r\n const {\r\n classes,\r\n legacyDeps: { BiddingStrategyView },\r\n portfolioType,\r\n campaignType,\r\n additionalSettings: {\r\n maxCpc,\r\n targetCpa,\r\n targetRoas,\r\n targetAdPosition,\r\n targetImpressionShare,\r\n },\r\n biddingStrategyView,\r\n injectBiddingStrategyView,\r\n } = props;\r\n\r\n const translatedCampaignType = portfolioCampaignTypeToUIValue[campaignType];\r\n\r\n useEffect(() => {\r\n const view = new BiddingStrategyView({\r\n isPortfolio: true,\r\n biddingStrategyType: portfolioType,\r\n campaignType: translatedCampaignType,\r\n maxCpc,\r\n targetCpa,\r\n targetRoas,\r\n targetAdPosition,\r\n targetImpressionShare,\r\n });\r\n view.render();\r\n injectBiddingStrategyView(view);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [campaignType]);\r\n\r\n return (\r\n
\r\n { biddingStrategyView &&\r\n }\r\n
\r\n );\r\n}\r\n\r\nPortfolioAdditionalSettings.propTypes = {\r\n classes: PropTypes.shape({}).isRequired,\r\n legacyDeps: PropTypes.shape({}).isRequired,\r\n portfolioType: PropTypes.string.isRequired,\r\n campaignType: PropTypes.string,\r\n additionalSettings: PropTypes.shape({}),\r\n biddingStrategyView: PropTypes.shape({}),\r\n injectBiddingStrategyView: PropTypes.func.isRequired,\r\n};\r\n\r\nPortfolioAdditionalSettings.defaultProps = {\r\n campaignType: portfolioCampaignTypeDefaultValue,\r\n additionalSettings: {},\r\n biddingStrategyView: undefined,\r\n};\r\n\r\nconst Wrapped = _.compose(\r\n React.memo,\r\n Comp => withDefaultStyles(Comp, getStyles),\r\n withLegacyDeps\r\n)(PortfolioAdditionalSettings);\r\n\r\nexport { Wrapped as PortfolioAdditionalSettings };\r\n","import _ from 'underscore';\r\n\r\nconst keyMapping = {\r\n MaxCpc: 'maxCpc',\r\n TargetAdPosition: 'targetAdPosition',\r\n TargetCpa: 'targetCpa',\r\n TargetImpressionShare: 'targetImpressionShare',\r\n TargetRoas: 'targetRoas',\r\n};\r\n\r\nconst valueMapping = {\r\n MaxCpc: apiValue => _.result(apiValue, 'Amount'),\r\n TargetAdPosition: _.identity,\r\n TargetCpa: _.identity,\r\n TargetImpressionShare: _.identity,\r\n TargetRoas: _.identity,\r\n};\r\n\r\nconst allowList = _.keys(keyMapping);\r\n\r\nexport function additionalSettingsToUI(apiObject) {\r\n const result = _.chain(apiObject)\r\n .pick(...allowList)\r\n .pairs()\r\n .map(([key, value]) => {\r\n const newKey = keyMapping[key];\r\n const newValue = valueMapping[key](value);\r\n return [newKey, newValue];\r\n })\r\n .object()\r\n .value();\r\n\r\n return result;\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst PanelComponentArray = ['Header', 'PortfolioTypeDropdown', 'PortfolioNameInput', 'CampaignTypeDropdown', 'CampaignSelector'];\r\n\r\nconst PanelComponent = _.object(PanelComponentArray, PanelComponentArray);\r\n\r\nconst DisplayModeArray = ['CreationPanel', 'UpdatePanel', 'CreationDialog', 'BulkEdit'];\r\n\r\nconst DisplayMode = _.object(DisplayModeArray, DisplayModeArray);\r\n\r\nconst DisplayModeToComponentsMapping = {\r\n [DisplayMode.CreationPanel]: [\r\n PanelComponent.Header,\r\n PanelComponent.PortfolioNameInput,\r\n PanelComponent.CampaignTypeDropdown,\r\n PanelComponent.CampaignSelector,\r\n ],\r\n [DisplayMode.UpdatePanel]: [\r\n PanelComponent.Header,\r\n PanelComponent.PortfolioNameInput,\r\n PanelComponent.CampaignTypeDropdown,\r\n ],\r\n [DisplayMode.CreationDialog]: [\r\n PanelComponent.PortfolioTypeDropdown,\r\n PanelComponent.PortfolioNameInput,\r\n ],\r\n [DisplayMode.BulkEdit]: [\r\n PanelComponent.PortfolioTypeDropdown,\r\n PanelComponent.PortfolioNameInput,\r\n PanelComponent.CampaignTypeDropdown,\r\n ],\r\n};\r\n\r\nexport { PanelComponent, DisplayMode, DisplayModeToComponentsMapping };\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { DefaultButton, PrimaryButton } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyDepsContext } from '@bingads-webui-campaign-react/legacy-deps-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getEntityFromScope } from '@bingads-webui/edm-campaign';\r\nimport { localizeApiError, Error as ErrorComponent, UiBlocker, i18nMap } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { PortfolioNameInput } from './portfolio-name-input';\r\nimport { PortfolioTypeDropdown, validator as validatePortfolioType } from './portfolio-type-dropdown';\r\nimport { PortfolioCampaignTypeDropdown, validator as validateCampaignType } from './portfolio-campaign-type-dropdown';\r\nimport { PortfolioCampaignSelector, validator as validateCampaigns } from './portfolio-campaign-selector';\r\nimport { PortfolioAdditionalSettings } from './portfolio-additional-settings';\r\nimport { additionalSettingsToUI } from './additional-settings-helper';\r\nimport { DisplayMode, DisplayModeToComponentsMapping, PanelComponent } from './portfolio-panel-display-mode';\r\n\r\nconst {\r\n portfolioCampaignTypeToBulkUpsertValue,\r\n portfolioCampaignTypeFromODataValue,\r\n portfolioCampaignTypeDefaultValue,\r\n} = i18nMap;\r\n\r\n// only export for test\r\nexport function validateProps(props) {\r\n switch (props.displayMode) {\r\n case DisplayMode.CreationPanel:\r\n if (!props.portfolioType) {\r\n throw new Error('When create portoflio, portfolioType is required');\r\n }\r\n break;\r\n case DisplayMode.UpdatePanel:\r\n if (!(_.isNumber(props.portfolioId) && props.portfolioId > 0)) {\r\n throw new Error('When update portfolio, portfolioId must be a positive number');\r\n }\r\n break;\r\n case DisplayMode.CreationDialog:\r\n if (!props.campaignType) {\r\n throw new Error('When create a portfolio through dialog, campaign type is required');\r\n }\r\n break;\r\n case DisplayMode.BulkEdit:\r\n break;\r\n default:\r\n throw new Error('Unsupported portfolio panel display mode');\r\n }\r\n}\r\n\r\nfunction CreationPanel(props) {\r\n const {\r\n displayMode,\r\n onCancel, onSuccess, reloadTrigger,\r\n permissions,\r\n } = props;\r\n\r\n validateProps(props);\r\n\r\n const i18n = useContext(I18nContext);\r\n const { jsdata } = useContext(LegacyDepsContext);\r\n const { scope } = useContext(ScopeContext);\r\n\r\n const isUpdate = displayMode === DisplayMode.UpdatePanel;\r\n const displayComponents = DisplayModeToComponentsMapping[displayMode];\r\n\r\n const [portfolioId] = useState(isUpdate ? props.portfolioId : -1);\r\n\r\n const [portfolioType, setPortfolioType] = useState(props.portfolioType);\r\n\r\n const [portfolioName, setPortfolioName] = useState('');\r\n const [isValidName, setIsValidName] = useState(false);\r\n\r\n const [campaignType, setCampaignType] = useState(props.campaignType);\r\n\r\n const [selectedCampaigns, setSelectedCampaigns] = useState([]);\r\n\r\n const [additionalSettings, setAdditionalSettings] = useState({});\r\n const [biddingStrategyView, setBiddingStrategyView] = useState();\r\n\r\n const [showValidationError, setShowValidationError] = useState(false);\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [apiError, setApiError] = useState('');\r\n const [isDataLoaded, setIsDataLoaded] = useState(!isUpdate);\r\n\r\n useEffect(() => {\r\n if (isUpdate && portfolioId) {\r\n const { currentAccount } = getEntityFromScope(scope);\r\n\r\n setIsLoading(true);\r\n\r\n currentAccount.PortfolioBidStrategies.$withKey(portfolioId).get()\r\n .toPromise()\r\n .then((response) => {\r\n setPortfolioType(response.Type);\r\n setPortfolioName(response.Name);\r\n setCampaignType(portfolioCampaignTypeFromODataValue[response.CampaignType] || portfolioCampaignTypeDefaultValue);\r\n setAdditionalSettings(additionalSettingsToUI(response));\r\n setIsDataLoaded(true);\r\n })\r\n .catch((error) => {\r\n setApiError(localizeApiError(error, i18n));\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n }, [isUpdate, portfolioId, scope, i18n, reloadTrigger]);\r\n\r\n function onSelectCampaignType(value) {\r\n if (value !== campaignType) {\r\n setCampaignType(value);\r\n setSelectedCampaigns([]);\r\n }\r\n }\r\n\r\n function validate() {\r\n const validators = [\r\n () => (displayComponents.includes(PanelComponent.PortfolioTypeDropdown) ? validatePortfolioType(portfolioType) : true),\r\n () => (displayComponents.includes(PanelComponent.PortfolioNameInput) ? isValidName : true),\r\n () => (displayComponents.includes(PanelComponent.CampaignTypeDropdown) ? validateCampaignType(campaignType) : true),\r\n () => (displayComponents.includes(PanelComponent.CampaignSelector) ? validateCampaigns(selectedCampaigns) : true),\r\n () => biddingStrategyView && biddingStrategyView.validate(),\r\n ];\r\n const validationResults = validators.map(fn => fn());\r\n const allValid = _.all(validationResults);\r\n if (!allValid) {\r\n setShowValidationError(true);\r\n }\r\n return allValid;\r\n }\r\n\r\n function onSubmit() {\r\n if (!validate()) {\r\n return;\r\n }\r\n\r\n const data = {\r\n ...biddingStrategyView.getValues(),\r\n Id: portfolioId,\r\n Name: portfolioName,\r\n Type: portfolioType,\r\n CampaignType: portfolioCampaignTypeToBulkUpsertValue[campaignType],\r\n };\r\n\r\n if (!isUpdate) {\r\n _.extend(data, {\r\n AssociatedCampaigns: selectedCampaigns.map(cmp => ({\r\n Id: cmp.Id,\r\n BidStrategyId: portfolioId,\r\n })),\r\n });\r\n }\r\n\r\n setIsLoading(true);\r\n setApiError('');\r\n\r\n const jsdataCall = isUpdate ?\r\n jsdata.PortfolioBidStrategy.update(portfolioId, data, { adapter: 'bulk' }) :\r\n jsdata.PortfolioBidStrategy.create(data, { adapter: 'bulk' });\r\n\r\n jsdataCall\r\n .then(() => {\r\n onSuccess();\r\n })\r\n .catch((response) => {\r\n if (!isUpdate && (Number(response.entity.Id) > 0)) {\r\n // Handle partial success: succeed to create portfolio, but failed to associate campaigns to the portfolio.\r\n // Ignore campaign errors.\r\n onSuccess();\r\n }\r\n setApiError(localizeApiError(response, i18n));\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n\r\n return (\r\n
\r\n \r\n {displayComponents.includes(PanelComponent.Header) &&\r\n
\r\n
\r\n {i18n.getString(\r\n isUpdate ?\r\n _TL_('Update {{type}} portfolio bid strategy') :\r\n _TL_('Create a {{type}} portfolio bid strategy'),\r\n {\r\n type: i18n.getString(i18nMap.portfolioBidStrategyType[portfolioType] || ''),\r\n }\r\n )}\r\n
\r\n
}\r\n
\r\n
\r\n \r\n
\r\n {displayComponents.includes(PanelComponent.PortfolioTypeDropdown) &&\r\n \r\n }\r\n {displayComponents.includes(PanelComponent.PortfolioNameInput) && portfolioType &&\r\n \r\n }\r\n {displayComponents.includes(PanelComponent.CampaignTypeDropdown) && portfolioType &&\r\n \r\n }\r\n {displayComponents.includes(PanelComponent.CampaignSelector) && campaignType &&\r\n \r\n }\r\n {isDataLoaded && portfolioType &&\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\nCreationPanel.propTypes = {\r\n displayMode: PropTypes.string.isRequired,\r\n portfolioId: PropTypes.number,\r\n portfolioType: PropTypes.string,\r\n campaignType: PropTypes.string,\r\n onSuccess: PropTypes.func,\r\n onCancel: PropTypes.func,\r\n reloadTrigger: PropTypes.number,\r\n permissions: PropTypes.shape({}),\r\n};\r\n\r\nCreationPanel.defaultProps = {\r\n portfolioId: null,\r\n portfolioType: null,\r\n campaignType: '',\r\n onSuccess: _.noop,\r\n onCancel: _.noop,\r\n reloadTrigger: 0,\r\n permissions: {},\r\n};\r\n\r\nexport const PortfolioBidStrategyCreationPanel = CreationPanel;\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { PortfolioBidStrategyCreationPanel, PortfolioBidStrategyPanelDisplayMode } from '@bingads-webui-campaign-react/portfolio-bid-strategy-creation-panel';\r\nimport { Dialog, DialogType } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nfunction getStyles() {\r\n return {\r\n portfolioCreationDialogContainer: {\r\n width: 500,\r\n 'max-width': 500,\r\n '& .panel.portfolio-creation-panel': {\r\n boxShadow: 'none',\r\n '& .panel-footer': {\r\n 'padding-left': 0,\r\n 'padding-right': 0,\r\n 'background-color': 'transparent',\r\n border: 0,\r\n },\r\n '& .panel-body': {\r\n 'padding-left': 0,\r\n 'padding-right': 0,\r\n },\r\n },\r\n '& .btn': {\r\n margin: '0px 3px 0px 3px',\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction PortfolioBidStrategyDialog(props) {\r\n const { classes, isBulkEdit, permissions } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const dialogContentProps = {\r\n type: DialogType.normal,\r\n title: i18n.getString(_TL_('Create new portfolio bid strategy')),\r\n showCloseButton: true,\r\n closeButtonAriaLabel: i18n.getString(_TL_('Close')),\r\n };\r\n\r\n const modelProps = {\r\n isBlocking: true,\r\n topOffsetFixed: true,\r\n };\r\n\r\n const displayMode = isBulkEdit ?\r\n PortfolioBidStrategyPanelDisplayMode.BulkEdit :\r\n PortfolioBidStrategyPanelDisplayMode.CreationDialog;\r\n\r\n return (\r\n