{"version":3,"file":"static/js/application.async.landing~be2bef5e.5c7b0571.chunk.js","mappings":"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","sources":["../../../../perf-max-campaign/packages/auto-generated-assets/src/alerts.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/helpers/utils.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/final-url-expansion-preview.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/helpers/constants.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/side-panel/validated-url-input.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/side-panel/tag-with-tooltip.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/side-panel/final-url-expansion-editor.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/auto-generated-assets-impl.js","../../../../perf-max-campaign/packages/auto-generated-assets/src/auto-generated-assets.js","../../../../perf-max-campaign/packages/cost-per-sale-option/src/style.js","../../../../perf-max-campaign/packages/cost-per-sale-option/src/cost-per-sale.js","../../../../perf-max-campaign/packages/editorial-appeal/src/params.js","../../../../perf-max-campaign/packages/editorial-appeal/src/editorial-appeal-aggregator.js","../../../../perf-max-campaign/packages/legacy-editorial-appeal-request-form/src/style.js","../../../../perf-max-campaign/packages/legacy-editorial-appeal-request-form/src/legacy-editorial-appeal-request-form.js","../../../../perf-max-campaign/packages/legacy-editorial-appeal-request-form/src/legacy-inline-error-view.js","../../../../perf-max-campaign/packages/editorial-appeal/src/editorial-appeal-request-panel.js","../../../../perf-max-campaign/packages/legacy-final-url-expansion/src/legacy-final-url-expansion.js","../../../../perf-max-campaign/packages/legacy-final-url-expansion/src/validated-legacy-final-url-expansion.js","../../../../perf-max-campaign/packages/listing-groups-page/src/constant.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/treeViewPanelSelector/PanelSelector/paginator.styles.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/treeViewPanelSelector/PanelSelector/paginator.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/treeViewPanelSelector/PanelSelector/BulkAddEditor.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/treeViewPanelSelector/PanelSelector/index.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/rawColumns.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/render/toolbar/ColumnChooser/columns.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/legacyI18nMap.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/adsOdata.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/getListingGroupConditions.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/updateListingTree.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/index.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/listingGroupGridData.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/productAttributeStatistics.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/productOffer.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/style.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/toolbarConfig.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/ColumnOdataMap.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/render/utils.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/render/column/ProductOffersCallout.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/render/column/ConditionTemplate.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/render/column/FlattenConditionTemplate.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/render/column/NameTemplate.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/API/bulk.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/render/column/IncludeExcludeTemplate.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/render/column/index.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/render/sortByHelper.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/logger.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/treeViewPanelSelector/panel-callbacks.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/treeViewPanelSelector/panel-helper.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/useTreeViewPanelSelector.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/API/useAccountData.js","../../../../perf-max-campaign/packages/listing-groups-page/src/API/getProductScope.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/utils.ts","../../../../perf-max-campaign/packages/listing-groups-page/src/listing-groups-page.tsx","../../../../perf-max-campaign/packages/listing-groups-page/src/filter-config.js","../../../../perf-max-campaign/packages/listing-groups-page/src/legacy-adapter/filter-entity.js","../../../../perf-max-campaign/packages/listing-groups-page/src/listing-groups-shell.js","../../../../perf-max-campaign/packages/perf-max-data/src/crud.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/common/constants.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/common/bulk.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/bulk-upsert-errors.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/common/map-bulk-upsert-errors.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/api-errors.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/common/strings.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/asset-group.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/campaign-criterions.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/campaign.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/ad-extension.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/asset-group/step-campaign-asset-group-impl.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/shared.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/asset-group/use-step-campaign-asset-group-state.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/asset-group/step-campaign-asset-group-styles.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/common/has-assets-in-assets-group.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/asset-group/step-campaign-asset-group.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/asset-group/step-wizard-config.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/campaign-bulk.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/model/conversion-goals-details.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/campaign-settings/step-campaign-settings-impl.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/campaign-settings/use-step-campaign-settings-state.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/campaign-settings/step-campaign-settings-styles.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/campaign-settings/step-campaign-settings.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/steps/campaign-settings/step-wizard-config.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/common/perf-max-campaign-crud-scenarios.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/pages/perf-max-asset-group-creation-page.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/pages/perf-max-asset-group-settings-page.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/pages/perf-max-campaign-creation-page.js","../../../../perf-max-campaign/packages/perf-max-step-wizard/src/pages/perf-max-campaign-settings-page.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/constants.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/step-constants.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/model/api-error.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/asset-group-name-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/social-site-recommendation-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/asset-group-name-section-with-social-site-recommendation.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/model/social-site-recommendation.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/get-assets-styles.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/assets-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/more-options-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/get-ad-extensions-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/enhance-your-ads-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/more-assets-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/more-settings-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/components/section-shimmer.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/components/audience-signal-section.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/assets-step-styles.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/assets-step-form.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/assets-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/components/odata-config.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/model/default-data.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/model/create-default-campaign.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/budget/utils/const.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/budget/utils/use-budget-localized.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/budget/styles/get-budget-form-styles.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/budget/budget-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/budget/use-budget-suggestion-data.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/budget/use-budget-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/targeting/targeting-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/products/products-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/campaign-details/campaign-details-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/use-summary-schema-data.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/components/summary-shimmer.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/diagnostics/constants.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/summary-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/diagnostics/utils.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/diagnostics/use-action-callback.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/schema.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/model/update-entity-status.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/diagnostics/use-diagnostics-data.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/step-config.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/assets/use-assets-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/products/use-products-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/targeting/use-targeting-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/campaign-details/use-campaign-details-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/summary/use-summary-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/step-lists.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/footer.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/shared/components/wizard-logger.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/wizard.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/campaign-setting/campaign-setting-step-shell.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/campaign-setting/use-campaign-setting-step-repository.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/setting-page.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/asset-group-setting-page.js","../../../../perf-max-campaign/packages/perf-max-wizard-north-star/src/steps/asset-group-setting/use-asset-group-setting-step-repository.js","../../../../perf-max-campaign/packages/search-theme-selector/src/alerts.js","../../../../perf-max-campaign/packages/search-theme-selector/src/search-theme-selector-section-impl.js","../../../../perf-max-campaign/packages/search-theme-selector/src/search-theme-selector-section.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/use-impulse.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/use-is-mounted.js","../../../../perf-max-campaign/packages/legacy-budget/src/style.js","../../../../perf-max-campaign/packages/legacy-budget/src/legacy-budget.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/validated-budget.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/validated-conversion-goals.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/validated-conversion-goals-selector.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/validated-fabric-controls.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/validated-listing-groups.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/validated-location-target-setting.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/location-target-setting-panel.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/audience-signal-panel.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/server-validated-url-options-parameters.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/video-panel.js","../../../../perf-max-campaign/packages/step-wizard-controls/src/brand-showroom-panel.js","../../../../perf-max-campaign/packages/step-wizard-machine/src/wizard-events.js","../../../../perf-max-campaign/packages/step-wizard-machine/src/step-events.js","../../../../perf-max-campaign/packages/step-wizard-machine/src/debug.js","../../../../perf-max-campaign/packages/step-wizard-machine/src/wizard-state-machine.js","../../../../perf-max-campaign/packages/step-wizard-machine/src/step-state-machine.js","../../../../perf-max-campaign/packages/step-wizard-machine-capi/index.js","../../../../perf-max-campaign/packages/step-wizard/src/styles/wizard-styles.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/use-is-mounted.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/step-repository.js","../../../../perf-max-campaign/packages/step-wizard/src/wizard/use-wizard-state.js","../../../../perf-max-campaign/packages/step-wizard/src/styles/get-step-progress-item-glyphicon.js","../../../../perf-max-campaign/packages/step-wizard/src/styles/footer-style-overrides.js","../../../../perf-max-campaign/packages/step-wizard/src/wizard/multi-step-layout.js","../../../../perf-max-campaign/packages/step-wizard/src/wizard/single-step-layout.js","../../../../perf-max-campaign/packages/step-wizard/src/wizard/wizard.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/use-navigation-confirmation-prompt.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/use-exit-without-saving-confirmation.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/use-window-confirm.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/step-loading-shell.js","../../../../perf-max-campaign/packages/step-wizard/src/shared/no-data-step-repository.js","../../../../performance-charts/packages/base-inline-chart-style/src/style.js","../../../../performance-charts/packages/inline-chart-service/src/constants.js","../../../../performance-charts/packages/inline-chart-service/src/inline-chart-request.js","../../../../performance-charts/packages/inline-chart-service/src/inline-chart-service.js","../../../../performance-charts/packages/inline-chart-wrapper/src/inline-chart-wrapper.js","../../../../performance-charts/packages/inline-chart-wrapper/src/inline-chart-view.js","../../page-padding-style/src/style.js"],"sourcesContent":["import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\n\r\nexport const TurnOnAllAlert = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n \r\n {i18n.getString(_TL_('For the best results,'))} {i18n.getString(_TL_('consider turning on all asset types.'))}\r\n \r\n }\r\n level=\"Info\"\r\n icon={(
)}\r\n dismissible={false}\r\n />\r\n );\r\n};\r\n\r\nexport const FullyOptimizedAlert = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n \r\n {i18n.getString(_TL_('Automatically generated assets are fully optimized.'))}\r\n \r\n }\r\n level=\"Confirmation\"\r\n icon={(
)}\r\n dismissible={false}\r\n />\r\n );\r\n};\r\n","import { each, get, isEmpty } from 'underscore';\r\n\r\nexport const extractExclusionRules = (finalUrlExpansions) => {\r\n const urlEquals = [];\r\n const urlContains = [];\r\n const customLabels = [];\r\n each(finalUrlExpansions, (target) => {\r\n const conditions = get(target, ['Criterion', 'WebPage', 'Parameter', 'Conditions'], []);\r\n if (isEmpty(conditions)) return;\r\n if (conditions[0].Operand === 'Url' && conditions[0].Operator === 'Equals') {\r\n urlEquals.push(conditions[0].ArgumentOperand);\r\n } else if (conditions[0].Operand === 'Url' && conditions[0].Operator === 'Contains') {\r\n const rules = [];\r\n each(conditions, (condition) => {\r\n rules.push(condition.ArgumentOperand);\r\n });\r\n urlContains.push(rules);\r\n } else if (conditions[0].Operand === 'CustomLabel') {\r\n customLabels.push(conditions[0].ArgumentOperand);\r\n }\r\n });\r\n return [urlEquals, urlContains, customLabels];\r\n};\r\n\r\nexport const withHttpsPrefix = (url) => {\r\n if (!url) return '';\r\n else if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n return `https://${url}`;\r\n};\r\n\r\nexport const keywordsToCriterionName = (keywords) => {\r\n const target = [];\r\n keywords.forEach((keyword) => {\r\n target.push(`Url contains ${keyword}`);\r\n });\r\n return target.join(' and ');\r\n};\r\n\r\nexport const convertURLEqualsToCriterion = url => ({\r\n Criterion: {\r\n WebPage: {\r\n Type: 'Webpage',\r\n Parameter: {\r\n Conditions: [\r\n {\r\n Operand: 'Url',\r\n Operator: 'Equals',\r\n ArgumentOperand: url,\r\n },\r\n ],\r\n CriterionName: `Url=${url}`,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const convertURLContainsToCriterion = keyword => ({\r\n Criterion: {\r\n WebPage: {\r\n Type: 'Webpage',\r\n Parameter: {\r\n Conditions: [\r\n {\r\n Operand: 'Url',\r\n Operator: 'Contains',\r\n ArgumentOperand: keyword,\r\n },\r\n ],\r\n CriterionName: `Url contains ${keyword}`,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const convertCustomLabelToCriterion = label => ({\r\n Criterion: {\r\n Type: 'Webpage',\r\n WebPage: {\r\n Parameter: {\r\n Conditions: [\r\n {\r\n Operand: 'CustomLabel',\r\n Operator: 'Equals',\r\n ArgumentOperand: label,\r\n },\r\n ],\r\n CriterionName: `CustomLabel=${label}`,\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n Button,\r\n Overflow,\r\n OverflowItem,\r\n useOverflowMenu,\r\n} from '@fluentui/react-components';\r\nimport {\r\n extractExclusionRules,\r\n keywordsToCriterionName,\r\n} from './helpers/utils';\r\nimport UrlsImage from './media/url.svg';\r\nimport RulesImage from './media/rules.svg';\r\nimport LabelsImage from './media/labels.svg';\r\nimport EditImage from './media/edit.svg';\r\nimport DismissImage from './media/dismiss.svg';\r\n\r\n// eslint-disable-next-line valid-jsdoc\r\n/**\r\n * There's a known bug that fluentui/react-overflow doesn't take gap of the overflow container\r\n * and margin of overflow item into account and cause weird styling issues.\r\n * https://github.com/microsoft/fluentui/issues/23066\r\n */\r\nconst getStyles = () => ({\r\n previewContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n background: 'rgba(255, 255, 255, 1)',\r\n boxShadow: '0px 2px 4px 0px rgba(0, 0, 0, 0.1)',\r\n padding: '12px',\r\n margin: '4px 28px',\r\n borderRadius: '4px',\r\n gap: '4px',\r\n maxWidth: '95%',\r\n },\r\n previewHeader: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n '& .button-group': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '12px',\r\n '& button': {\r\n padding: '0px',\r\n minWidth: '20px',\r\n },\r\n },\r\n },\r\n previewRow: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '4px',\r\n flexWrap: 'nowrap',\r\n maxWidth: '95%',\r\n '& .row-label': {\r\n padding: '2px 0px 2px 0px',\r\n textWrap: 'nowrap',\r\n },\r\n },\r\n overflowContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'nowrap',\r\n flexGrow: 1,\r\n minWidth: 0,\r\n maxWidth: '100%',\r\n overflowX: 'hidden',\r\n gap: '4px',\r\n '& .tag': {\r\n padding: '2px 8px 2px 8px',\r\n borderRadius: '4px',\r\n background: 'rgba(243, 242, 241, 1)',\r\n flexShrink: 0,\r\n maxWidth: '250px',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflowX: 'hidden',\r\n },\r\n },\r\n});\r\n\r\nconst OverflowPlaceholder = () => {\r\n const { ref, isOverflowing } = useOverflowMenu();\r\n if (!isOverflowing) {\r\n return null;\r\n }\r\n return (...);\r\n};\r\n\r\nconst UnStyledFinalUrlExpansionPreview = ({\r\n classes,\r\n i18n,\r\n finalUrlExpansions,\r\n setToggleFinalURLsEditor,\r\n onChange,\r\n}) => {\r\n const [urls, rules, labels] = useMemo(() => extractExclusionRules(finalUrlExpansions), [finalUrlExpansions]);\r\n\r\n const onEditClick = useCallback(() => setToggleFinalURLsEditor(true), [setToggleFinalURLsEditor]);\r\n const onDismissClick = useCallback(() => {\r\n onChange({ finalUrlExpansions: [] });\r\n }, [onChange]);\r\n\r\n const renderUrlsRow = useMemo(() => (\r\n
\r\n { UrlsImage && \"Link }\r\n {urls.length} {i18n.getString(_TL_('URLs'))}: \r\n \r\n
\r\n { urls.map(url => (\r\n \r\n \r\n {url}\r\n \r\n \r\n )) }\r\n \r\n
\r\n
\r\n
\r\n ), [classes, i18n, urls]);\r\n\r\n const renderRulesRow = useMemo(() => (\r\n
\r\n { RulesImage && \"Link }\r\n {rules.length} {i18n.getString(_TL_('Exclusion Rules'))}: \r\n \r\n
\r\n { rules.map((rule) => {\r\n const tag = keywordsToCriterionName(rule);\r\n return (\r\n \r\n \r\n {tag}\r\n \r\n \r\n );\r\n }) }\r\n \r\n
\r\n
\r\n
\r\n ), [classes, i18n, rules]);\r\n\r\n const renderLabelsRow = useMemo(() => (\r\n
\r\n { LabelsImage && \"Label }\r\n {labels.length} {i18n.getString(_TL_('Custom Labels'))}: \r\n \r\n
\r\n { labels.map(label => (\r\n \r\n \r\n {label}\r\n \r\n \r\n )) }\r\n \r\n
\r\n
\r\n
\r\n ), [classes, i18n, labels]);\r\n\r\n return (\r\n
\r\n
\r\n { i18n.getString((_TL_('Excluded some URLs'))) }\r\n
\r\n \r\n \r\n
\r\n
\r\n { urls.length > 0 && renderUrlsRow }\r\n { rules.length > 0 && renderRulesRow }\r\n { labels.length > 0 && renderLabelsRow }\r\n
\r\n );\r\n};\r\n\r\nUnStyledFinalUrlExpansionPreview.propTypes = {\r\n classes: PropTypes.shape({\r\n previewContainer: PropTypes.string,\r\n previewHeader: PropTypes.string,\r\n previewRow: PropTypes.string,\r\n overflowContainer: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n finalUrlExpansions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n setToggleFinalURLsEditor: PropTypes.func.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const FinalUrlExpansionPreview = withDefaultStyles(UnStyledFinalUrlExpansionPreview, getStyles);\r\n","export const EXCLUSTION_TYPE = {\r\n URL: 'urls',\r\n Rule: 'urlContains',\r\n Label: 'customLabels',\r\n};\r\n\r\nexport const URL_LENGTH_LIMIT = 2048;\r\n","import React, { memo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { get } from 'underscore';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { TextField } from '@fluentui/react';\r\nimport { URL_LENGTH_LIMIT } from '../helpers/constants';\r\nimport { withHttpsPrefix } from '../helpers/utils';\r\n\r\nconst UrlInput = memo(({\r\n className,\r\n i18n,\r\n validationProps,\r\n updateValidation,\r\n placeholder,\r\n}) => {\r\n const input = get(validationProps, ['data', 'input'], '');\r\n\r\n const validateAndUpdateUrl = useCallback((value) => {\r\n const finalUrlValidatorErrors = [];\r\n const fullUrl = value.indexOf('://') >= 0 ? value : withHttpsPrefix(value);\r\n if (!value || !isValidUrl(fullUrl)) {\r\n finalUrlValidatorErrors.push(i18n.getString(_TL_('Please enter a valid URL')));\r\n }\r\n if (value.length > URL_LENGTH_LIMIT) {\r\n finalUrlValidatorErrors.push(i18n.getString(_TL_('The number of characters in this field cannot exceed {{lengthLimit}}'), { lengthLimit: URL_LENGTH_LIMIT }));\r\n }\r\n updateValidation(finalUrlValidatorErrors, { input: value });\r\n }, [i18n, updateValidation]);\r\n\r\n const onTextChange = useCallback((ev, value) => validateAndUpdateUrl(value), [validateAndUpdateUrl]);\r\n\r\n return (\r\n \r\n );\r\n}, (prevProps, nextProps) => prevProps.validationProps.data.input === nextProps.validationProps.data.input);\r\n\r\nUrlInput.propTypes = {\r\n className: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n input: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n placeholder: PropTypes.string,\r\n};\r\n\r\nUrlInput.defaultProps = {\r\n className: '',\r\n placeholder: '',\r\n};\r\n\r\nexport const ValidatedUrlInput = withCustomValidation(UrlInput);\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport Proptypes from 'prop-types';\r\nimport { Tooltip } from '@fluentui/react-components';\r\n\r\nexport const TagWithTooltip = ({ content }) => {\r\n const [isOverflow, setIsOverflow] = useState(false);\r\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\r\n\r\n const tagRef = useRef();\r\n\r\n useEffect(() => {\r\n setIsOverflow(tagRef.current.clientWidth < tagRef.current.scrollWidth);\r\n }, []);\r\n\r\n return (\r\n setIsTooltipVisible(data.visible)}\r\n >\r\n \r\n {content}\r\n \r\n \r\n );\r\n};\r\n\r\nTagWithTooltip.propTypes = {\r\n content: Proptypes.string.isRequired,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { get, map } from 'underscore';\r\nimport classnames from 'classnames';\r\nimport {\r\n DefaultButton,\r\n Label,\r\n IconButton,\r\n TextField,\r\n PrimaryButton,\r\n Panel,\r\n PanelType,\r\n Dropdown,\r\n Icon,\r\n} from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup, withValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n extractExclusionRules,\r\n withHttpsPrefix,\r\n keywordsToCriterionName,\r\n convertURLEqualsToCriterion,\r\n convertURLContainsToCriterion,\r\n convertCustomLabelToCriterion,\r\n} from '../helpers/utils';\r\nimport { EXCLUSTION_TYPE } from '../helpers/constants';\r\nimport { ValidatedUrlInput } from './validated-url-input';\r\nimport { TagWithTooltip } from './tag-with-tooltip';\r\n\r\nconst ValidatedInput = withValidation(TextField);\r\nconst ValidationSchema = {\r\n name: 'Exclusion Input',\r\n type: 'object',\r\n properties: {\r\n rule: {\r\n type: 'string',\r\n maxLength: 2048,\r\n },\r\n label: {\r\n type: 'string',\r\n maxLength: 2048,\r\n },\r\n },\r\n};\r\n\r\nexport const getFinalURLSectionStyle = (_, { palette = {} }) => ({\r\n inputContainer: {\r\n display: 'flex',\r\n },\r\n dropdown: {\r\n minWidth: '161px', height: '32px', marginRight: '8px',\r\n },\r\n dropdownOption: {\r\n display: 'flex',\r\n },\r\n iconStyles: {\r\n marginRight: '8px',\r\n },\r\n textField: {\r\n width: '100%', height: '32px',\r\n },\r\n addButton: {\r\n width: '60px', height: '32px', float: 'right', margin: '8px 0px 8px 8px ',\r\n },\r\n sectionsContainer: {\r\n '& label': {\r\n fontSize: 18,\r\n },\r\n '& .footerButton': {\r\n marginLeft: '8px',\r\n },\r\n '& .description': { marginTop: '12px', marginBottom: '12px' },\r\n '& .divider': {\r\n marginTop: '37px',\r\n '& .final-urls-section:last-child': { borderBottom: 'none' },\r\n },\r\n '& .final-urls-section': {\r\n margin: '2px 0',\r\n borderBottom: '1px solid #EDEBE9',\r\n },\r\n '& .dimension': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n gap: '4px',\r\n margin: '8px 0 0 0',\r\n padding: '0 0 16px 0',\r\n '& .dimensionItem': {\r\n alignItems: 'normal',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 3,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '6px',\r\n fontWeight: 600,\r\n padding: '4px 0px 4px 10px',\r\n height: '30px',\r\n '& button': {\r\n color: palette.neutralSecondary,\r\n height: 'auto',\r\n '& .ms-Icon': {\r\n fontSize: 12,\r\n },\r\n },\r\n '& .tagText': {\r\n maxWidth: '488px',\r\n overflow: 'hidden',\r\n textWrap: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n },\r\n },\r\n errorContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .error': {\r\n color: '#A80000',\r\n },\r\n },\r\n});\r\n\r\nexport const FinalURLsEditor = (props) => {\r\n const {\r\n i18n,\r\n isOpen,\r\n onClose,\r\n onChange,\r\n finalUrlExpansions,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getFinalURLSectionStyle);\r\n\r\n const [newFinalUrlExpansions, setNewFinalUrlExpansions] = useState(finalUrlExpansions);\r\n const [urls, rules, labels] = useMemo(() => extractExclusionRules(newFinalUrlExpansions), [newFinalUrlExpansions]);\r\n const [selectedOption, setSelectedOption] = useState(EXCLUSTION_TYPE.URL);\r\n const [input, setInput] = useState('');\r\n const [validationErrors, setValidationErrors] = useState([]);\r\n\r\n const onAddTag = useCallback(() => {\r\n if (!input) return;\r\n if (selectedOption === EXCLUSTION_TYPE.URL) {\r\n const newUrl = withHttpsPrefix(input);\r\n if (!urls.includes(newUrl)) {\r\n setNewFinalUrlExpansions([...newFinalUrlExpansions, convertURLEqualsToCriterion(newUrl)]);\r\n }\r\n } else if (selectedOption === EXCLUSTION_TYPE.Rule) {\r\n // Current UI doesn't support multiple AND for a single URL condition so just ignore the case.\r\n const flattenRules = rules.filter(rule => rule.length === 1).flat();\r\n if (!flattenRules.includes(input)) {\r\n setNewFinalUrlExpansions([...newFinalUrlExpansions, convertURLContainsToCriterion(input)]);\r\n }\r\n } else if (selectedOption === EXCLUSTION_TYPE.Label) {\r\n if (!labels.includes(input)) {\r\n setNewFinalUrlExpansions([...newFinalUrlExpansions, convertCustomLabelToCriterion(input)]);\r\n }\r\n }\r\n setInput('');\r\n }, [input, setInput, urls, rules, labels, selectedOption, newFinalUrlExpansions]);\r\n\r\n const onRemovetag = useCallback((value, id, seletedGroup) => {\r\n if (seletedGroup === EXCLUSTION_TYPE.Rule) {\r\n const target = keywordsToCriterionName(value);\r\n setNewFinalUrlExpansions(newFinalUrlExpansions.filter((exclusion) => {\r\n const criterionName = get(exclusion, ['Criterion', 'WebPage', 'Parameter', 'CriterionName'], '');\r\n return criterionName !== target;\r\n }));\r\n } else {\r\n setNewFinalUrlExpansions(newFinalUrlExpansions.filter((exclusion) => {\r\n const { ArgumentOperand } = get(exclusion, ['Criterion', 'WebPage', 'Parameter', 'Conditions', 0], {});\r\n return ArgumentOperand !== value;\r\n }));\r\n }\r\n }, [newFinalUrlExpansions]);\r\n\r\n const onSave = useCallback(() => {\r\n onChange({ finalUrlExpansions: newFinalUrlExpansions });\r\n onClose();\r\n }, [newFinalUrlExpansions, onChange, onClose]);\r\n\r\n const options = [\r\n { key: EXCLUSTION_TYPE.URL, text: i18n.getString(_TL_('URLs')), data: { icon: 'Accept' } },\r\n { key: EXCLUSTION_TYPE.Rule, text: i18n.getString(_TL_('URL contains')), data: { icon: 'Accept' } },\r\n { key: EXCLUSTION_TYPE.Label, text: i18n.getString(_TL_('Custom labels')), data: { icon: 'Accept' } },\r\n ];\r\n\r\n const renderInputField = useCallback(() => {\r\n switch (selectedOption) {\r\n case EXCLUSTION_TYPE.URL:\r\n return (\r\n \r\n );\r\n case EXCLUSTION_TYPE.Rule:\r\n return (\r\n \r\n );\r\n case EXCLUSTION_TYPE.Label:\r\n return (\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n }, [classes, i18n, selectedOption, input]);\r\n\r\n const renderUrlTags = useCallback(() => (\r\n
\r\n \r\n
{i18n.getString(_TL_('URLs that should be excluded'))}:
\r\n
\r\n { map(urls, (url, index) => (\r\n
\r\n \r\n onRemovetag(url, index, EXCLUSTION_TYPE.URL)}\r\n />\r\n
\r\n )) }\r\n
\r\n
\r\n ), [i18n, urls, onRemovetag]);\r\n\r\n const renderRuleTags = useCallback(() => (\r\n
\r\n \r\n
{i18n.getString(_TL_('Rules to exclude non-commercial pages or sections of your website'))}:
\r\n
\r\n {\r\n map(rules, (rule, index) => {\r\n const tag = keywordsToCriterionName(rule);\r\n return (\r\n
\r\n \r\n onRemovetag(rule, index, EXCLUSTION_TYPE.Rule)}\r\n />\r\n
\r\n );\r\n })\r\n }\r\n
\r\n
\r\n ), [i18n, rules, onRemovetag]);\r\n\r\n const renderCustomLabelTags = useCallback(() => (\r\n
\r\n \r\n
{i18n.getString(_TL_('Specific which labels from page feeds to exlude'))}:
\r\n
\r\n { map(labels, (label, index) => (\r\n
\r\n \r\n onRemovetag(label, index, EXCLUSTION_TYPE.Label)}\r\n />\r\n
\r\n )) }\r\n
\r\n
\r\n ), [i18n, labels, onRemovetag]);\r\n\r\n const renderDropdownOptions = useCallback(option => (\r\n
\r\n {option.data && option.data.icon && option.key === selectedOption && (\r\n \r\n )}\r\n {option.text}\r\n
\r\n ), [classes, selectedOption]);\r\n\r\n const renderPanelFooter = useCallback(() => (\r\n
\r\n \r\n {i18n.getString(_TL_('Apply'))}\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n ), [i18n, onClose, onSave]);\r\n\r\n const renderValidationErrors = useCallback(() => (\r\n
\r\n { validationErrors.map(message => {message}) }\r\n
\r\n ), [classes, validationErrors]);\r\n\r\n const onValidate = useCallback((result) => {\r\n const { data, messages } = result;\r\n const newInput = data.input || data.rule || data.label;\r\n setValidationErrors(messages);\r\n setInput(newInput);\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{i18n.getString(_TL_('Enter URLs or create rules to exclude non-commercial pages or sections of your website'))}.
\r\n
\r\n setSelectedOption(selected.key)}\r\n />\r\n { renderInputField() }\r\n
\r\n { renderValidationErrors() }\r\n 0}\r\n />\r\n \r\n
\r\n { urls.length > 0 && renderUrlTags() }\r\n { rules.length > 0 && renderRuleTags() }\r\n { labels.length > 0 && renderCustomLabelTags() }\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nFinalURLsEditor.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n finalUrlExpansions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n Checkbox,\r\n} from '@fluentui/react-components';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { TurnOnAllAlert, FullyOptimizedAlert } from './alerts';\r\nimport { FinalUrlExpansionPreview } from './final-url-expansion-preview';\r\nimport { FinalURLsEditor } from './side-panel/final-url-expansion-editor';\r\n\r\nconst getAutoGeneratedAssetsStyles = () => ({\r\n root: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n },\r\n OptionContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n },\r\n assetsOption: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '4px',\r\n '& label': {\r\n padding: '0px 0px 0px 8px',\r\n },\r\n '& .editorButton': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n paddingLeft: '28px',\r\n width: 'fit-content',\r\n },\r\n '& input[type=\"checkbox\"]': {\r\n boxSizing: 'border-box',\r\n cursor: 'inherit',\r\n height: '100%',\r\n margin: '0px',\r\n opacity: 0,\r\n position: 'absolute',\r\n top: '0px',\r\n },\r\n '& .fui-Checkbox__indicator': {\r\n margin: '0px',\r\n },\r\n '& .checkboxDescription': {\r\n paddingLeft: '28px',\r\n },\r\n },\r\n});\r\n\r\nexport const AutoGeneratedAssetsImpl = (props) => {\r\n const {\r\n i18n,\r\n finalUrlExpansions,\r\n options,\r\n onChange,\r\n } = props;\r\n const textAssetChecked = !options.autoGeneratedTextOptOut;\r\n const imageAssetChecked = !options.autoGeneratedImageOptOut;\r\n const finalUrlChecked = !options.finalUrlExpansionOptOut;\r\n\r\n const styles = useDefaultStyles(getAutoGeneratedAssetsStyles);\r\n const [toggleFinalURLsEditor, setToggleFinalURLsEditor] = useState(false);\r\n\r\n const onOpenFinalUrlEditor = useCallback(() => setToggleFinalURLsEditor(true), []);\r\n\r\n const renderAlert = useCallback(() => {\r\n if (textAssetChecked && imageAssetChecked && finalUrlChecked) {\r\n return ;\r\n }\r\n return ;\r\n }, [textAssetChecked, imageAssetChecked, finalUrlChecked]);\r\n\r\n const renderFinalUrlExpansionPreview = useCallback(() => {\r\n if (finalUrlChecked && finalUrlExpansions && finalUrlExpansions.length > 0) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n {i18n.getString(_TL_('Exclude some URLs'))}\r\n \r\n );\r\n }, [finalUrlChecked, finalUrlExpansions, onOpenFinalUrlEditor, i18n, onChange]);\r\n\r\n return (\r\n
\r\n {i18n.getString(_TL_('Microsoft Advertising will automatically generate relevant assets in combination with the assets you provide to maximize your ad performance. Choose which assets you’d like us to automatically generate.'))}\r\n { renderAlert() }\r\n
\r\n
\r\n onChange({ autoGeneratedTextOptOut: !data.checked })}\r\n />\r\n
{i18n.getString(_TL_('Generate text assets in combination with assets you provide.'))}
\r\n
\r\n
\r\n onChange({ autoGeneratedImageOptOut: !data.checked })}\r\n />\r\n
{i18n.getString(_TL_('Generate image assets pulled from your ads, business domain, and landing page in combination with image assets you provide.'))}
\r\n
\r\n
\r\n onChange({ finalUrlExpansionOptOut: !data.checked })}\r\n />\r\n
{i18n.getString(_TL_('Send potential customers to the most relevant URLs on your website when it’s likely to enhance ad performance.'))}
\r\n { renderFinalUrlExpansionPreview() }\r\n {toggleFinalURLsEditor && (\r\n setToggleFinalURLsEditor(false)}\r\n onChange={onChange}\r\n finalUrlExpansions={finalUrlExpansions}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nAutoGeneratedAssetsImpl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n finalUrlExpansions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n options: PropTypes.shape({\r\n autoGeneratedTextOptOut: PropTypes.bool,\r\n autoGeneratedImageOptOut: PropTypes.bool,\r\n finalUrlExpansionOptOut: PropTypes.bool,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AutoGeneratedAssetsImpl } from './auto-generated-assets-impl';\r\n\r\nconst AutoGeneratedAssets = ({ validationProps, updateValidation }) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { data: { finalUrlExpansions, options } } = validationProps;\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], newData);\r\n if (activity) {\r\n activity.signal(`onAutoGeneratedAssetsChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nAutoGeneratedAssets.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n finalUrlExpansions: PropTypes.arrayOf(PropTypes.shape({})),\r\n options: PropTypes.shape({\r\n autoGeneratedTextOptOut: PropTypes.bool,\r\n autoGeneratedImageOptOut: PropTypes.bool,\r\n finalUrlExpansionOptOut: PropTypes.bool,\r\n }),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedAutoGeneratedAssets = withCustomValidation(AutoGeneratedAssets);\r\n","export const getCPSStyles = () => ({\r\n cpsOptions: {\r\n '& .alert-container': {\r\n marginTop: 8,\r\n },\r\n },\r\n});\r\n","/* eslint-disable react/no-danger */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { withVerticalAlignCenterSpan } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Checkbox } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { getCPSStyles } from './style';\r\n\r\n\r\nconst CostPerSale = ({ validationProps, updateValidation }) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { data: costPerSaleOptOut } = validationProps;\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], newData);\r\n if (activity) {\r\n activity.signal(`onCPSOptionChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation]);\r\n\r\n const classes = useDefaultStyles(getCPSStyles);\r\n\r\n return (\r\n
\r\n onChange({ costPerSaleOptOut: !isChecked })}\r\n onRenderLabel={withVerticalAlignCenterSpan(() => ())}\r\n />\r\n {costPerSaleOptOut &&\r\n
\r\n For the best results, consider turning on CPS bid option.')) }} />\r\n )}\r\n linkText={i18n.getString(_TL_('Learn more'))}\r\n href=\"https://help.ads.microsoft.com/#apex/ads/en/56786/1/#CPS\"\r\n linkType=\"directLink\"\r\n />\r\n )}\r\n level=\"Info\"\r\n icon={(
)}\r\n dismissible={false}\r\n />\r\n
}\r\n
\r\n );\r\n};\r\n\r\nCostPerSale.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n costPerSaleOptOut: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedCostPerSale = withCustomValidation(CostPerSale);\r\n","import { isArray, isEmpty, negate, some } from 'underscore';\r\n\r\n/**\r\n * @typedef {Object} EntityAndParentID\r\n * @property {string|number} EntityID Entity ID\r\n * @property {string|number} ParentID Parent Entity ID\r\n */\r\n\r\n\r\n/**\r\n * @typedef {Object} AppealBaseOptions\r\n * @property {number} cid Customer ID\r\n * @property {number} aid Account ID\r\n * @property {Object} permissions Permissions\r\n */\r\n\r\nconst isValidEntityAndParentID = entityAndParentID =>\r\n entityAndParentID && entityAndParentID.EntityID && entityAndParentID.ParentID;\r\n\r\n\r\nclass AppealBase {\r\n constructor(options) {\r\n this.options = options;\r\n }\r\n}\r\n\r\nexport class AppealByIDsForParentEntity extends AppealBase {\r\n /**\r\n * Initialized AppealByIDsForParentEntity\r\n * @param {AppealBaseOptions} options options\r\n * @param {number|string} parentId parent entity ID\r\n * @param {Array} ids array of entity IDs\r\n */\r\n constructor(options, parentId, ids) {\r\n super(options);\r\n if (!parentId) {\r\n throw new Error('parentId is required');\r\n }\r\n if (!isArray(ids) || isEmpty(ids)) {\r\n throw new Error('ids is required and must be an array');\r\n }\r\n this.parentId = parentId;\r\n this.ids = ids;\r\n }\r\n}\r\n\r\nexport class AppealAllForParentEntity extends AppealBase {\r\n constructor(options, parentId) {\r\n super(options);\r\n if (!parentId) {\r\n throw new Error('parentId is required');\r\n }\r\n this.parentId = parentId;\r\n }\r\n\r\n createAppealParamsWithIDs(ids) {\r\n return new AppealByIDsForParentEntity(this.options, this.parentId, ids);\r\n }\r\n}\r\n\r\nexport class AppealByIDs extends AppealBase {\r\n /**\r\n * Initialized AppealByIDs\r\n * @param {AppealBaseOptions} options options\r\n * @param {Array} ids array of entity+parent entity IDs\r\n */\r\n constructor(options, ids) {\r\n super(options);\r\n if (!isArray(ids) || isEmpty(ids) || some(ids, negate(isValidEntityAndParentID))) {\r\n throw new Error('ids is required and must be an array of EntityAndParentID');\r\n }\r\n this.ids = ids;\r\n }\r\n}\r\n\r\nexport class AppealAllByFilter extends AppealBase {\r\n constructor(options, filter) {\r\n super(options);\r\n if (!filter) {\r\n throw new Error('filter is required');\r\n }\r\n this.filter = filter;\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport * as utilities from '@bingads-webui-campaign-legacy/editorial-appeal/utilities';\r\nimport { AppealAllForParentEntity, AppealByIDsForParentEntity } from './params';\r\n\r\nexport { isAppealableStatus } from '@bingads-webui-campaign-legacy/editorial-appeal/utilities';\r\n\r\nconst toType = obj =>\r\n ({})\r\n .toString.call(obj) // returns \"[object Type]\"\r\n .substring(8, obj.length - 1); // returns \"Type\"\r\n\r\nconst assertInputs = (appealParams) => {\r\n if (!appealParams) {\r\n throw new Error('appealParams is required');\r\n }\r\n if (!(appealParams instanceof AppealByIDsForParentEntity) && !(appealParams instanceof AppealAllForParentEntity)) {\r\n // TODO: see TODOs\r\n throw new Error(`appealParams must be an instance of AppealByIDsForParentEntity, AppealAllForParentEntity. ${toType(appealParams)} is not supported`);\r\n }\r\n};\r\n\r\nconst processRejectReasonsFromOdata = (controller, permissions) =>\r\n odataResponse => (odataResponse.Errors ?\r\n Promise.reject(odataResponse.Errors) :\r\n utilities.processRejectReasonsFromOdata(odataResponse, controller, permissions));\r\n\r\n/**\r\n * @typedef {Object} AggregatedRejectReasons\r\n * @property {Array} appealIds array of entity IDs that can be appealed\r\n * @property {Array} appealData array of appeal data\r\n * @property {boolean} appealData.Appeal whether the entity has been appealed(?)\r\n * @property {string} appealData.Justification justification for appeal\r\n * @property {boolean} appealData.IsAppealable whether the entity can be appealed\r\n * @property {Array} appealData.RejectedReasons array of rejection reasons\r\n * @property {Array} appealData.RejectedTerms array of rejection terms\r\n * @property {string} appealData.EntityType entity type\r\n */\r\n\r\nconst resolveAppealParams = (appealParams) => {\r\n const {\r\n getEditorialReasonsByIDsForParentEntity, getAllEntitiesForParentEntity,\r\n } = appealParams.options;\r\n let getEditorialReasons;\r\n let appealParamsPromise;\r\n if (appealParams instanceof AppealByIDsForParentEntity ||\r\n appealParams instanceof AppealAllForParentEntity) {\r\n getEditorialReasons = getEditorialReasonsByIDsForParentEntity;\r\n\r\n if (appealParams instanceof AppealAllForParentEntity) {\r\n appealParamsPromise = getAllEntitiesForParentEntity(appealParams)\r\n .then(appealParams.createAppealParamsWithIDs.bind(appealParams));\r\n } else {\r\n appealParamsPromise = Promise.resolve(appealParams);\r\n }\r\n } // TODO: add support for AppealByIDs and AppealAllByFilter when needed\r\n\r\n return Promise.props({ getEditorialReasons, appealParams: appealParamsPromise });\r\n};\r\n\r\n/**\r\n * Fetches and aggregates editorial rejections for given entities\r\n * @param {AppealByIDsForParentEntity|AppealAllForParentEntity|AppealByIDs|AppealAllByFilter} appealParams Customer ID\r\n * @returns {Promise} a promise that resolves to an object of aggregated reject reasons\r\n */\r\nconst getAppealRejections = ({ appealParams, getEditorialReasons }) => {\r\n const {\r\n permissions,\r\n controller,\r\n } = appealParams.options;\r\n\r\n return Promise.resolve(appealParams)\r\n .then(getEditorialReasons)\r\n .then(processRejectReasonsFromOdata(controller, permissions));\r\n};\r\n\r\nexport const editorialAppealAggregator = (appealParams) => {\r\n assertInputs(appealParams);\r\n return Promise.resolve(appealParams)\r\n .then(resolveAppealParams)\r\n .then(getAppealRejections);\r\n};\r\n\r\nexport const requestAppeal = (appealParams, appealData, appealIds) => {\r\n const {\r\n requestAppealAllForParentEntity,\r\n requestAppealByIDsForParentEntity,\r\n } = appealParams.options;\r\n let requestAppealFunc;\r\n if (appealParams instanceof AppealByIDsForParentEntity) {\r\n requestAppealFunc = requestAppealByIDsForParentEntity;\r\n } else if (appealParams instanceof AppealAllForParentEntity) {\r\n requestAppealFunc = requestAppealAllForParentEntity;\r\n } // TODO: add support for AppealByIDs and AppealAllByFilter when needed\r\n\r\n return requestAppealFunc(appealParams, appealData, appealIds);\r\n};\r\n","export const getRequestFormStyle = (_, { palette = {} }) => ({\r\n requestFormContainer: {\r\n '& .form-horizontal': {\r\n margin: 0,\r\n maxWidth: 784,\r\n border: 0,\r\n boxShadow: 'none',\r\n '& .form-group': {\r\n margin: '0px 0px 18px 0px',\r\n '& .root': {\r\n width: 'unset',\r\n margin: 0,\r\n padding: 0,\r\n '& .error': {\r\n color: '#a4262c',\r\n },\r\n '& > label': {\r\n padding: 0,\r\n },\r\n '& .title': {\r\n fontWeight: 'normal',\r\n },\r\n '& .details': {\r\n margin: '27px 0px 0px 0px',\r\n padding: 0,\r\n '& .col-sm-4': {\r\n padding: '0px 0px 0px 1px',\r\n width: '50%',\r\n '& .appeal-column-title': {\r\n fontSize: 18,\r\n lineHeight: '24px',\r\n fontWeight: 'normal',\r\n },\r\n '& .reasons > ul': {\r\n margin: '1px 0px 0px 0px',\r\n paddingLeft: 0,\r\n listStyle: 'none',\r\n '& > li': {\r\n marginTop: '10px',\r\n },\r\n },\r\n },\r\n '& .col-sm-8': {\r\n width: '50%',\r\n paddingLeft: 14,\r\n paddingRight: 0,\r\n '& .appeal-column-title': {\r\n fontSize: 14,\r\n lineHeight: '19px',\r\n fontWeight: 600,\r\n },\r\n '& .appeal-textarea': {\r\n marginTop: 7,\r\n padding: 8,\r\n fontSize: 14,\r\n lineHeight: '19px',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n borderRadius: '2px',\r\n background: '#FFFFFF',\r\n width: '100%',\r\n },\r\n '& .remaining-hint': {\r\n textAlign: 'right',\r\n marginTop: 3,\r\n marginBottom: 3,\r\n fontSize: 12,\r\n lineHeight: '16px',\r\n },\r\n },\r\n },\r\n '& .non-appeal-msg-panel': {\r\n margin: '11px 0px 0px 1px',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { clone } from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport React, { useEffect, useRef, useMemo } 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 EditorView from '@bingads-webui-campaign-legacy/editorial-appeal/view/editor';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport { getRequestFormStyle } from './style';\r\n\r\nexport const LegacyEditorialAppealRequestForm = React.memo(({\r\n id, className, appealTitle, infoMsg, appealData, appealIds, onChange,\r\n}) => {\r\n const view = useRef();\r\n const viewListener = useMemo(() => clone(Backbone.Events), []);\r\n let container;\r\n\r\n useEffect(() => {\r\n view.current = new EditorView({\r\n appealData,\r\n appealTitle,\r\n infoMsg,\r\n hideAppealCheckBox: true,\r\n isForVNext: true,\r\n withRealTimeUpdates: true,\r\n });\r\n\r\n viewListener.listenTo(view.current, 'change', onChange);\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n view.current.toBulk(appealIds);\r\n\r\n return () => {\r\n viewListener.stopListening(view.current);\r\n view.current.remove();\r\n };\r\n }, [appealTitle, container, appealData, appealIds, infoMsg, viewListener, onChange]);\r\n\r\n const classes = useDefaultStyles(getRequestFormStyle);\r\n\r\n return (\r\n \r\n
{ container = ref; }} />\r\n
\r\n );\r\n});\r\n\r\nLegacyEditorialAppealRequestForm.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string,\r\n appealData: PropTypes.shape({}).isRequired,\r\n appealIds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,\r\n appealTitle: PropTypes.string.isRequired,\r\n infoMsg: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nLegacyEditorialAppealRequestForm.defaultProps = {\r\n id: undefined,\r\n className: undefined,\r\n infoMsg: undefined,\r\n};\r\n","import React, { useEffect, useRef } 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 InlineErrorView from '@bingads-webui-campaign-legacy/editorial-appeal/view/inline-error';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport { getRequestFormStyle } from './style';\r\n\r\nexport const LegacyInlineErrorView = React.memo(({\r\n id, className,\r\n}) => {\r\n const view = useRef();\r\n let container;\r\n\r\n useEffect(() => {\r\n view.current = new InlineErrorView({ rowId: 'bulk', useKwCss: true });\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n }, [container]);\r\n\r\n const classes = useDefaultStyles(getRequestFormStyle);\r\n\r\n return (\r\n \r\n
{ container = ref; }} />\r\n
\r\n );\r\n});\r\n\r\nLegacyInlineErrorView.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string,\r\n};\r\n\r\nLegacyInlineErrorView.defaultProps = {\r\n id: undefined,\r\n className: undefined,\r\n};\r\n","import { first } from 'underscore';\r\nimport React, { useCallback, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton, PrimaryButton, Panel, PanelType, Stack } from '@fluentui/react';\r\nimport { LegacyEditorialAppealRequestForm, LegacyInlineErrorView } from '@bingads-webui-campaign-react/legacy-editorial-appeal-request-form';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeStyles, fabricPanelFixStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst PANEL_WIDTH = 784;\r\n\r\nexport const panelStylesProp = {\r\n footer: {\r\n ...fabricPanelFixStyle().footer,\r\n },\r\n commands: {\r\n zIndex: 1,\r\n },\r\n content: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n};\r\n\r\nconst getStyles = (components, theme = {}) => ({\r\n uiBlockerAdapter: {\r\n ...mergeStyles(\r\n { theme },\r\n components.reactUIBlockerStyle(theme.palette, 'rgba(255, 255, 255, 0.4)'),\r\n {\r\n '& .react-block-ui-none, & .react-block-ui': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden', // to not extend to the content, but shrink to flex-parent\r\n },\r\n },\r\n {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden',\r\n }\r\n ),\r\n },\r\n});\r\n\r\nexport const EditorialAppealRequestPanel = ({\r\n i18n, onSave, onCancel, title, appealDataPromise,\r\n}) => {\r\n const [appealData, setAppealData] = useState(null);\r\n const [appealIds, setAppealIds] = useState([]);\r\n const [isBusy, setIsBusy] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n\r\n const handleAppealData = useCallback((aggregatedRejectReasons) => {\r\n setAppealData(first(aggregatedRejectReasons.appealData));\r\n setAppealIds(aggregatedRejectReasons.appealIds);\r\n }, []);\r\n const handleAppealDataError = useCallback(() => {\r\n setHasError(true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n setIsBusy(true);\r\n setAppealData(null);\r\n setAppealIds([]);\r\n setHasError(false);\r\n appealDataPromise.then(handleAppealData).catch(handleAppealDataError).finally(() => setIsBusy(false));\r\n }, [appealDataPromise, handleAppealData, handleAppealDataError]);\r\n\r\n const [editorialAppealFormData, setEditorialAppealFormData] = useState();\r\n const [isEditorialAppealFormDataValid, setIsEditorialAppealFormDataValid] = useState(false);\r\n const onEditorialAppealChange = useCallback((data, isValid) => {\r\n setEditorialAppealFormData(data);\r\n setIsEditorialAppealFormDataValid(isValid);\r\n }, []);\r\n\r\n const onSaveClick = useCallback(() => {\r\n onSave(editorialAppealFormData, appealIds);\r\n }, [onSave, editorialAppealFormData, appealIds]);\r\n\r\n const onCancelClick = useCallback(() => {\r\n onCancel();\r\n }, [onCancel]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Request exception'))}\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, hasError, isEditorialAppealFormDataValid]);\r\n\r\n\r\n return (\r\n \r\n \r\n {hasError &&\r\n \r\n }\r\n {!hasError && appealData &&\r\n \r\n }\r\n \r\n \r\n );\r\n};\r\n\r\nEditorialAppealRequestPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n title: PropTypes.string.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n appealDataPromise: PropTypes.shape({\r\n then: PropTypes.func.isRequired,\r\n catch: PropTypes.func.isRequired,\r\n finally: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nEditorialAppealRequestPanel.defaultProps = {\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport ko from 'knockout';\r\nimport { isArray, each, bind, isEqual } from 'underscore';\r\nimport React from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { Toggle, Text } from '@fluentui/react';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport AutoTargetView from '@bingads-webui-campaign-legacy/auto-targets/view/create/index';\r\nimport { dsaCampaignStyles, creationCommonStyle, campaignSettingsStyles, adgroupsKeywordsStyles } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nexport const getStyles = (_, { palette = {} }) => (\r\n Object.assign(\r\n {},\r\n {\r\n finalUrlContainer: Object.assign(\r\n {},\r\n creationCommonStyle({ palette }),\r\n dsaCampaignStyles({ palette }),\r\n campaignSettingsStyles({ palette }),\r\n adgroupsKeywordsStyles({ palette })\r\n ),\r\n }\r\n )\r\n);\r\n\r\nclass LegacyFinalUrlExpansionUnStyled extends React.Component {\r\n static propTypes = {\r\n data: PropTypes.shape({\r\n length: PropTypes.number,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n setFinalUrlExpansionsView: PropTypes.func.isRequired,\r\n isFinalUrlExpansionEnabled: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n finalUrlContainer: PropTypes.string,\r\n }).isRequired,\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n const { isFinalUrlExpansionEnabled } = props;\r\n this.state = { isFinalUrlExpansionEnabled };\r\n this.view = React.createRef();\r\n this.container = null;\r\n this.operatorMap = {\r\n Equals: this.props.i18n.getString(_TL_('equals')),\r\n Contains: this.props.i18n.getString(_TL_('contains')),\r\n };\r\n\r\n this.operandMap = {\r\n Url: this.props.i18n.getString(_TL_('URL')),\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setViewAndUpdateViewModel();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (!isEqual(prevProps.data, this.props.data) || prevProps.isFinalUrlExpansionEnabled !== this.props.isFinalUrlExpansionEnabled) {\r\n this.setViewAndUpdateViewModel();\r\n }\r\n // We will refresh the view if data changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }\r\n\r\n setViewAndUpdateViewModel() {\r\n if (this.state.isFinalUrlExpansionEnabled) {\r\n if (!this.view.current) {\r\n this.view.current = new AutoTargetView({\r\n isForVNext: true,\r\n onChange: bind((newData) => {\r\n this.props.onChange({\r\n finalUrlExpansionOptOut: !this.state.isFinalUrlExpansionEnabled,\r\n finalUrlExpansionsBulkUpsert: newData,\r\n });\r\n }),\r\n isNegativeAutoTarget: true,\r\n isShowUrlOnly: true,\r\n selectedItem: 'mixedspecificwebpage',\r\n hideViewSelection: true,\r\n hideWebsiteLabel: true,\r\n isExclude: true,\r\n });\r\n }\r\n\r\n this.view.current.render();\r\n this.view.current.$el.appendTo(this.container);\r\n this.props.setFinalUrlExpansionsView(this.view);\r\n\r\n if (isArray(this.props.data)) {\r\n let toAddToViewModel = [];\r\n this.view.current.updateViewModels(cloneDeep(this.props.data));\r\n each(this.props.data, (target) => {\r\n let isExactMatch = false;\r\n const conditions = target.Criterion.WebPage.Parameter.Conditions;\r\n const results = [];\r\n\r\n each(conditions, (condition) => {\r\n if (condition.Operator === 'Equals') {\r\n isExactMatch = true;\r\n results.push({\r\n conditions: [{\r\n Operand: condition.Operand,\r\n ArgumentOperand: condition.ArgumentOperand,\r\n Operator: condition.Operator,\r\n DisplayOperator: this.operatorMap[condition.Operator],\r\n DisplayOperand: this.operandMap[condition.Operand],\r\n },\r\n ],\r\n type: 'exacturls',\r\n });\r\n } else {\r\n results.push({\r\n Operand: ko.observable(condition.Operand),\r\n ArgumentOperand: ko.observable(condition.ArgumentOperand),\r\n Operator: ko.observable(condition.Operator),\r\n DisplayOperator: ko.observable(this.operatorMap[condition.Operator]),\r\n DisplayOperand: ko.observable(this.operandMap[condition.Operand]),\r\n });\r\n }\r\n });\r\n\r\n if (isExactMatch) {\r\n toAddToViewModel = toAddToViewModel.concat(results);\r\n } else {\r\n toAddToViewModel.push({\r\n conditions: results,\r\n type: 'specificpage',\r\n shouldCheckArgumentOperandFormat: true,\r\n });\r\n }\r\n });\r\n if (this.props.data.length > 0) {\r\n this.view.current.selectedTargetsView.viewmodel.addBatch(toAddToViewModel);\r\n }\r\n }\r\n\r\n return () => {\r\n this.view.current.remove();\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n static i8n = I18nContext;\r\n\r\n render() {\r\n const onToggle = (event, checked) => {\r\n this.setState({\r\n isFinalUrlExpansionEnabled: checked,\r\n }, () => {\r\n if (!checked) {\r\n this.view.current.selectedTargetsView.viewmodel.clear();\r\n } else {\r\n this.props.onChange({\r\n finalUrlExpansionOptOut: false,\r\n });\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n {this.state.isFinalUrlExpansionEnabled &&\r\n
\r\n
\r\n \r\n {this.props.i18n.getString(_TL_('You have the option to exclude certain webpages from being displayed in your ads. Please note that these URLs won’t appear in your ads even if you’ve enabled Final URL expansion. The exclusion list requires 24 hours for it to become fully effective.'))}\r\n \r\n
\r\n
{ this.container = ref; }} />\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport const LegacyFinalUrlExpansion = withDefaultStyles(LegacyFinalUrlExpansionUnStyled, getStyles);\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { LegacyFinalUrlExpansion } from './legacy-final-url-expansion';\r\n\r\n\r\nconst LegacyFinalUrlExpansionWithCustomValidation = ({ validationProps, updateValidation, ...restProps }) => {\r\n const { data: finalUrlExpansions } = validationProps;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], newData);\r\n\r\n if (activity) {\r\n activity.signal(`onLegacyFinalUrlExpansionChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nLegacyFinalUrlExpansionWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedLegacyFinalUrlExpansion = withCustomValidation(LegacyFinalUrlExpansionWithCustomValidation);\r\n","export const LISTING_GROUP_PERF_MARKER = 'Listing_Group';\r\nexport const LISTING_GROUP_TREE_ROUTING = '/campaign/vnext/listinggroups/hierarchy';\r\nexport const LISTING_GROUP_LIST_ROUTING = '/campaign/vnext/listinggroups/list';\r\nexport enum GridType {\r\n List = 'List',\r\n Tree = 'Tree',\r\n}\r\nexport const GRID_NAME = 'ListingGroupGrid';\r\nexport const columnChooserId = 'dropdown-column-chooser';\r\nexport enum ScopeLevel {\r\n Campaign = 'campaign',\r\n AssetGroup = 'assetGroup',\r\n}\r\nexport const nameColumnOdataPath = 'Condition/Attribute';\r\n\r\nexport const treeViewButtonId = 'button-hierarchy-view';\r\n\r\nexport const listViewButtonId = 'button-list-view';\r\n\r\nexport const firstColumnName = 'primary';\r\nexport const conversionsFiledName = 'conversions';\r\nexport const impressionsFiledName = 'impressions';\r\nexport const clicksFiledName = 'clicks';\r\nexport const hotelsFiledName = 'hotels';\r\n\r\nexport const EVERYTHING_ELSE_NODE_ATTRIBUTE = '';\r\n\r\nexport type NullPartial = {\r\n [P in keyof T]: T[P] | null;\r\n};\r\n","import { mergeStyles } from '@fluentui/react';\r\n\r\nexport const paginatorStyleClassName = mergeStyles({\r\n display: 'flex',\r\n '& .page-size-selector': {\r\n display: 'flex',\r\n '& .page-size-selector-dropdown': {\r\n marginLeft: 8,\r\n },\r\n },\r\n '& .page-index-selector': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginLeft: 12,\r\n '& .page-index-selector-dropdown': {\r\n marginRight: 8,\r\n },\r\n '& .page-change-icon': {\r\n marginLeft: 8,\r\n marginRight: 8,\r\n },\r\n },\r\n});\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport { assert } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Dropdown, IconButton, IDropdownOption, Label, IDropdownProps } from '@fluentui/react';\r\nimport { useId } from '@fluentui/react-hooks';\r\nimport React, { FC, useContext } from 'react';\r\nimport { paginatorStyleClassName } from './paginator.styles';\r\n\r\nexport interface PaginatorProps {\r\n className?: string;\r\n /**\r\n * @default _TL_(\"Show rows:\")\r\n */\r\n pageSizeLabel?: string;\r\n /**\r\n * @default [10,20,50]\r\n */\r\n pageSizeOptions?: number[];\r\n totalCount: number;\r\n currentPage: number;\r\n pageSize: number;\r\n onPageIndexChange(pageNum: number): void;\r\n onPageSizeChange(pageSize: number): void;\r\n}\r\n\r\nfunction buildPageSizeOptions(selectedPageSize: number, pageSizeOptions: number[]): IDropdownOption[] {\r\n assert(pageSizeOptions.includes(selectedPageSize));\r\n return pageSizeOptions.map(pageSize => ({\r\n key: pageSize,\r\n text: pageSize.toString(),\r\n selected: selectedPageSize === pageSize,\r\n data: pageSize,\r\n }));\r\n}\r\n\r\nfunction buildPageIndexOptions(selectedPageIndex: number, pageIndexOptions: number[]): IDropdownOption[] {\r\n assert(pageIndexOptions.includes(selectedPageIndex));\r\n return pageIndexOptions.map(pageIndex => ({\r\n key: pageIndex,\r\n text: pageIndex.toString(),\r\n selected: selectedPageIndex === pageIndex,\r\n data: pageIndex,\r\n }));\r\n}\r\n\r\nexport const Paginator: FC = (props) => {\r\n const {\r\n className,\r\n currentPage,\r\n onPageIndexChange,\r\n onPageSizeChange,\r\n pageSize,\r\n totalCount,\r\n pageSizeLabel = _TL_('Show rows:'),\r\n pageSizeOptions = [10, 20, 50],\r\n } = props;\r\n assert(currentPage >= 1);\r\n const i18n: any = useContext(I18nContext);\r\n const pageCount = Math.ceil(totalCount / pageSize);\r\n\r\n const pageSizeSelectorId = useId('page-size-selector');\r\n const pageSizeSelectorOptions = buildPageSizeOptions(pageSize, pageSizeOptions);\r\n const pageIndexSelectorOptions = buildPageIndexOptions(currentPage, Array.from(Array(pageCount), (_, i) => i + 1));\r\n\r\n const PREVIOUS_BUTTON = i18n.getString(_TL_('Previous page'));\r\n const NEXT_BUTTON = i18n.getString(_TL_('Next page'));\r\n\r\n function pageIndexChangeHandler(newPageIndex: number) {\r\n onPageIndexChange(newPageIndex);\r\n }\r\n\r\n function onPageSizeSelectorChange(event: React.FormEvent, option?: IDropdownOption) {\r\n const newPageSize = option.data;\r\n onPageSizeChange(newPageSize);\r\n\r\n // when change page size, the currentPageIndex might be out of range. If so, set it to the new last page.\r\n const newMaxPageNum = Math.ceil(totalCount / newPageSize);\r\n if (currentPage > newMaxPageNum) {\r\n pageIndexChangeHandler(newMaxPageNum);\r\n }\r\n }\r\n\r\n const onPageIndexSelectorChange: IDropdownProps['onChange'] = (event, option) => {\r\n pageIndexChangeHandler(option.data);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n { pageIndexChangeHandler(currentPage - 1); }}\r\n />\r\n \r\n {` / ${pageCount}`}\r\n { pageIndexChangeHandler(currentPage + 1); }}\r\n />\r\n
\r\n
\r\n );\r\n};\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { DefaultButton, PrimaryButton, Stack, TextField, ITextFieldProps, mergeStyles } from '@fluentui/react';\r\nimport React, { FC, useContext, useState } from 'react';\r\n\r\nexport interface BulkAddEditorProps {\r\n className?: string;\r\n onSubmit(bulkValues: string[]): void;\r\n onCancel(): void;\r\n}\r\n\r\nfunction formatRawString(value: string) {\r\n const values = value.split(/[\\n\\r]/).map(str => str.trim()).filter(str => str !== '');\r\n const unqiue = new Set();\r\n const res: string[] = [];\r\n values.forEach((v) => {\r\n if (!unqiue.has(v.toLowerCase())) {\r\n unqiue.add(v);\r\n res.push(v);\r\n }\r\n });\r\n return res;\r\n}\r\n\r\nconst bulkAddEditorStyleClassName = mergeStyles({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .bulk-add-editor-textarea': {\r\n paddingLeft: 16,\r\n paddingRight: 16,\r\n },\r\n});\r\n\r\n// This component is only used for add new bulk-enabled values\r\nexport const BulkAddEditor: FC = (props) => {\r\n const {\r\n className,\r\n onCancel,\r\n onSubmit,\r\n } = props;\r\n const i18n: any = useContext(I18nContext);\r\n\r\n const [value, setValue] = useState('');\r\n\r\n function onClickSubmit() {\r\n const finalValues = formatRawString(value ?? '');\r\n onSubmit(finalValues);\r\n }\r\n\r\n function onClickCancel() {\r\n onCancel();\r\n }\r\n\r\n const onValueChange: ITextFieldProps['onChange'] = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n {i18n.getString(_TL_('Submit'))}\r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n","/* eslint-disable react/jsx-filename-extension */\r\n/* eslint-disable react/prop-types */\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { DefaultButton, Dropdown, IColumn, IDropdownOption, Label, Panel, PanelType, PrimaryButton, ShimmeredDetailsList, Stack, Selection, IGroup, IDetailsListCheckboxProps, IRenderFunction, mergeStyles, CheckboxVisibility, CollapseAllVisibility, CommandBarButton, IIconProps, IDropdownProps, MessageBar } from '@fluentui/react';\r\nimport { useId, usePrevious } from '@fluentui/react-hooks';\r\nimport { Loading } from '@bingads-webui-campaign-react/loading';\r\nimport { ListViewSelectionZone } from '@bingads-webui-grid/well-known';\r\nimport React, { FC, useContext, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Paginator } from './paginator';\r\nimport { BulkAddEditorProps, BulkAddEditor } from './BulkAddEditor';\r\n\r\nconst panelStyles = {\r\n main: {\r\n top: 60,\r\n },\r\n content: {\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n display: 'flex',\r\n overflow: 'hidden',\r\n },\r\n footerInner: {\r\n padding: 0,\r\n borderTop: '1px solid #EDEBE9',\r\n },\r\n} as const;\r\n\r\nconst overlayProps = {\r\n styles: {\r\n root: {\r\n top: 60,\r\n },\r\n },\r\n};\r\n\r\nconst panelSelectorStyleClassName = mergeStyles({\r\n '& .content': {\r\n display: 'flex',\r\n flex: 1,\r\n flexDirection: 'column',\r\n '& .divider': {\r\n display: 'flex',\r\n marginLeft: 28,\r\n marginTop: 16,\r\n marginBottom: 16,\r\n '& .divider-dropdown': {\r\n marginLeft: 8,\r\n width: 220,\r\n },\r\n },\r\n '& .bulk-value-editor-toggler': {\r\n height: 32,\r\n marginLeft: 28,\r\n marginTop: 16,\r\n marginBottom: 6,\r\n },\r\n '& .grid': {\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flex: 1,\r\n flexDirection: 'column',\r\n '& .list-view-selection-zone': {\r\n display: 'flex',\r\n flex: 1,\r\n overflow: 'hidden',\r\n },\r\n '& .ms-Viewport': {\r\n display: 'flex',\r\n flex: 1,\r\n '& .ms-DetailsList': {\r\n marginBottom: 0,\r\n '& div[role=grid]': {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .ms-DetailsList-contentWrapper': {\r\n overflowY: 'overlay',\r\n overflowX: 'hidden',\r\n '.ms-List-cell': {\r\n minHeight: 0, // empty group should not ocupy any space\r\n },\r\n },\r\n },\r\n },\r\n },\r\n '& .paginator': {\r\n marginLeft: 16,\r\n marginTop: 12,\r\n },\r\n },\r\n '& .error-region': {\r\n color: '#A80000',\r\n },\r\n },\r\n});\r\n\r\nconst onRenderSquareCheckbox: IRenderFunction = (props) => {\r\n assertIsDefined(props, 'props of checkbox render is undefined');\r\n const { checked } = props;\r\n\r\n // Do not use Chekbox of FluentUI. It is hard to manage events when working with `SelectionZone`(used by DetailsList)\r\n return ();\r\n};\r\n\r\nconst addIcon: IIconProps = { iconName: 'Add' };\r\n\r\nexport type WithBulk =\r\n { __bulk?: boolean; } & T;\r\n\r\nexport interface PanelSelectorProps {\r\n enableShimmer?: boolean;\r\n isOpen: boolean;\r\n /**\r\n *\r\n */\r\n onSave: (selectedItems: WithBulk[], selectedDimension: IDropdownOption) => void;\r\n onCancel: () => void;\r\n /**\r\n * Dimension Dropdown\r\n *\r\n * Control this variable to show default selected dimension\r\n */\r\n dimensions: IDropdownOption[];\r\n onSelectedDimensionChange: NonNullable;\r\n columns: IColumn[];\r\n /**\r\n * If the key of item is a negative number, it is added by `bulk add values`\r\n */\r\n items: any[];\r\n initialSelectedItems: any[];\r\n headerText: string;\r\n keyOfItem: (item: any) => string;\r\n /**\r\n * Some dimensions are avaliable to give arbitry values to divide them.\r\n *\r\n * If so, enable this flag so user could input arbitry values.\r\n */\r\n isBulkAddEnabledForDimension: (diemnsion: IDropdownOption) => boolean;\r\n\r\n // Error handing\r\n getErrors?: (selectedItems: any[], selectedDimension: IDropdownOption) => string[];\r\n}\r\n\r\nfunction copyAndSort(items: T[], columnKey: string, isSortedDescending?: boolean): T[] {\r\n const key = columnKey as keyof T;\r\n return items.slice(0).sort((a, b) => {\r\n const aValue = a[key];\r\n const bValue = b[key];\r\n let res = 0;\r\n if (aValue !== undefined && bValue !== undefined) {\r\n res = aValue > bValue ? 1 : -1;\r\n } else if (aValue === undefined && bValue === undefined) {\r\n res = 0;\r\n } else {\r\n // assume undefined as -Infinate\r\n res = aValue !== undefined ? 1 : -1;\r\n }\r\n return isSortedDescending ? -res : res;\r\n });\r\n}\r\n\r\nexport const PanelSelector: FC = (props) => {\r\n const {\r\n enableShimmer, isOpen, headerText,\r\n columns, items, dimensions,\r\n onCancel, onSave, onSelectedDimensionChange,\r\n initialSelectedItems, keyOfItem, isBulkAddEnabledForDimension,\r\n getErrors,\r\n } = props;\r\n const i18n: any = useContext(I18nContext);\r\n\r\n const preItems = usePrevious(items);\r\n const preColumns = usePrevious(columns);\r\n const preDimensions = usePrevious(dimensions);\r\n const preInitialSelectedItems = usePrevious(initialSelectedItems);\r\n\r\n const [finalItems, setFinalItemsImpl] = useState(items);\r\n const setFinalItems: typeof setFinalItemsImpl = (param) => {\r\n let finalValue;\r\n if (typeof param === 'function') {\r\n setFinalItemsImpl((pre) => {\r\n finalValue = param(pre);\r\n return finalValue;\r\n });\r\n } else {\r\n finalValue = param;\r\n setFinalItemsImpl(finalValue);\r\n }\r\n\r\n // / sync items and selected to selection\r\n // when dimension is still same, if all items are all selected in pre state, keep all selected\r\n // when dimension is changed, only when next dimension is default dimension and `initialSelectedItems` is `finalItems`, it is all selected\r\n\r\n const defaultSelectedDimension = getDefaultSelectedDimension();\r\n assertIsDefined(defaultSelectedDimension);\r\n assertIsDefined(selectedDimension);\r\n const isSelectedDimensionChanged = previousSelectedDimension?.key !== selectedDimension.key;\r\n\r\n const isCurrentAllSelected = selection.isAllSelected();\r\n let isNextAllSelect = false;\r\n const isDefaultDimensionSelected = selectedDimension.key === defaultSelectedDimension.key;\r\n if (isDefaultDimensionSelected && initialSelectedItems.length !== 0) {\r\n isNextAllSelect = initialSelectedItems.length === finalValue.length; // a quick and dirty check\r\n }\r\n\r\n const isEventSupressed = isSelectedDimensionChanged ? isCurrentAllSelected === isNextAllSelect : true;\r\n\r\n selection.setChangeEvents(false);\r\n if (finalValue) {\r\n selection.setItems(finalValue, true);\r\n }\r\n selection.setChangeEvents(true, isEventSupressed);\r\n if (isNextAllSelect) {\r\n setSelectedItemKeys(initialSelectedItems.map(keyOfItem));\r\n }\r\n setSelectedItemKeys((selectedItemKeys) => {\r\n selection.setChangeEvents(false);\r\n selectedItemKeys.forEach((key) => {\r\n selection.setKeySelected(key, true, false);\r\n });\r\n selection.setChangeEvents(true, isEventSupressed);\r\n return selectedItemKeys;\r\n });\r\n };\r\n\r\n const [finalColumns, setFinalColumns] = useState(columns);\r\n\r\n const [selectedItemKeys, setSelectedItemKeys] = useState([]);\r\n\r\n const selection = useMemo(() => new Selection({\r\n onSelectionChanged: () => {\r\n // The main purpose is to sync user operation to `selectedItemKeys`\r\n setSelectedItemKeys((pre) => {\r\n const newSelectedItemKeysCandidate = selection.getSelection().map(keyOfItem);\r\n if (pre.join() !== newSelectedItemKeysCandidate.join()) { return newSelectedItemKeysCandidate; }\r\n return pre;\r\n });\r\n },\r\n getKey: keyOfItem,\r\n items: finalItems,\r\n }), []);\r\n\r\n useEffect(() => {\r\n // if dimensions changes, update selectedDimension\r\n // if defualt selected dimension changes, update selectedDimension\r\n if (\r\n dimensions.map(dimension => dimension.key).join() !== (preDimensions?.map(dimension => dimension.key) ?? []).join()\r\n || dimensions.map(dimension => dimension.selected).join() !== (preDimensions?.map(dimension => dimension.selected) ?? []).join()\r\n ) {\r\n setSelectedDimension(getDefaultSelectedDimension());\r\n }\r\n\r\n // if items chagnes, update finalItems\r\n if (items.map(keyOfItem).join() !== (preItems?.map(keyOfItem) ?? []).join()) {\r\n setFinalItems(items);\r\n }\r\n\r\n // if initialSelectedItems changes, update selectedItemKeys\r\n if (initialSelectedItems.map(keyOfItem).join() !== preInitialSelectedItems?.map(keyOfItem).join()) {\r\n setSelectedItemKeys(initialSelectedItems.map(keyOfItem));\r\n }\r\n\r\n // if selection does not match selectedItemKeys, sync to selectedItemKeys\r\n if (selectedItemKeys.join() !== selection.getSelection().map(keyOfItem).join()) {\r\n selection.setChangeEvents(false);\r\n selectedItemKeys.forEach((key) => {\r\n selection.setKeySelected(key, true, false);\r\n });\r\n selection.setChangeEvents(true, true);\r\n }\r\n\r\n // if columns changes, update finalColumns\r\n if (columns.map(c => c.key).join() !== (preColumns?.map(c => c.key) ?? []).join()) {\r\n setFinalColumns(columns);\r\n // eslint-disable-next-line brace-style\r\n }\r\n // if column changes, we do not need to update binding of finalColumns\r\n else {\r\n // bind column click\r\n finalColumns.forEach((finalColumn) => {\r\n // eslint-disable-next-line no-param-reassign\r\n finalColumn.onColumnClick = (ev, column) => {\r\n // bind sort\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n setFinalColumns((preColumns) => {\r\n let { isSortedDescending } = column;\r\n if (column.isSorted) {\r\n isSortedDescending = !isSortedDescending;\r\n }\r\n setFinalItems(pre =>\r\n copyAndSort(pre, column.fieldName!, isSortedDescending));\r\n return preColumns.map(preColumn => ({\r\n ...preColumn,\r\n isSorted: preColumn.key === column.key,\r\n isSortedDescending: preColumn.key === column.key ? isSortedDescending : undefined,\r\n }));\r\n });\r\n };\r\n });\r\n }\r\n });\r\n\r\n const dimensionSelectorId = useId('divide-by');\r\n\r\n const [currentPageSize, setCurrentPageSize] = useState(20);\r\n const [currentPageIndex, setCurrentPageIndex] = useState(1);\r\n\r\n // use groups as false pages\r\n const pageCount = Math.ceil(finalItems.length / currentPageSize);\r\n\r\n const groups: IGroup[] = Array(pageCount).fill(null).map((_, i) => ({\r\n key: i.toString(), // maybe we should add currentPageSize and currentPageIndex as part of key?\r\n name: '', // name is not important, the group header should never be rendered.\r\n startIndex: i * currentPageSize,\r\n count: currentPageSize,\r\n isCollapsed: i + 1 !== currentPageIndex, // page is base-1, array index is base 0\r\n }));\r\n\r\n function onSaveClick() {\r\n const selectedItems = finalItems.filter(item => selectedItemKeys.includes(keyOfItem(item)));\r\n assertIsDefined(selectedDimension);\r\n onSave(selectedItems, selectedDimension);\r\n }\r\n\r\n const onRenderFooterContent = () => (\r\n
\r\n \r\n {i18n.getString(_TL_('Save'))}\r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n );\r\n\r\n const isLoading = enableShimmer;\r\n\r\n const [isBulkAddEditorOpened, setIsBulkAddEditorOpened] = useState(false);\r\n\r\n const [selectedDimension, setSelectedDimension] = useState(getDefaultSelectedDimension);\r\n const previousSelectedDimension = usePrevious(selectedDimension);\r\n\r\n const errors = isLoading ? [] : getErrors?.(\r\n finalItems.filter(item => selectedItemKeys.includes(keyOfItem(item))),\r\n selectedDimension!\r\n );\r\n\r\n /** Always negative and not repeat, chooser a big enough number to avoid conflict with ID from API */\r\n const customCounter = useRef(-100000);\r\n\r\n function onClickBulkAddValues() {\r\n setIsBulkAddEditorOpened(true);\r\n }\r\n\r\n const onBulkAddEditorCancel: BulkAddEditorProps['onCancel'] = () => {\r\n setIsBulkAddEditorOpened(false);\r\n };\r\n\r\n function buildNewItemsByBulkAdd(strings: string[]) {\r\n return strings.map(s => ({\r\n __bulk: true,\r\n key: customCounter.current--,\r\n [firstColumnName]: s,\r\n }));\r\n }\r\n\r\n const onBulkAddEditorCommit: BulkAddEditorProps['onSubmit'] = (newValues) => {\r\n // Note: for current, `PanelSelector` do not do anything like deduplicate, so user might have multi same values\r\n // The callback should make sure the situation is handled correctly\r\n const newItems = buildNewItemsByBulkAdd(newValues);\r\n setFinalItems(pre => [...newItems, ...pre]);\r\n setSelectedItemKeys((pre) => {\r\n const newKeys = newItems.map(item => keyOfItem(item));\r\n const newSelectedItemKeys = [...pre, ...newKeys];\r\n\r\n selection.setChangeEvents(false);\r\n newSelectedItemKeys.forEach((key) => {\r\n selection.setKeySelected(key, true, false);\r\n });\r\n selection.setChangeEvents(true);\r\n\r\n return newSelectedItemKeys;\r\n });\r\n setIsBulkAddEditorOpened(false);\r\n };\r\n\r\n function renderBulkValueEditor() {\r\n return (\r\n
\r\n {selectedDimension && isBulkAddEnabledForDimension(selectedDimension) &&\r\n (!isBulkAddEditorOpened ?\r\n \r\n : )\r\n }\r\n
\r\n );\r\n }\r\n\r\n function getDefaultSelectedDimension() {\r\n return dimensions.find(dimension => dimension.selected === true);\r\n }\r\n\r\n const onSelectedDimensionChangeInner: IDropdownProps['onChange'] = (event, option, index) => {\r\n setSelectedDimension(option!);\r\n onSelectedDimensionChange(event, option, index);\r\n setCurrentPageIndex(1);\r\n };\r\n\r\n\r\n function renderErrorMessages() {\r\n return (\r\n
\r\n {errors?.map(error => (
{error}
))}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n {isLoading ?\r\n \r\n :\r\n \r\n
\r\n \r\n \r\n
\r\n {renderBulkValueEditor()}\r\n {finalItems.length === 0 &&\r\n \r\n {i18n.getString(_TL_('No suggestions available. Please add values manually.'))}\r\n \r\n }\r\n
\r\n {/* After Fluent UI is updated to a version that have `selectionClearedOnSurfaceClick` in `SelectionZone` */}\r\n {/* We should deprecated `ListViewSelectionZone` immediately. */}\r\n \r\n null, // only show items in current page\r\n collapseAllVisibility: CollapseAllVisibility.hidden,\r\n }}\r\n disableSelectionZone\r\n />\r\n \r\n {finalItems.length > 0 && }\r\n
\r\n {renderErrorMessages()}\r\n
\r\n }\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * This is exported for `bulk add`\r\n *\r\n * Or we could export another callback for `bulk add value`, then let users to change items by themself, but it is kind of heavy.\r\n */\r\nexport const firstColumnName = 'primary';\r\n","import { ColumnRawData } from '@bingads-webui-grid/well-known';\r\n\r\nexport const ListingGroupColumn: ColumnRawData = {\r\n key: 'ListingGroup',\r\n name: _TL_('Listing group'),\r\n};\r\n\r\n/**\r\n * @deprecated\r\n */\r\nexport const AssetGroupColumn: ColumnRawData = {\r\n key: 'AssetGroup',\r\n name: _TL_('Asset group'),\r\n};\r\n\r\nexport const AssetGroupNameColumn: ColumnRawData = {\r\n key: 'AssetGroupName',\r\n name: _TL_('Asset group'),\r\n};\r\n\r\nexport const ListingColumn: ColumnRawData = {\r\n key: 'Listing',\r\n name: _TL_('Products'),\r\n};\r\n\r\nexport const IncludeExcludeColumn: ColumnRawData = {\r\n key: 'IncludeExclude',\r\n name: _TL_('Inclusion'),\r\n};\r\n","/* eslint-disable no-use-before-define */\r\nimport {\r\n absoluteTopImpressionRateColumn, advertiserReportedRevenue, allConversionAdvertiserReportedRevenue, allConversionCPAColumn,\r\n allConversionRateColumn, allConversionRevenueOnAdSpendColumn, allConversionsColumn, averageCPCColumn, averageCPMColumn, clicksColumn, conversionRateColumn,\r\n conversionsColumn, CPAColumn, CTRColumn, impressionsColumn, returnOnAdSpendColumn, spendColumn, I18n, ColumnChooserCategory, SelectOption,\r\n ColumnRawData, ColumnChooserColumnOption, averageCPSColumn, salesCountColumn\r\n} from '@bingads-webui-grid/well-known';\r\nimport { GridType, ScopeLevel } from '../../../constant';\r\nimport {\r\n ListingGroupColumn, AssetGroupNameColumn, IncludeExcludeColumn\r\n} from '../../../rawColumns';\r\n\r\ninterface GetColumnChooserCategoriesOptions {\r\n gridType: GridType,\r\n i18n: I18n,\r\n scopeLevel: ScopeLevel,\r\n permissions: any,\r\n}\r\n\r\nexport function getColumnChooserCategories(parameters: GetColumnChooserCategoriesOptions): ColumnChooserCategory[] {\r\n const {\r\n gridType, i18n, scopeLevel, permissions,\r\n } = parameters;\r\n\r\n const cpsColumnsEnabled = permissions && permissions.dynamic && permissions.dynamic.SupportCPSForPmax;\r\n\r\n const attributesCategory: ColumnChooserCategory = {\r\n name: i18n.getString(_TL_('Attributes')),\r\n type: 'Attributes',\r\n options: getAttributeColumnKeys(gridType, scopeLevel).map(o => buildCategoryOptionFromColumnRawData(o, i18n)),\r\n };\r\n\r\n const performaceCategory: ColumnChooserCategory = {\r\n name: i18n.getString(_TL_('Performance')),\r\n type: 'Performance',\r\n options: getPerfColumnKeys(cpsColumnsEnabled).map(o => buildCategoryOptionFromColumnRawData(o, i18n)),\r\n };\r\n\r\n const conversionsCategory: ColumnChooserCategory = {\r\n name: i18n.getString(_TL_('Conversions')),\r\n type: 'Conversions',\r\n options: getConvColumnKeys(cpsColumnsEnabled).map(o => buildCategoryOptionFromColumnRawData(o, i18n)),\r\n };\r\n\r\n return [\r\n attributesCategory,\r\n performaceCategory,\r\n conversionsCategory,\r\n ];\r\n}\r\n\r\nfunction buildCategoryOptionFromColumnRawData(column: ColumnRawData, i18n: I18n): ColumnChooserColumnOption {\r\n const selectOption = isLockedColumn(column.key);\r\n return {\r\n key: column.key,\r\n name: i18n.getString(column.name),\r\n selectOption,\r\n };\r\n}\r\n\r\nfunction isNotNullOrUndefined(value) {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nfunction getAttributeColumnKeys(gridType: GridType, scopeLevel: ScopeLevel) {\r\n return [\r\n IncludeExcludeColumn,\r\n ListingGroupColumn,\r\n (scopeLevel === ScopeLevel.Campaign) ? AssetGroupNameColumn : undefined,\r\n ].filter(isNotNullOrUndefined);\r\n}\r\n\r\nfunction getPerfColumnKeys(cpsColumnsEnabled) {\r\n const colmuns = [\r\n clicksColumn,\r\n impressionsColumn,\r\n CTRColumn,\r\n spendColumn,\r\n averageCPCColumn,\r\n averageCPMColumn,\r\n absoluteTopImpressionRateColumn,\r\n ];\r\n if (cpsColumnsEnabled) {\r\n colmuns.push(averageCPSColumn);\r\n }\r\n return colmuns;\r\n}\r\n\r\nfunction getConvColumnKeys(cpsColumnsEnabled) {\r\n const colmuns = [\r\n conversionRateColumn,\r\n conversionsColumn,\r\n CPAColumn,\r\n advertiserReportedRevenue,\r\n returnOnAdSpendColumn,\r\n allConversionsColumn,\r\n allConversionRateColumn,\r\n allConversionRevenueOnAdSpendColumn,\r\n allConversionAdvertiserReportedRevenue,\r\n allConversionCPAColumn,\r\n ];\r\n if (cpsColumnsEnabled) {\r\n colmuns.push(salesCountColumn);\r\n }\r\n return colmuns;\r\n}\r\n\r\nconst lockColumns = new Set([\r\n IncludeExcludeColumn.key,\r\n ListingGroupColumn.key,\r\n AssetGroupNameColumn.key,\r\n]);\r\n\r\nfunction isLockedColumn(columnKey: string) {\r\n return lockColumns.has(columnKey) ? SelectOption.locked : SelectOption.optional;\r\n}\r\n","import {\r\n allConversionCPAColumn,\r\n allConversionRateColumn,\r\n allConversionRevenueOnAdSpendColumn,\r\n allConversionsColumn,\r\n averageCPCColumn,\r\n averageCPMColumn,\r\n clicksColumn,\r\n conversionRateColumn,\r\n conversionsColumn,\r\n CPAColumn,\r\n CTRColumn,\r\n impressionsColumn,\r\n advertiserReportedRevenue,\r\n returnOnAdSpendColumn,\r\n spendColumn,\r\n averageCPSColumn,\r\n salesCountColumn\r\n} from '@bingads-webui-grid/well-known';\r\n\r\nexport const legacyI18nOfListingGroup = {\r\n Schema_PerformanceMetrics_Property_Impressions: impressionsColumn.name,\r\n Schema_PerformanceMetrics_Property_Clicks: clicksColumn.name,\r\n Schema_PerformanceMetrics_Property_CTR: CTRColumn.name,\r\n Schema_PerformanceMetrics_Property_Spend: spendColumn.name,\r\n Schema_PerformanceMetrics_Property_AverageCPC: averageCPCColumn.name,\r\n Schema_PerformanceMetrics_Property_AverageCPM: averageCPMColumn.name,\r\n Schema_PerformanceMetrics_Property_Conversions: conversionsColumn.name,\r\n Schema_PerformanceMetrics_Property_ConversionRate: conversionRateColumn.name,\r\n Schema_PerformanceMetrics_Property_RevenueOnAdSpend: returnOnAdSpendColumn.name,\r\n Schema_PerformanceMetrics_Property_AdvertiserReportedRevenue: advertiserReportedRevenue.name,\r\n Schema_PerformanceMetrics_Property_CPA: CPAColumn.name,\r\n Schema_PerformanceMetrics_Property_AllConversions: allConversionsColumn.name,\r\n Schema_PerformanceMetrics_Property_AllConversionRate: allConversionRateColumn.name,\r\n Schema_PerformanceMetrics_Property_AllConversionRevenueOnAdSpend: allConversionRevenueOnAdSpendColumn.name,\r\n Schema_PerformanceMetrics_Property_AllConversionAdvertiserReportedRevenue: advertiserReportedRevenue.name,\r\n Schema_PerformanceMetrics_Property_AllConversionCPA: allConversionCPAColumn.name,\r\n Schema_PerformanceMetrics_Property_AverageCPS: averageCPSColumn.name,\r\n Schema_PerformanceMetrics_Property_SalesCount: salesCountColumn.name,\r\n Schema_PerformanceMetrics_Property_ViewThroughConversions: _TL_('View-through conv.'),\r\n Schema_PerformanceMetrics_Property_ViewThroughConversionsRevenue: _TL_('View-through conv. revenue'),\r\n Schema_PerformanceMetrics_Property_ViewThroughConversionsCPA: _TL_('View-through conv. CPA'),\r\n Schema_PerformanceMetrics_Property_ViewThroughConversionsReturnOnAdSpend: _TL_('View-through conv. return on ad spend'),\r\n Schema_PerformanceMetrics_Property_ViewThroughConversionsRate: _TL_('View-through conv. rate'),\r\n ProductsGrid_Column_All: _TL_('All products'),\r\n ProductsGrid_Column_Brand: _TL_('Brand'),\r\n ProductsGrid_Column_Category1: _TL_('Category (1st level)'),\r\n ProductsGrid_Column_Category2: _TL_('Category (2nd level)'),\r\n ProductsGrid_Column_Category3: _TL_('Category (3rd level)'),\r\n ProductsGrid_Column_Category4: _TL_('Category (4th level)'),\r\n ProductsGrid_Column_Category5: _TL_('Category (5th level)'),\r\n ProductsGrid_Column_CategoryL1: _TL_('Category (1st level)'),\r\n ProductsGrid_Column_CategoryL2: _TL_('Category (2nd level)'),\r\n ProductsGrid_Column_CategoryL3: _TL_('Category (3rd level)'),\r\n ProductsGrid_Column_CategoryL4: _TL_('Category (4th level)'),\r\n ProductsGrid_Column_CategoryL5: _TL_('Category (5th level)'),\r\n ProductsGrid_Column_Channel: _TL_('Channel'),\r\n ProductsGrid_Column_ChannelExclusivity: _TL_('Channel Exclusivity'),\r\n ProductsGrid_Column_Condition: _TL_('Condition'),\r\n ProductsGrid_Column_CountryOfSale: _TL_('Country/region of sale'),\r\n ProductsGrid_Column_CustomLabel0: _TL_('Custom label 0'),\r\n ProductsGrid_Column_CustomLabel1: _TL_('Custom label 1'),\r\n ProductsGrid_Column_CustomLabel2: _TL_('Custom label 2'),\r\n ProductsGrid_Column_CustomLabel3: _TL_('Custom label 3'),\r\n ProductsGrid_Column_CustomLabel4: _TL_('Custom label 4'),\r\n ProductsGrid_Column_GTIN: _TL_('GTIN'),\r\n ProductsGrid_Column_Id: _TL_('Item ID'),\r\n ProductsGrid_Column_Language: _TL_('Language'),\r\n ProductsGrid_Column_MerchantId: _TL_('Merchant identifier'),\r\n ProductsGrid_Column_MPN: _TL_('MPN'),\r\n ProductsGrid_Column_Price: _TL_('Price'),\r\n ProductsGrid_Column_ProductBought: _TL_('Product Bought'),\r\n ProductsGrid_Column_ProductType1: _TL_('Product type (1st level)'),\r\n ProductsGrid_Column_ProductType2: _TL_('Product type (2nd level)'),\r\n ProductsGrid_Column_ProductType3: _TL_('Product type (3rd level)'),\r\n ProductsGrid_Column_ProductType4: _TL_('Product type (4th level)'),\r\n ProductsGrid_Column_ProductType5: _TL_('Product type (5th level)'),\r\n ProductsGrid_Column_Title: _TL_('Title'),\r\n};\r\n\r\n","import { OdataSystemQueryOptions } from './odata';\r\n\r\ntype CustomQueryOptions = {\r\n [x: string]: any;\r\n}\r\n\r\ntype CustomEntityPath = {\r\n [x: string]: number | string;\r\n}\r\n\r\ninterface AdsOdataGeneralEntityPath {\r\n /**\r\n * one of four general scope levels, will be transformed to `Customers(${customerId})` in url if not undefined\r\n */\r\n customerId?: number | undefined;\r\n /**\r\n * one of four general scope levels, will be transformed to `Accounts(${accountId})` in url if not undefined\r\n */\r\n accountId?: number | undefined;\r\n /**\r\n * one of four general scope levels, will be transformed to `Campaigns(${campaignId})` in url if not undefined\r\n */\r\n campaignId?: number | undefined;\r\n /**\r\n * one of four general scope levels, will be transformed to `AssetGroups(${assetGroupId})` in url if not undefined\r\n */\r\n assetGroupId?: number | undefined;\r\n}\r\n\r\nexport interface AdsOdataAPIParamsBase {\r\n /**\r\n * This property should be handled by user to get the correct URL path. There is no way to predicate the order of entity.\r\n *\r\n * The intention is place all relative things together.\r\n */\r\n entityPath: AdsOdataGeneralEntityPath & CustomEntityPath;\r\n queryOptions?: OdataSystemQueryOptions & CustomQueryOptions;\r\n}\r\n\r\ninterface RequestWithPayload {\r\n payload: Payload;\r\n}\r\n\r\n// Copy from https://stackoverflow.com/a/61132308\r\ntype DeepPartial = T extends object ? {\r\n [P in keyof T]?: DeepPartial;\r\n} : T;\r\n\r\nexport type PostOdataAdsAPIParams = AdsOdataAPIParamsBase & RequestWithPayload;\r\n\r\nexport type PatchOdataAdsAPIParams = AdsOdataAPIParamsBase & RequestWithPayload>;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport type GetOdataAdsAPIParams = AdsOdataAPIParamsBase;\r\n\r\n\r\n// @example\r\n// baseUrl: `https://app1.ui.ads-int.microsoft.com:12000/ODataApi/Campaign/V2/`\r\n// path: `ProductListingGroups/Default.GridData`\r\n// adsOdataParams: { customerId:\"123456789\", queryStrings:{$top:1} }\r\n// --> https://app1.ui.ads-int.microsoft.com:12000/ODataApi/Campaign/V2/Customers(123456789)/ProductListingGroups/Default.GridData&$top=1\r\nexport function getFullUrlOfAdsOdata(baseUrl: string, path: string, adsOdataParams: AdsOdataAPIParamsBase) {\r\n const {\r\n queryOptions, entityPath: {\r\n customerId, accountId, campaignId, assetGroupId,\r\n },\r\n } = adsOdataParams;\r\n\r\n const scopeLevelPath = [\r\n '/',\r\n customerId ? `Customers(${customerId})/` : '',\r\n accountId ? `Accounts(${accountId})/` : '',\r\n campaignId ? `Campaigns(${campaignId})/` : '',\r\n assetGroupId ? `AssetGroups(${assetGroupId})/` : '',\r\n ].join('');\r\n\r\n const queryString = Object.entries(queryOptions ?? []).reduce((cur, [key, value]) => {\r\n if (value) {\r\n cur.set(key, value.toString());\r\n }\r\n return cur;\r\n }, new URLSearchParams()).toString();\r\n\r\n // omit `baseUrl`, for we are using a special fetch\r\n const finalUrl = `${scopeLevelPath}${path}${queryString ? `?${queryString}` : ''}`;\r\n return finalUrl;\r\n}\r\n\r\n/**\r\n * @example\r\n * interface CustomEntityPath1{\r\n * custom1: number | string;\r\n * }\r\n *\r\n * type FinalType = PostOdataAdsAPIParams & WithEntityPath\r\n */\r\nexport interface WithEntityPath {\r\n entityPath: T;\r\n}\r\n","import _ from 'underscore';\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { WithTreeViewData } from '@bingads-webui-grid/well-known';\r\nimport { ListingGroupGridItemData } from '../interface';\r\nimport { Model$Listing, Model$ListingCondition, Model$ListingGroup } from '../ApiType';\r\nimport { GetOdataAdsAPIParams, getFullUrlOfAdsOdata } from './adsOdata';\r\n\r\nconst NonSplittableConditions = ['CategoryL1', 'CategoryL2', 'CategoryL3', 'CategoryL4', 'CategoryL5'];\r\n\r\nexport type GetListingGroupConditionsParams = GetOdataAdsAPIParams;\r\n\r\ninterface GetListingGroupConditionsResponseBody {\r\n value: Model$ListingCondition[];\r\n}\r\n\r\nexport function getListingGroupConditionsRequest(baseUrl: string, params: GetListingGroupConditionsParams) {\r\n const path = 'ProductListingGroups/Default.GetProductListingGroupConditions';\r\n const finalUrl = getFullUrlOfAdsOdata(baseUrl, path, params);\r\n return [finalUrl, {\r\n method: 'GET',\r\n }];\r\n}\r\n\r\nexport async function getListingGroupConditionsResponseHandler(responsePromise: Promise) {\r\n const response = await responsePromise;\r\n const responseBody: GetListingGroupConditionsResponseBody = await response.json();\r\n return responseBody;\r\n}\r\n\r\n// If we have used the dimension, it should not be used anymore in its subtree\r\n// @param `pathsToParent` from root to current node, like [rootInfo, path1Info, currentNodeDimensionInfo]\r\nfunction filterOutUsedDimensions(listingConditions: Model$ListingCondition[], pathsToParent: Model$Listing[]) {\r\n return listingConditions.filter(c =>\r\n pathsToParent.every(p => p.Operand !== c.Operand));\r\n}\r\n\r\n// Some dimension are only avaliable after some other dimension is chosen\r\n// Note: root is filtered out in this step\r\n// @param `pathsToParent` from root to current node, like [rootInfo, path1Info, currentNodeDimensionInfo]\r\nfunction filterReachableDimensions(listingConditions: Model$ListingCondition[], pathsToParent: Model$Listing[]): Model$ListingCondition[] {\r\n // Current impl is not effective, but easy to understand :)\r\n const reservedIds = new Set();\r\n pathsToParent.forEach((path) => {\r\n const currentOperand = path.Operand;\r\n const currentId = listingConditions.find(c =>\r\n (c.Operand === 'All' && currentOperand === '') ||\r\n c.Operand === currentOperand)?.Id;\r\n assertIsDefined(currentId);\r\n listingConditions.forEach((c) => {\r\n if (c.ParentId === currentId) {\r\n reservedIds.add(c.Id);\r\n }\r\n });\r\n });\r\n return listingConditions.filter(c => reservedIds.has(c.Id));\r\n}\r\n\r\n// There are some dimensions that everything else node cannot be split on\r\nfunction filterNonSplittableDimensions(listingConditions: Model$ListingCondition[], item:(WithTreeViewData)): Model$ListingCondition[] {\r\n assertIsDefined(item);\r\n\r\n let isFromEverythingElse = false;\r\n if (item.Condition?.Operand !== '' && item.Condition?.Attribute === '') {\r\n isFromEverythingElse = true;\r\n }\r\n\r\n _.each(item.ParentConditions || [], (condition) => {\r\n if (condition?.Operand !== '' && condition?.Attribute === '') {\r\n isFromEverythingElse = true;\r\n }\r\n });\r\n\r\n assertIsDefined(item.ParentConditions);\r\n assertIsDefined(item.Condition);\r\n\r\n const parentConditionOperands = _.pluck(item.ParentConditions, 'Operand');\r\n const allItemOperands = [item.Condition.Operand, ...parentConditionOperands];\r\n\r\n if (_.intersection(NonSplittableConditions, allItemOperands) && isFromEverythingElse) {\r\n return _.filter(listingConditions, condition => !_.contains(NonSplittableConditions, condition.Operand));\r\n }\r\n\r\n return listingConditions;\r\n}\r\n\r\n// Do we need to filter the country by current Campaign? In backend, we get current campaign by use something like `this.contextProvider.CurrentCampaign?.CampaignSettings[0]?.SalesCountry;`\r\n// function filterCountry() { }\r\n\r\n// All data is returned now, however, user should only see part of them\r\n// - user should not see any dimension they have used\r\n// - user should not see the root dimension\r\n// - user should not see a dimension if its partent is not reached\r\n// In conclusion, a valid node is valid if it is the direct son of a `pathsToParent` and it is not in `pathsToParent`\r\n// @param `pathsToParent` from root to current node, like [rootInfo, path1Info, currentNodeDimensionInfo]\r\nexport function getValidListingConditions(response: GetListingGroupConditionsResponseBody, pathsToParent: Model$Listing[], item: WithTreeViewData) {\r\n let conditions = response.value;\r\n conditions = filterReachableDimensions(conditions, pathsToParent);\r\n conditions = filterOutUsedDimensions(conditions, pathsToParent);\r\n conditions = filterNonSplittableDimensions(conditions, item);\r\n return conditions;\r\n}\r\n\r\nexport function getValidListingConditionsForWithoutPreselectedTreeNode(response: GetListingGroupConditionsResponseBody, pathsToParent: Model$Listing[]) {\r\n let conditions = response.value;\r\n conditions = filterReachableDimensions(conditions, pathsToParent);\r\n conditions = filterOutUsedDimensions(conditions, pathsToParent);\r\n return conditions;\r\n}\r\n","import { map } from 'underscore';\r\nimport { createOrUpdateListingGroup } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { Model$ListingGroup } from '../ApiType';\r\nimport { NullPartial, } from '../constant';\r\n\r\ninterface UpdateListingTreePayload {\r\n ListingGroupsToAdd: Partial>[];\r\n ListingGroupsToDelete: number[];\r\n AssetGroupId: number,\r\n}\r\n\r\n// edit tree view\r\nexport async function updateListingTree(payload: UpdateListingTreePayload) {\r\n const { ListingGroupsToAdd, ListingGroupsToDelete, AssetGroupId } = payload;\r\n const itemsToAdd = ListingGroupsToAdd;\r\n const itemsToDelete = map(ListingGroupsToDelete, id => ({\r\n Id: id,\r\n AssetGroupId,\r\n Status: 'Deleted',\r\n }));\r\n return createOrUpdateListingGroup(itemsToAdd, itemsToDelete).then(res => res).catch(e => e);\r\n}\r\n\r\nexport async function createRootListingTree(assetGroupId: number) {\r\n const itemsToAdd = [{\r\n Id: -1,\r\n AssetGroupId: assetGroupId,\r\n IsLeaf: true,\r\n IsExcluded: false,\r\n Condition: {\r\n Operand: 'All',\r\n Attribute: '',\r\n },\r\n }];\r\n\r\n return createOrUpdateListingGroup(itemsToAdd, []);\r\n}\r\n","import { useFetch } from '@bingads-webui-campaign/react-hook-use-fetch';\r\nimport { ProductAttrubuteStatisticsParams, productAttrubuteStatisticsResponseHandler, productAttrubuteStatisticsRequest } from './productAttributeStatistics';\r\nimport { GetListingGroupGridDataParmas, listingGroupGridDataResponseHandler, listingGroupGridDataRequest } from './listingGroupGridData';\r\nimport { GetListingGroupConditionsParams, getListingGroupConditionsResponseHandler, getListingGroupConditionsRequest } from './getListingGroupConditions';\r\nimport { productOfferRequest, productOfferResponseHandler, ProductOfferParams } from './productOffer';\r\n\r\nimport { updateListingTree, createRootListingTree } from './updateListingTree';\r\n\r\nexport function useAPIsOfListingGroup() {\r\n const { fetch: fetchImpl } = useFetch();\r\n\r\n // baseUrl is not used for now, for we are using a special fetch wrapper\r\n const baseUrl = '';\r\n\r\n return {\r\n listingGroupGridData: (params: GetListingGroupGridDataParmas) =>\r\n listingGroupGridDataResponseHandler(fetchImpl(...listingGroupGridDataRequest(baseUrl, params))),\r\n productAttributeStatistics: (params: ProductAttrubuteStatisticsParams) =>\r\n productAttrubuteStatisticsResponseHandler(fetchImpl(...productAttrubuteStatisticsRequest(baseUrl, params))),\r\n getListingGroupConditions: (params: GetListingGroupConditionsParams) =>\r\n getListingGroupConditionsResponseHandler(fetchImpl(...getListingGroupConditionsRequest(baseUrl, params))),\r\n getProductOffers: (params: ProductOfferParams) =>\r\n productOfferResponseHandler(fetchImpl(...productOfferRequest(baseUrl, params))),\r\n updateListingTree,\r\n createRootListingTree,\r\n };\r\n}\r\n","import { Model$ListingGroup } from '../ApiType';\r\nimport { PostOdataAdsAPIParams, getFullUrlOfAdsOdata } from './adsOdata';\r\n\r\nexport interface DateRange {\r\n /**\r\n * YYYY-MM-DD\r\n *\r\n * @example 2022-05-15\r\n */\r\n EndDate: string;\r\n /**\r\n * YYYY-MM-DD\r\n *\r\n * @example 2022-05-02\r\n */\r\n StartDate: string;\r\n}\r\n\r\ninterface GetListingGroupGridDataPayload {\r\n gridDataParameters: {\r\n DateRange: DateRange;\r\n },\r\n}\r\n\r\nexport type GetListingGroupGridDataParmas = PostOdataAdsAPIParams;\r\n\r\ninterface GetListingGroupGridDataResponseBody {\r\n value: Model$ListingGroup[];\r\n}\r\n\r\nexport function listingGroupGridDataRequest(baseUrl: string, params: GetListingGroupGridDataParmas) {\r\n const path = 'ProductListingGroups/Default.GridData';\r\n const finalUrl = getFullUrlOfAdsOdata(baseUrl, path, params);\r\n return [finalUrl, {\r\n method: 'POST',\r\n headers: {\r\n 'x-ms-lastwritetime': 'Max',\r\n },\r\n body: JSON.stringify(params.payload),\r\n }];\r\n}\r\n\r\nexport async function listingGroupGridDataResponseHandler(responsePromise: Promise) {\r\n const response = await responsePromise;\r\n const responseBody: GetListingGroupGridDataResponseBody = await response.json();\r\n return responseBody;\r\n}\r\n","import { PostOdataAdsAPIParams, getFullUrlOfAdsOdata, WithEntityPath } from './adsOdata';\r\nimport { DateRange } from './listingGroupGridData';\r\nimport { Model$ProductAttributeStatistic, Header } from '../ApiType';\r\n\r\ninterface ProductAttrubuteStatisticsEntityPath {\r\n productListingGroupId: number;\r\n}\r\n\r\ninterface ProductAttrubuteStatisticsPayload {\r\n gridDataParameters: {\r\n DateRange: DateRange;\r\n },\r\n operand: string;\r\n}\r\n\r\nexport type ProductAttrubuteStatisticsParams = PostOdataAdsAPIParams & WithEntityPath;\r\n\r\nexport interface ProductAttrubuteStatisticsResponse {\r\n value: Model$ProductAttributeStatistic[];\r\n headers: Header;\r\n}\r\n\r\n// when editing tree view, the opened panel is also a grid, use this API to get data.\r\nexport function productAttrubuteStatisticsRequest(baseUrl: string, params: ProductAttrubuteStatisticsParams) {\r\n const path = `ProductListingGroups(${params.entityPath.productListingGroupId})/ProductAttributeStatistics/Default.ProductListingGroupGridData`;\r\n const finalUrl = getFullUrlOfAdsOdata(baseUrl, path, params);\r\n return [finalUrl, {\r\n method: 'POST',\r\n body: JSON.stringify(params.payload),\r\n }];\r\n}\r\n\r\nexport async function productAttrubuteStatisticsResponseHandler(responsePromise: Promise) {\r\n const p$response = await responsePromise;\r\n const response: ProductAttrubuteStatisticsResponse = await p$response.json();\r\n response.headers = p$response.headers;\r\n\r\n return response;\r\n}\r\n","import { GetOdataAdsAPIParams, getFullUrlOfAdsOdata, WithEntityPath } from './adsOdata';\r\nimport { DateRange } from './listingGroupGridData';\r\nimport { Model$ProductOffer, Header } from '../ApiType';\r\n\r\ninterface ProductOfferEntityPath {\r\n productListingGroupId: number;\r\n}\r\n\r\ninterface ProductOfferPayload {\r\n gridDataParameters: {\r\n DateRange: DateRange;\r\n },\r\n}\r\n\r\nexport type ProductOfferParams = GetOdataAdsAPIParams & WithEntityPath;\r\n\r\nexport interface ProductOfferResponse {\r\n value: Model$ProductOffer[];\r\n headers: Header;\r\n}\r\n\r\n// when editing tree view, the opened panel is also a grid, use this API to get data.\r\nexport function productOfferRequest(baseUrl: string, params: ProductOfferParams) {\r\n const path = `ProductListingGroups(${params.entityPath.productListingGroupId})/ProductOffers/Default.GetProductOffersForListingGroup`;\r\n const finalUrl = getFullUrlOfAdsOdata(baseUrl, path, params);\r\n return [finalUrl, {\r\n method: 'GET',\r\n }];\r\n}\r\n\r\nexport async function productOfferResponseHandler(responsePromise: Promise) {\r\n const p$response = await responsePromise;\r\n const response: ProductOfferResponse = await p$response.json();\r\n response.headers = p$response.headers;\r\n\r\n return response;\r\n}\r\n","import { helpbuttonStyle, convertToLocalStyle, statusStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { mergeStyleSets } from '@fluentui/react';\r\n// import { ComponentSettings } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport { pagePaddingStyle } from '@bingads-webui-campaign-react/page-padding-style';\r\n\r\n// export const pageRootClass = mergeStyles({\r\n// });\r\n\r\nexport const staticStyles = mergeStyleSets({\r\n errorColor: {\r\n color: '#A80000',\r\n },\r\n});\r\n\r\nexport const styles = (_, core) => {\r\n const helpButtonStyle = convertToLocalStyle(helpbuttonStyle({ palette: core.palette ?? {} }));\r\n const { palette } = core;\r\n return {\r\n '@global': {\r\n ...pagePaddingStyle(),\r\n },\r\n 'listing-group-content-root': merge(\r\n {},\r\n // columnChooserStyle,\r\n // getColumnChooserOverrideStyle,\r\n statusStyle({ palette }),\r\n {\r\n '& .toolbar-container': {\r\n fontSize: 14,\r\n '& .navbar .container-fluid': {\r\n paddingLeft: 3,\r\n },\r\n },\r\n '& .ms-DetailsHeader .ms-DetailsHeader-cellName': {\r\n width: '100%',\r\n },\r\n '& #bulkEditContainer': {\r\n maxWidth: 'inherit',\r\n },\r\n '& .grid-header-helpId': helpButtonStyle,\r\n '& .listing-group-name-container': {\r\n whiteSpace: 'normal',\r\n },\r\n '& .campaign-details-list-pagination': {\r\n marginLeft: 15,\r\n },\r\n '& .listing-group-condition-cell .iconba.small-icon': {\r\n fontSize: 12,\r\n },\r\n '& .show-listing-group-selector': {\r\n color: palette.themePrimary,\r\n },\r\n '& #button-hierarchy-view': {\r\n borderRadius: '2px 0px 0px 2px',\r\n },\r\n '& #button-list-view': {\r\n borderRadius: '0px 2px 2px 0px',\r\n },\r\n '& .tree-view-cell': {\r\n display: 'flex',\r\n },\r\n '& .view-switch-button': {\r\n background: palette.white,\r\n color: palette.themePrimary,\r\n padding: '0px',\r\n width: 32,\r\n minWidth: 32,\r\n minHeight: 32,\r\n height: 32,\r\n margin: '0px !important',\r\n },\r\n '& .view-switch-button.active': {\r\n background: palette.themePrimary,\r\n border: '0px',\r\n '& .iconba': {\r\n color: palette.white,\r\n },\r\n },\r\n '& .view-switch-button.not-allowed': {\r\n cursor: 'not-allowed',\r\n },\r\n '& input[type=\"checkbox\"]::after': {\r\n transitionDuration: '0s !important',\r\n },\r\n '& .grid-nodata': {\r\n padding: '20px 0 20px 40px',\r\n fontSize: '26px',\r\n lineHeight: '36px',\r\n },\r\n '& .iconba-ChevronDown': {\r\n lineHeight: '16px',\r\n opacity: 0,\r\n marginLeft: 5,\r\n fontSize: 11,\r\n color: palette.themeDark,\r\n '&:hover': {\r\n opacity: 1,\r\n },\r\n },\r\n '& .create-first-listing-group': {\r\n color: palette.neutralSecondary,\r\n fontSize: 26,\r\n lineHeight: '36px',\r\n padding: '20px 0 20px 40px',\r\n },\r\n }\r\n ),\r\n };\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { columnChooserId, ScopeLevel, treeViewButtonId, listViewButtonId } from './constant';\r\n\r\ninterface ToolbarWithSelectionProps {\r\n selectedItems: any[];\r\n permissions: any;\r\n i18n: any;\r\n serverContext: any;\r\n onBidChangeClick: Function;\r\n}\r\n\r\nfunction toolbarItemsWithSelection({\r\n selectedItems,\r\n permissions,\r\n i18n,\r\n serverContext,\r\n onBidChangeClick,\r\n}: ToolbarWithSelectionProps) {\r\n // const isCurrentAccountInActive = serverContext.CurrentAccount.Status === 32; // 32 is InActive\r\n const isBidValueOption = true;\r\n const isBidBoostOption = false;\r\n\r\n const candidates: any[] = [\r\n ['expander', {\r\n type: 'expander',\r\n }],\r\n ['button-clear-selection', {\r\n type: 'button-clear-selection',\r\n }],\r\n ['divider', {\r\n id: 'product-groups-toolbar-divider',\r\n type: 'divider',\r\n }],\r\n ['button-chart-toggle', {\r\n id: 'button-chart-toggle',\r\n type: 'button',\r\n }],\r\n ];\r\n return new Map(candidates.filter(c => !!c));\r\n}\r\n\r\ninterface ToolbarWithoutSelectionConfigProps {\r\n scopeLevel: ScopeLevel,\r\n i18n: any,\r\n}\r\n\r\nfunction toolbarItemsWithoutSelection({\r\n scopeLevel, i18n,\r\n}: ToolbarWithoutSelectionConfigProps) {\r\n const candidates: any[] = [\r\n ['expander', {\r\n type: 'expander',\r\n }],\r\n [columnChooserId, {\r\n id: columnChooserId,\r\n type: 'dropdown',\r\n }],\r\n ['Expand table', {\r\n type: 'expand-table',\r\n }],\r\n scopeLevel === ScopeLevel.AssetGroup && [treeViewButtonId, {\r\n type: 'button',\r\n classes: ['view-switch-button', 'inactive'], // default inactive, update by callback\r\n iconLeftGlyphName: 'ba-BulletedTreeList',\r\n id: treeViewButtonId,\r\n ariaLabel: i18n.getString(_TL_('switch to hierarchy view')),\r\n attrs: {\r\n title: i18n.getString(_TL_('Hierarchy view')),\r\n },\r\n }],\r\n scopeLevel === ScopeLevel.AssetGroup && [listViewButtonId, {\r\n type: 'button',\r\n classes: ['view-switch-button', 'inactive'], // default inactive, update by callback\r\n iconLeftGlyphName: 'ba-BulletedList2',\r\n id: listViewButtonId,\r\n ariaLabel: i18n.getString(_TL_('switch to list view')),\r\n attrs: {\r\n title: i18n.getString(_TL_('List view')),\r\n },\r\n }],\r\n ];\r\n\r\n return new Map(candidates.filter(toolbarItem => !!toolbarItem));\r\n}\r\n\r\ninterface ToolbarConfigProps {\r\n scopeLevel: ScopeLevel,\r\n i18n: any,\r\n selectedItems: any[];\r\n permissions: any;\r\n serverContext: any;\r\n onBidChangeClick: Function;\r\n}\r\n\r\nexport function getGridToolbarConfig({\r\n scopeLevel, i18n, onBidChangeClick, permissions, selectedItems, serverContext,\r\n}: ToolbarConfigProps) {\r\n const toolbarUnselectedConfig = toolbarItemsWithoutSelection({\r\n scopeLevel, i18n,\r\n });\r\n const toolbarSelectedConfig = toolbarItemsWithSelection({\r\n i18n,\r\n onBidChangeClick,\r\n permissions,\r\n selectedItems,\r\n serverContext,\r\n });\r\n return { toolbarSelectedConfig, toolbarUnselectedConfig };\r\n}\r\n","import {\r\n destinationUrlColumn, finalUrlSuffixColumn, absoluteTopImpressionRateColumn, advertiserReportedRevenue, allConversionAdvertiserReportedRevenue, allConversionCPAColumn,\r\n allConversionRateColumn, allConversionRevenueOnAdSpendColumn, allConversionsColumn, averageCPCColumn, averageCPMColumn, clicksColumn, conversionRateColumn,\r\n conversionsColumn, CPAColumn, CTRColumn, impressionsColumn, returnOnAdSpendColumn, spendColumn, trackingUrlTemplateColumn, urlCustomParametersColumn,\r\n netRevenueColumn, eligibleImpressionsColumn, missedImpressionsColumn, impressionShareColumn, missedImpressionsNoBidColumn,\r\n missedImpressionsSpendingCapReachedColumn, missedImpressionsInsufficientBidColumn, missedImpressionsNoTaxColumn,\r\n missedImpressionsOtherColumn, ColumnKeyOdataPathMap, averageCPSColumn, salesCountColumn,\r\n} from '@bingads-webui-grid/well-known';\r\n\r\nimport {\r\n ListingGroupColumn,\r\n AssetGroupNameColumn,\r\n IncludeExcludeColumn\r\n} from './rawColumns';\r\n\r\n/**\r\n * To know how to get column raw data by column key\r\n */\r\nexport const columnKeyRawDataMap = {\r\n [ListingGroupColumn.key]: ListingGroupColumn,\r\n [AssetGroupNameColumn.key]: AssetGroupNameColumn,\r\n [IncludeExcludeColumn.key]: IncludeExcludeColumn,\r\n [absoluteTopImpressionRateColumn.key]: absoluteTopImpressionRateColumn,\r\n [advertiserReportedRevenue.key]: advertiserReportedRevenue,\r\n [allConversionAdvertiserReportedRevenue.key]: allConversionAdvertiserReportedRevenue,\r\n [allConversionCPAColumn.key]: allConversionCPAColumn,\r\n [allConversionRateColumn.key]: allConversionRateColumn,\r\n [allConversionRevenueOnAdSpendColumn.key]: allConversionRevenueOnAdSpendColumn,\r\n [allConversionsColumn.key]: allConversionsColumn,\r\n [averageCPCColumn.key]: averageCPCColumn,\r\n [averageCPMColumn.key]: averageCPMColumn,\r\n [CPAColumn.key]: CPAColumn,\r\n [CTRColumn.key]: CTRColumn,\r\n [clicksColumn.key]: clicksColumn,\r\n [conversionRateColumn.key]: conversionRateColumn,\r\n [conversionsColumn.key]: conversionsColumn,\r\n [impressionsColumn.key]: impressionsColumn,\r\n [returnOnAdSpendColumn.key]: returnOnAdSpendColumn,\r\n [spendColumn.key]: spendColumn,\r\n [eligibleImpressionsColumn.key]: eligibleImpressionsColumn,\r\n [missedImpressionsColumn.key]: missedImpressionsColumn,\r\n [missedImpressionsNoBidColumn.key]: missedImpressionsNoBidColumn,\r\n [missedImpressionsSpendingCapReachedColumn.key]: missedImpressionsSpendingCapReachedColumn,\r\n [missedImpressionsInsufficientBidColumn.key]: missedImpressionsInsufficientBidColumn,\r\n [missedImpressionsNoTaxColumn.key]: missedImpressionsNoTaxColumn,\r\n [missedImpressionsOtherColumn.key]: missedImpressionsOtherColumn,\r\n [impressionShareColumn.key]: impressionShareColumn,\r\n [averageCPSColumn.key]: averageCPSColumn,\r\n [salesCountColumn.key]: salesCountColumn,\r\n\r\n // FIXME: this is not added by back-end, so the data is always undefined/0(depend on how to treat undefeined data)\r\n // This should be an undefined behavior to visit them, but we could use them here to avoid page crash\r\n [netRevenueColumn.key]: netRevenueColumn,\r\n\r\n\r\n // FIXME: According to back-end's opinion, this column is not in back-end DB, so we should not have this column.\r\n [destinationUrlColumn.key]: destinationUrlColumn,\r\n\r\n} as const;\r\n\r\nexport const cpsColumnKeys = [\r\n averageCPSColumn.key,\r\n salesCountColumn.key,\r\n];\r\n\r\nconst odataPathOfCommonColumnsIterable: [string, string][] = [\r\n [absoluteTopImpressionRateColumn.key, 'PerformanceMetrics/AbsoluteTopImpressionRate'],\r\n [advertiserReportedRevenue.key, 'PerformanceMetrics/AdvertiserReportedRevenue'],\r\n [allConversionAdvertiserReportedRevenue.key, 'PerformanceMetrics/AllConversionAdvertiserReportedRevenue'],\r\n [allConversionCPAColumn.key, 'PerformanceMetrics/AllConversionCPA'],\r\n [allConversionRateColumn.key, 'PerformanceMetrics/AllConversionRate'],\r\n [allConversionRevenueOnAdSpendColumn.key, 'PerformanceMetrics/AllConversionRevenueOnAdSpend'],\r\n [allConversionsColumn.key, 'PerformanceMetrics/AllConversions'],\r\n [averageCPCColumn.key, 'PerformanceMetrics/AverageCPC'],\r\n [averageCPMColumn.key, 'PerformanceMetrics/AverageCPM'],\r\n [CPAColumn.key, 'PerformanceMetrics/CPA'],\r\n [CTRColumn.key, 'PerformanceMetrics/CTR'],\r\n [clicksColumn.key, 'PerformanceMetrics/Clicks'],\r\n [conversionRateColumn.key, 'PerformanceMetrics/ConversionRate'],\r\n [conversionsColumn.key, 'PerformanceMetrics/Conversions'],\r\n [impressionsColumn.key, 'PerformanceMetrics/Impressions'],\r\n [impressionShareColumn.key, 'PerformanceMetrics/ImpressionShare'],\r\n [returnOnAdSpendColumn.key, 'PerformanceMetrics/RevenueOnAdSpend'],\r\n [spendColumn.key, 'PerformanceMetrics/Spend'],\r\n [eligibleImpressionsColumn.key, 'PerformanceMetrics/EligibleImpressions'],\r\n [missedImpressionsColumn.key, 'PerformanceMetrics/MissedImpressions'],\r\n [missedImpressionsNoBidColumn.key, 'PerformanceMetrics/MissedImpressionsNoBid'],\r\n [missedImpressionsSpendingCapReachedColumn.key, 'PerformanceMetrics/MissedImpressionsSpendingCapReached'],\r\n [missedImpressionsInsufficientBidColumn.key, 'PerformanceMetrics/MissedImpressionsInsufficientBid'],\r\n [missedImpressionsNoTaxColumn.key, 'PerformanceMetrics/MissedImpressionsNoTax'],\r\n [missedImpressionsOtherColumn.key, 'PerformanceMetrics/MissedImpressionsOther'],\r\n [urlCustomParametersColumn.key, 'UrlCustomParameters'],\r\n [finalUrlSuffixColumn.key, 'FinalUrlSuffix'],\r\n [trackingUrlTemplateColumn.key, 'TrackingUrlTemplate'],\r\n [destinationUrlColumn.key, 'DestinationUrl'],\r\n [averageCPSColumn.key, 'PerformanceMetrics/AverageCPS'],\r\n [salesCountColumn.key, 'PerformanceMetrics/SalesCount'],\r\n];\r\n\r\nconst odataPathOfListingGroupColumnIterable: [string, string][] = [\r\n [ListingGroupColumn.key, 'Condition/Attribute'],\r\n [AssetGroupNameColumn.key, 'AssetGroupName'],\r\n [IncludeExcludeColumn.key, 'IsExcluded'],\r\n];\r\n\r\nexport const odataMapOfListingGroupResponse: ColumnKeyOdataPathMap = new Map([...odataPathOfCommonColumnsIterable, ...odataPathOfListingGroupColumnIterable]);\r\n","/* eslint-disable no-use-before-define */\r\n/* eslint-disable no-nested-ternary */\r\n/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-indent */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { IColumn } from '@fluentui/react';\r\nimport { Model$ListingGroup } from '../ApiType';\r\nimport { odataMapOfListingGroupResponse } from '../ColumnOdataMap';\r\nimport { ListingGroupGridItemData } from '../interface';\r\n\r\n// Not use '#', which will cause a lot of rerender\r\n// eslint-disable-next-line no-script-url\r\nexport const anchorHrefPlaceholder = 'javascript:void(0)';\r\nexport const NOT_INTERACTIVE_PLACEHOLDER = '-';\r\nexport const NO_DATA_PLACEHOLDER_NONLEAF = '-';\r\nexport const NO_DATA_PLACEHOLDER_LEAF = '';\r\n\r\nexport const IsProductGroupBidLandscapeEnabled = (serverContext: any) => serverContext.Permissions.IsProductGroupBidLandscapeEnabled;\r\nexport const IsBidLessThan5CentsInShoppingCampaignEnabled = (serverContext: any) => serverContext.Permissions.IsBidLessThan5CentsInShoppingCampaignEnabled;\r\nexport const IsCurrentAccountInactive = (serverContext: any) => serverContext.CurrentAccountInActive;\r\nexport const IsReadOnlyMode = (serverContext: any) => serverContext.ReadOnlyMode;\r\nexport const showBidBoostValue = (itemData: ListingGroupGridItemData) => itemData.BidBoost && itemData.BidBoost.Multiplier != null;\r\n\r\nexport function shouldEnableEdit(enable: boolean, serverContext: any) {\r\n return !IsCurrentAccountInactive(serverContext) && !IsReadOnlyMode(serverContext) && enable;\r\n}\r\n\r\nexport function getPropertyFromItemWithDefaultString(itemData: Model$ListingGroup | undefined, index: number | undefined, column: IColumn | undefined) {\r\n assertIsDefined(itemData);\r\n assertIsDefined(column);\r\n assertIsDefined(column.key);\r\n return itemData.IsLeaf ? getPropertyFromItem(itemData, index, column) || NO_DATA_PLACEHOLDER_LEAF : NO_DATA_PLACEHOLDER_NONLEAF;\r\n}\r\n\r\nexport function getPropertyFromItem(itemData: Model$ListingGroup | undefined, index: number | undefined, column: IColumn | undefined) {\r\n assertIsDefined(column);\r\n assertIsDefined(column.key);\r\n return getPropertyFromItemByColumnKey(itemData, column.key);\r\n}\r\n\r\nexport function getPropertyFromItemByColumnKey(itemData: Model$ListingGroup | undefined, columnKey: string) {\r\n const odataPathOfProperty = odataMapOfListingGroupResponse.get(columnKey);\r\n assertIsDefined(odataPathOfProperty);\r\n return getPropertyByPath(itemData, odataPathOfProperty);\r\n}\r\n\r\n// Format of property is like 'xx/yy/zz', then we get value from data.xx.yy.zz\r\nexport function getPropertyByPath(data: any, propertyPath: string) {\r\n const propertyPaths = propertyPath.split('/');\r\n return propertyPaths.reduce((obj, path) => (obj ? obj[path] : NO_DATA_PLACEHOLDER_NONLEAF), data);\r\n}\r\n\r\nexport const getAccountCurrencyCode = serverContext => (serverContext && serverContext.CurrentAccount && serverContext.CurrentAccount.CurrencyCode) || 'USD';\r\n\r\nexport const offerLimitExceededWarning = i18n => i18n.getString(_TL_('Products data cannot be shown if your campaign targets more than 16 million products.'));\r\nexport const offerLimitExceededWarningForListingGroup = i18n => i18n.getString(_TL_('Product performance data cannot be displayed since your campaign targets exceed 16 million products. However, you can still create or edit a listing group.'));\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { Callout, Link, mergeStyleSets, Text, MessageBarType, MessageBar } from '@fluentui/react';\r\nimport { I18n } from '@bingads-webui-grid/well-known';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { Model$Listing, Model$ProductOffer } from '../../ApiType';\r\nimport { useAPIsOfListingGroup } from '../../API';\r\nimport { offerLimitExceededWarning } from '../utils';\r\n\r\nconst styles = mergeStyleSets({\r\n callout: {\r\n maxWidth: '90%',\r\n padding: '20px 24px',\r\n },\r\n partitionTrail: {\r\n fontWeight: 600,\r\n color: '#605e5c',\r\n },\r\n currentOperand: {\r\n marginBottom: 10,\r\n },\r\n currentAttribute: {\r\n color: '#323130',\r\n fontSize: '20px',\r\n },\r\n productSampleDescription: {\r\n color: '#323130',\r\n fontSize: '12px',\r\n lineHeight: '22px',\r\n marginBottom: 10,\r\n },\r\n productSampleId: {\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n },\r\n link: {\r\n display: 'block',\r\n marginTop: 20,\r\n },\r\n});\r\n\r\ninterface ProductOffersCalloutProps {\r\n target: any;\r\n i18n: I18n;\r\n fullPath: Model$Listing[];\r\n scope: { save: Function, values: any };\r\n productListingGroupId: number,\r\n}\r\n\r\nexport const ProductOffersCallout: React.FunctionComponent = (props) => {\r\n const {\r\n target, i18n, fullPath, scope, productListingGroupId,\r\n } = props;\r\n\r\n const commonEntityPath = {\r\n accountId: scope.values.aid,\r\n campaignId: scope.values.campaignId,\r\n customerId: scope.values.cid,\r\n assetGroupId: scope.values.assetGroupId,\r\n };\r\n const currentCondition: Model$Listing = fullPath[fullPath.length - 1];\r\n const currentOperand =\r\n _.isEmpty(currentCondition.Operand) ? '' : i18n.getString(`ProductsGrid_Column_${currentCondition.Operand}`);\r\n const partitionTrail = useMemo(() => {\r\n let trail = i18n.getString(_TL_('All products')).concat(' > ');\r\n\r\n for (let index = 1; index < fullPath.length - 1; index += 1) {\r\n const item = fullPath[index];\r\n\r\n trail = trail.concat(item.Attribute || '', ' (', i18n.getString(`ProductsGrid_Column_${item.Operand}`), ') > ');\r\n }\r\n return trail;\r\n }, [fullPath, i18n]);\r\n\r\n const {\r\n getProductOffers,\r\n } = useAPIsOfListingGroup();\r\n const [offerCount, setOfferCount] = useState(0);\r\n const [sampleOffers, setSampleOffers] = useState>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [showOfferLimitExceededError, setShowOfferLimitExceededError] = useState(false);\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n getProductOffers({\r\n entityPath: {\r\n ...commonEntityPath,\r\n assetGroupId: scope.values.assetGroupId,\r\n productListingGroupId,\r\n },\r\n queryOptions: {\r\n $top: 10,\r\n },\r\n }).then((response) => {\r\n setIsLoading(false);\r\n\r\n const offerLimitExceeded = response.headers.get('offerlimitexceeded');\r\n\r\n if (offerLimitExceeded === 'true') {\r\n setShowOfferLimitExceededError(true);\r\n } else {\r\n setOfferCount(response['@odata.count']);\r\n setSampleOffers(response.value);\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [productListingGroupId]);\r\n\r\n const navigateToProductTab = () => {\r\n scope.save('/campaign/vnext/products/');\r\n };\r\n\r\n const offerLimitExceededContent = useMemo(() => offerLimitExceededWarning(i18n), [i18n]);\r\n\r\n return (\r\n // eslint-disable-next-line react/jsx-filename-extension\r\n <>\r\n \r\n \r\n \r\n {partitionTrail}\r\n \r\n \r\n {currentOperand}\r\n \r\n \r\n {currentCondition.Attribute}\r\n \r\n \r\n {\r\n offerCount === 0 && !showOfferLimitExceededError &&\r\n {i18n.getString(_TL_('This product group does not contain any products.'))}\r\n }\r\n {\r\n offerCount === 1 &&\r\n ({offerCount} {text}),\r\n }}\r\n template={i18n.getString(_TL_('This product group contains {{offerCountModel}} product{{/offerCountModel}}, including:'))}\r\n />\r\n }\r\n {\r\n offerCount > 1 &&\r\n ({offerCount} {text}),\r\n }}\r\n template={i18n.getString(_TL_('This product group contains {{offerCountModel}} products{{/offerCountModel}}, including:'))}\r\n />\r\n }\r\n \r\n {\r\n offerCount > 0 && sampleOffers.map(sampleOffer => (\r\n
\r\n { sampleOffer.Id }\r\n ({sampleOffer.Title})\r\n
\r\n ))\r\n }\r\n {\r\n offerCount > 0 &&\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n \r\n {i18n.getString(_TL_('View full list of products'))}\r\n \r\n }\r\n {\r\n showOfferLimitExceededError &&\r\n \r\n {offerLimitExceededContent}\r\n \r\n }\r\n \r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable no-use-before-define */\r\n/* eslint-disable no-nested-ternary */\r\n/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-indent */\r\n\r\nimport { I18n } from '@bingads-webui-grid/well-known';\r\nimport React, { FC, Fragment, useRef, useState } from 'react';\r\nimport { anchorHrefPlaceholder } from '../utils';\r\nimport { ProductOffersCallout } from './ProductOffersCallout';\r\nimport { Model$Listing } from '../../ApiType';\r\n\r\n/* eslint-disable react/jsx-filename-extension */\r\ninterface ConditionTemplateProps {\r\n total: any;\r\n depth: number;\r\n hasChildren: boolean;\r\n i18n: I18n;\r\n showSelectorIcon: boolean;\r\n attributeText: string;\r\n isExpanded: boolean;\r\n onToggleCollapse: () => void;\r\n onAddOrEditTrigger: () => void;\r\n partitionFullPath: Array;\r\n scope: {\r\n values: {\r\n campaignId: string | number;\r\n };\r\n save: Function;\r\n };\r\n productListingGroupId: number;\r\n assetGroupId: number | undefined;\r\n}\r\n\r\nconst iconWidth = 12;\r\n\r\nconst levelGap = 10;\r\n\r\nconst textIconGap = 7;\r\n\r\nexport const ConditionTemplate: FC = (props) => {\r\n const {\r\n total, depth, hasChildren, i18n, showSelectorIcon,\r\n attributeText, isExpanded, onToggleCollapse, onAddOrEditTrigger,\r\n partitionFullPath, scope, productListingGroupId, assetGroupId,\r\n } = props;\r\n\r\n const updatedScope = {\r\n values: {\r\n ...scope.values,\r\n assetGroupId,\r\n },\r\n save: scope.save,\r\n };\r\n\r\n const attributeRef = useRef(null);\r\n const [showCallout, setShowCallout] = useState(false);\r\n let hideCalloutTimer: number | undefined;\r\n const slowHideCallout = () => {\r\n hideCalloutTimer = window.setTimeout(() => {\r\n setShowCallout(false);\r\n }, 300);\r\n };\r\n\r\n const textPadding: React.CSSProperties = {\r\n paddingLeft: (hasChildren ? 0 : ((depth - 1) * levelGap) + iconWidth) + textIconGap,\r\n };\r\n\r\n const toggleIconMargin: React.CSSProperties = {\r\n marginLeft: (depth - 1) * levelGap,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n };\r\n\r\n const onCollpaseToggleKeyDown: React.KeyboardEventHandler = (e) => {\r\n if (e.key === 'Enter') {\r\n onToggleCollapse();\r\n }\r\n e.stopPropagation();\r\n };\r\n\r\n const onCollapseClick: React.MouseEventHandler = (e) => {\r\n onToggleCollapse();\r\n e.stopPropagation();\r\n };\r\n\r\n const onAddOrEditClick: React.MouseEventHandler = (e) => {\r\n onAddOrEditTrigger();\r\n e.stopPropagation();\r\n };\r\n\r\n const onAddOrEditKeyDown: React.KeyboardEventHandler = (e) => {\r\n if (e.key === 'Enter') {\r\n onAddOrEditTrigger();\r\n }\r\n e.stopPropagation();\r\n };\r\n const closeTooltip: React.KeyboardEventHandler = (e) => {\r\n if (e.key === 'Escape') {\r\n setShowCallout(false);\r\n }\r\n e.stopPropagation();\r\n };\r\n return (\r\n \r\n {total ?
{total}
:\r\n
\r\n {hasChildren &&\r\n (isExpanded ?\r\n \r\n : )\r\n }\r\n
\r\n
clearTimeout(hideCalloutTimer)} onMouseLeave={() => slowHideCallout()}>\r\n {\r\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\r\n setShowCallout(true)} onFocus={() => setShowCallout(true)} onKeyDown={e => closeTooltip(e)} onBlur={() => setShowCallout(false)} href={anchorHrefPlaceholder} className=\"listing-group-name-container\" aria-label={attributeText}>\r\n {attributeText}\r\n \r\n }\r\n { showCallout && }\r\n
\r\n
\r\n {showSelectorIcon &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n }\r\n
);\r\n};\r\n","/* eslint-disable no-use-before-define */\r\n/* eslint-disable no-nested-ternary */\r\n/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-indent */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport { I18n } from '@bingads-webui-grid/well-known';\r\nimport React, { FC, Fragment, useRef, useState } from 'react';\r\nimport { anchorHrefPlaceholder } from '../utils';\r\nimport { ProductOffersCallout } from './ProductOffersCallout';\r\nimport { Model$Listing } from '../../ApiType';\r\n\r\ninterface FlattenConditionTemplateProps {\r\n path: string;\r\n Attribute: string;\r\n i18n: I18n;\r\n partitionFullPath: Array;\r\n scope: {\r\n values: {\r\n campaignId: string | number;\r\n };\r\n save: Function;\r\n };\r\n productListingGroupId: number;\r\n assetGroupId: number | undefined;\r\n}\r\n\r\nexport const FlattenConditionTemplate: FC = (props) => {\r\n const {\r\n path, Attribute, i18n, partitionFullPath, scope, productListingGroupId, assetGroupId,\r\n } = props;\r\n const attributeRef = useRef(null);\r\n const [showCallout, setShowCallout] = useState(false);\r\n let hideCalloutTimer: number | undefined;\r\n const slowHideCallout = () => {\r\n hideCalloutTimer = window.setTimeout(() => {\r\n setShowCallout(false);\r\n }, 300);\r\n };\r\n\r\n const updatedScope = {\r\n values: {\r\n ...scope.values,\r\n assetGroupId,\r\n },\r\n save: scope.save,\r\n };\r\n\r\n const closeTooltip: React.KeyboardEventHandler = (e) => {\r\n if (e.key === 'Escape') {\r\n setShowCallout(false);\r\n }\r\n e.stopPropagation();\r\n };\r\n\r\n return (\r\n \r\n {\r\n
\r\n
{path}
\r\n
\r\n
clearTimeout(hideCalloutTimer)} onMouseLeave={() => slowHideCallout()}>\r\n {\r\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\r\n setShowCallout(true)} onFocus={() => setShowCallout(true)} onKeyDown={e => closeTooltip(e)} onBlur={() => setShowCallout(false)} href={anchorHrefPlaceholder} className=\"listing-group-name-container\" aria-label={Attribute}>\r\n {Attribute}\r\n \r\n }\r\n { showCallout && }\r\n
\r\n
\r\n
}\r\n
);\r\n};\r\n","/* eslint-disable no-script-url */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable no-use-before-define */\r\n/* eslint-disable no-nested-ternary */\r\n/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-indent */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport React, { FC, Fragment } from 'react';\r\nimport { LISTING_GROUP_TREE_ROUTING } from '../../constant';\r\n\r\ninterface NameTemplateProps {\r\n campaignId: number;\r\n assetGroupId?: number;\r\n ariaLabel: string;\r\n name: string;\r\n scope: {\r\n append: Function,\r\n save: Function;\r\n };\r\n}\r\n\r\n\r\nexport const NameTemplate: FC = (props) => {\r\n const {\r\n assetGroupId, ariaLabel, campaignId, name,\r\n scope,\r\n } = props;\r\n\r\n const onNavigateClick: React.MouseEventHandler = () => {\r\n scope.append({\r\n assetGroupId,\r\n });\r\n scope.save(LISTING_GROUP_TREE_ROUTING);\r\n };\r\n\r\n return (\r\n \r\n {name ?\r\n {name}\r\n \r\n : ''}\r\n \r\n );\r\n};\r\n","import { ListingGroupGridItemData, } from '../interface';\r\n\r\nexport function fromViewModelToBulkModel(itemData: ListingGroupGridItemData) {\r\n const condition = itemData.Condition || {};\r\n if (condition.Attribute === '' && condition.Operand === '') {\r\n condition.Operand = 'All';\r\n }\r\n return {\r\n Id: itemData.Id,\r\n AssetGroupId: itemData.AssetGroupId,\r\n IsExcluded: itemData.IsExcluded,\r\n IsLeaf: itemData.IsLeaf,\r\n Condition: itemData.Condition,\r\n ParentId: itemData.ParentId,\r\n };\r\n}\r\n","/* eslint-disable react/jsx-filename-extension */\r\nimport _ from 'underscore';\r\nimport React, { FC, useCallback, useState } from 'react';\r\nimport classnames from 'classnames';\r\nimport { Callout, Text, FontIcon } from '@fluentui/react';\r\nimport { Target } from '@fluentui/react-hooks';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport { statusStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { createOrUpdateListingGroup } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { ListingGroupGridItemData, } from '../../interface';\r\nimport { fromViewModelToBulkModel } from '../../API/bulk';\r\n\r\ninterface IncludeExcludeTemplateProps {\r\n itemData: ListingGroupGridItemData\r\n}\r\n\r\nexport const styles = (p, core) => {\r\n const { palette } = core;\r\n return {\r\n bold: {\r\n fontWeight: 600,\r\n },\r\n includeExcludeStatusContainer: {\r\n '& .include-exclude-status.disabled': {\r\n cursor: 'default',\r\n },\r\n '& .statusEnabled_icon.parent-node:before': {\r\n color: 'grey',\r\n },\r\n },\r\n includeExcludeCallout: merge(\r\n {\r\n marginTop: 10,\r\n marginLeft: 10,\r\n maxWidth: '90%',\r\n background: palette.white,\r\n '& .statuschangelink': {\r\n padding: '7px 20px',\r\n display: 'block',\r\n cursor: 'pointer',\r\n },\r\n '& .statuschange-icon': {\r\n marginRight: 5,\r\n },\r\n '& ul': {\r\n listStyle: 'none',\r\n paddingLeft: 0,\r\n marginBottom: 0,\r\n marginTop: 0,\r\n '& li': {\r\n cursor: 'pointer',\r\n display: 'list-item',\r\n '&:hover': {\r\n backgroundColor: palette.neutralLight,\r\n },\r\n },\r\n '& .ms-Icon': {\r\n paddingRight: 5,\r\n },\r\n },\r\n },\r\n statusStyle({ palette })\r\n ),\r\n };\r\n};\r\n\r\n\r\nexport const IncludeExcludeTemplate: FC = (props) => {\r\n const styleClassNames: any = useDefaultStyles(styles);\r\n const {\r\n itemData,\r\n } = props;\r\n const [showCallout, setShowCallout] = useState(false);\r\n const [target, setTarget] = useState(null);\r\n const statusIcon = !itemData.IsExcluded ? (\r\n
\r\n
\r\n {itemData.IsLeaf &&
}\r\n
) : (\r\n
\r\n {itemData.IsLeaf && }\r\n {!itemData.IsLeaf &&
}\r\n {itemData.IsLeaf &&
}\r\n
);\r\n\r\n const dismiss = useCallback(() => {\r\n setShowCallout(false);\r\n }, []);\r\n\r\n const show = useCallback((e) => {\r\n if (itemData.IsLeaf) {\r\n const cellEl = e.target.closest('.ms-DetailsRow-cell');\r\n setTarget(cellEl.getBoundingClientRect());\r\n setShowCallout(true);\r\n }\r\n }, [itemData.IsLeaf]);\r\n\r\n\r\n const onSave = useCallback((isInclude) => {\r\n const itemToAdd = _.extend(fromViewModelToBulkModel(itemData), {\r\n Id: -1,\r\n IsExcluded: !isInclude,\r\n });\r\n const itemToDelete = {\r\n Id: itemData.Id,\r\n AssetGroupId: itemData.AssetGroupId,\r\n Status: 'Deleted',\r\n };\r\n const res = createOrUpdateListingGroup([itemToAdd], [itemToDelete])\r\n .then(() => {\r\n itemData.refreshGridData();\r\n });\r\n\r\n return res;\r\n }, [itemData]);\r\n\r\n const onInclude = useCallback(() => {\r\n onSave(true);\r\n }, [onSave]);\r\n\r\n const onExclude = useCallback(() => {\r\n onSave(false);\r\n }, [onSave]);\r\n\r\n return (\r\n
\r\n
\r\n {statusIcon}\r\n
\r\n {showCallout && (\r\n \r\n
    \r\n
  • \r\n \r\n \r\n \r\n {itemData.i18n.getString(_TL_('Include'))}\r\n \r\n \r\n
  • \r\n
  • \r\n \r\n \r\n \r\n {itemData.i18n.getString(_TL_('Exclude'))}\r\n \r\n \r\n
  • \r\n
\r\n )}\r\n
);\r\n};\r\n","/* eslint-disable no-use-before-define */\r\n/* eslint-disable no-nested-ternary */\r\n/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-indent */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport React from 'react';\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { ColumnFormat, I18n, getFormatter } from '@bingads-webui-grid/well-known';\r\nimport { IColumn } from '@fluentui/react';\r\nimport { ListingGroupColumn, AssetGroupNameColumn, IncludeExcludeColumn } from '../../rawColumns';\r\nimport { ListingGroupGridColumnOnRender, ListingGroupGridItemData, } from '../../interface';\r\nimport { getPropertyFromItem, shouldEnableEdit, IsCurrentAccountInactive, IsReadOnlyMode } from '../utils';\r\nimport { columnKeyRawDataMap } from '../../ColumnOdataMap';\r\nimport { Model$Listing } from '../../ApiType';\r\nimport { ConditionTemplate } from './ConditionTemplate';\r\nimport { FlattenConditionTemplate } from './FlattenConditionTemplate';\r\nimport { NameTemplate } from './NameTemplate';\r\nimport { IncludeExcludeTemplate } from './IncludeExcludeTemplate';\r\n\r\nconst PATH_SPLITER = '>';\r\n\r\nconst isEverythingElse = (condition: Model$Listing) =>\r\n !!(!condition.Attribute && condition.Operand);\r\n\r\nconst isAllProduct = (condition: Model$Listing) =>\r\n !!(condition.Operand === '' && !condition.Attribute);\r\n\r\nconst getNearestParentCondition = (parentConditions: Model$Listing[]) => (parentConditions[parentConditions.length - 1]);\r\n\r\nexport const getDisplayName = (condition: Model$Listing, parentConditions:Model$Listing[], i18n: I18n): any => {\r\n if (isAllProduct(condition)) {\r\n return i18n.getString(_TL_('All Products'));\r\n }\r\n const parentCondition = getNearestParentCondition(parentConditions);\r\n if (isEverythingElse(condition)) {\r\n if (isEverythingElse(parentCondition)) {\r\n return i18n.getString(_TL_('Everything else'));\r\n }\r\n return i18n.getString(_TL_(\"Everything else in '{0}'\")).replace('{0}', getDisplayName(parentCondition, parentConditions.slice(0, -1), i18n));\r\n }\r\n return condition.Attribute;\r\n};\r\n\r\nconst getPath = (parentConditions: Model$Listing[], i18n: I18n) => {\r\n if (!parentConditions || parentConditions.length === 0) {\r\n return '';\r\n }\r\n let path = '';\r\n path += getDisplayName(parentConditions[0], [], i18n);\r\n for (let i = 1; i < parentConditions.length; i += 1) {\r\n path += ` ${PATH_SPLITER} ${getDisplayName(parentConditions[i], parentConditions.slice(0, i), i18n)}`;\r\n }\r\n return path;\r\n};\r\n\r\nconst getFullPath = (conditions: Model$Listing[], i18n: I18n) => {\r\n const path: any[] = [];\r\n for (let i = 0; i < conditions.length; i += 1) {\r\n path.push({\r\n ...conditions[i],\r\n Attribute: getDisplayName(conditions[i], conditions.slice(0, i), i18n),\r\n });\r\n }\r\n return path;\r\n};\r\n\r\nexport function getAttributeTextOfConditionTemplate(i18n: I18n, item: ListingGroupGridItemData) {\r\n assertIsDefined(item.treeViewInfo);\r\n assertIsDefined(item.Condition);\r\n const parentItem = item.treeViewInfo.parent;\r\n let attributeText: string;\r\n if (isAllProduct(item.Condition)) {\r\n attributeText = i18n.getString(_TL_('All Products'));\r\n } else if (isEverythingElse(item.Condition)) {\r\n // if item is not root, it must have parent.\r\n assertIsDefined(parentItem?.Condition);\r\n if (isEverythingElse(parentItem.Condition)) {\r\n // Parent node is everything else\r\n attributeText = i18n.getString(_TL_('Everything else'));\r\n } else {\r\n // Everything else in `parent's attribute`\r\n const parentAttribute = parentItem.Condition.Attribute || i18n.getString(_TL_('All Products'));\r\n\r\n attributeText = i18n.getString(_TL_(\"Everything else in '{0}'\")).replace('{0}', parentAttribute);\r\n }\r\n } else {\r\n assertIsDefined(item.Condition.Attribute);\r\n attributeText = item.Condition.Attribute;\r\n }\r\n return attributeText;\r\n}\r\n\r\nconst onListingGroupColumnRender: ListingGroupGridColumnOnRender = (itemData) => {\r\n const isTreeView = !!itemData?.treeViewInfo;\r\n if (isTreeView) {\r\n return onListingGroupColumnTreeViewRender(itemData);\r\n }\r\n return onListingGroupColumnListViewRender(itemData);\r\n};\r\n\r\nconst onAssetGroupNameColumnRender: ListingGroupGridColumnOnRender = (itemData) => {\r\n assertIsDefined(itemData, 'item with no data');\r\n const { i18n, serverContext, scope } = itemData;\r\n const name = itemData.AssetGroupName;\r\n const assetGroupId = itemData.AssetGroupId;\r\n const currentCampaign = serverContext.CurrentCampaign;\r\n // In campaign level, there is no CampaignId in row value\r\n const cmpid = itemData.CampaignId || (currentCampaign && currentCampaign.Id);\r\n const ariaLabel = i18n.getString(_TL_('Click to scope to asset group {{assetGroupName}}'), { assetGroupName: name });\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst onIncludeExcludeColumnRender: ListingGroupGridColumnOnRender = (itemData) => {\r\n assertIsDefined(itemData, 'item with no data');\r\n return ();\r\n};\r\n\r\nconst onListingGroupColumnListViewRender: ListingGroupGridColumnOnRender = (itemData) => {\r\n assertIsDefined(itemData, 'item with no data');\r\n const { i18n, scope } = itemData;\r\n // if (value.$total) {\r\n // return flattenConditionTemplate(value);\r\n // }\r\n const condition = { ...itemData.Condition };\r\n const parentConditions = itemData.ParentConditions;\r\n assertIsDefined(parentConditions);\r\n const attribute = getDisplayName(condition, parentConditions, i18n);\r\n const path = getPath(parentConditions, i18n);\r\n const conditions = itemData.ParentConditions ?\r\n [...itemData.ParentConditions, itemData.Condition] : [itemData.Condition];\r\n const partitionFullPath = getFullPath(conditions, i18n);\r\n return ();\r\n};\r\n\r\nconst onListingGroupColumnTreeViewRender: ListingGroupGridColumnOnRender = (itemData) => {\r\n assertIsDefined(itemData?.treeViewInfo);\r\n assertIsDefined(itemData.treeViewInfo.depth);\r\n assertIsDefined(itemData.treeViewInfo.hasChildren);\r\n const {\r\n serverContext, i18n, total, scope, parentConditions,\r\n treeViewInfo: { hasChildren, depth, isExpanded },\r\n } = itemData;\r\n\r\n const showSelectorIcon = shouldEnableEdit(!IsCurrentAccountInactive(serverContext) &&\r\n !IsReadOnlyMode(serverContext) && (hasChildren || depth < 7), serverContext);\r\n\r\n function onToggleCollapse() {\r\n assertIsDefined(itemData?.eventHandlers.onTreeViewColumnToggleCollapse);\r\n itemData.eventHandlers.onTreeViewColumnToggleCollapse(itemData);\r\n }\r\n\r\n function onAddOrEditTrigger() {\r\n assertIsDefined(itemData?.eventHandlers.onTreeViewColumnAddOrEdit);\r\n itemData.eventHandlers.onTreeViewColumnAddOrEdit(itemData as any); // TODO: not use this trick\r\n }\r\n\r\n const attributeText = getAttributeTextOfConditionTemplate(i18n, itemData);\r\n\r\n assertIsDefined(parentConditions);\r\n const conditions = itemData.ParentConditions ?\r\n [...itemData.ParentConditions, itemData.Condition] : [itemData.Condition];\r\n const partitionFullPath = getFullPath(conditions, i18n);\r\n\r\n return ( onAddOrEditTrigger()}\r\n onToggleCollapse={() => onToggleCollapse()}\r\n attributeText={attributeText}\r\n depth={depth}\r\n hasChildren={hasChildren}\r\n i18n={i18n}\r\n isExpanded={!!isExpanded}\r\n showSelectorIcon={showSelectorIcon}\r\n total={total}\r\n partitionFullPath={partitionFullPath}\r\n scope={scope}\r\n productListingGroupId={itemData.Id}\r\n assetGroupId={itemData.AssetGroupId}\r\n />);\r\n};\r\n\r\n/**\r\n * key is the key of column raw data\r\n *\r\n * value is the render callback of fluentUI\r\n */\r\nconst columnRenderMap: Map = new Map([\r\n [IncludeExcludeColumn.key, onIncludeExcludeColumnRender],\r\n [ListingGroupColumn.key, onListingGroupColumnRender],\r\n [AssetGroupNameColumn.key, onAssetGroupNameColumnRender],\r\n]);\r\n\r\nconst defaultRender: ListingGroupGridColumnOnRender = getFormattedPropertyValueOfItem;\r\n\r\nfunction getFormattedPropertyValueOfItem(itemData: ListingGroupGridItemData | undefined, index: number | undefined, column: IColumn | undefined): string {\r\n assertIsDefined(itemData);\r\n assertIsDefined(column);\r\n const value = getPropertyFromItem(itemData, index, column);\r\n const format = getFormatOfColumn(column);\r\n return tryGetFormatString(value, itemData.i18n, format);\r\n}\r\n\r\nfunction getFormatOfColumn(column: IColumn) {\r\n return columnKeyRawDataMap[column.key].format;\r\n}\r\n\r\nexport function tryGetFormatString(value: string | number, i18n: I18n, format: ColumnFormat | undefined) {\r\n if (format) {\r\n const formatter = getFormatter(format, i18n);\r\n return formatter(value);\r\n }\r\n return value;\r\n}\r\n\r\nexport function getColumnRenderByColumnKey(columnKey: string) {\r\n if (columnRenderMap.has(columnKey)) {\r\n return columnRenderMap.get(columnKey);\r\n }\r\n return defaultRender;\r\n}\r\n","import { ListingGroupColumn, AssetGroupNameColumn } from '../rawColumns';\r\n\r\nconst isColumnSortEnabledMap: Map = new Map([\r\n [ListingGroupColumn.key, true],\r\n [AssetGroupNameColumn.key, true],\r\n]);\r\n\r\nexport function isSortEnabledByColumnKey(columnKey: string): boolean {\r\n if (isColumnSortEnabledMap.has(columnKey)) {\r\n return isColumnSortEnabledMap.get(columnKey)!;\r\n }\r\n return false;\r\n}\r\n","import { useContext, useMemo } from 'react';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\n\r\nconst listingGroupActivityName = 'ListingGroupPage';\r\n\r\nconst schema = {\r\n scenario: [\r\n {\r\n name: 'ListingGroup',\r\n value: 'ListingGroup',\r\n activity: [\r\n { name: listingGroupActivityName, value: listingGroupActivityName },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\nfunction getActivity(instrumentation) {\r\n instrumentation.addScenario(schema);\r\n\r\n const scenario = instrumentation.ListingGroup.create();\r\n const activity = scenario[listingGroupActivityName].create();\r\n\r\n return activity;\r\n}\r\n\r\nfunction getLogger(activity) {\r\n function signal(message: string) {\r\n activity.signal(message);\r\n }\r\n return { signal };\r\n}\r\n\r\nexport function useLogger() {\r\n const instrumentation = useContext(InstrumentationContext);\r\n const activity = useMemo(() => getActivity(instrumentation), [instrumentation]);\r\n const logger = useMemo(() => getLogger(activity), [activity]);\r\n return logger;\r\n}\r\n","import _ from 'underscore';\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { WithTreeViewData } from '@bingads-webui-grid/well-known';\r\nimport { IDropdownOption } from '@fluentui/react';\r\nimport { Model$ListingGroup } from '../ApiType';\r\nimport { EVERYTHING_ELSE_NODE_ATTRIBUTE, NullPartial } from '../constant';\r\nimport { ListingGroupGridItemData } from '../interface';\r\nimport { ListingGroupTreeViewSelectorGridItem } from './panel-helper';\r\n\r\nfunction getKeyOfHotelListingGroupItem(item: ListingGroupGridItemData) { return `${item.Condition?.Operand ?? ''}-${item.Condition?.Attribute ?? ''}`; }\r\nfunction getAttributeValueOfPanelSelectorItem(item: ListingGroupTreeViewSelectorGridItem) { return item.data.Attribute; }\r\nfunction getKeyOfPanelSelectorItem(item: ListingGroupTreeViewSelectorGridItem, diemnsionKey: string) { return `${diemnsionKey}-${getAttributeValueOfPanelSelectorItem(item) ?? ''}`; }\r\n\r\nexport interface TreeViewSaveWorkerOptions {\r\n selectedItems: ListingGroupTreeViewSelectorGridItem[];\r\n selectedDimension: IDropdownOption;\r\n treeItem: WithTreeViewData;\r\n\r\n // / Need adGroup and campaign info to send request\r\n\r\n assetGroupId: number;\r\n campaignId: number;\r\n\r\n callbackWhenSkipUpdate: () => void;\r\n callbackWhenUpdate: (\r\n listingGroupsToAdd: Partial>[],\r\n listingGroupsToDelete: number[],\r\n ) => Promise;\r\n}\r\n\r\nexport function getAddAndDeleteItem(selectedDimension: IDropdownOption, selectedItems: ListingGroupTreeViewSelectorGridItem[], treeItem: WithTreeViewData) {\r\n // / handle children\r\n // 1. use `${DimensionType}-${DimensionValue}`(.i.e `${Operand}-${Attribute}`) as key\r\n // 2. calculate the difference\r\n // 3. use API to update\r\n assertIsDefined(treeItem);\r\n const childrenOfEidtItem = treeItem.treeViewInfo.children;\r\n\r\n const currentOperandOfChildren: string = selectedDimension.data.operand;\r\n\r\n const dummyEveryThingElse: ListingGroupTreeViewSelectorGridItem = {\r\n key: '_DUMMY_EVERY_THING_ELSE',\r\n data: { Attribute: EVERYTHING_ELSE_NODE_ATTRIBUTE },\r\n } as unknown as ListingGroupTreeViewSelectorGridItem;\r\n\r\n const finalSelectedItems = selectedItems.length === 0 ? selectedItems : [\r\n ...selectedItems,\r\n dummyEveryThingElse,\r\n ];\r\n\r\n const oldItemKeys = new Set(childrenOfEidtItem.map(child =>\r\n getKeyOfHotelListingGroupItem(child)));\r\n\r\n const newItemKeys = new Set(finalSelectedItems.map(item =>\r\n getKeyOfPanelSelectorItem(item, currentOperandOfChildren)));\r\n\r\n // deleted item ids are the difference of oldItemIds and newItemIds\r\n const deleteItemIds = childrenOfEidtItem.filter((child) => {\r\n const key = getKeyOfHotelListingGroupItem(child);\r\n return !newItemKeys.has(key);\r\n }).map(child => child.Id);\r\n\r\n // added item ids are the difference of newItemIds and oldItemIds\r\n const addedItems = finalSelectedItems.filter((item) => {\r\n const key = getKeyOfPanelSelectorItem(item, currentOperandOfChildren);\r\n return !oldItemKeys.has(key);\r\n });\r\n\r\n return { deleteItemIds, addedItems };\r\n}\r\n\r\nexport async function treeViewSaveWorker(params: TreeViewSaveWorkerOptions) {\r\n const {\r\n selectedItems,\r\n selectedDimension,\r\n treeItem,\r\n callbackWhenSkipUpdate,\r\n callbackWhenUpdate,\r\n assetGroupId,\r\n campaignId,\r\n } = params;\r\n\r\n // / handle children\r\n // 1. use `${DimensionType}-${DimensionValue}`(.i.e `${Operand}-${Attribute}`) as key\r\n // 2. calculate the difference\r\n // 3. use API to update\r\n assertIsDefined(treeItem);\r\n const childrenOfEidtItem = treeItem.treeViewInfo.children;\r\n\r\n const prevOperandOfChildren = childrenOfEidtItem.length === 0 ? undefined : childrenOfEidtItem[0].Condition?.Operand;\r\n\r\n const currentOperandOfChildren: string = selectedDimension.data.operand;\r\n\r\n const { addedItems, deleteItemIds } = getAddAndDeleteItem(selectedDimension, selectedItems, treeItem);\r\n\r\n // for all new node, it should have a unique negative ID.\r\n // There should only be one new root, whose ID is `-1`\r\n const rootNodeId = -1;\r\n let negativeId = -2;\r\n const editItemId = treeItem.Id;\r\n const wasEditingNodeLeaf = treeItem.treeViewInfo.children.length === 0;\r\n const isEditingNodeLeaf = selectedItems.length === 0;\r\n\r\n const inheritNode = (() => {\r\n switch (true) {\r\n case wasEditingNodeLeaf && !isEditingNodeLeaf:\r\n // add patition under leaf node, new partition inherits bid from leaf node.\r\n return treeItem;\r\n case !wasEditingNodeLeaf && prevOperandOfChildren === currentOperandOfChildren:\r\n // add partition under non-leaf node,\r\n // new partition inherits bid from everythingElse at the same level.\r\n return treeItem.treeViewInfo.children.find(child => child.Condition?.Attribute === EVERYTHING_ELSE_NODE_ATTRIBUTE);\r\n default:\r\n return undefined;\r\n }\r\n })();\r\n\r\n // children could be add to editing node, which could be\r\n // - parent, children should set parent ID to editing node\r\n // - leaf, editing node will have a dummy ID and all children should set it as parent\r\n const parentIdOfChildren = !wasEditingNodeLeaf ? treeItem.Id : rootNodeId;\r\n assertIsDefined(parentIdOfChildren);\r\n\r\n const listingGroupsToAdd: Partial>[] = addedItems.map(item => buildListingGroupToAdd({\r\n Attribute: getAttributeValueOfPanelSelectorItem(item),\r\n Operand: currentOperandOfChildren,\r\n ParentId: parentIdOfChildren,\r\n isLeaf: true,\r\n inheritNode,\r\n isDeleteAll: false,\r\n }));\r\n\r\n const listingGroupsToDelete = Array.from(deleteItemIds);\r\n\r\n // if nothing is changed, just skip\r\n if (listingGroupsToAdd.length === 0 && listingGroupsToDelete.length === 0) {\r\n callbackWhenSkipUpdate();\r\n return;\r\n }\r\n\r\n // handle current node itself and \"everything else\" node.\r\n switch (true) {\r\n case wasEditingNodeLeaf && !isEditingNodeLeaf:\r\n // if the item is changed from leaf to parent\r\n // - delete it and add it back to make back-end happy(make this item a`Subdivision` rather than`Unit`)\r\n\r\n // item itself\r\n listingGroupsToDelete.push(editItemId);\r\n listingGroupsToAdd.push(buildListingGroupToAdd({\r\n ParentId: treeItem.ParentId ?? undefined,\r\n Attribute: treeItem.Condition?.Attribute ?? null,\r\n Operand: (!treeItem.Condition || treeItem.Condition.Operand === '') ? 'All' : treeItem.Condition.Operand,\r\n isLeaf: false,\r\n inheritNode,\r\n isDeleteAll: _.isEmpty(listingGroupsToAdd),\r\n }));\r\n break;\r\n case isEditingNodeLeaf:\r\n // Note: from leaf to leaf is skipped, for nothing will be changed\r\n // if the item is changed from parent to leaf, delete it and add it back to make back-end happy(make this item a `Unit` rather than `Subdivision`)\r\n listingGroupsToDelete.push(editItemId);\r\n listingGroupsToAdd.push(buildListingGroupToAdd({\r\n ParentId: treeItem.ParentId ?? undefined,\r\n Attribute: treeItem.Condition?.Attribute ?? null,\r\n Operand: (!treeItem.Condition || treeItem.Condition.Operand === '') ? 'All' : treeItem.Condition.Operand,\r\n isLeaf: true,\r\n inheritNode,\r\n isDeleteAll: _.isEmpty(listingGroupsToAdd),\r\n }));\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n // sort the requests to make the root is the first child\r\n listingGroupsToAdd.sort((a, b) => {\r\n assertIsDefined(a.Id);\r\n assertIsDefined(b.Id);\r\n if (a.Id < b.Id) {\r\n return 1;\r\n }\r\n if (a.Id > b.Id) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n\r\n await callbackWhenUpdate(listingGroupsToAdd, listingGroupsToDelete);\r\n\r\n interface MetaInfo {\r\n ParentId: number | undefined;\r\n Attribute: string | null;\r\n Operand: string | undefined;\r\n isLeaf: boolean;\r\n inheritNode: WithTreeViewData | undefined;\r\n isDeleteAll: boolean;\r\n }\r\n\r\n function buildListingGroupToAdd(metaInfo: MetaInfo): Partial> {\r\n return {\r\n Id: metaInfo.isLeaf ? negativeId-- : rootNodeId,\r\n ParentId: metaInfo.ParentId,\r\n IsLeaf: metaInfo.isLeaf,\r\n AssetGroupId: assetGroupId, // in tree editor page, we always have AdGroupId\r\n CampaignId: campaignId, // in tree editor page, we always have CampaignId\r\n // IsAutoBidding: false, // TODO: Not enabled for phase 1\r\n Condition: { Attribute: metaInfo.Attribute ?? (null as unknown as undefined), Operand: metaInfo.Operand ?? (null as unknown as undefined) },\r\n IsExcluded: !metaInfo.isDeleteAll && metaInfo.isLeaf && ((metaInfo.Attribute === '' && metaInfo.Operand !== 'All') || (metaInfo.inheritNode?.IsExcluded)),\r\n };\r\n }\r\n}\r\n","/* eslint-disable react/jsx-filename-extension */\r\nimport { isString } from 'underscore';\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { clicksColumn, conversionsColumn, impressionsColumn, WithTreeViewData } from '@bingads-webui-grid/well-known';\r\nimport { IColumn, TextField } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { WithBulk } from './PanelSelector';\r\nimport { Model$ProductAttributeStatistic, Model$ListingCondition } from '../ApiType';\r\nimport { ListingGroupGridItemData } from '../interface';\r\nimport { ListingColumn } from '../rawColumns';\r\n\r\nconst conversionsFiledName = 'conversions';\r\nconst impressionsFiledName = 'impressions';\r\nconst clicksFiledName = 'clicks';\r\nconst productsFiledName = 'products';\r\nconst defaultValuePlaceholder = '-';\r\nconst firstColumnName = 'primary';\r\nexport interface ListingGroupTreeViewSelectorGridItem {\r\n key: string;\r\n // fileds\r\n [firstColumnName]: string;\r\n /**\r\n * @default \"-\"\r\n */\r\n [conversionsFiledName]: number | string | undefined | null;\r\n /**\r\n * @default \"-\"\r\n */\r\n [impressionsFiledName]: number | string | undefined | null;\r\n /**\r\n * @default \"-\"\r\n */\r\n [clicksFiledName]: number | string | undefined | null;\r\n /**\r\n * @default \"-\"\r\n */\r\n [productsFiledName]: number | string | undefined | null;\r\n\r\n data: {\r\n Attribute: string;\r\n }\r\n}\r\n\r\nconst dataColumnWidth = 80;\r\n\r\nexport function buildTreeViewSelectorItems(selectedDimension: Model$ListingCondition, selectedDimensionGridData: Model$ProductAttributeStatistic[], childrenOfNode: WithTreeViewData[]): ListingGroupTreeViewSelectorGridItem[] {\r\n const selectedDimensionGridDataMap: { [attributeName: string]: Model$ProductAttributeStatistic } = selectedDimensionGridData.reduce((cur, item) => {\r\n assertIsDefined(item.AttributeName);\r\n // eslint-disable-next-line no-param-reassign\r\n cur[item.AttributeName] = item;\r\n return cur;\r\n }, {});\r\n const domainDataItems: ListingGroupTreeViewSelectorGridItem[] = selectedDimension.DomainData?.map((item) => {\r\n const curItemDataitem = selectedDimensionGridDataMap[item.Id];\r\n assertIsDefined(item.Value);\r\n return {\r\n key: item.Id.toString(),\r\n [firstColumnName]: item.Value,\r\n [clicksFiledName]: curItemDataitem?.PerformanceMetrics.Clicks,\r\n [conversionsFiledName]: curItemDataitem?.PerformanceMetrics.Conversions,\r\n [impressionsFiledName]: curItemDataitem?.PerformanceMetrics.Impressions,\r\n [productsFiledName]: curItemDataitem?.ProductCount,\r\n data: {\r\n Attribute: item.Value,\r\n },\r\n };\r\n }) ?? [];\r\n\r\n const apiDataItems: ListingGroupTreeViewSelectorGridItem[] = selectedDimensionGridData.map((item) => {\r\n assertIsDefined(item.AttributeName);\r\n return {\r\n key: item.Id.toString(),\r\n [firstColumnName]: item.AttributeName,\r\n [clicksFiledName]: item?.PerformanceMetrics.Clicks,\r\n [conversionsFiledName]: item?.PerformanceMetrics.Conversions,\r\n [impressionsFiledName]: item?.PerformanceMetrics.Impressions,\r\n [productsFiledName]: item?.OfferCount,\r\n data: {\r\n Attribute: item.AttributeName,\r\n },\r\n };\r\n }) ?? [];\r\n\r\n const existingItems = buildTreeViewSelectorItemsByChildrenOfNode(selectedDimension, childrenOfNode);\r\n const tempDataItems = mergeTreeViewSelectorItems(domainDataItems, existingItems);\r\n return fillDataFromAPI(tempDataItems, apiDataItems, selectedDimension.HasDomainData);\r\n}\r\n\r\nexport function buildTreeViewSelectorItemsWithoutStatistics(selectedDimension: Model$ListingCondition): ListingGroupTreeViewSelectorGridItem[] {\r\n const domainDataItems: ListingGroupTreeViewSelectorGridItem[] = selectedDimension.DomainData?.map((item) => {\r\n assertIsDefined(item.Value);\r\n return {\r\n key: item.Id.toString(),\r\n [firstColumnName]: item.Value,\r\n [clicksFiledName]: undefined,\r\n [conversionsFiledName]: undefined,\r\n [impressionsFiledName]: undefined,\r\n [productsFiledName]: undefined,\r\n data: {\r\n Attribute: item.Value,\r\n },\r\n };\r\n }) ?? [];\r\n\r\n const existingItems = buildTreeViewSelectorItemsByChildrenOfNode(selectedDimension, []);\r\n const tempDataItems = mergeTreeViewSelectorItems(domainDataItems, existingItems);\r\n return tempDataItems;\r\n}\r\n\r\nfunction fillDataFromAPI(candidateItems: ListingGroupTreeViewSelectorGridItem[], apiDataItems: ListingGroupTreeViewSelectorGridItem[], hasDomainData: boolean) {\r\n return overrideMergeByValue(\r\n candidateItems,\r\n apiDataItems,\r\n x => x.data.Attribute,\r\n (b, index, arr) => {\r\n const newItem = { ...arr[index] };\r\n newItem[clicksFiledName] = b?.[clicksFiledName];\r\n newItem[conversionsFiledName] = b?.[conversionsFiledName];\r\n newItem[impressionsFiledName] = b?.[impressionsFiledName];\r\n newItem[productsFiledName] = b?.[productsFiledName];\r\n // eslint-disable-next-line no-param-reassign\r\n arr[index] = newItem;\r\n },\r\n !hasDomainData\r\n );\r\n}\r\n\r\n/**\r\n * Given two array, \"base\" and \"additional\".\r\n *\r\n * Shadow copy \"base\" array to \"result\" array.\r\n * If found any element in \"additional\" is existed in \"base\", call the callback.\r\n * Else add the element to the \"result\" array.\r\n *\r\n * @param a base array\r\n * @param b additional array\r\n * @param comparator a callback to compare whether two element is same\r\n * @param callback called when two element is the same according to `comparator`\r\n * @returns result array\r\n */\r\nfunction overrideMergeByComparator(a: T[], b: T[], comparator: (x: T, y: T) => boolean, callback: (b: T, index: number, arr: T[]) => void, appendNewItems:boolean) {\r\n const res = [...a];\r\n b.forEach((x) => {\r\n const index = res.findIndex(y => comparator(x, y));\r\n if (index >= 0) {\r\n callback(x, index, res);\r\n } else if (appendNewItems) {\r\n res.push(x);\r\n }\r\n });\r\n return res;\r\n}\r\n\r\nfunction overrideMergeByValue(a: T[], b: T[], valuePicker: (x: T) => unknown, callback: (b: T, index: number, arr: T[]) => void, appendNewItems:boolean) {\r\n const comperator = (x: T, y: T) => {\r\n const xValue = valuePicker(x);\r\n const yValue = valuePicker(y);\r\n\r\n if (isString(xValue) && isString(yValue)) {\r\n return xValue.toLowerCase() === yValue.toLowerCase();\r\n }\r\n\r\n return xValue === yValue;\r\n };\r\n\r\n return overrideMergeByComparator(a, b, comperator, callback, appendNewItems);\r\n}\r\n\r\nexport function mergeTreeViewSelectorItems(oldItems: ListingGroupTreeViewSelectorGridItem[], additionalItems: ListingGroupTreeViewSelectorGridItem[]) {\r\n return overrideMergeByValue(\r\n oldItems,\r\n additionalItems,\r\n x => x.data.Attribute,\r\n // eslint-disable-next-line no-return-assign, no-param-reassign\r\n (b, index, arr) => arr[index] = b,\r\n true\r\n );\r\n}\r\n\r\nexport function buildTreeViewSelectorItemsByChildrenOfNode(selectedDimension: Model$ListingCondition, childrenOfNode: WithTreeViewData[]): ListingGroupTreeViewSelectorGridItem[] {\r\n const res: ListingGroupTreeViewSelectorGridItem[] = [];\r\n childrenOfNode.forEach((child) => {\r\n // filter out everything else\r\n if (child.Condition?.Attribute\r\n && selectedDimension.Operand === child.Condition.Operand\r\n ) {\r\n res.push({\r\n key: child.Id.toString(),\r\n [firstColumnName]: child.Condition.Attribute,\r\n [clicksFiledName]: undefined,\r\n [conversionsFiledName]: undefined,\r\n [impressionsFiledName]: undefined,\r\n [productsFiledName]: undefined,\r\n data: {\r\n Attribute: child.Condition.Attribute,\r\n },\r\n });\r\n }\r\n });\r\n return res;\r\n}\r\n\r\nconst defaultRender: IColumn['onRender'] = (item, index, column) => {\r\n let value = item && column?.fieldName ? item[column.fieldName] : '';\r\n\r\n if (value === null || value === undefined) {\r\n value = defaultValuePlaceholder;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return value.toString();\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n};\r\n\r\nexport function fillDataToBulkAddedItem(item: WithBulk) {\r\n const isAddedByBulkEdit = !!item.__bulk;\r\n if (isAddedByBulkEdit) {\r\n if (!item.data) {\r\n // eslint-disable-next-line no-param-reassign\r\n item.data = {\r\n Attribute: item[firstColumnName],\r\n };\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n item.data.Attribute = item[firstColumnName];\r\n }\r\n }\r\n}\r\n\r\nconst primaryColumnRender: IColumn['onRender'] = (item, index, column) => {\r\n const value = item && column?.fieldName ? item[column.fieldName] : '';\r\n\r\n const isEditableItem = Number.isInteger(item.key) && item.key < 0;\r\n if (!isEditableItem) {\r\n return (\r\n \r\n {value}\r\n );\r\n }\r\n return (\r\n {\r\n assertIsDefined(column?.fieldName);\r\n // eslint-disable-next-line no-param-reassign\r\n item[column.fieldName] = newValue;\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport function buildTreeViewSelectorColumns(primaryColumnId: string, primaryColumnName: string, i18n: any, includeDataColumns: boolean): IColumn[] {\r\n const primaryColumn: IColumn = {\r\n key: primaryColumnId,\r\n name: i18n.getString(`ProductsGrid_Column_${primaryColumnName}`),\r\n minWidth: 180,\r\n fieldName: firstColumnName,\r\n isRowHeader: true,\r\n onRender: primaryColumnRender,\r\n };\r\n if (!includeDataColumns) {\r\n return [primaryColumn];\r\n }\r\n const dataColumns: IColumn[] = [\r\n { ...conversionsColumn, filedName: conversionsFiledName },\r\n { ...impressionsColumn, filedName: impressionsFiledName },\r\n { ...clicksColumn, filedName: clicksFiledName },\r\n { ...ListingColumn, filedName: productsFiledName },\r\n ].map(column => ({\r\n key: column.key,\r\n name: i18n.getString(column.name),\r\n minWidth: dataColumnWidth,\r\n maxWidth: dataColumnWidth,\r\n fieldName: column.filedName,\r\n onRender: defaultRender,\r\n }));\r\n return [primaryColumn, ...dataColumns];\r\n}\r\n","/* eslint-disable */\r\nimport React, { useState, useRef, useCallback, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { assertIsDefined } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { IColumn, IDropdownOption } from '@fluentui/react';\r\nimport {WithTreeViewData, I18n } from '@bingads-webui-grid/well-known';\r\nimport { useDateRange } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { PanelSelectorProps, WithBulk } from './treeViewPanelSelector/PanelSelector';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { mergeData } from '@bingads-webui-campaign-react/product-services';\r\nimport { Model$ListingCondition, Model$ListingGroup } from './ApiType';\r\nimport { getValidListingConditions, getValidListingConditionsForWithoutPreselectedTreeNode } from './API/getListingGroupConditions';\r\nimport { useAPIsOfListingGroup } from './API';\r\nimport { ListingGroupGridItemData, TreeViewEventHandler } from './interface';\r\nimport { getAttributeTextOfConditionTemplate } from './render';\r\nimport { getAddAndDeleteItem, treeViewSaveWorker } from './treeViewPanelSelector/panel-callbacks';\r\nimport { buildTreeViewSelectorColumns, buildTreeViewSelectorItems, buildTreeViewSelectorItemsWithoutStatistics, buildTreeViewSelectorItemsByChildrenOfNode, fillDataToBulkAddedItem, ListingGroupTreeViewSelectorGridItem } from './treeViewPanelSelector/panel-helper';\r\nimport { ProductAttrubuteStatisticsResponse } from './API/productAttributeStatistics';\r\nimport { useLogger } from './logger';\r\nimport { getProductData, getProductScopeFromOData } from './API/getProductScope';\r\nimport { useAccountData } from './API/useAccountData';\r\nimport { offerLimitExceededWarningForListingGroup } from './render/utils';\r\n\r\n/**\r\n * default value used in fluent-ui\r\n * reference https://github.com/microsoft/fluentui/blob/31345de30d356731eeb0ac1e658a2652f8f00aa7/packages/react/src/components/DetailsList/DetailsList.base.tsx\r\n */\r\ninterface UseTreeViewPanelSelectorProps {\r\n allRowRawData: Model$ListingGroup[] | undefined;\r\n setAllRowRawData: Function,\r\n scope: { save: Function, values: any };\r\n refreshGridData: Function;\r\n getArguemntsOfUpdateGridDataByCurrentState: Function,\r\n i18n: I18n;\r\n currentCampaign: any;\r\n}\r\n\r\nconst NonSplittableConditions = ['CategoryL1', 'CategoryL2', 'CategoryL3', 'CategoryL4', 'CategoryL5'];\r\n\r\nconst DEFAULT_SALES_COUNTRY = 'US';\r\n\r\nexport const useTreeViewPanelSelector = (props: UseTreeViewPanelSelectorProps) => {\r\n const {\r\n i18n, allRowRawData, setAllRowRawData, scope, currentCampaign,\r\n refreshGridData,getArguemntsOfUpdateGridDataByCurrentState\r\n } = props;\r\n\r\nconst { productAttributeStatistics, getListingGroupConditions, updateListingTree } = useAPIsOfListingGroup();\r\nconst commonEntityPath = {\r\n accountId: scope.values.aid,\r\n campaignId: scope.values.campaignId || currentCampaign.Id,\r\n customerId: scope.values.cid,\r\n assetGroupId: scope.values.assetGroupId\r\n};\r\nconst dataRange = useDateRange();\r\nconst logger = useLogger();\r\n// #region TreeView\r\nconst [expandedItemIds, setExpandedItemIds] = useState(new Set());\r\nconst [isTreeViewSelectorOpen, setIsTreeViewSelectorOpen] = useState(false);\r\n\r\nconst [treeViewSelectorDimensions, setTreeViewSelectorDimensions] = useState[]>([]);\r\nconst [treeViewSelectorHeaderText, setTreeViewSelectorHeaderText] = useState('');\r\nconst [treeViewSelectorInitialSelectedItems, setTreeViewSelectorInitialSelectedItems] = useState([]);\r\nconst [treeViewSelectorItems, setTreeViewSelectorItems] = useState([]);\r\nconst [treeViewSelectorColumns, setTreeViewSelectorColumns] = useState([]);\r\nconst [isTreeViewShimmerEnabled, setIsTreeViewShimmerEnabled] = useState(false);\r\nconst serverContext = useContext(ServerContext);\r\nconst { getAccount } = useAccountData({ scope });\r\nfunction onTreeViewCancel() {\r\n setIsTreeViewSelectorOpen(false);\r\n logger.signal('Cancel button is clicked in tree view selector');\r\n}\r\n\r\nconst ADD_ONCE_LIMIT = 5_000;\r\nconst ADD_ONCE_LIMIT_STRING = \"5,000\";\r\nconst ALL_LIMIT = 20_000;\r\nconst ALL_LIMIT_STRING = \"20,000\";\r\nconst getErrorsForTreeViewSelector: PanelSelectorProps[\"getErrors\"] = (items: WithBulk[], selectedDimension: IDropdownOption) => {\r\n assertIsDefined(currentEditTreeItem.current);\r\n assertIsDefined(allRowRawData);\r\n items.forEach(selectedItem => {\r\n fillDataToBulkAddedItem(selectedItem);\r\n });\r\n const { addedItems, deleteItemIds } = getAddAndDeleteItem(selectedDimension, items, currentEditTreeItem.current);\r\n const totalItemsCount = allRowRawData.length;\r\n const errors: string[] = [];\r\n if (addedItems.length + deleteItemIds.length > ADD_ONCE_LIMIT) {\r\n errors.push(i18n.getString(_TL_(\"Number of updated values should not exceed {{number}}.\"), { number: ADD_ONCE_LIMIT_STRING }));\r\n }\r\n if (totalItemsCount + addedItems.length - deleteItemIds.length > ALL_LIMIT) {\r\n errors.push(i18n.getString(_TL_(\"Change exceeds maximum allowed number of {{number}} Products in a single Asset Group.\"), { number: ALL_LIMIT_STRING }));\r\n }\r\n return errors;\r\n}\r\n\r\nconst onGenericError = useCallback(() => {\r\n const alertHelper = new AlertHelper({ i18n });\r\n alertHelper.showError(i18n.getString(_TL_('We\\'ve encountered an error and can\\'t continue. Please contact support for further assistance.')));\r\n}, [i18n]);\r\n\r\nconst showOfferLimitExceededError = useCallback(() => {\r\n const warning = offerLimitExceededWarningForListingGroup(i18n);\r\n const alertHelper = new AlertHelper({ i18n });\r\n alertHelper.showWarning(warning);\r\n}, [i18n, scope]);\r\n\r\nconst onTreeViewSave: PanelSelectorProps[\"onSave\"] = async (selectedItems: WithBulk[], selectedDimension) => {\r\n logger.signal('Save button is clicked in tree view selector');\r\n assertIsDefined(currentEditTreeItem.current);\r\n assertIsDefined(scope.values.assetGroupId);\r\n assertIsDefined(scope.values.campaignId);\r\n selectedItems.forEach(selectedItem => {\r\n fillDataToBulkAddedItem(selectedItem);\r\n });\r\n await treeViewSaveWorker({\r\n selectedItems,\r\n selectedDimension,\r\n treeItem: currentEditTreeItem.current,\r\n assetGroupId: scope.values.assetGroupId,\r\n campaignId: scope.values.campaignId,\r\n callbackWhenSkipUpdate: () => {\r\n setIsTreeViewSelectorOpen(false);\r\n },\r\n callbackWhenUpdate: async (listingGroupsToAdd, listingGroupsToDelete) => {\r\n setIsTreeViewSelectorOpen(false);\r\n // change to loading state before sending update hotel listing tree API\r\n setAllRowRawData(undefined);\r\n\r\n await updateListingTree({\r\n ListingGroupsToAdd: listingGroupsToAdd,\r\n ListingGroupsToDelete: listingGroupsToDelete,\r\n AssetGroupId: scope.values.assetGroupId\r\n });\r\n\r\n await refreshGridData(getArguemntsOfUpdateGridDataByCurrentState());\r\n }\r\n });\r\n}\r\n\r\n// When updating tree view for Loactions, the 'Attribute' should be LocationID, but they are translated text when getting ListingGroup GridData.\r\n// Tricky thing:\r\n// If we want to add leaves under \"Country\", we also need to change the parent node(whose Operand is \"Country\") from \"leaf\" to \"non-leaf\" by deleting it and creating a new one.\r\n// However, we do not know the LocationID of the parent node. So we have to send another request to get the mapping.\r\nconst currentSelectedDimensionGridDataTask = useRef>();\r\n\r\nconst productAttributeStatisticsHelper = async (productListingGroupId: number, operand: string) => {\r\n return productAttributeStatistics({\r\n entityPath: {\r\n ...commonEntityPath,\r\n assetGroupId: scope.values.assetGroupId,\r\n productListingGroupId,\r\n },\r\n payload: {\r\n gridDataParameters: {\r\n DateRange: {\r\n StartDate: dataRange.StartDate,\r\n EndDate: dataRange.EndDate,\r\n }\r\n },\r\n operand,\r\n },\r\n queryOptions: {\r\n $top: 10000\r\n },\r\n })\r\n}\r\n\r\nasync function updateTreeViewGridByEditTreeItemAndSelectedDimension(treeItem: WithTreeViewData, selectedDimension: Model$ListingCondition) {\r\n assertIsDefined(selectedDimension?.Operand);\r\n setTreeViewSelectorColumns(buildTreeViewSelectorColumns(selectedDimension.Operand, selectedDimension.Operand, i18n, true));\r\n\r\n const task = productAttributeStatisticsHelper(treeItem.Id, selectedDimension.Operand);\r\n currentSelectedDimensionGridDataTask.current = task;\r\n const productAttrubuteStatisticsResponse = await task;\r\n const selectedDimensionGridData = productAttrubuteStatisticsResponse.value;\r\n\r\n const offerLimitExceeded = productAttrubuteStatisticsResponse.headers.get('Offerlimitexceeded');\r\n\r\n if (offerLimitExceeded === 'true') {\r\n showOfferLimitExceededError();\r\n }\r\n\r\n setTreeViewSelectorItems(buildTreeViewSelectorItems(\r\n selectedDimension,\r\n selectedDimensionGridData,\r\n treeItem.treeViewInfo.children));\r\n}\r\n\r\n\r\nfunction updateTreeViewGridByEditTreeItemAndSelectedDimensionWithoutStatistics(treeItem: WithTreeViewData, selectedDimension: Model$ListingCondition) {\r\n assertIsDefined(selectedDimension?.Operand);\r\n setTreeViewSelectorColumns(buildTreeViewSelectorColumns(selectedDimension.Operand, selectedDimension.Operand, i18n, false));\r\n setTreeViewSelectorItems(buildTreeViewSelectorItemsWithoutStatistics(selectedDimension));\r\n}\r\n\r\nasync function onTreeViewSelectedDimensionChange(event: React.FormEvent, option?: IDropdownOption, index?: number) {\r\n logger.signal('Change to another dimension in tree view selector');\r\n assertIsDefined(option);\r\n assertIsDefined(currentEditTreeItem.current);\r\n\r\n setIsTreeViewShimmerEnabled(true);\r\n\r\n const selectedDimension = currentValidListingConditions.current\r\n .find(c => c.Id === option.key);\r\n assertIsDefined(selectedDimension);\r\n\r\n await updateTreeViewGridByEditTreeItemAndSelectedDimension(currentEditTreeItem.current, selectedDimension);\r\n\r\n setIsTreeViewShimmerEnabled(false);\r\n}\r\n\r\nfunction onTreeViewSelectedDimensionChangeWithoutStatistics(event: React.FormEvent, option?: IDropdownOption, index?: number) {\r\n logger.signal('Change to another dimension in tree view selector');\r\n assertIsDefined(option);\r\n assertIsDefined(currentEditTreeItem.current);\r\n\r\n const selectedDimension = currentValidListingConditions.current\r\n .find(c => c.Id === option.key);\r\n assertIsDefined(selectedDimension);\r\n\r\n updateTreeViewGridByEditTreeItemAndSelectedDimensionWithoutStatistics(currentEditTreeItem.current, selectedDimension);\r\n}\r\n\r\n// this data should be shared in different callbacks for one opened data\r\n// use `Ref` rather than `State`, for this is useless for render\r\nconst currentValidListingConditions = useRef([]);\r\n// a quick and dirty way to share editing item\r\nconst currentEditTreeItem = useRef>();\r\n\r\nfunction getInitialSelectedDimension(item: WithTreeViewData, dimensions: Model$ListingCondition[]) {\r\n const DimensionProperties = [\r\n 'Category', 'CategoryL1', 'CategoryL2', 'CategoryL3', 'CategoryL4', 'CategoryL5', 'Condition',\r\n ];\r\n let selectedDimensionName = '';\r\n\r\n if (item.treeViewInfo.children.length) {\r\n assertIsDefined(item.treeViewInfo.children[0].Condition?.Operand);\r\n selectedDimensionName = item.treeViewInfo.children[0].Condition.Operand;\r\n } else {\r\n const operands = dimensions.map(diemnsion => diemnsion.Operand);\r\n const findResult = DimensionProperties.find(dimension => operands.includes(dimension)) || operands[0];\r\n assertIsDefined(findResult);\r\n selectedDimensionName = findResult;\r\n }\r\n\r\n const result = dimensions.find(dimension => dimension.Operand === selectedDimensionName);\r\n assertIsDefined(result);\r\n return result;\r\n}\r\n\r\nasync function getSupportedCountries() {\r\n const isOdataGetProductScopeEnabled = _.get(serverContext, ['DynamicPermissions', 'OdataGetProductScope'], false);\r\n const callStartTime = Date.now();\r\n const pData = isOdataGetProductScopeEnabled ?\r\n await getProductScopeFromOData(serverContext) :\r\n await getProductData({\r\n cid: scope.values.cid,\r\n aid: scope.values.aid,\r\n uid: scope.values.uid,\r\n });\r\n\r\n if (isOdataGetProductScopeEnabled) {\r\n logger.signal(`[PmaxListingGroup][OdataGetProductScopeForPmax] GetProductDataCallTime: ${Date.now() - callStartTime}`);\r\n } else {\r\n logger.signal(`[PmaxListingGroup] GetProductDataCallTime: ${Date.now() - callStartTime}`);\r\n }\r\n\r\n let data = pData;\r\n\r\n if (isOdataGetProductScopeEnabled && _.isArray(data)) {\r\n data = mergeData(pData);\r\n }\r\n\r\n const {\r\n SalesCountryCollection,\r\n } = data;\r\n if (!SalesCountryCollection) {\r\n return new Set();\r\n }\r\n return new Set(SalesCountryCollection.map(({ Value }) => Value.toUpperCase()));\r\n}\r\n\r\n// When FeedLabel is set then SalesCountry is empty, use supported account country, otherwise US\r\nasync function getCountryCode(shoppingSettings: any) {\r\n let countryCode = shoppingSettings?.SalesCountry;\r\n\r\n if (!countryCode) {\r\n const account = await getAccount();\r\n if (account && account.CountryCode) {\r\n const accountCountry = account.CountryCode;\r\n\r\n const supportedCountries = await getSupportedCountries();\r\n const ifAccountryCountrySupported = supportedCountries?.has(accountCountry);\r\n if (ifAccountryCountrySupported) {\r\n countryCode = accountCountry;\r\n }\r\n }\r\n }\r\n return countryCode || DEFAULT_SALES_COUNTRY;\r\n}\r\n\r\nconst onTreeViewColumnAddOrEdit: TreeViewEventHandler = async (item) => {\r\n assertIsDefined(item);\r\n currentEditTreeItem.current = item;\r\n\r\n setIsTreeViewSelectorOpen(true);\r\n setIsTreeViewShimmerEnabled(true);\r\n setTreeViewSelectorHeaderText(getAttributeTextOfConditionTemplate(i18n, item));\r\n const shoppingSettings = currentCampaign?.CampaignSettings?.find(setting => setting['@odata.type'] === '#Model.ShoppingSettings');\r\n let countryCode = await getCountryCode(shoppingSettings);\r\n try {\r\n const getListingGroupConditionsResponseBody = await getListingGroupConditions({\r\n entityPath: commonEntityPath,\r\n queryOptions: {\r\n countryCode,\r\n },\r\n });\r\n assertIsDefined(item.ParentConditions);\r\n assertIsDefined(item.Condition);\r\n let validListingConditions = getValidListingConditions(\r\n getListingGroupConditionsResponseBody,\r\n [...item.ParentConditions, item.Condition],\r\n item);\r\n currentValidListingConditions.current = validListingConditions;\r\n\r\n const dimensionsOfItem = validListingConditions;\r\n const selectedDimension = getInitialSelectedDimension(item, dimensionsOfItem);\r\n const currentDimension = getListingGroupConditionsResponseBody.value.find(dimension => dimension.Operand === item.Condition?.Operand);\r\n const currentAttributeId = currentDimension?.DomainData?.find(domainData => domainData.Value === item.Condition?.Attribute)?.Id;\r\n selectedDimension.DomainData = selectedDimension.DomainData?.filter(domainData => (!currentAttributeId && domainData.ParentId === 0) || domainData.ParentId === currentAttributeId);\r\n\r\n setTreeViewSelectorInitialSelectedItems(buildTreeViewSelectorItemsByChildrenOfNode(selectedDimension, item.treeViewInfo.children));\r\n\r\n setTreeViewSelectorDimensions(dimensionsOfItem.map(dimension => {\r\n return {\r\n key: dimension.Id,\r\n text: i18n.getString(`ProductsGrid_Column_${dimension.Operand}`),\r\n selected: selectedDimension.Id === dimension.Id,\r\n data: {\r\n isBulkAddEnabled: !dimension.HasDomainData,\r\n operand: dimension.Operand,\r\n }\r\n }\r\n }));\r\n\r\n await updateTreeViewGridByEditTreeItemAndSelectedDimension(item, selectedDimension);\r\n } catch (e) {\r\n setIsTreeViewSelectorOpen(false);\r\n onGenericError();\r\n console.error(e);\r\n }\r\n setIsTreeViewShimmerEnabled(false);\r\n}\r\n\r\nconst onFilterProduct: TreeViewEventHandler = async () => {\r\n setIsTreeViewSelectorOpen(true);\r\n setIsTreeViewShimmerEnabled(true);\r\n setTreeViewSelectorHeaderText(i18n.getString(_TL_('All Products')));\r\n const shoppingSettings = currentCampaign?.CampaignSettings[0];\r\n const countryCode = await getCountryCode(shoppingSettings);\r\n const getListingGroupConditionsResponseBody = await getListingGroupConditions({\r\n entityPath: commonEntityPath,\r\n queryOptions: {\r\n countryCode,\r\n },\r\n });\r\n\r\n const validListingConditions = getValidListingConditionsForWithoutPreselectedTreeNode(\r\n getListingGroupConditionsResponseBody,\r\n [{\r\n Attribute: '',\r\n Operand: 'All',\r\n }]);\r\n currentValidListingConditions.current = validListingConditions;\r\n\r\n const dimensionsOfItem = validListingConditions;\r\n const selectedDimension = dimensionsOfItem[0];\r\n\r\n setTreeViewSelectorDimensions(dimensionsOfItem.map(dimension => {\r\n return {\r\n key: dimension.Id,\r\n text: i18n.getString(`ProductsGrid_Column_${dimension.Operand}`),\r\n selected: selectedDimension.Id === dimension.Id,\r\n data: {\r\n isBulkAddEnabled: !dimension.HasDomainData,\r\n operand: dimension.Operand,\r\n }\r\n }\r\n }));\r\n\r\n updateTreeViewGridByEditTreeItemAndSelectedDimensionWithoutStatistics({\r\n Id: 4578228980083101,\r\n treeViewInfo: {\r\n children: [],\r\n depth: 1,\r\n hasChildren: false,\r\n isExpanded: false,\r\n parent: undefined,\r\n },\r\n serverContext: undefined,\r\n scope,\r\n eventHandlers: {\r\n onTreeViewColumnAddOrEdit: undefined,\r\n onTreeViewColumnToggleCollapse: undefined\r\n },\r\n refreshGridData: _.identity,\r\n IsLeaf: false,\r\n IsExcluded: false,\r\n CampaignId: currentCampaign.Id,\r\n i18n: i18n\r\n }, selectedDimension);\r\n\r\n setIsTreeViewShimmerEnabled(false);\r\n}\r\n// #endregion TreeView\r\n return {\r\n expandedItemIds,\r\n setExpandedItemIds,\r\n isTreeViewSelectorOpen,\r\n setIsTreeViewSelectorOpen,\r\n treeViewSelectorColumns,\r\n treeViewSelectorDimensions,\r\n treeViewSelectorInitialSelectedItems,\r\n treeViewSelectorItems,\r\n treeViewSelectorHeaderText,\r\n onTreeViewCancel,\r\n onTreeViewSave,\r\n onTreeViewSelectedDimensionChange,\r\n onTreeViewSelectedDimensionChangeWithoutStatistics,\r\n isTreeViewShimmerEnabled,\r\n getErrorsForTreeViewSelector,\r\n onTreeViewColumnAddOrEdit,\r\n onFilterProduct,\r\n };\r\n};\r\n","import { useJsDataContext } from '@bingads-webui-cc-react/js-data-rest';\r\n\r\nexport const useAccountData = ({\r\n scope,\r\n}) => {\r\n const ccJsData = useJsDataContext();\r\n\r\n return {\r\n getAccount: () => ccJsData.Account.find(scope.values.aid),\r\n };\r\n};\r\n","import { queryify } from '@bingads-webui/url-util';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { getProductScopeData } from '@bingads-webui-campaign-react/product-services';\r\n\r\nexport function getProductData({\r\n cid,\r\n aid,\r\n uid,\r\n}) {\r\n const url = queryify('/Campaign/NewCampaign/GetProductScope', {\r\n cid,\r\n aid,\r\n uid,\r\n });\r\n\r\n return jsdata.Product.find('MetaData', {\r\n url,\r\n adapter: 'legacy',\r\n bypassCache: false,\r\n cacheResponse: true,\r\n });\r\n}\r\n\r\nexport const getProductScopeFromOData = (serverContext) => {\r\n const options = {\r\n dataName: 'MetaData',\r\n bypassCache: false,\r\n cacheResponse: true,\r\n getSalesCountryCollection: true,\r\n noBMCAccounts: true,\r\n };\r\n\r\n const p$GetProductData = () => getProductScopeData(null, serverContext, options);\r\n const getProductDataWithCache = withDFMCache(p$GetProductData, 'getPmaxProductScopeDFM', {}, false);\r\n\r\n return getProductDataWithCache();\r\n};\r\n","import { Model$ListingGroup } from './ApiType';\r\n\r\nexport const isEveryThingElseRow = (item: Model$ListingGroup) =>\r\n !!(item && item.Condition && !item.Condition.Attribute && item.Condition.Operand);\r\n","/* eslint-disable */\r\nimport React, { useMemo, useContext, useState, useRef, useEffect } from 'react';\r\nimport { compose, contains } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { FilterService } from '@bingads-webui/filter-service';\r\nimport { ToolbarContainer } from '@bingads-webui-campaign-react/toolbar-container';\r\nimport { useConstructor } from '@bingads-webui-campaign/hooks';\r\nimport { I18nContext, withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { assertIsDefined, assertNever } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { legacyKeys } from '@bingads-webui-campaign-react/hotel-campaign-shared';\r\nimport { getToolbarEditor } from '@bingads-webui-campaign-react/toolbar-plugin';\r\nimport { CampaignShimmeredDetailsList } from '@bingads-webui-grid/campaign-details-list';\r\nimport { useColumnsWithToolbarColumnChooser } from '@bingads-webui-campaign/hotel-column-chooser';\r\nimport { IColumn, CheckboxVisibility } from '@fluentui/react';\r\nimport { useForceUpdate } from '@fluentui/react-hooks';\r\nimport { buildTreeViewItems, I18n } from '@bingads-webui-grid/well-known';\r\nimport { SelectionMode } from '@bingads-webui-react/fabric-control';\r\nimport { useDateRange } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { DisclaimerBanner } from '@bingads-webui-campaign-react/help';\r\n\r\nimport { PanelSelector } from './treeViewPanelSelector/PanelSelector';\r\nimport { getColumnChooserCategories } from './render/toolbar/ColumnChooser';\r\nimport { convertFilterEntity2$filter } from './legacy-adapter/filter-entity';\r\nimport { legacyI18nOfListingGroup } from './legacyI18nMap';\r\nimport { Model$ListingGroup } from './ApiType';\r\nimport { OdataSystemQueryOptions } from './API/odata';\r\nimport { useAPIsOfListingGroup } from './API';\r\nimport { styles } from './style';\r\nimport { getGridToolbarConfig } from './toolbarConfig';\r\nimport { GridType, GRID_NAME, ScopeLevel, nameColumnOdataPath, LISTING_GROUP_PERF_MARKER,\r\n LISTING_GROUP_LIST_ROUTING, LISTING_GROUP_TREE_ROUTING, treeViewButtonId, listViewButtonId } from './constant';\r\n import { ListingGroupGridItemData } from './interface';\r\nimport { getFilterConfig } from './filter-config';\r\nimport { columnKeyRawDataMap, odataMapOfListingGroupResponse, cpsColumnKeys } from './ColumnOdataMap';\r\nimport { AssetGroupNameColumn, ListingGroupColumn, IncludeExcludeColumn } from './rawColumns';\r\nimport { getColumnRenderByColumnKey } from './render';\r\nimport { isSortEnabledByColumnKey } from './render/sortByHelper';\r\nimport { useLogger } from './logger';\r\nimport { useTreeViewPanelSelector } from './useTreeViewPanelSelector';\r\nimport { isEveryThingElseRow, } from './utils';\r\nimport { getPropertyByPath } from './render/utils';\r\n\r\n/**\r\n * default value used in fluent-ui\r\n * reference https://github.com/microsoft/fluentui/blob/31345de30d356731eeb0ac1e658a2652f8f00aa7/packages/react/src/components/DetailsList/DetailsList.base.tsx\r\n */\r\nconst MIN_COLUMN_WIDTH = 120;\r\nconst FIRST_COLUMN_WIDTH = 40;\r\n\r\ninterface ListingGroupsPageProps {\r\n preferenceService: any;\r\n permissions: any;\r\n gridType: GridType;\r\n scope: { save: Function, values: any };\r\n perfMarker: any;\r\n currentCampaign: any;\r\n}\r\n\r\ninterface BuildItemDataOptions {\r\n rawData: Model$ListingGroup[] | undefined;\r\n gridType: GridType;\r\n serverContext: any;\r\n scope: any;\r\n i18n: I18n;\r\n expandedItemIds: Set;\r\n}\r\n\r\ninterface RefreshGridDataOptions {\r\n gridType?: GridType;\r\n $top: OdataSystemQueryOptions['$top'];\r\n $skip: OdataSystemQueryOptions['$skip'];\r\n $orderby?: OdataSystemQueryOptions['$orderby'];\r\n $select?: OdataSystemQueryOptions['$select'];\r\n $filter?: OdataSystemQueryOptions['$filter'];\r\n}\r\n\r\ntype SortOrder = 'asc' | 'desc';\r\n\r\nenum ToolbarShownItem {\r\n Toolbar,\r\n Download,\r\n ColumnChooser,\r\n FilterView,\r\n BidEditor,\r\n}\r\n\r\nenum InitializationState {\r\n NotStart,\r\n Running,\r\n Done,\r\n}\r\nconst defaultPageIndex = 1;\r\nconst defaultPageSize = 20;\r\nconst maxPageSize = 20000;\r\nconst metaColumnOdataPaths: string[] = [\r\n 'AssetGroupId',\r\n 'AssetGroupName',\r\n 'Condition',\r\n 'Id',\r\n 'IsLeaf',\r\n 'ParentConditions',\r\n 'ParentId',\r\n];\r\n\r\nfunction buildColumns(gridType: GridType, selectedColumnKeys: string[], sortOrder: SortOrder, i18n: I18n, permissions: any): IColumn[] {\r\n const bindSortFunction = permissions?.dynamic?.ListingGroupsAllColumnsSortSupport ? bindSortSupportAll : bindSort;\r\n\r\n const result = selectedColumnKeys\r\n .filter(filterByPermissions)\r\n .map(buildColumnBase)\r\n .map(bindOnRender)\r\n .map(bindSortFunction);\r\n\r\n return result;\r\n\r\n function filterByPermissions(columnKey: string): boolean {\r\n const cpsColumnsEnabled = permissions && permissions.dynamic && permissions.dynamic.SupportCPSForPmax;\r\n\r\n if (!cpsColumnsEnabled) {\r\n return !contains(cpsColumnKeys, columnKey);\r\n }\r\n return true\r\n }\r\n\r\n function buildColumnBase(columnKey: string, index: number): IColumn {\r\n const columnRawData = columnKeyRawDataMap[columnKey];\r\n assertIsDefined(columnRawData, 'Column is not defined in listing groups column raw data map');\r\n const column = {\r\n key: columnKey,\r\n className: columnKey,\r\n minWidth: index !== 0 ? MIN_COLUMN_WIDTH : FIRST_COLUMN_WIDTH,\r\n maxWidth: index !== 0 ? 300 : FIRST_COLUMN_WIDTH,\r\n isResizable: index !== 0,\r\n name: i18n.getString(columnRawData.name),\r\n fieldName: columnKey,\r\n onRenderHeader: index !== 0 ? undefined : () => (
),\r\n };\r\n return column;\r\n }\r\n\r\n function bindOnRender(column: IColumn, index: number): IColumn {\r\n column.onRender = getColumnRenderByColumnKey(column.key);\r\n return column;\r\n }\r\n\r\n function bindSort(column: IColumn): IColumn {\r\n const enhancedColumn = {\r\n ...column,\r\n sortable: isSortEnabledByColumnKey(column.key),\r\n isSortedDescending: sortOrder === 'desc',\r\n };\r\n return enhancedColumn;\r\n }\r\n\r\n function bindSortSupportAll(column: IColumn): IColumn {\r\n const enhancedColumn = {\r\n ...column,\r\n sortable: true,\r\n isSortedDescending: sortOrder === 'desc',\r\n };\r\n return enhancedColumn;\r\n }\r\n}\r\n\r\nconst ListingGroupsPage = (props: ListingGroupsPageProps) => {\r\n const {\r\n preferenceService, permissions, gridType, scope, perfMarker, currentCampaign\r\n } = props;\r\n\r\n const [listingGroupPerfMarker] = useConstructor(() => {\r\n const marker = perfMarker.createChild(LISTING_GROUP_PERF_MARKER);\r\n marker.willInit();\r\n return marker;\r\n });\r\n const defaultColumns = [IncludeExcludeColumn.key, ListingGroupColumn.key, AssetGroupNameColumn.key];\r\n\r\n const [allRowRawData, setAllRowRawData] = useState(undefined);\r\n const serverContext: any = useContext(ServerContext);\r\n\r\n const logger = useLogger();\r\n const i18nWithTL = (useContext(I18nContext) as I18n);\r\n const i18n = useMemo(() => mergeI18n(\r\n buildLegacyI18n(i18nWithTL, [...legacyKeys, legacyI18nOfListingGroup]),\r\n i18nWithTL\r\n ), [i18nWithTL]);\r\n\r\n const scopeLevel = (() => {\r\n if (!scope.values.assetGroupId) {\r\n return ScopeLevel.Campaign;\r\n }\r\n return ScopeLevel.AssetGroup;\r\n })();\r\n\r\n const { toolbarSelectedConfig, toolbarUnselectedConfig } = useMemo(() => getGridToolbarConfig({\r\n scopeLevel,\r\n i18n,\r\n onBidChangeClick: () => {},\r\n permissions: {},\r\n selectedItems: [],\r\n serverContext: {},\r\n }), [i18n, scopeLevel]);\r\n const [toolbarShownItem, setToolbarShownItem] = useState(ToolbarShownItem.Toolbar);\r\n const latestGridDataRequestId = useRef(0);\r\n const styleClassNames: any = useDefaultStyles(styles);\r\n\r\n const toolbarEditor = getToolbarEditor({\r\n toolbarConfig: {\r\n toolbarSelectedConfig,\r\n toolbarUnselectedConfig,\r\n },\r\n updateToolbar: undefined,\r\n overrideWith: undefined,\r\n });\r\n\r\n const filterConfig = useMemo(() => getFilterConfig({ preferenceService, i18n }), [preferenceService, i18n]);\r\n\r\n const filterService = useMemo(() => {\r\n const filterService = new FilterService(filterConfig);\r\n return filterService;\r\n }, [filterConfig]);\r\n const [pageIndex, setPageIndex] = useState(defaultPageIndex);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n const [sortColumnOdataPath, setSortColumnOdataPath] = useState(nameColumnOdataPath);\r\n const [sortOrder, setSortOrder] = useState('asc');\r\n\r\n const [pageItemsTotal, setPageItemsTotal] = useState(0);\r\n const availablePageSizes = [20, 50, 100, 200];\r\n\r\n const {\r\n expandedItemIds,\r\n setExpandedItemIds,\r\n isTreeViewSelectorOpen,\r\n treeViewSelectorColumns,\r\n treeViewSelectorDimensions,\r\n treeViewSelectorInitialSelectedItems,\r\n treeViewSelectorItems,\r\n treeViewSelectorHeaderText,\r\n onTreeViewCancel,\r\n onTreeViewSave,\r\n onTreeViewSelectedDimensionChange,\r\n isTreeViewShimmerEnabled,\r\n getErrorsForTreeViewSelector,\r\n onTreeViewColumnAddOrEdit,\r\n } = useTreeViewPanelSelector({\r\n i18n, allRowRawData, setAllRowRawData, scope, currentCampaign,\r\n refreshGridData,getArguemntsOfUpdateGridDataByCurrentState\r\n });\r\n\r\n const pager = {\r\n pageNumber: pageIndex,\r\n total: pageItemsTotal,\r\n pageSize,\r\n availablePageSizes,\r\n onPageChange,\r\n onPageSizeChange,\r\n };\r\n\r\n function onPageChange(newPageIndex) {\r\n logger.signal('Page index is changed');\r\n setPageIndex(newPageIndex);\r\n refreshGridData({\r\n ...getArguemntsOfUpdateGridDataByCurrentState(),\r\n ...getOdataSkipAndTop(newPageIndex, pageSize),\r\n });\r\n }\r\n\r\n function onPageSizeChange(newPageSize) {\r\n logger.signal('Page size is changed');\r\n setPageSize(newPageSize);\r\n refreshGridData({\r\n ...getArguemntsOfUpdateGridDataByCurrentState(),\r\n ...getOdataSkipAndTop(pageIndex, newPageSize),\r\n });\r\n }\r\n\r\n function changeToListView() {\r\n scope.save(LISTING_GROUP_LIST_ROUTING);\r\n // setCurrentGridType(GridType.List);\r\n changeActiveViewButton(GridType.List);\r\n logger.signal('change to list view');\r\n }\r\n\r\n function changeToTreeView() {\r\n scope.save(LISTING_GROUP_TREE_ROUTING);\r\n // setCurrentGridType(GridType.Tree);\r\n changeActiveViewButton(GridType.Tree);\r\n logger.signal('change to tree view');\r\n }\r\n\r\n function changeActiveViewButton(gridType: GridType) {\r\n toolbarEditor.update({\r\n id: treeViewButtonId,\r\n classes: ['view-switch-button', gridType === GridType.Tree ? 'btn-primary' : '', gridType === GridType.Tree ? 'active' : 'inactive'],\r\n ariaLabel: gridType === GridType.Tree ? i18n.getString(_TL_('Switch to hierarchy view, selected')) : i18n.getString(_TL_('Switch to hierarchy view, unselected')),\r\n });\r\n toolbarEditor.update({\r\n id: listViewButtonId,\r\n classes: ['view-switch-button', gridType === GridType.List ? 'btn-primary' : '', gridType === GridType.List ? 'active' : 'inactive'],\r\n ariaLabel: gridType === GridType.List ? i18n.getString(_TL_('Switch to list view, selected')) : i18n.getString(_TL_('Switch to list view, unselected')),\r\n });\r\n }\r\n\r\n function buildItemData({\r\n gridType, rawData, i18n, serverContext, expandedItemIds, scope,\r\n }: BuildItemDataOptions): ListingGroupGridItemData[] | undefined {\r\n if (rawData === undefined) {\r\n return undefined;\r\n }\r\n const items = rawData.map(raw => ({\r\n ...raw,\r\n serverContext,\r\n i18n,\r\n scope,\r\n eventHandlers: {},\r\n refreshGridData: () => {\r\n logger.signal('Refresh grid from item');\r\n refreshGridData(getArguemntsOfUpdateGridDataByCurrentState())\r\n }\r\n }));\r\n // registerEventHandlersForInlineEidtor(items);\r\n if (gridType === GridType.Tree) {\r\n const listingGroupGridItemsData = buildTreeViewItems({\r\n expandedItemIds,\r\n getParentKeyOfItem: item => item.ParentId,\r\n getPrimaryKeyOfItem: item => item.Id,\r\n items,\r\n });\r\n registerEventHandlersForTreeView(listingGroupGridItemsData);\r\n return listingGroupGridItemsData;\r\n }\r\n return items;\r\n }\r\n\r\n function registerEventHandlersForTreeView(items: ListingGroupGridItemData[]) {\r\n items.forEach(item => {\r\n item.eventHandlers.onTreeViewColumnAddOrEdit = onTreeViewColumnAddOrEdit;\r\n\r\n item.eventHandlers.onTreeViewColumnToggleCollapse = (item) => {\r\n assertIsDefined(item?.treeViewInfo);\r\n const id = item.Id;\r\n if (item.treeViewInfo.isExpanded)\r\n expandedItemIds.delete(id);\r\n else\r\n expandedItemIds.add(id);\r\n setExpandedItemIds(new Set(expandedItemIds));\r\n }\r\n });\r\n }\r\n\r\n function getSortedColumn() {\r\n const sortColumn = columns.find(c =>\r\n odataMapOfListingGroupResponse.get(c.key) === sortColumnOdataPath);\r\n assertIsDefined(sortColumn);\r\n return sortColumn;\r\n }\r\n\r\n const { listingGroupGridData, createRootListingTree } = useAPIsOfListingGroup();\r\n const {\r\n isOrderByEnabled,\r\n isSelectEnabled,\r\n isFilterEnabled,\r\n } = scope.values;\r\n const commonEntityPath = {\r\n accountId: scope.values.aid,\r\n campaignId: scope.values.campaignId,\r\n customerId: scope.values.cid,\r\n assetGroupId: scope.values.assetGroupId\r\n };\r\n const dataRange = useDateRange();\r\n const dataRangeCacheKey = `${dataRange.StartDate}-${dataRange.EndDate}`;\r\n\r\n function onColumnChooserApply(newColumnKeys: string[]) {\r\n // change to loading state\r\n // columns might update faster than items, in this case it will try to get value that is not existed yet.\r\n setAllRowRawData(undefined);\r\n setToolbarShownItem(ToolbarShownItem.Toolbar);\r\n // logger.signal('choose new columns');\r\n }\r\n\r\n function onColumnChooserCancel() {\r\n setToolbarShownItem(ToolbarShownItem.Toolbar);\r\n // logger.signal('cancel column chooser');\r\n }\r\n function getOdataOrderby(sortColumnOdataPath: string, sortOrder: SortOrder) {\r\n return {\r\n $orderby: isOrderByEnabled !== 'false' ? `${sortColumnOdataPath} ${sortOrder}` : undefined,\r\n };\r\n }\r\n function getOdataSkipAndTop(pageIndex, pageSize) {\r\n return {\r\n $skip: (pageIndex - 1) * pageSize,\r\n $top: pageSize,\r\n };\r\n }\r\n function getOdataSelect(selectedColumnKeys: string[]) {\r\n if (isSelectEnabled === 'false') {\r\n return {\r\n $select: undefined,\r\n };\r\n }\r\n const selectedColumnOdataPaths = selectedColumnKeys.map((selectedColumnKey) => {\r\n const columnOdataPath = odataMapOfListingGroupResponse.get(selectedColumnKey);\r\n assertIsDefined(columnOdataPath);\r\n return columnOdataPath;\r\n });\r\n\r\n return {\r\n $select: selectedColumnOdataPaths.concat(metaColumnOdataPaths).join(','),\r\n };\r\n }\r\n\r\n function getOdataFilter() {\r\n return {\r\n $filter: isFilterEnabled !== 'false' ? $filterContainer.current : undefined,\r\n };\r\n }\r\n\r\n function getArguemntsOfUpdateGridDataByCurrentState() {\r\n return {\r\n ...getOdataSkipAndTop(pageIndex, pageSize),\r\n ...getOdataOrderby(sortColumnOdataPath, sortOrder),\r\n ...getOdataSelect(trickySelectedColumnKeys),\r\n ...getOdataFilter(),\r\n gridType: currentGridType,\r\n };\r\n }\r\n\r\n async function refreshGridData({\r\n $top,\r\n $skip,\r\n $filter,\r\n $orderby = undefined,\r\n $select = undefined,\r\n gridType = currentGridType,\r\n }: RefreshGridDataOptions) {\r\n if (initializationState.current !== InitializationState.Done) {\r\n return;\r\n }\r\n // change to loading state\r\n setAllRowRawData(undefined);\r\n latestGridDataRequestId.current += 1;\r\n const requestId = latestGridDataRequestId.current;\r\n\r\n listingGroupPerfMarker.willFetchData();\r\n\r\n logger.signal(`listing group grid data request #${requestId}`);\r\n\r\n const response = await listingGroupGridData({\r\n queryOptions: {\r\n $top: gridType === GridType.Tree ? maxPageSize : $top,\r\n $skip,\r\n $filter,\r\n $orderby,\r\n $select,\r\n $count: true,\r\n },\r\n entityPath: commonEntityPath,\r\n payload: {\r\n gridDataParameters: {\r\n DateRange: {\r\n StartDate: dataRange.StartDate,\r\n EndDate: dataRange.EndDate,\r\n },\r\n },\r\n },\r\n });\r\n const gridData = response.value;\r\n\r\n if (requestId === latestGridDataRequestId.current) {\r\n listingGroupPerfMarker.willRender();\r\n setAllRowRawData(gridData);\r\n setPageItemsTotal(response['@odata.count']);\r\n }\r\n\r\n if (document.getElementsByClassName('ms-DetailsList-headerWrapper')) {\r\n const gridIndex = document.getElementsByClassName('ms-DetailsList-headerWrapper').length;\r\n document.getElementsByClassName('ms-DetailsList-headerWrapper')[gridIndex - 1].parentElement.setAttribute('aria-busy', 'true');\r\n }\r\n }\r\n\r\n async function initial() {\r\n initialColumns();\r\n }\r\n\r\n function onSort(column: IColumn) {\r\n logger.signal('Sort column or sort order is changed');\r\n const newSortOrder = column.isSortedDescending ? 'desc' : 'asc';\r\n const newSortColumnOdataPath = odataMapOfListingGroupResponse.get(column.key);\r\n assertIsDefined(newSortColumnOdataPath);\r\n setSortColumnOdataPath(newSortColumnOdataPath);\r\n setSortOrder(newSortOrder);\r\n if (currentGridType === GridType.List) {\r\n refreshGridData({\r\n ...getArguemntsOfUpdateGridDataByCurrentState(),\r\n ...getOdataOrderby(newSortColumnOdataPath, newSortOrder),\r\n });\r\n }\r\n }\r\n\r\n const resetToolbarVisibility = ({ forceHideToolbar }: { forceHideToolbar: boolean }) => {\r\n if (forceHideToolbar) {\r\n setToolbarShownItem(ToolbarShownItem.FilterView);\r\n } else {\r\n setToolbarShownItem(ToolbarShownItem.Toolbar);\r\n }\r\n };\r\n const forceUpdate = useForceUpdate();\r\n const currentGridType = gridType;\r\n const initializationState = useRef(InitializationState.NotStart);\r\n const onFilterStateChanged = useRef(() => { });\r\n // Filter is special, generally, it should be a state. However, we are using legacy component, and it's not fully controlled and kind of subtle.\r\n const $filterContainer = useRef('');\r\n\r\n const [isRefreshReady, setIsRefreshReady] = useState(false);\r\n\r\n // reregister the callback to make sure there is no closure issue so that we could get latest state.\r\n // And we could not remove other callbacks. For example, the toolbar component might add callback too.\r\n filterService.off('filter-state-changed', onFilterStateChanged.current);\r\n onFilterStateChanged.current = async () => {\r\n const filterEntity = filterService.getEditableFilter();\r\n const filterString = convertFilterEntity2$filter(filterEntity);\r\n $filterContainer.current = filterString;\r\n let gridType = currentGridType;\r\n\r\n switch (true) {\r\n // as long as there is filter, jump to list view.\r\n // TODO: add a test\r\n case filterString && currentGridType === GridType.Tree:\r\n changeToListView();\r\n gridType = GridType.List;\r\n // no filter --> some filter, not allow change to tree\r\n // some filter --> no filter, allow change to tree\r\n // TODO: add a test\r\n case currentGridType === GridType.List:\r\n // toolbarChangeOnFilterChange(filterString);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n // tricky, initial here for we only want to send one request to get grid data after everything is initialized.\r\n // but filter is iniitialized by itself.\r\n switch (initializationState.current) {\r\n case InitializationState.NotStart:\r\n initializationState.current = InitializationState.Running;\r\n await initial();\r\n initializationState.current = InitializationState.Done;\r\n setIsRefreshReady(true);\r\n break;\r\n case InitializationState.Running:\r\n break;\r\n case InitializationState.Done:\r\n logger.signal('Refresh grid by filter change');\r\n refreshGridData({ ...getArguemntsOfUpdateGridDataByCurrentState(), gridType });\r\n forceUpdate();\r\n break;\r\n default:\r\n assertNever(initializationState.current);\r\n }\r\n };\r\n\r\n filterService.on('filter-state-changed', onFilterStateChanged.current);\r\n\r\n const {\r\n initialColumns,\r\n columns: selectedColumnKeys,\r\n ColumnChooserTrivia,\r\n ColumnChooser,\r\n } = useColumnsWithToolbarColumnChooser({\r\n defaultColumns,\r\n gridName: GRID_NAME,\r\n toolbarOptions: {\r\n toolbarEditor,\r\n openColumnChooser: () => { setToolbarShownItem(ToolbarShownItem.ColumnChooser); },\r\n },\r\n });\r\n const toolbarEditorUpdate = useMemo(() => toolbarEditor.update.bind(toolbarEditor), [toolbarEditor]);\r\n\r\n const toolbar = (\r\n \r\n {/* campaignContentContainer is for inline-chart. Read code of inline-chart for details :)\r\n
\r\n {inlineChart}\r\n
*/}\r\n {toolbarShownItem === ToolbarShownItem.ColumnChooser &&\r\n \r\n }\r\n \r\n
\r\n );\r\n\r\n let trickySelectedColumnKeys = selectedColumnKeys.filter(k => {\r\n return columnKeyRawDataMap[k]; // only when the key is existed in columnKeyRawDataMap, we keep it.\r\n });\r\n\r\n const listingGroupColumnIndex = trickySelectedColumnKeys.findIndex(k => k === ListingGroupColumn.key);\r\n trickySelectedColumnKeys = trickySelectedColumnKeys.filter(key => key !== AssetGroupNameColumn.key);\r\n if (scopeLevel === ScopeLevel.Campaign) {\r\n trickySelectedColumnKeys.splice(listingGroupColumnIndex + 1, 0, AssetGroupNameColumn.key);\r\n }\r\n\r\n const columns = buildColumns(GridType.List, trickySelectedColumnKeys, sortOrder, i18n, permissions);\r\n\r\n const filteredRowData = (() => {\r\n // when in grid type is tree, we sort the data in front-end\r\n if (currentGridType === GridType.Tree) {\r\n const sortedItems = allRowRawData?.slice()?.sort(compareFn);\r\n return sortOrder === \"desc\" ? sortedItems?.reverse() : sortedItems;\r\n }\r\n return allRowRawData;\r\n\r\n function compareFn(a: Model$ListingGroup, b: Model$ListingGroup) {\r\n if (sortColumnOdataPath === nameColumnOdataPath) {\r\n // direction: -1 for desc, 1 for asc\r\n if (isEveryThingElseRow(a)) {\r\n return 1;\r\n }\r\n\r\n if (isEveryThingElseRow(b)) {\r\n return -1;\r\n }\r\n }\r\n const valueA = getPropertyByPath(a, sortColumnOdataPath);\r\n\r\n const valueB = getPropertyByPath(b, sortColumnOdataPath);\r\n\r\n let v1 = valueA;\r\n let v2 = valueB;\r\n if (typeof valueA === 'string' && typeof valueB === 'string' && sortColumnOdataPath === nameColumnOdataPath) {\r\n v1 = valueA.toLowerCase();\r\n v2 = valueB.toLowerCase();\r\n }\r\n\r\n if (v1 < v2) {\r\n return -1;\r\n }\r\n if (v1 > v2) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n })();\r\n\r\n const items = buildItemData({\r\n scope,\r\n serverContext,\r\n i18n,\r\n gridType: currentGridType,\r\n rawData: filteredRowData,\r\n expandedItemIds,\r\n });\r\n\r\n useEffect(() => {\r\n if (isRefreshReady) {\r\n logger.signal('Refresh grid by column/range/type change');\r\n refreshGridData({ ...getArguemntsOfUpdateGridDataByCurrentState() });\r\n }\r\n }, [selectedColumnKeys, dataRangeCacheKey, gridType, scope.values, isRefreshReady]);\r\n\r\n // setup toolbar\r\n useEffect(() => {\r\n toolbarEditor.update({\r\n id: treeViewButtonId,\r\n onClick: changeToTreeView,\r\n });\r\n toolbarEditor.update({\r\n id: listViewButtonId,\r\n onClick: changeToListView,\r\n });\r\n\r\n // initial for the first time mount\r\n changeActiveViewButton(currentGridType);\r\n }, [toolbarSelectedConfig, toolbarUnselectedConfig]);\r\n\r\n const [creatingRootNode, setCreatingRootNode] = useState(false);\r\n\r\n const createFirstListingGroupLink = useMemo(() => {\r\n if (scopeLevel !== ScopeLevel.AssetGroup) {\r\n // do not show create first listing group link when scope is campaign scope\r\n return null;\r\n }\r\n\r\n if (!items || items.length > 0) {\r\n // only show create first listing group link when there is no listing group\r\n return null;\r\n }\r\n\r\n const createRootNode = () => {\r\n setCreatingRootNode(true);\r\n createRootListingTree(scope.values.assetGroupId)\r\n .then(() => {\r\n setCreatingRootNode(false);\r\n refreshGridData(getArguemntsOfUpdateGridDataByCurrentState());\r\n }).catch(() => {\r\n setCreatingRootNode(false);\r\n });\r\n };\r\n\r\n return (\r\n
\r\n
{i18n.getString(_TL_('You haven\\'t created any listing groups for this asset group yet.'))}
\r\n {i18n.getString(_TL_('Create first listing group.'))}\r\n
\r\n )\r\n }, [items, scope.values.assetGroupId, scopeLevel]);\r\n\r\n return (\r\n \r\n {isTreeViewSelectorOpen && item.key}\r\n isBulkAddEnabledForDimension={(d) => d.data.isBulkAddEnabled}\r\n />}\r\n {\r\n if (prev.enableShimmer && items) {\r\n listingGroupPerfMarker.done();\r\n }\r\n }}\r\n onRenderRow={(detailsRowProps, defaultRender) => {\r\n if (detailsRowProps.focusZoneProps) {\r\n detailsRowProps.focusZoneProps.preventFocusRestoration = true;\r\n } else {\r\n detailsRowProps.focusZoneProps = { preventFocusRestoration: true };\r\n }\r\n return defaultRender(detailsRowProps);\r\n }}\r\n />\r\n { createFirstListingGroupLink }\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport const StyledListingGroupsPage = compose(\r\n withI18nConsumer,\r\n WrappedComponent => withDefaultStyles(WrappedComponent, () => ({}))\r\n)(ListingGroupsPage);","import { getCommonFilterConfig } from '@bingads-webui-campaign/common-grid-config';\r\nimport { ProductListingGroup } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport sessionStore from '@bingads-webui-component-legacy/js-data-storage/session-storage';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport cacheService from '@bingads-webui-static-legacy/cache-service';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport * as filterPreferences from '@bingads-webui-component-legacy/bingads-grid/service/filter-preferences';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport { GRID_NAME } from './constant';\r\n\r\nexport function getFilterConfig({\r\n preferenceService,\r\n i18n,\r\n}) {\r\n const featureName = GRID_NAME;\r\n const enableCampaignWaterfall = false;\r\n const enableAdGroupWaterfall = false;\r\n const entitySchema = ProductListingGroup;\r\n const legacyGlobalI18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n const schemaI18nCampaign = window.globalLegacyI18n.get('$/schema-i18n!campaign');\r\n const preferenceStoreFactory = filterPreferences.getFilters;\r\n\r\n const filterConfig = getCommonFilterConfig({\r\n updatePilot: false,\r\n featureName,\r\n preferenceService,\r\n entitySchema,\r\n i18n,\r\n legacyGlobalI18n,\r\n sessionStore,\r\n preferenceStoreFactory,\r\n globalConfig: appConfig,\r\n schemaI18nCampaign,\r\n cacheService,\r\n dataContextManager,\r\n jsdata: jsData,\r\n editor: {},\r\n enableCampaignWaterfall,\r\n enableAdGroupWaterfall,\r\n // selector: [{\r\n // property: 'Status',\r\n // items: [\r\n // {\r\n // text: i18n.getString('AllAdGroup'),\r\n // value: null,\r\n // },\r\n // {\r\n // text: i18n.getString('AllEnabledAdGroup'),\r\n // value: [\"Enum.AdGroupStatus'Active'\", \"Enum.AdGroupStatus'CampaignBudgetPaused'\"],\r\n // },\r\n // ],\r\n // removable: false,\r\n // defaultValue: null,\r\n // }],\r\n searchbox: {\r\n placeholder: i18n.getString(_TL_('Listing group')),\r\n searchProperty: 'ConditionAttribute',\r\n searchOperator: '$contains',\r\n // maxLength: entitySchema.properties.Name.maxLength,\r\n },\r\n });\r\n\r\n return filterConfig;\r\n}\r\n","import { FilterEntity } from '@bingads-webui/filter-entity';\r\n\r\n// `$filter` is an OData query option\r\nexport function convertFilterEntity2$filter(filterEntity) {\r\n return filterEntity ? FilterEntity.toOdata(filterEntity.query, filterEntity.odataOptions) : undefined;\r\n}\r\n","/* eslint-disable react/sort-comp */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Route, Switch, Redirect } from '@bingads-webui-campaign-react/router';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withCurrentExpandedScope } from '@bingads-webui-campaign-react/use-current-scope-entity';\r\nimport { LISTING_GROUP_TREE_ROUTING, LISTING_GROUP_LIST_ROUTING } from './constant';\r\nimport { StyledListingGroupsPage } from './listing-groups-page';\r\n\r\nclass ListingGroupsRouterShell extends React.Component {\r\n static propTypes = {\r\n history: PropTypes.shape({\r\n push: PropTypes.func.isRequired,\r\n }).isRequired,\r\n location: PropTypes.shape({\r\n pathname: PropTypes.string.isRequired,\r\n search: PropTypes.string.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func,\r\n values: PropTypes.shape({\r\n assetGroupId: PropTypes.number,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.string,\r\n }).isRequired,\r\n currentAdGroup: PropTypes.shape({\r\n Id: PropTypes.string,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n changeLayout: PropTypes.func.isRequired,\r\n };\r\n\r\n static defaultProps = {\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props.changeLayout({ tab: { disableCompare: true } });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.changeLayout({ tab: { disableCompare: false } });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n (\r\n // Will change back to list view when in hierarchy view of campaign scope\r\n this.props.scope.values.assetGroupId\r\n ? \r\n : \r\n )\r\n }\r\n />\r\n (\r\n \r\n \r\n \r\n )\r\n }\r\n />\r\n \r\n );\r\n }\r\n}\r\n\r\nexport const ListingGroupsShell = withInstrumentation(withCurrentExpandedScope(ListingGroupsRouterShell));\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const createOrUpdateCampaign = (data) => {\r\n const campaignEDM = edmCampaign.types.resolve('Model.ShoppingCampaign');\r\n const campaignResource = new campaignEDM.ResourceIdentifier();\r\n const createOrUpdateCall = data && data.Id ?\r\n campaignResource.bulkUpdate.bind(campaignResource) :\r\n campaignResource.bulkCreate.bind(campaignResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nexport const deleteCampaign = (id) => {\r\n const campaignEDM = edmCampaign.types.resolve('Model.ShoppingCampaign');\r\n const campaignResource = new campaignEDM.ResourceIdentifier();\r\n const deleteCall = campaignResource.bulkDestroy.bind(campaignResource);\r\n return deleteCall(id);\r\n};\r\n\r\nexport const readCampaign = (cid, aid, campaignId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .get({\r\n select: ['Budget', 'CampaignConversionGoal/Goals'],\r\n })\r\n .toPromise();\r\n\r\n// Read campaigns with PerformanceMax campaign type\r\nexport const readCampaigns = (cid, aid) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns\r\n .get({\r\n filter: {\r\n where: 'CampaignType eq \\'PerformanceMax\\'',\r\n },\r\n })\r\n .toPromise();\r\n\r\nconst campaignCriterionTypeName = 'Model.CampaignCriterion';\r\n\r\nexport const readCampaignCriterions = (cid, aid, campaignId, type) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .CampaignCriterions\r\n .$cast(campaignCriterionTypeName)\r\n .get({\r\n filter: {\r\n where: type,\r\n },\r\n })\r\n .toPromise();\r\n\r\nexport const readLocationCriterions = (cid, aid, campaignId) =>\r\n readCampaignCriterions(\r\n cid, aid, campaignId,\r\n \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\"\r\n );\r\n\r\nexport const readDayTimeCriterions = (cid, aid, campaignId) =>\r\n readCampaignCriterions(\r\n cid, aid, campaignId,\r\n \"isof(Criterion,'Model.DayTimeCriterion')\"\r\n );\r\n\r\nexport const createOrUpdateAssetGroup = (data) => {\r\n const assetGroupEDM = edmCampaign.types.resolve('Model.AssetGroup');\r\n const assetGroupResource = new assetGroupEDM.ResourceIdentifier();\r\n const createOrUpdateCall = data && data.Id ?\r\n assetGroupResource.bulkUpdate.bind(assetGroupResource) :\r\n assetGroupResource.bulkCreate.bind(assetGroupResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nexport const createOrUpdateListingGroup = (itemsToAdd, itemsToDelete) => {\r\n const listingGroupEDM = edmCampaign.types.resolve('Model.ProductListingGroup');\r\n const listingGroupResource = new listingGroupEDM.ResourceIdentifier();\r\n const data = itemsToDelete.concat(itemsToAdd);\r\n const createOrUpdateCall = data && data.Id ?\r\n listingGroupResource.bulkUpdate.bind(listingGroupResource) :\r\n listingGroupResource.bulkCreate.bind(listingGroupResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nexport const readAssetGroup = (cid, aid, campaignId, assetGroupId, isSearchThemeEnabled, isUrlRulesEnabled = false) => {\r\n const toSelect = ['Headlines', 'LongHeadlines', 'Descriptions', 'AudienceGroup', 'Images', 'Videos'];\r\n\r\n if (isSearchThemeEnabled) toSelect.push('AssetGroupSearchThemes');\r\n if (isUrlRulesEnabled) toSelect.push('AssetGroupUrlTargets');\r\n\r\n return edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AssetGroups.$withKey(assetGroupId)\r\n .get({ select: toSelect })\r\n .toPromise();\r\n};\r\n\r\nexport const readCampaignNegativeWebpages = (cid, aid, campaignId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .CampaignNegativeWebpages\r\n .get({\r\n top: 10000,\r\n skip: 0,\r\n })\r\n .toPromise();\r\n\r\nexport const readConversionGoalDetails = (cid, aid) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)['Default.ConversionGoalDetails']\r\n .$makeCall()\r\n .toPromise();\r\n\r\nexport const readExtensionAssociations = (cid, aid, campaignId, payload, top = 20) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AdExtensionAssociations['Default.GridData']\r\n .$makeCall({\r\n query: {\r\n top,\r\n filter: { where: \"(AdExtension/Status eq Enum.AdExtensionStatus'Active')\" },\r\n select: ['AdExtension'],\r\n },\r\n payload,\r\n })\r\n .toPromise();\r\n\r\nexport const readNewCustomerAcquisitionGoals = (cid, aid) => {\r\n const edm = edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .NewCustomerAcquisitionGoals;\r\n\r\n return edm.get().toPromise();\r\n};\r\n","import { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\n\r\nexport const STEP_PATHS = {\r\n CAMPAIGN_SETTINGS: 'CAMPAIGN_SETTINGS',\r\n ASSET_GROUP: 'ASSET_GROUP',\r\n};\r\n\r\nexport const ScenarioName = {\r\n PerformanceMaxCampaignCreation: 'PerformanceMaxCampaignCreation',\r\n PerformanceMaxAssetGroupCreation: 'PerformanceMaxAssetGroupCreation',\r\n PerformanceMaxCampaignSettings: 'PerformanceMaxCampaignSettings',\r\n PerformanceMaxAssetGroupSettings: 'PerformanceMaxAssetGroupSettings',\r\n};\r\n\r\nexport const initialCampaignData = {\r\n Name: '',\r\n Status: 'Active',\r\n TimeZone: 'PacificTimeUSCanadaTijuana',\r\n Budget: {\r\n Amount: 25,\r\n Type: 'DailyStandard',\r\n },\r\n Languages: ['English'],\r\n BiddingScheme: {\r\n Type: undefined,\r\n TargetCpa: undefined,\r\n TargetRoas: undefined,\r\n },\r\n CampaignType: 'PerformanceMax',\r\n FinalUrlSuffix: '',\r\n TrackingUrlTemplate: '',\r\n UrlCustomParameters: [],\r\n locationTargets: {\r\n bidMode: false,\r\n currentLevelSettings: {\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n targetOption: 'everywhere',\r\n },\r\n parentLevelSettings: {},\r\n useParentLevel: false,\r\n },\r\n adSchedules: {\r\n adScheduleUseSearcherTimeZone: undefined,\r\n dayTimeRanges: [],\r\n timeZone: undefined,\r\n },\r\n finalUrlExpansions: [],\r\n conversionGoals: {\r\n originalConversionGoals: [],\r\n goalSelection: [],\r\n goalScopeSelection: Scopes.ACCOUNT,\r\n },\r\n ProviderId: '',\r\n IsFeedFiltered: false,\r\n SalesCountry: undefined,\r\n FeedLabel: undefined,\r\n LocalInventoryAdsEnabled: false,\r\n finalUrlExpansionOptOut: false,\r\n costPerSaleOptOut: false,\r\n};\r\n\r\nexport const initialBrandExclusionsData = {\r\n addedBrandListIds: [],\r\n deletedBrandListIds: [],\r\n savedAddedBrandListIds: [],\r\n savedDeletedBrandListIds: [],\r\n};\r\n\r\nexport const minuteMap = {\r\n 0: 'ZERO',\r\n 15: 'FIFTEEN',\r\n 30: 'THIRTY',\r\n 45: 'FORTY_FIVE',\r\n};\r\n\r\nexport const initialAssetGroupData = {\r\n Status: 'Active',\r\n // TODO: use for testing bulkupsert. Remove after integration is complete.\r\n // Name: 'ag01',\r\n // Headlines: {\r\n // Headline0: 'a1',\r\n // Headline1: 'a2',\r\n // Headline2: 'a3',\r\n // },\r\n // LongHeadlines: {\r\n // LongHeadline0: 'a4',\r\n // },\r\n // Descriptions: {\r\n // Description0: 'a5',\r\n // Description1: 'a6',\r\n // },\r\n // Images: [{\r\n // '@odata.type': '#Model.ImageAsset',\r\n // Id: 13812614829529,\r\n // IdString: '13812614829529',\r\n // SubType: 'LandscapeImageMedia191X100',\r\n // CropX: 0,\r\n // CropY: 0,\r\n // CropWidth: 2048,\r\n // CropHeight: 1072,\r\n // }, {\r\n // '@odata.type': '#Model.ImageAsset',\r\n // Id: 13812614829531,\r\n // IdString: '13812614829531',\r\n // SubType: 'SquareImageMedia',\r\n // CropX: 0,\r\n // CropY: 0,\r\n // CropWidth: 1014,\r\n // CropHeight: 1014,\r\n // }, {\r\n // '@odata.type': '#Model.ImageAsset',\r\n // Id: 13812614829532,\r\n // IdString: '13812614829532',\r\n // SubType: 'SquareLogoMedia',\r\n // CropX: 0,\r\n // CropY: 0,\r\n // CropWidth: 1072,\r\n // CropHeight: 1072,\r\n // }],\r\n // BusinessName: 'bn',\r\n // CallToAction: 'Unknown',\r\n // FinalUrls: [\r\n // 'https://fr.com',\r\n // ],\r\n};\r\n\r\nexport const campaignLanguageStrings = {\r\n Albanian: _TL_('Albanian'),\r\n Arabic: _TL_('Arabic'),\r\n Bosnian: _TL_('Bosnian'),\r\n Bulgarian: _TL_('Bulgarian'),\r\n Croatian: _TL_('Croatian'),\r\n Czech: _TL_('Czech'),\r\n Danish: _TL_('Danish'),\r\n Dutch: _TL_('Dutch'),\r\n English: _TL_('English'),\r\n Estonian: _TL_('Estonian'),\r\n Finnish: _TL_('Finnish'),\r\n French: _TL_('French'),\r\n German: _TL_('German'),\r\n Greek: _TL_('Greek'),\r\n Hungarian: _TL_('Hungarian'),\r\n Icelandic: _TL_('Icelandic'),\r\n Italian: _TL_('Italian'),\r\n Japanese: _TL_('Japanese'),\r\n Latvian: _TL_('Latvian'),\r\n Lithuanian: _TL_('Lithuanian'),\r\n Macedonian: _TL_('Macedonian'),\r\n Maltese: _TL_('Maltese'),\r\n Norwegian: _TL_('Norwegian'),\r\n Polish: _TL_('Polish'),\r\n Portuguese: _TL_('Portuguese'),\r\n Romanian: _TL_('Romanian'),\r\n Russian: _TL_('Russian'),\r\n Serbian: _TL_('Serbian'),\r\n SimplifiedChinese: _TL_('Simplified Chinese'),\r\n Slovak: _TL_('Slovak'),\r\n Slovenian: _TL_('Slovenian'),\r\n Spanish: _TL_('Spanish'),\r\n Swedish: _TL_('Swedish'),\r\n TraditionalChinese: _TL_('Traditional Chinese'),\r\n Turkish: _TL_('Turkish'),\r\n Hebrew: _TL_('Hebrew'),\r\n Hindi: _TL_('Hindi'),\r\n Malay: _TL_('Malay'),\r\n Thai: _TL_('Thai'),\r\n Indonesian: _TL_('Indonesian'),\r\n Tagalog: _TL_('Tagalog'),\r\n Vietnamese: _TL_('Vietnamese'),\r\n};\r\n\r\nexport const CampaignNegativeReferenceId = -111;\r\nexport const AssetGroupNegativeReferenceId = -21;\r\n\r\nexport const SupportedExtensionPreviewTypes = {\r\n Sitelink: 'Sitelink2AdExtension',\r\n Callout: 'CalloutAdExtension',\r\n StructuredSnippet: 'StructuredSnippetAdExtension',\r\n Promotion: 'PromotionAdExtension',\r\n Price: 'PriceAdExtension',\r\n};\r\n","import { has } from 'underscore';\r\n\r\nexport const isBulkWrappedResponse = bulkResult => has(bulkResult, 'entity'); // && has(bulkResult, 'errors');\r\n","import { identity, contains, constant, chain, negate, has } from 'underscore';\r\nimport { mapBulkUpsertErrors } from '../common/map-bulk-upsert-errors';\r\n\r\nconst getBulkUploadEntityType = entitySchema =>\r\n (entitySchema.properties['bulk-upload-type'] || {}).value ||\r\n entitySchema.name;\r\n\r\nexport const getBulkUploadErrorType = entitySchema =>\r\n `${getBulkUploadEntityType(entitySchema)} Error`;\r\n\r\nexport const modelToViewModelForBulkErrors = (errors, bulkUpsertEntityErrorMap, scenario, i18n, activityLogger) =>\r\n mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, /* errorProcessor */ identity, scenario, i18n, activityLogger);\r\n\r\nexport const removeErrors = (bulkErrors, filter) =>\r\n bulkErrors.filter(negate(filter));\r\n\r\nexport const isAudienceAssociationDoesntExistError = ({ Error }) => Error === 'AssetGroupAudienceGroupAssociationDoesNotExist';\r\n\r\nconst ReferencedEntityInvalidIdErrors = ['CampaignServiceInvalidCampaignId', 'AssetGroupIdInvalid'];\r\nexport const isReferencedEntityInvalidIdError = ({ Error }) => contains(ReferencedEntityInvalidIdErrors, Error);\r\nexport const removeReferencedEntityInvalidIdErrors = bulkErrors =>\r\n bulkErrors.filter(negate(isReferencedEntityInvalidIdError));\r\n\r\nexport const hasBulkErrorsForEntityType = (bulkErrors, entityType, filter = constant(true)) =>\r\n chain(bulkErrors)\r\n .filter(filter)\r\n .some(({ Type }) => Type === entityType)\r\n .value();\r\n\r\nexport const unexpectedBulkErrorToString = bulkOrSystemError =>\r\n // If it is an Error instance\r\n bulkOrSystemError.stack ||\r\n bulkOrSystemError.message ||\r\n // If it is a jQuery.ajax completion error object\r\n (has(bulkOrSystemError, 'status') && has(bulkOrSystemError, 'statusText') && `[jQuery.ajax] { status: ${bulkOrSystemError.status}, statusText: ${bulkOrSystemError.statusText} }`) ||\r\n // Everything else\r\n bulkOrSystemError;\r\n","import { identity, result } from 'underscore';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\n\r\nexport const mapBulkUpsertErrors = (errors, bulkUpsertEntityErrorMap, errorProcessor = identity, scenario, i18n, activityLogger) =>\r\n getBulkApiErrors(errors, scenario, i18n, activityLogger).map((error) => {\r\n const errorType = error.type;\r\n const mappedErrorType = result(bulkUpsertEntityErrorMap, errorType, errorType);\r\n // eslint-disable-next-line no-param-reassign\r\n error.type = mappedErrorType;\r\n return errorProcessor(error);\r\n });\r\n","import { CampaignApiError } from '@bingads-webui-campaign/api-errors';\r\nimport { GENERIC_ERROR_MESSAGE_KEY } from '../common/strings';\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 BrandListAssociation: 'brandListAssociation',\r\n};\r\n\r\nexport const apiErrorMapper = campaignApiError => (campaignApiError &&\r\n (campaignApiError.isHtmlMessage ?\r\n { DangerousHtmlMessage: campaignApiError.message } :\r\n campaignApiError.message || campaignApiError.code || campaignApiError.toString())) || '';\r\n\r\nexport const genericApiError = new CampaignApiError(GENERIC_ERROR_MESSAGE_KEY);\r\n","export const GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n","/* eslint-disable no-plusplus */\r\nimport { pick, extend, chain, isNumber, result, isString, map, each, isEmpty, clone, negate, isUndefined, pluck, difference, findWhere } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { AssetGroup, AudienceGroupAssetGroupAssociation } from '@bingads-webui/campaign-odata-schemas';\r\nimport { createOrUpdateAssetGroup, readAssetGroup } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { processImageListViewModelToModel } from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { fromViewModelToBulkModel as viewModelToBulkModelForListingGroup } from '@bingads-webui-campaign-react/listing-groups-page';\r\nimport { isEmptyUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { getUrlRulesOption, URL_RULES_OPTIONS } from '@bingads-webui-campaign-react/url-rules';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { getImagesFromMTAssetsAsync } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { initialAssetGroupData, AssetGroupNegativeReferenceId } from '../common/constants';\r\nimport { isBulkWrappedResponse } from '../common/bulk';\r\nimport { getBulkUploadErrorType, hasBulkErrorsForEntityType, isAudienceAssociationDoesntExistError, modelToViewModelForBulkErrors, removeErrors, removeReferencedEntityInvalidIdErrors, unexpectedBulkErrorToString } from './bulk-upsert-errors';\r\nimport { ERROR_ENTITY, genericApiError } from './api-errors';\r\n\r\nconst globalLegacyI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/campaign-creation-advanced');\r\n\r\nconst bulkUpsertAssetGroupSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(AssetGroup)]: ERROR_ENTITY.AssetGroup,\r\n [getBulkUploadErrorType(AudienceGroupAssetGroupAssociation)]: ERROR_ENTITY.AudienceGroupAssetGroupAssociation,\r\n};\r\n\r\nexport const initialAssetGroupViewModel = {\r\n data: initialAssetGroupData,\r\n isValid: false,\r\n isDirty: false,\r\n};\r\n\r\nexport const getErrorsPlaceholders = () => ({\r\n serverErrors: [],\r\n systemErrors: [],\r\n});\r\n\r\n\r\nconst whitelistedSchemaPropertyKeysForBulkModel = [\r\n 'Headlines', 'LongHeadlines', 'Descriptions', 'Images', 'Campaign', 'Id', 'Name', 'Status',\r\n 'Path1', 'Path2', 'BusinessName', 'CallToAction', 'FinalUrls', 'MobileFinalUrls', 'StartDate', 'EndDate',\r\n 'AssetGroupSearchThemes', 'AssetGroupUrlTargets', 'Videos',\r\n];\r\n\r\nconst whitelistedSchemaPropertyKeysForModel = ['AudienceGroup', 'UrlRulesOption'].concat(whitelistedSchemaPropertyKeysForBulkModel);\r\n\r\nconst whitelistedSchemaPropertyKeys = whitelistedSchemaPropertyKeysForModel;\r\n\r\nconst assetsArrayToObject = (assetsArray, propertyPrefix) => {\r\n const assetObject = {};\r\n\r\n each(assetsArray, (asset, index) => {\r\n const assetText = chain(asset).result('Asset', {}).result('Text', '').value();\r\n assetObject[`${propertyPrefix}${index}`] = assetText;\r\n });\r\n\r\n return assetObject;\r\n};\r\n\r\nconst modelToViewModelForTextAssets = (assetGroupModel, propertyName, propertyPrefix) => {\r\n const assetsArray = result(assetGroupModel, propertyName, []);\r\n const viewModelOverride = {};\r\n viewModelOverride[`${propertyName}`] = assetsArrayToObject(assetsArray, propertyPrefix);\r\n return viewModelOverride;\r\n};\r\n\r\nconst modelToViewModelForSearchThemes = (assetGroupModel, assetGroupViewModel) => {\r\n const searchThemes = result(assetGroupViewModel.data, 'AssetGroupSearchThemes', []);\r\n const newResult = [];\r\n\r\n assetGroupModel.AssetGroupSearchThemes.forEach((item) => {\r\n const index = searchThemes.findIndex(element => element.SearchTheme === item.SearchTheme);\r\n if (item.Status === 'Deleted') {\r\n searchThemes.splice(index, 1);\r\n } else {\r\n if (index >= 0) {\r\n searchThemes.splice(index, 1);\r\n }\r\n newResult.push(item);\r\n }\r\n });\r\n\r\n return { AssetGroupSearchThemes: searchThemes.concat(newResult) };\r\n};\r\n\r\nconst bulkModelToViewModelForUrlRules = (assetGroupBulkModel, assetGroupViewModel) => {\r\n const urlRulesOption = result(assetGroupViewModel.data, 'UrlRulesOption', URL_RULES_OPTIONS.All);\r\n if (urlRulesOption === URL_RULES_OPTIONS.All) {\r\n return { AssetGroupUrlTargets: [] };\r\n }\r\n\r\n const urlTargets = result(assetGroupViewModel.data, 'AssetGroupUrlTargets', []);\r\n const bulkResponse = result(assetGroupBulkModel, 'AssetGroupUrlTargets', []);\r\n const resultsWithIds = map(urlTargets, (item) => {\r\n if (item.Id) return item;\r\n const target = bulkResponse.filter(targetItem => targetItem.Status !== 'Deleted'\r\n && targetItem.Condition1 === item.TargetCondition1\r\n && targetItem.Value1 === item.TargetValue1\r\n && targetItem.Value2 === item.TargetValue2\r\n && targetItem.Value3 === item.TargetValue3);\r\n return { ...item, Id: target.length ? target[0].Id : undefined };\r\n });\r\n\r\n return { AssetGroupUrlTargets: resultsWithIds, UrlRulesOption: getUrlRulesOption(resultsWithIds) };\r\n};\r\n\r\nconst bulkModelToViewModelForUrlRulesV2 = (assetGroupBulkModel, assetGroupViewModel) => {\r\n const urlTargets = result(assetGroupViewModel.data, 'AssetGroupUrlTargets', []);\r\n const bulkResponse = result(assetGroupBulkModel, 'AssetGroupUrlTargets', []);\r\n const resultsWithIds = map(urlTargets, (item) => {\r\n if (item.Id) return item;\r\n const target = bulkResponse.filter(targetItem => targetItem.Status !== 'Deleted'\r\n && targetItem.Condition1 === item.TargetCondition1\r\n && targetItem.Condition2 === item.TargetCondition2\r\n && targetItem.Condition3 === item.TargetCondition3\r\n && targetItem.Value1 === item.TargetValue1\r\n && targetItem.Value2 === item.TargetValue2\r\n && targetItem.Value3 === item.TargetValue3);\r\n return { ...item, Id: target.length ? target[0].Id : undefined };\r\n });\r\n\r\n return { AssetGroupUrlTargets: resultsWithIds };\r\n};\r\n\r\nconst modelToViewModelForAudienceGroup = (assetGroupModel, assetGroupViewModel) => {\r\n const associatedIds = map(assetGroupModel.AudienceGroupAssetGroupAssociations, association => association.AudienceGroupId);\r\n\r\n const audienceGroup = result(assetGroupViewModel.data, 'AudienceGroup', []);\r\n\r\n // deleted audience group\r\n if (!audienceGroup) {\r\n return { AudienceGroup: null };\r\n }\r\n\r\n const associatedAudienceGroup = associatedIds.includes(audienceGroup.Id) ? audienceGroup : null;\r\n\r\n if (associatedAudienceGroup) {\r\n return {\r\n AudienceGroup: associatedAudienceGroup,\r\n };\r\n }\r\n\r\n return {};\r\n};\r\n\r\nconst viewModelToBulkModelForSearchThemes = (assetGroupViewModel) => {\r\n const { AssetGroupSearchThemes, Id = AssetGroupNegativeReferenceId } = assetGroupViewModel;\r\n const searchThemesresult = [];\r\n AssetGroupSearchThemes.forEach((item) => {\r\n if (item.Status === 'Deleted') {\r\n searchThemesresult.push({\r\n AssetGroupId: Id,\r\n SearchTheme: item.SearchTheme,\r\n AssetGroupSearchThemeId: item.Id,\r\n Status: item.Status,\r\n });\r\n } else if (!item.Id) {\r\n searchThemesresult.push({\r\n AssetGroupId: Id,\r\n SearchTheme: item.SearchTheme,\r\n });\r\n }\r\n });\r\n return { AssetGroupSearchThemes: searchThemesresult };\r\n};\r\n\r\nconst viewModelToBulkModelForUrlRules = (assetGroupViewModel, originalAssetGroupViewModel, serverContext) => {\r\n const isAssetGroupUrlRulesV2Enabled = serverContext?.DynamicPermissions?.AssetGroupUrlRulesV2 || false;\r\n const { AssetGroupUrlTargets: newAssetGroupUrlTargets, Id = AssetGroupNegativeReferenceId } = assetGroupViewModel;\r\n\r\n if (!isAssetGroupUrlRulesV2Enabled) {\r\n const { UrlRulesOption } = assetGroupViewModel;\r\n\r\n if (UrlRulesOption === URL_RULES_OPTIONS.All) {\r\n const deletedTargets = newAssetGroupUrlTargets.map(target => ({\r\n AssetGroupId: Id,\r\n AssetGroupUrlTargetId: target.Id,\r\n Status: 'Deleted',\r\n }));\r\n\r\n return {\r\n AssetGroupUrlTargets: deletedTargets,\r\n };\r\n }\r\n }\r\n\r\n const newTargetIds = pluck(newAssetGroupUrlTargets, 'Id');\r\n\r\n const mapTargetFields = (target) => {\r\n const bulkModel = {\r\n AssetGroupId: Id,\r\n Condition1: target.TargetCondition1,\r\n Operator1: target.TargetConditionOperator1,\r\n Value1: target.TargetValue1,\r\n };\r\n\r\n each([2, 3], (index) => {\r\n if (target[`TargetCondition${index}`]) {\r\n extend(bulkModel, {\r\n [`Condition${index}`]: target[`TargetCondition${index}`],\r\n [`Operator${index}`]: target[`TargetConditionOperator${index}`],\r\n [`Value${index}`]: target[`TargetValue${index}`],\r\n });\r\n }\r\n });\r\n\r\n return bulkModel;\r\n };\r\n\r\n let deletedTargets = [];\r\n if (originalAssetGroupViewModel) {\r\n const { AssetGroupUrlTargets: originalAssetGroupUrlTargets } = originalAssetGroupViewModel;\r\n const originalTargetIds = pluck(originalAssetGroupUrlTargets, 'Id');\r\n const deletedTargetIds = difference(originalTargetIds, newTargetIds);\r\n deletedTargets = deletedTargetIds.map((id) => {\r\n const target = findWhere(originalAssetGroupUrlTargets, { Id: id });\r\n return {\r\n AssetGroupId: Id,\r\n AssetGroupUrlTargetId: target.Id,\r\n Status: 'Deleted',\r\n };\r\n });\r\n }\r\n\r\n const newTargets = newAssetGroupUrlTargets.filter(target => !target.Id).map(target => mapTargetFields(target));\r\n\r\n return {\r\n AssetGroupUrlTargets: [\r\n ...deletedTargets,\r\n ...newTargets,\r\n ],\r\n };\r\n};\r\n\r\nconst prepareViewModelForWindowsImageFetch = (assetGroupModel, cid, aid) => {\r\n const images = {\r\n ImageSPOTLIGHT: {\r\n ImageAssets: null,\r\n ImageList: null,\r\n },\r\n ImagePRONG: {\r\n ImageAssets: null,\r\n ImageList: null,\r\n },\r\n TransparentLogo: {\r\n ImageAssets: null,\r\n ImageList: null,\r\n },\r\n };\r\n if (!assetGroupModel || !assetGroupModel.Images) {\r\n return images;\r\n }\r\n const imageProngModel = assetGroupModel.Images.find(x => x.AssociationType === 'ImagePRONG');\r\n const imageSpotLightModel = assetGroupModel.Images.find(x => x.AssociationType === 'ImageSPOTLIGHT');\r\n const transparentLogoModel = assetGroupModel.Images.find(x => x.AssociationType === 'TransparentLogo');\r\n\r\n const imageProngVMPromise = imageProngModel\r\n ? getImagesFromMTAssetsAsync(odata, `/Customers(${cid})/Accounts(${aid})/` /* baseUrl */, [imageProngModel], false, false, false, true, false)\r\n : Promise.resolve([]);\r\n const imageSpotLightVMPromise = imageSpotLightModel\r\n ? getImagesFromMTAssetsAsync(odata, `/Customers(${cid})/Accounts(${aid})/` /* baseUrl */, [imageSpotLightModel], false, false, false, false, true)\r\n : Promise.resolve([]);\r\n const transparentLogoVMPromise = transparentLogoModel\r\n ? getImagesFromMTAssetsAsync(odata, `/Customers(${cid})/Accounts(${aid})/` /* baseUrl */, [transparentLogoModel], false, false, false, false, false, true)\r\n : Promise.resolve([]);\r\n\r\n return imageProngVMPromise.then(imageProngVM => imageSpotLightVMPromise.then(imageSpotLightVM => transparentLogoVMPromise.then(transparentLogoVM => ({\r\n ImageSPOTLIGHT: {\r\n ImageAssets: null,\r\n ImageList: imageSpotLightVM,\r\n },\r\n ImagePRONG: {\r\n ImageAssets: null,\r\n ImageList: imageProngVM,\r\n },\r\n TransparentLogo: {\r\n ImageAssets: null,\r\n ImageList: transparentLogoVM,\r\n },\r\n }))));\r\n};\r\n\r\nconst prepareViewModelForImageFetch = assetGroupModel => ({\r\n Images: {\r\n ImageAssets: result(assetGroupModel, 'Images', []),\r\n },\r\n});\r\n\r\n// keeping unused i18n in case we find bugs with replacement to globalLegacyI18n and change need to be reverted\r\nfunction parseLoadDate(i18n, dateString) {\r\n return globalLegacyI18n.parseDate(dateString.substring(0, 10), { raw: 'yyyy-MM-dd' });\r\n}\r\n\r\nconst modelToViewModelForDateSetting = ({ assetGroupModel, i18n }) => ({\r\n StartDate: parseLoadDate(i18n, assetGroupModel.StartDate),\r\n EndDate: assetGroupModel.EndDate ? parseLoadDate(i18n, assetGroupModel.EndDate) : undefined,\r\n});\r\n\r\nconst modelToViewModelForURLRules = (assetGroupModel, isUrlRulesV2Enabled) => {\r\n const assetGroupUrlTargets = result(assetGroupModel, 'AssetGroupUrlTargets', []);\r\n return isUrlRulesV2Enabled ? {} : { UrlRulesOption: getUrlRulesOption(assetGroupUrlTargets) };\r\n};\r\n\r\nconst modelToViewModelForAssetGroup = (assetGroupModel, i18n, isUrlRulesV2Enabled) => {\r\n let data = pick(assetGroupModel, whitelistedSchemaPropertyKeys);\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'Headlines', 'Headline'));\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'LongHeadlines', 'LongHeadline'));\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'Descriptions', 'Description'));\r\n data = extend(data, prepareViewModelForImageFetch(assetGroupModel));\r\n\r\n data = extend(data, modelToViewModelForDateSetting({\r\n assetGroupModel,\r\n i18n,\r\n }));\r\n\r\n data = extend(data, modelToViewModelForURLRules(assetGroupModel, isUrlRulesV2Enabled));\r\n\r\n const assetGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return assetGroupViewModel;\r\n};\r\n\r\n// keeping unused i18n in case we find bugs with replacement to globalLegacyI18n and change need to be reverted\r\nconst formatDateToAPIFormat = (i18n, date) => {\r\n if (date == null) {\r\n return '';\r\n }\r\n return globalLegacyI18n.formatDate(date, {\r\n raw: 'M/d/yyyy',\r\n });\r\n};\r\n\r\n// keeping unused i18n in case we find bugs with replacement to globalLegacyI18n and change need to be reverted\r\nconst parseDateFromAPIFormat = (i18n, date) => {\r\n if (date == null) {\r\n return null;\r\n }\r\n\r\n if (typeof date === 'string') {\r\n return globalLegacyI18n.parseDate(date.substring(0, 10), { raw: 'M/d/yyyy' });\r\n }\r\n\r\n return date;\r\n};\r\n\r\nconst viewModelToBulkModelForDateSetting = (i18n, assetGroupViewModel) => ({\r\n StartDate: formatDateToAPIFormat(i18n, assetGroupViewModel.data.StartDate),\r\n EndDate: assetGroupViewModel.data.EndDate ? formatDateToAPIFormat(i18n, assetGroupViewModel.data.EndDate) : '1/1/3000',\r\n});\r\n\r\nconst bulkModelToViewModelForDateSetting = ({ assetGroupModel, i18n }) => ({\r\n StartDate: parseDateFromAPIFormat(i18n, assetGroupModel.StartDate),\r\n EndDate: assetGroupModel.EndDate ? parseDateFromAPIFormat(i18n, assetGroupModel.EndDate) : undefined,\r\n});\r\n\r\nconst createBulkModelForListingGroup = (listingGroups) => {\r\n const hasProductFilters = listingGroups && listingGroups.items && listingGroups.items.length > 0;\r\n\r\n const rootNodeId = -1;\r\n let negativeId = -2;\r\n let bulkModel = [{\r\n Id: rootNodeId,\r\n AssetGroupId: AssetGroupNegativeReferenceId,\r\n IsExcluded: false,\r\n IsLeaf: !hasProductFilters,\r\n Condition: {\r\n Operand: 'All',\r\n Attribute: '',\r\n },\r\n }];\r\n if (hasProductFilters) {\r\n const dummyEveryThingElse = {\r\n key: '_DUMMY_EVERY_THING_ELSE',\r\n data: { Attribute: '' },\r\n };\r\n\r\n let finalListingGroups = [\r\n ...listingGroups.items,\r\n dummyEveryThingElse,\r\n ];\r\n finalListingGroups = finalListingGroups.map(item => ({\r\n Id: negativeId--,\r\n IsExcluded: item.key === dummyEveryThingElse.key,\r\n ParentId: rootNodeId,\r\n IsLeaf: true,\r\n AssetGroupId: AssetGroupNegativeReferenceId,\r\n Condition: { Attribute: item.data.Attribute, Operand: listingGroups.operand },\r\n }));\r\n\r\n bulkModel = bulkModel.concat(map(finalListingGroups, listingGroup => viewModelToBulkModelForListingGroup(listingGroup)));\r\n }\r\n\r\n return {\r\n ProductListingGroups: bulkModel,\r\n };\r\n};\r\n\r\nconst textAssetPropertyNameRegEx = /([^\\d]+)(\\d+)/;\r\nconst parseAssetPropertyName = (propertyName) => {\r\n const matches = propertyName.match(textAssetPropertyNameRegEx);\r\n return matches !== null ?\r\n ({ name: matches[1], index: parseInt(matches[2], 10) }) :\r\n ({ name: 'invalid property', index: NaN });\r\n};\r\n\r\nconst assetsObjectToArray = (assetsObject, propertyPrefix) =>\r\n chain(assetsObject)\r\n .pairs()\r\n .filter(([, value]) => !isEmpty(value))\r\n .map(([key, value]) => [parseAssetPropertyName(key), value])\r\n .filter(([{ name, index }]) => name === propertyPrefix && isNumber(index))\r\n .value();\r\n\r\nconst assetToModel = ([, value]) => ({\r\n Asset: {\r\n Text: value,\r\n },\r\n});\r\n\r\nconst viewModelToBulkModelForTextAssets = (assetGroupViewModel, propertyName, vmPropertyPrefix) => ({\r\n [propertyName]:\r\n assetsObjectToArray(result(assetGroupViewModel, propertyName, {}), vmPropertyPrefix)\r\n .map(assetToModel),\r\n});\r\n\r\nconst viewModelToBulkModelForImages = (assetGroupViewModel, serverContext, aid, cid) => {\r\n const { ImageList = [] } = assetGroupViewModel.Images;\r\n\r\n if (assetGroupViewModel.ImageSPOTLIGHT && assetGroupViewModel.ImageSPOTLIGHT.ImageList) {\r\n ImageList.push(...assetGroupViewModel.ImageSPOTLIGHT.ImageList);\r\n }\r\n if (assetGroupViewModel.ImagePRONG && assetGroupViewModel.ImagePRONG.ImageList) {\r\n ImageList.push(...assetGroupViewModel.ImagePRONG.ImageList);\r\n }\r\n if (assetGroupViewModel.TransparentLogo && assetGroupViewModel.TransparentLogo.ImageList) {\r\n ImageList.push(...assetGroupViewModel.TransparentLogo.ImageList);\r\n }\r\n const model = processImageListViewModelToModel(ImageList, serverContext, aid, cid);\r\n return model;\r\n};\r\n\r\nconst isAudienceSignalAssetGroupAssociationCreateOrUpdateScenario = assetGroupViewModel =>\r\n !!result(assetGroupViewModel.AudienceGroup, 'Id');\r\nconst isAudienceSignalAssetGroupAssociationDeleteScenario = (assetGroupViewModel, originalAssetGroupViewModel) =>\r\n !isAudienceSignalAssetGroupAssociationCreateOrUpdateScenario(assetGroupViewModel) &&\r\n !!result(originalAssetGroupViewModel?.AudienceGroup, 'Id');\r\n\r\n\r\nconst viewModelToBulkModelForAudienceGroup = (assetGroupViewModel, originalAssetGroupViewModel) => {\r\n const { AudienceGroup, Id = AssetGroupNegativeReferenceId } = assetGroupViewModel;\r\n let model = {};\r\n if (isAudienceSignalAssetGroupAssociationCreateOrUpdateScenario(assetGroupViewModel)) {\r\n model = extend({\r\n AudienceGroupAssetGroupAssociations: [{\r\n AudienceGroupId: AudienceGroup.Id,\r\n AssetGroupId: Id,\r\n Status: 'Active',\r\n }],\r\n });\r\n } else if (isAudienceSignalAssetGroupAssociationDeleteScenario(assetGroupViewModel, originalAssetGroupViewModel)) {\r\n const { AudienceGroup: OriginalAudienceGroup } = originalAssetGroupViewModel;\r\n model = extend({\r\n AudienceGroupAssetGroupAssociations: [{\r\n AudienceGroupId: OriginalAudienceGroup.Id,\r\n AssetGroupId: Id,\r\n Status: 'Deleted',\r\n }],\r\n });\r\n }\r\n return model;\r\n};\r\n\r\nconst viewModelToBulkModelForFinalUrls = (assetGroupViewModel) => {\r\n const urls = result(assetGroupViewModel, 'FinalUrls', null);\r\n if (!urls || isEmptyUrl(urls)) {\r\n return { FinalUrls: [] };\r\n }\r\n\r\n return { FinalUrls: urls };\r\n};\r\n\r\nconst viewModelToBulkModelForMobileFinalUrls = (assetGroupViewModel) => {\r\n const isCreation = !(assetGroupViewModel.Id > 0);\r\n const urls = result(assetGroupViewModel, 'MobileFinalUrls', null);\r\n if (!urls || isEmptyUrl(urls)) {\r\n if (isCreation) {\r\n return { MobileFinalUrls: '' };\r\n }\r\n\r\n return { MobileFinalUrls: 'delete_value' };\r\n }\r\n\r\n return { MobileFinalUrls: urls.join(';') };\r\n};\r\n\r\nconst viewModelToBulkModelForAssetGroup = (i18n, serverContext, cid, aid, assetGroupViewModel, originalAssetGroup, campaign) => {\r\n let model = pick(assetGroupViewModel.data, whitelistedSchemaPropertyKeysForBulkModel);\r\n if (!assetGroupViewModel.data.Id) {\r\n model.Id = AssetGroupNegativeReferenceId;\r\n }\r\n if (!assetGroupViewModel.data.Id && campaign && campaign.CampaignSettings && campaign.CampaignSettings.ProviderId) {\r\n model = extend(model, createBulkModelForListingGroup(assetGroupViewModel.data.listingGroup));\r\n }\r\n model = extend(model, viewModelToBulkModelForDateSetting(i18n, assetGroupViewModel));\r\n model = extend(model, viewModelToBulkModelForTextAssets(assetGroupViewModel.data, 'Headlines', 'Headline'));\r\n model = extend(model, viewModelToBulkModelForTextAssets(assetGroupViewModel.data, 'LongHeadlines', 'LongHeadline'));\r\n model = extend(model, viewModelToBulkModelForTextAssets(assetGroupViewModel.data, 'Descriptions', 'Description'));\r\n\r\n if (assetGroupViewModel.data.AudienceGroup || originalAssetGroup.data?.AudienceGroup) {\r\n model = extend(model, viewModelToBulkModelForAudienceGroup(assetGroupViewModel.data, originalAssetGroup.data));\r\n }\r\n\r\n model = extend(model, viewModelToBulkModelForFinalUrls(assetGroupViewModel.data));\r\n model = extend(model, viewModelToBulkModelForMobileFinalUrls(assetGroupViewModel.data));\r\n\r\n if (assetGroupViewModel.data.AssetGroupSearchThemes || originalAssetGroup.data?.AssetGroupSearchThemes) {\r\n model = extend(model, viewModelToBulkModelForSearchThemes(assetGroupViewModel.data, 'AssetGroupSearchTheme', 'AssetGroupSearchTheme'));\r\n }\r\n\r\n if (assetGroupViewModel.data.AssetGroupUrlTargets || originalAssetGroup.data?.AssetGroupUrlTargets) {\r\n model = extend(model, viewModelToBulkModelForUrlRules(assetGroupViewModel.data, originalAssetGroup.data, serverContext));\r\n }\r\n\r\n if (assetGroupViewModel.data.videos && Array.isArray(assetGroupViewModel.data.videos)) {\r\n const videos = assetGroupViewModel.data.videos.map(video => ({\r\n id: video.id,\r\n idString: video.idString,\r\n subType: video.type,\r\n }));\r\n\r\n model = extend(model, { Videos: JSON.stringify(videos) });\r\n }\r\n\r\n return viewModelToBulkModelForImages(assetGroupViewModel.data, serverContext, cid, aid)\r\n .then(imagesModel => extend(model, imagesModel));\r\n};\r\n\r\nexport const viewModelToModelForAssetGroup = (assetGroupViewModel) => {\r\n const model = pick(assetGroupViewModel.data, whitelistedSchemaPropertyKeysForModel);\r\n if (!assetGroupViewModel.data.Id) {\r\n model.Id = AssetGroupNegativeReferenceId;\r\n }\r\n return model;\r\n};\r\n\r\nexport const modelToViewModelForWindowsAssetGroup = (assetGroupModel, i18n, cid, aid) => {\r\n let data = pick(assetGroupModel, whitelistedSchemaPropertyKeys);\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'Headlines', 'Headline'));\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'LongHeadlines', 'LongHeadline'));\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'Descriptions', 'Description'));\r\n\r\n data = extend(data, modelToViewModelForDateSetting({\r\n assetGroupModel,\r\n i18n,\r\n }));\r\n\r\n return prepareViewModelForWindowsImageFetch(assetGroupModel, cid, aid).then((image) => {\r\n data = extend(data, image);\r\n const assetGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return assetGroupViewModel;\r\n });\r\n};\r\n\r\nexport const loadAssetGroup = (cid, aid, campaignId, assetGroupId, i18n, isSearchThemeEnabled, isUrlRulesEnabled, isUrlRulesV2Enabled) =>\r\n readAssetGroup(cid, aid, campaignId, assetGroupId, isSearchThemeEnabled, isUrlRulesEnabled).then(assetGroupModel => modelToViewModelForAssetGroup(assetGroupModel, i18n, isUrlRulesV2Enabled));\r\n\r\nexport const loadAssetGroupForWindowsStore = (cid, aid, campaignId, assetGroupId, i18n) =>\r\n readAssetGroup(cid, aid, campaignId, assetGroupId, false, false).then(assetGroupModel => modelToViewModelForWindowsAssetGroup(assetGroupModel, i18n, cid, aid));\r\n\r\nexport const loadAssetGroupWithVideos = (cid, aid, campaignId, assetGroupId, i18n, isSearchThemeEnabled, isUrlRulesEnabled, videoRepository) => loadAssetGroup(cid, aid, campaignId, assetGroupId, i18n, isSearchThemeEnabled, isUrlRulesEnabled).then((assetGroup) => {\r\n const { Videos } = assetGroup && assetGroup.data;\r\n\r\n if (Videos) {\r\n const videoPromises = Promise.map(Videos, video => videoRepository.getVideo({ id: video.Asset.Id }));\r\n\r\n return videoPromises.then((videos) => {\r\n const videoObjects = map(videos, (video) => {\r\n const videoMT = newVideoFromMTObject(video);\r\n\r\n const associationType = Videos.find(v => v.Asset.Id === video.Id).AssociationType;\r\n return {\r\n ...videoMT,\r\n type: associationType,\r\n ThumbnailUrl: videoMT.thumbnailUrl,\r\n };\r\n });\r\n\r\n return {\r\n ...assetGroup,\r\n data: {\r\n ...assetGroup.data,\r\n videos: videoObjects,\r\n },\r\n };\r\n });\r\n }\r\n\r\n return assetGroup;\r\n});\r\n\r\nconst bulkModelToViewModelForAssetGroup = ({\r\n i18n, scenario, activityLogger,\r\n assetGroupViewModel, // the asset group's view model the user tried to save\r\n originalAssetGroupViewModel, // the asset group's view model before the save attempt\r\n assetGroupModel, // the asset group's model as was generated off of assetGroupViewModel and processed by bulk infrastructure\r\n serverContext,\r\n errors = [], // the bulk upsert errors\r\n}) => {\r\n let data;\r\n let newOriginalAssetGroupViewModel;\r\n\r\n const hasAssetGroupErrors = hasBulkErrorsForEntityType(errors, getBulkUploadErrorType(AssetGroup));\r\n const hasAudienceSignalAssetGroupAssociationErrors = hasBulkErrorsForEntityType(errors, getBulkUploadErrorType(AudienceGroupAssetGroupAssociation), negate(isAudienceAssociationDoesntExistError));\r\n if (!hasAssetGroupErrors) {\r\n data = pick(assetGroupModel, whitelistedSchemaPropertyKeys);\r\n // Correct the type of the AssetGroup's ID:\r\n if (data.Id && isString(data.Id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n data.Id = parseInt(data.Id, 10);\r\n }\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'Headlines', 'Headline'));\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'LongHeadlines', 'LongHeadline'));\r\n data = extend(data, modelToViewModelForTextAssets(assetGroupModel, 'Descriptions', 'Description'));\r\n data = extend(data, bulkModelToViewModelForDateSetting({ assetGroupModel, i18n }));\r\n\r\n if (assetGroupModel.AudienceGroupAssetGroupAssociations) {\r\n data = extend(data, modelToViewModelForAudienceGroup(assetGroupModel, assetGroupViewModel));\r\n }\r\n if (assetGroupModel.AssetGroupSearchThemes) {\r\n data = extend(data, modelToViewModelForSearchThemes(assetGroupModel, assetGroupViewModel));\r\n }\r\n if (assetGroupModel.MobileFinalUrls) {\r\n data.MobileFinalUrls = assetGroupModel.MobileFinalUrls === 'delete_value' ? [] : [assetGroupModel.MobileFinalUrls];\r\n }\r\n if (assetGroupModel.AssetGroupUrlTargets) {\r\n const isAssetGroupUrlRulesV2Enabled = serverContext?.DynamicPermissions?.AssetGroupUrlRulesV2 || false;\r\n data = extend(\r\n data,\r\n isAssetGroupUrlRulesV2Enabled\r\n ? bulkModelToViewModelForUrlRulesV2(assetGroupModel, assetGroupViewModel)\r\n : bulkModelToViewModelForUrlRules(assetGroupModel, assetGroupViewModel)\r\n );\r\n }\r\n newOriginalAssetGroupViewModel = clone(assetGroupViewModel);\r\n } else {\r\n ({ data } = assetGroupViewModel);\r\n newOriginalAssetGroupViewModel = originalAssetGroupViewModel;\r\n\r\n // If AsetGroup change was not accepted, but audience signal association change was, then\r\n // we need to update the model to reflect the new state of audience signal association or, otherwise,\r\n // when the user was removing the association MT will return the error that the association is not found and the user will be blocked from saving the changes.\r\n // For the association creation scenario, MT doesn't generate errors if we request the create an association that already exist.\r\n if (!hasAudienceSignalAssetGroupAssociationErrors) {\r\n if (isAudienceSignalAssetGroupAssociationDeleteScenario(assetGroupViewModel.data, originalAssetGroupViewModel.data)) {\r\n delete newOriginalAssetGroupViewModel.data.AudienceGroup;\r\n } else if (isAudienceSignalAssetGroupAssociationCreateOrUpdateScenario(assetGroupViewModel.data)) {\r\n newOriginalAssetGroupViewModel.data.AudienceGroup = assetGroupViewModel.data.AudienceGroup;\r\n }\r\n }\r\n }\r\n\r\n data = extend(data, pick(assetGroupViewModel.data, 'Images', 'FinalUrlForRecommendation', 'videos'));\r\n\r\n const newAssetGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n\r\n let filteredErrors = errors;\r\n if (newAssetGroupViewModel.data.Id <= 0 || isUndefined(newAssetGroupViewModel.data.Id)) {\r\n // Handling the common creation scenario where the main entity didn't get created. In this case all related entities will not be created as well and will generate errors.\r\n filteredErrors = removeReferencedEntityInvalidIdErrors(errors);\r\n }\r\n // Handling the concurrency scenario where while the user was deleting the association somebody else already deleted it\r\n filteredErrors = removeErrors(filteredErrors, isAudienceAssociationDoesntExistError);\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n filteredErrors,\r\n bulkUpsertAssetGroupSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n );\r\n\r\n return { assetGroupViewModel: newAssetGroupViewModel, originalAssetGroupViewModel: newOriginalAssetGroupViewModel, serverErrors };\r\n};\r\n\r\nexport const saveAssetGroupAndLinkedData = (\r\n {\r\n assetGroup: assetGroupViewModel,\r\n originalAssetGroup: originalAssetGroupViewModel,\r\n campaign,\r\n },\r\n {\r\n scenario,\r\n i18n,\r\n activity,\r\n activityLogger,\r\n serverContext,\r\n cid,\r\n aid,\r\n }\r\n) => viewModelToBulkModelForAssetGroup(i18n, serverContext, cid, aid, assetGroupViewModel, originalAssetGroupViewModel, campaign)\r\n .then((bulkModel) => {\r\n const modelToSave = {\r\n ...bulkModel,\r\n Campaign: pick(campaign, 'Id'),\r\n };\r\n return createOrUpdateAssetGroup(modelToSave);\r\n })\r\n .then((assetGroupModel) => {\r\n const { assetGroupViewModel: assetGroup, originalAssetGroupViewModel: originalAssetGroup } = bulkModelToViewModelForAssetGroup({\r\n i18n, scenario, activityLogger, assetGroupViewModel, originalAssetGroupViewModel, assetGroupModel, serverContext,\r\n });\r\n const data = {\r\n assetGroup,\r\n originalAssetGroup,\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n if (activity) {\r\n activity.signal('onAssetGroupCreationSucceeded');\r\n }\r\n\r\n return data;\r\n }, (bulkOrSystemError) => {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity: assetGroupModel, errors } = bulkOrSystemError;\r\n const { assetGroupViewModel: assetGroup, originalAssetGroupViewModel: originalAssetGroup, serverErrors } = bulkModelToViewModelForAssetGroup({\r\n i18n,\r\n scenario,\r\n activityLogger,\r\n assetGroupViewModel,\r\n originalAssetGroupViewModel,\r\n assetGroupModel,\r\n serverContext,\r\n errors,\r\n });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n const res = {\r\n assetGroup,\r\n originalAssetGroup,\r\n ...getErrorsPlaceholders(),\r\n serverErrors,\r\n };\r\n if (isEmpty(serverErrors)) {\r\n return Promise.resolve(res);\r\n }\r\n return Promise.reject(res);\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`Asset group bulk upsert system error: ${unexpectedBulkErrorToString(bulkOrSystemError)}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n assetGroup: assetGroupViewModel,\r\n originalAssetGroup: originalAssetGroupViewModel,\r\n ...getErrorsPlaceholders(),\r\n serverErrors: [genericApiError],\r\n });\r\n });\r\n","import { map, pick, isEmpty, chain, pluck, difference, findWhere, get } from 'underscore';\r\nimport { CampaignCriterion } from '@bingads-webui/campaign-odata-schemas';\r\nimport { modelToViewModelDayTimeTargets, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { getBundleCountriesAndBundleLocationCriterions, shouldSelectBundleOption, parseLocationTargets, convertLocationStateToLocationSchemaCampaign, getLocationIntent } from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { minuteMap } from '../common/constants';\r\n\r\nexport const initialCampaignCriterionsViewModel = {\r\n data: [],\r\n isValid: true,\r\n isDirty: false,\r\n};\r\n\r\n\r\nconst whitelistedSchemaPropertyKeys = Object.keys(CampaignCriterion.properties);\r\n\r\nexport const viewModelToModelForCampaignCriterions = (campaignCriterionsViewModel) => {\r\n const model = pick(campaignCriterionsViewModel.data, whitelistedSchemaPropertyKeys);\r\n return model;\r\n};\r\n\r\nexport const modelToViewModelForCampaignCriterions = (campaignCriterionsModel) => {\r\n const data = pick(campaignCriterionsModel, whitelistedSchemaPropertyKeys);\r\n const campaignCriterionsViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return campaignCriterionsViewModel;\r\n};\r\n\r\nexport const viewModelToBulkModelForCampaignCriterions = (campaignModel, campaignCriterionsViewModel) => {\r\n const campaignCriterionsModel = viewModelToModelForCampaignCriterions(campaignCriterionsViewModel);\r\n const campaignCriterionsBulkUpserModel = map(\r\n campaignCriterionsModel,\r\n campaignCriterionModel => ({ ...campaignCriterionModel, Campaign: { Id: campaignModel.Id } })\r\n );\r\n\r\n return campaignCriterionsBulkUpserModel;\r\n};\r\n\r\nexport const modelToViewModelForLocationTargets = ({\r\n model, bundleCountries, campaignId,\r\n}) => {\r\n const {\r\n locations,\r\n intentId,\r\n intentOption,\r\n } = parseLocationTargets(model, 'campaign', campaignId);\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n return {\r\n locationTargets: {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n bidMode: false,\r\n useParentLevel: locations.length === 0,\r\n },\r\n };\r\n};\r\n\r\nexport const modelToViewModelForDayTimeTargets = ({\r\n model,\r\n}) => {\r\n const campaignDayTimeRanges = modelToViewModelDayTimeTargets(model);\r\n return {\r\n adSchedules: {\r\n dayTimeRanges: campaignDayTimeRanges,\r\n },\r\n };\r\n};\r\n\r\nexport const bulkModelToViewModelForDayTimeTargets = ({\r\n criterions,\r\n}) => {\r\n const schedulingRows = [];\r\n\r\n chain(criterions)\r\n .filter(criterion => criterion.CriterionType === 'DayTime')\r\n .each((criterion) => {\r\n schedulingRows.push({\r\n Id: criterion.Id,\r\n Day: criterion.Criterion.DayTimeCriterion.Day,\r\n StartHour: criterion.Criterion.DayTimeCriterion.FromHour,\r\n StartMinute: minuteMap[criterion.Criterion.DayTimeCriterion.FromMinute],\r\n EndHour: criterion.Criterion.DayTimeCriterion.ToHour,\r\n EndMinute: minuteMap[criterion.Criterion.DayTimeCriterion.ToMinute],\r\n });\r\n })\r\n .value();\r\n\r\n return {\r\n adSchedules: {\r\n dayTimeRanges: schedulingRows,\r\n },\r\n };\r\n};\r\n\r\nexport const modelToViewModelForCampaignNegativeWebpages = ({\r\n model,\r\n}) => ({\r\n finalUrlExpansions: map(model, campaignNegativeWebpage => ({\r\n Id: campaignNegativeWebpage.Id,\r\n Criterion: {\r\n WebPage: {\r\n ...campaignNegativeWebpage.Criterion,\r\n },\r\n },\r\n })),\r\n});\r\n\r\nexport const bulkModelToViewModelForCampaignNegativeWebpages = ({\r\n model,\r\n}) => ({\r\n finalUrlExpansions:\r\n chain(model)\r\n .filter(campaignNegativeWebpage => campaignNegativeWebpage.Status !== 'Deleted')\r\n .map(campaignNegativeWebpage => ({\r\n Id: campaignNegativeWebpage.Id,\r\n Criterion: {\r\n ...campaignNegativeWebpage.Criterion,\r\n },\r\n }))\r\n .value(),\r\n});\r\n\r\nexport const bulkModelToViewModelForLocationTargets = ({\r\n locationTargetsModel, bundleCountries,\r\n}) => {\r\n const locations = locationTargetsModel\r\n .filter(criterion => criterion.Criterion.Type === 'Radius' || criterion.Criterion.Type === 'Location');\r\n const intent = locationTargetsModel.find(criterion => criterion.Criterion.Type === 'LocationIntentCriterion');\r\n const intentId = intent ? intent.Id : null;\r\n const intentOption = intent ? getLocationIntent(intent.Criterion.LocationIntentCriterion.IntentOption) : null;\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n return {\r\n locationTargets: {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n bidMode: false,\r\n useParentLevel: locations.length === 0,\r\n },\r\n };\r\n};\r\n\r\nexport const viewModelToBulkModelForLocationTargets = (campaignViewModel, bundleLocationCriterions) => {\r\n const bulkUpsertModel = convertLocationStateToLocationSchemaCampaign(\r\n campaignViewModel.data.locationTargets,\r\n bundleLocationCriterions,\r\n {\r\n ...campaignViewModel.data,\r\n bidStrategy: {\r\n option: '',\r\n },\r\n name: {\r\n value: campaignViewModel.data.Name,\r\n },\r\n }\r\n );\r\n return bulkUpsertModel;\r\n};\r\n\r\nexport const viewModelToBulkModelForAdSchedules = (campaignViewModel) => {\r\n const targets = campaignViewModel.data.adSchedulesBulkUpsert || [];\r\n return targets.map((criterion) => {\r\n const Status = isEmpty(criterion) ? 'Active' : criterion.Status;\r\n if (campaignViewModel.data.Id) {\r\n return {\r\n ...criterion,\r\n Status,\r\n Campaign: {\r\n Id: campaignViewModel.data.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n Status,\r\n CampaignName: campaignViewModel.data.Name,\r\n };\r\n });\r\n};\r\n\r\nexport const viewModelToBulkModelFoFinalUrlExpansions = (campaignViewModel) => {\r\n let autoTargets = campaignViewModel.data.finalUrlExpansionsBulkUpsert || [];\r\n autoTargets = autoTargets\r\n .filter(target => target.Id || target.Status !== 'Deleted')\r\n .map((target) => {\r\n const Status = !target.Status ? 'Active' : target.Status;\r\n\r\n if (campaignViewModel.data.Id) {\r\n return {\r\n ...{\r\n Criterion: {\r\n ...target.Criterion,\r\n Type: 'NegativeWebpage',\r\n },\r\n },\r\n Status,\r\n Campaign: {\r\n Id: campaignViewModel.data.Id,\r\n },\r\n Id: target.Id,\r\n };\r\n }\r\n return {\r\n ...{\r\n Criterion: {\r\n ...target.Criterion,\r\n Type: 'NegativeWebpage',\r\n },\r\n },\r\n Status,\r\n CampaignName: campaignViewModel.data.Name,\r\n Id: target.Id,\r\n };\r\n });\r\n return {\r\n CampaignNegativeWebpages: autoTargets,\r\n };\r\n};\r\n\r\nexport const viewModelToBulkModelForFinalUrlExpansions = (campaignViewModel, originalCampaignViewModel) => {\r\n // Ignore changes of final url exclusions if the option is opt-out.\r\n if (campaignViewModel.data.finalUrlExpansionOptOut) return {};\r\n\r\n // Workaround for keeping current final url implementation until the new control is fully released.\r\n if (!isEmpty(campaignViewModel.data.finalUrlExpansionsBulkUpsert)) return viewModelToBulkModelFoFinalUrlExpansions(campaignViewModel);\r\n\r\n const newFinalUrlExpansions = get(campaignViewModel, ['data', 'finalUrlExpansions'], []);\r\n const originalFinalUrlExpansions = get(originalCampaignViewModel, ['data', 'finalUrlExpansions'], []);\r\n\r\n function transformObject(target) {\r\n const status = !target.Status ? 'Active' : target.Status;\r\n const baseObject = {\r\n Criterion: {\r\n ...target.Criterion,\r\n Type: 'NegativeWebpage',\r\n },\r\n Status: status,\r\n Id: target.Id,\r\n };\r\n if (campaignViewModel.data.Id) {\r\n return { ...baseObject, Campaign: { Id: campaignViewModel.data.Id } };\r\n }\r\n return { ...baseObject, CampaignName: campaignViewModel.data.Name };\r\n }\r\n\r\n const newIds = pluck(newFinalUrlExpansions, 'Id');\r\n const originalIds = pluck(originalFinalUrlExpansions, 'Id');\r\n const deletedIds = difference(originalIds, newIds);\r\n\r\n const deletedTargets = deletedIds.map((id) => {\r\n const target = findWhere(originalFinalUrlExpansions, { Id: id });\r\n return transformObject({ ...target, Status: 'Deleted' });\r\n });\r\n const addedTargets = newFinalUrlExpansions.filter(target => !target.Id).map(transformObject);\r\n\r\n return {\r\n CampaignNegativeWebpages: [\r\n ...deletedTargets,\r\n ...addedTargets,\r\n ],\r\n };\r\n};\r\n\r\nexport const loadBundleCountries = ({\r\n cid,\r\n aid,\r\n serverContext,\r\n}) => {\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n const market = serverContext ? serverContext.CurrentUser.Market : 'US';\r\n const language = 'All';\r\n\r\n return getBundleCountriesAndBundleLocationCriterions(cid, aid, lcid, language, market);\r\n};\r\n","import { pick, extend, chain, contains, pluck, isString, isArray, findWhere, isEmpty, reduce, filter, find } from 'underscore';\r\nimport { readCampaign } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { convertToMTFormat, Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\nimport {\r\n modelToViewModelForLocationTargets,\r\n modelToViewModelForDayTimeTargets,\r\n bulkModelToViewModelForLocationTargets,\r\n bulkModelToViewModelForDayTimeTargets,\r\n modelToViewModelForCampaignNegativeWebpages,\r\n bulkModelToViewModelForCampaignNegativeWebpages\r\n} from './campaign-criterions';\r\nimport { initialCampaignData, CampaignNegativeReferenceId, initialBrandExclusionsData } from '../common/constants';\r\n\r\nexport const initialCampaignViewModel = {\r\n data: initialCampaignData,\r\n isValid: false,\r\n isDirty: false,\r\n};\r\n\r\nexport const initialBrandExclusionsViewModel = {\r\n data: initialBrandExclusionsData,\r\n isDirty: false,\r\n};\r\n\r\nconst whitelistedSchemaPropertyKeysForModel = [\r\n 'Notes', 'Budget', 'Id', 'Name', 'TimeZone', 'BidStrategyName', 'Status',\r\n 'DeliveryStatus', 'DeliveryStatusDetails', 'CampaignType', 'CampaignSubType',\r\n 'HasAuctionInsight', 'IsBidLandscapeAvailable', 'TrackingUrlTemplate',\r\n 'FinalUrlSuffix', 'UrlCustomParameters', 'BiddingScheme', 'NativeBidAdjustment',\r\n 'CampaignSettings', 'DisplayBiddingStrategyType',\r\n 'DisplayBiddingStrategyMaxCpc', 'DisplayBiddingStrategyTargetCpa', 'Languages',\r\n 'ExperimentId', 'BaseCampaignName', 'TargetSetting',\r\n 'AdScheduleUseSearcherTimeZone', 'AvailableInsightTypeIds',\r\n 'MultiMediaAdBidAdjustment', 'DisclaimerAdsEnabled', 'IsBSREnabled', 'BSRAdDistribution',\r\n // 'CampaignCashback', 'KeywordVariantMatchEnabled',\r\n];\r\n\r\nconst whitelistedSchemaPropertyKeys = whitelistedSchemaPropertyKeysForModel.concat(['CampaignConversionGoal']);\r\n\r\nexport const modelToViewModelForConversionGoals = (campaignModel) => {\r\n const hasCampaignLevelGoals = campaignModel.CampaignConversionGoal && campaignModel.CampaignConversionGoal.Goals\r\n && campaignModel.CampaignConversionGoal.Goals.length > 0;\r\n return {\r\n conversionGoals: {\r\n originalConversionGoals: campaignModel.CampaignConversionGoal.Goals,\r\n goalSelection: campaignModel.CampaignConversionGoal.Goals,\r\n goalScopeSelection: hasCampaignLevelGoals ?\r\n Scopes.CAMPAIGN : Scopes.ACCOUNT,\r\n },\r\n };\r\n};\r\n\r\nexport const modelToViewModelForNewCustomerAcquisitionGoals = ({ accountSettings, campaignSettings }) => {\r\n const campaignSettingsModel = {\r\n goalId: null,\r\n bidOnlyMode: false,\r\n additionalConversionValue: null,\r\n };\r\n if (isArray(campaignSettings)) {\r\n const campaignGoal = findWhere(campaignSettings, { '@odata.type': '#Model.NewCustomerAcquisitionGoalSetting' });\r\n if (campaignGoal) {\r\n campaignSettingsModel.goalId = campaignGoal.NewCustomerAcquisitionGoalId;\r\n campaignSettingsModel.bidOnlyMode = campaignGoal.NewCustomerAcquisitionBidOnlyMode;\r\n campaignSettingsModel.additionalConversionValue = campaignGoal.AdditionalConversionValue;\r\n }\r\n }\r\n return {\r\n newCustomerAcquisitionOptOut: accountSettings === null || campaignSettingsModel.goalId === null || campaignSettingsModel.goalId === 'delete_value',\r\n newCustomerAcquisition: {\r\n campaignSettings: campaignSettingsModel,\r\n accountSettings: isEmpty(accountSettings)\r\n ? null\r\n : {\r\n goalId: accountSettings[0].Id,\r\n additionalConversionValue: accountSettings[0].AdditionalValue,\r\n audiences: accountSettings[0].Audiences,\r\n },\r\n },\r\n };\r\n};\r\n\r\nexport const modelToViewModelForCampaign = ({\r\n campaignModel,\r\n locationCriterionsModel,\r\n dayTimeCriterionsModel,\r\n campaignNegativeWebpagesModel,\r\n bundleCountries,\r\n newCustomerAcquisitionGoalsModel,\r\n}) => {\r\n let data = pick(campaignModel, [...whitelistedSchemaPropertyKeys, 'ImportProperties']);\r\n if (locationCriterionsModel) {\r\n data = extend(data, modelToViewModelForLocationTargets({\r\n model: locationCriterionsModel,\r\n bundleCountries,\r\n campaignId: campaignModel.Id,\r\n }));\r\n }\r\n\r\n if (dayTimeCriterionsModel) {\r\n data = extend(data, modelToViewModelForDayTimeTargets({\r\n model: dayTimeCriterionsModel,\r\n }));\r\n }\r\n\r\n if (campaignNegativeWebpagesModel) {\r\n data = extend(data, modelToViewModelForCampaignNegativeWebpages({\r\n model: campaignNegativeWebpagesModel,\r\n }));\r\n }\r\n\r\n if (newCustomerAcquisitionGoalsModel) {\r\n data = extend(data, modelToViewModelForNewCustomerAcquisitionGoals({\r\n accountSettings: newCustomerAcquisitionGoalsModel,\r\n campaignSettings: campaignModel.CampaignSettings,\r\n }));\r\n }\r\n\r\n if (campaignModel.CampaignSettings && campaignModel.CampaignSettings[0] && campaignModel.CampaignSettings[0]['@odata.type'] === '#Model.ShoppingSettings') {\r\n data.ProviderId = campaignModel.CampaignSettings[0].ProviderId;\r\n data.SalesCountry = campaignModel.CampaignSettings[0].SalesCountry;\r\n data.FeedLabel = campaignModel.CampaignSettings[0].FeedLabel;\r\n data.IsFeedFiltered = campaignModel.CampaignSettings[0].SalesCountry || campaignModel.CampaignSettings[0].FeedLabel;\r\n data.LocalInventoryAdsEnabled = campaignModel.CampaignSettings[0].LocalInventoryAdsEnabled;\r\n }\r\n\r\n // if (campaignModel.BiddingScheme) {\r\n // data.BiddingScheme.ManualCpc = campaignModel.BiddingScheme.ManualCPC;\r\n // }\r\n\r\n if (isArray(campaignModel.CampaignSettings)) {\r\n const perfMaxCampaignSetting = findWhere(campaignModel.CampaignSettings, { '@odata.type': '#Model.PerformanceMaxSetting' });\r\n if (perfMaxCampaignSetting) {\r\n data.finalUrlExpansionOptOut = perfMaxCampaignSetting.FinalUrlExpansionOptOut;\r\n data.autoGeneratedTextOptOut = perfMaxCampaignSetting.AutoGeneratedTextOptOut;\r\n data.autoGeneratedImageOptOut = perfMaxCampaignSetting.AutoGeneratedImageOptOut;\r\n data.costPerSaleOptOut = perfMaxCampaignSetting.CostPerSaleOptOut;\r\n }\r\n }\r\n\r\n if (isArray(campaignModel.CampaignSettings)) {\r\n const perfMaxSelectCampaignSetting = findWhere(campaignModel.CampaignSettings, { '@odata.type': '#Model.PerformanceMaxSelectSetting' });\r\n if (perfMaxSelectCampaignSetting) {\r\n data.IsBSREnabled = perfMaxSelectCampaignSetting.IsBSREnabled;\r\n data.BSRAdDistribution = perfMaxSelectCampaignSetting.BSRAdDistribution;\r\n }\r\n }\r\n\r\n data = extend(data, modelToViewModelForConversionGoals(campaignModel));\r\n\r\n if (campaignModel.Status === 'UserPaused') {\r\n data.Status = 'Paused'; // if we send back userpaused mt treats it as active, we explicitly need to send paused\r\n }\r\n\r\n const campaignViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return campaignViewModel;\r\n};\r\n\r\nexport const bulkModelToViewModelForConversionGoals = ({\r\n campaignModel,\r\n originalCampaignViewModel,\r\n errors = [],\r\n}) => {\r\n const conversionGoalsBulkModel = campaignModel.CampaignConversionGoalAssociations;\r\n const errorKey = 'Client Id';\r\n const originalGoalSelection =\r\n chain(conversionGoalsBulkModel)\r\n .filter(goal => !contains(pluck(errors, errorKey), goal[errorKey]))\r\n .filter(goal => goal.Action === 'Add')\r\n .map(goal => ({\r\n Id: goal.GoalId,\r\n }))\r\n .value();\r\n return {\r\n conversionGoals: {\r\n ...originalCampaignViewModel.data.conversionGoals,\r\n originalConversionGoals: originalGoalSelection,\r\n },\r\n };\r\n};\r\n\r\nconst and = (predicate1, predicate2) => item => predicate1(item) && predicate2(item);\r\nconst or = (predicate1, predicate2) => item => predicate1(item) || predicate2(item);\r\nconst not = predicate => item => !predicate(item);\r\nconst errorIs = errorCode => error => error.Error === errorCode;\r\nconst clientIdIs = clientId => error => error['Client Id'] === clientId;\r\n\r\nconst extractAndRestoreFailedBrandListAssociations = (errors, BrandListsAssociations) => {\r\n const { savedAddedBrandListIds, savedDeletedBrandListIds, filteredErrors } =\r\n reduce(BrandListsAssociations, (acc, brandListAssociation) => {\r\n const brandListAssociationClientId = clientIdIs(brandListAssociation['Client Id']);\r\n\r\n const brandListAssociationErrors = filter(acc.filteredErrors, brandListAssociationClientId);\r\n if (isEmpty(brandListAssociationErrors)) {\r\n if (brandListAssociation.Status === 'Active') {\r\n acc.savedAddedBrandListIds.push(brandListAssociation.SharedEntityId);\r\n } else if (brandListAssociation.Status === 'Deleted') {\r\n acc.savedDeletedBrandListIds.push(brandListAssociation.SharedEntityId);\r\n }\r\n } else {\r\n const campaignServiceSharedEntityAssociationDoesNotExistError = errorIs('CampaignServiceSharedEntityAssociationDoesNotExist');\r\n\r\n // Some errors are non-blocking and should be filtered out\r\n // Case #1.1: Deleting an association that doesn't exist\r\n // Case #1.2: Deleting an association where both the association and the brand list are already deleted\r\n const associationDoesNotExistError = find(brandListAssociationErrors, campaignServiceSharedEntityAssociationDoesNotExistError);\r\n if (associationDoesNotExistError) {\r\n acc.filteredErrors = acc.filteredErrors.filter(not(or(\r\n and(campaignServiceSharedEntityAssociationDoesNotExistError, brandListAssociationClientId),\r\n and(errorIs('CampaignServiceSharedListIdInvalid'), brandListAssociationClientId)\r\n )));\r\n }\r\n\r\n // Case #2: Adding an association that already exists\r\n acc.filteredErrors = acc.filteredErrors\r\n .filter(not(and(errorIs('CampaignServiceSharedEntityAssociationDuplicate'), brandListAssociationClientId)));\r\n }\r\n return acc;\r\n }, { savedAddedBrandListIds: [], savedDeletedBrandListIds: [], filteredErrors: errors });\r\n\r\n return {\r\n savedAddedBrandListIds, savedDeletedBrandListIds, filteredErrors,\r\n };\r\n};\r\n\r\nexport const bulkModelToViewModelForBrandExclusions = ({ errors = [], campaignModel }) => {\r\n const { BrandListsAssociations = [] } = campaignModel;\r\n const {\r\n savedAddedBrandListIds, savedDeletedBrandListIds, filteredErrors,\r\n } = extractAndRestoreFailedBrandListAssociations(errors, BrandListsAssociations);\r\n\r\n return {\r\n brandExclusions: {\r\n data: {\r\n savedAddedBrandListIds,\r\n savedDeletedBrandListIds,\r\n },\r\n isDirty: false,\r\n },\r\n errors: filteredErrors,\r\n };\r\n};\r\n\r\nconst bulkModelToViewModelForNewCustomerAcquisitionGoals = ({ campaignModel, originalCampaignViewModel }) => {\r\n if (!originalCampaignViewModel.data.newCustomerAcquisition) return {};\r\n return {\r\n newCustomerAcquisition: {\r\n accountSettings: originalCampaignViewModel.data.newCustomerAcquisition.accountSettings,\r\n campaignSettings: {\r\n goalId: campaignModel.NewCustomerAcquisitionGoalId,\r\n bidOnlyMode: campaignModel.NewCustomerAcquisitionBidOnlyMode,\r\n additionalConversionValue: campaignModel.AdditionalConversionValue === 'delete_value' ? null : campaignModel.AdditionalConversionValue,\r\n },\r\n },\r\n };\r\n};\r\n\r\nexport const bulkModelToViewModelForCampaign = ({\r\n campaignModel,\r\n originalCampaignViewModel,\r\n bundleCountries,\r\n errors,\r\n}) => {\r\n let data = pick(campaignModel, whitelistedSchemaPropertyKeys);\r\n if (data.Id && isString(data.Id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n data.Id = parseInt(data.Id, 10);\r\n }\r\n data = extend(data, bulkModelToViewModelForLocationTargets({\r\n locationTargetsModel: campaignModel.CampaignCriterions,\r\n bundleCountries,\r\n }));\r\n data = extend(data, bulkModelToViewModelForConversionGoals({\r\n campaignModel,\r\n originalCampaignViewModel,\r\n errors,\r\n }));\r\n data = extend(data, bulkModelToViewModelForDayTimeTargets({\r\n criterions: campaignModel.CampaignCriterions,\r\n }));\r\n data = extend(data, bulkModelToViewModelForCampaignNegativeWebpages({\r\n model: campaignModel.CampaignNegativeWebpages,\r\n }));\r\n\r\n data = extend(data, bulkModelToViewModelForNewCustomerAcquisitionGoals({\r\n campaignModel,\r\n originalCampaignViewModel,\r\n }));\r\n\r\n data = extend(data, {\r\n ProviderId: originalCampaignViewModel.data.ProviderId,\r\n SalesCountry: originalCampaignViewModel.data.SalesCountry,\r\n FeedLabel: originalCampaignViewModel.data.FeedLabel,\r\n LocalInventoryAdsEnabled: originalCampaignViewModel.data.LocalInventoryAdsEnabled,\r\n finalUrlExpansionOptOut: originalCampaignViewModel.data.finalUrlExpansionOptOut,\r\n autoGeneratedImageOptOut: originalCampaignViewModel.data.autoGeneratedImageOptOut,\r\n autoGeneratedTextOptOut: originalCampaignViewModel.data.autoGeneratedTextOptOut,\r\n costPerSaleOptOut: originalCampaignViewModel.data.costPerSaleOptOut,\r\n IsBSREnabled: originalCampaignViewModel.data.IsBSREnabled,\r\n BSRAdDistribution: originalCampaignViewModel.data.BSRAdDistribution,\r\n });\r\n\r\n data = extend(data, {\r\n pageFeeds: originalCampaignViewModel.data.pageFeeds,\r\n });\r\n\r\n const campaignViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return campaignViewModel;\r\n};\r\n\r\nconst viewModelToModelForUrlCustomParameters = urlCustomParametersViewModel =>\r\n urlCustomParametersViewModel.filter(({ Key }) => Key);\r\n\r\nexport const viewModelToBulkModelForNewCustomerAcquisitionGoals = (campaignViewModel) => {\r\n const { newCustomerAcquisition, newCustomerAcquisitionOptOut } = campaignViewModel.data;\r\n if (!newCustomerAcquisition) return null;\r\n\r\n const { accountSettings, campaignSettings } = newCustomerAcquisition;\r\n\r\n if (!accountSettings) return {};\r\n\r\n return {\r\n NewCustomerAcquisitionGoalId: newCustomerAcquisitionOptOut ? 'delete_value' : accountSettings.goalId,\r\n NewCustomerAcquisitionBidOnlyMode: campaignSettings.bidOnlyMode,\r\n AdditionalConversionValue: campaignSettings.bidOnlyMode || campaignSettings.additionalConversionValue === null ? 'delete_value' : campaignSettings.additionalConversionValue,\r\n };\r\n};\r\n\r\nexport const viewModelToBulkModelForCampaign = (campaignViewModel, brandExclusionsViewModel) => {\r\n const model = pick(campaignViewModel.data, whitelistedSchemaPropertyKeysForModel);\r\n\r\n if (model.UrlCustomParameters) {\r\n // only convert if we have UrlCustomParameters.\r\n model.UrlCustomParameters = viewModelToModelForUrlCustomParameters(model.UrlCustomParameters);\r\n }\r\n\r\n if (campaignViewModel.data.ProviderId) {\r\n model.ProviderId = campaignViewModel.data.ProviderId;\r\n model.Priority = 'Low';\r\n if (campaignViewModel.data.FeedLabel) {\r\n model.FeedLabel = campaignViewModel.data.FeedLabel;\r\n } else if (campaignViewModel.data.SalesCountry) {\r\n model.SalesCountry = campaignViewModel.data.SalesCountry;\r\n }\r\n const isEditMode = campaignViewModel.data.Id && campaignViewModel.data.Id > 0;\r\n if (isEditMode) {\r\n if (!campaignViewModel.data.FeedLabel) {\r\n model.FeedLabel = 'delete_value';\r\n }\r\n if (!campaignViewModel.data.SalesCountry) {\r\n model.SalesCountry = 'delete_value';\r\n }\r\n }\r\n\r\n model.LocalInventoryAdsEnabled = campaignViewModel.data.LocalInventoryAdsEnabled;\r\n }\r\n\r\n model.AutoGeneratedImageOptOut = campaignViewModel.data.autoGeneratedImageOptOut;\r\n model.AutoGeneratedTextOptOut = campaignViewModel.data.autoGeneratedTextOptOut;\r\n model.FinalUrlExpansionOptOut = campaignViewModel.data.finalUrlExpansionOptOut;\r\n\r\n model.CostPerSaleOptOut = campaignViewModel.data.costPerSaleOptOut;\r\n\r\n if (isArray(campaignViewModel.data.pageFeeds)) {\r\n model.PageFeedIds = campaignViewModel.data.pageFeeds.map(pageFeed => pageFeed.key);\r\n }\r\n\r\n if (isArray(brandExclusionsViewModel.data.deletedBrandListIds) && !isEmpty(brandExclusionsViewModel.data.deletedBrandListIds)) {\r\n model.BrandListsAssociations = [\r\n ...model.BrandListsAssociations || [],\r\n ...brandExclusionsViewModel.data.deletedBrandListIds.map(brandListId => ({\r\n Id: brandListId, SharedEntityId: brandListId, EntityId: campaignViewModel.data.Id || CampaignNegativeReferenceId, Status: 'Deleted',\r\n })),\r\n ];\r\n }\r\n if (isArray(brandExclusionsViewModel.data.addedBrandListIds) && !isEmpty(brandExclusionsViewModel.data.addedBrandListIds)) {\r\n model.BrandListsAssociations = [\r\n ...model.BrandListsAssociations || [],\r\n ...brandExclusionsViewModel.data.addedBrandListIds.map(brandListId => ({\r\n Id: brandListId, SharedEntityId: brandListId, EntityId: campaignViewModel.data.Id || CampaignNegativeReferenceId, Status: 'Active',\r\n })),\r\n ];\r\n }\r\n\r\n if (!campaignViewModel.data.Id) {\r\n model.Id = CampaignNegativeReferenceId;\r\n }\r\n return model;\r\n};\r\n\r\nexport const viewModelToModelForCampaign = (campaignViewModel) => {\r\n const model = pick(campaignViewModel.data, whitelistedSchemaPropertyKeysForModel);\r\n if (campaignViewModel.data.ProviderId) {\r\n model.CampaignSettings = {\r\n ProviderId: campaignViewModel.data.ProviderId,\r\n LocalInventoryAdsEnabled: campaignViewModel.data.LocalInventoryAdsEnabled,\r\n SalesCountry: campaignViewModel.data.SalesCountry,\r\n FeedLabel: campaignViewModel.data.FeedLabel,\r\n };\r\n }\r\n return model;\r\n};\r\n\r\nexport const viewModelToBulkModelForConversionGoals = (campaignViewModel, campaignId) => {\r\n const { conversionGoals } = campaignViewModel.data;\r\n return convertToMTFormat(\r\n campaignId,\r\n conversionGoals.goalScopeSelection,\r\n conversionGoals.originalConversionGoals,\r\n conversionGoals.goalSelection,\r\n true\r\n );\r\n};\r\n\r\nexport const loadCampaign = (cid, aid, campaignId) =>\r\n readCampaign(cid, aid, campaignId);\r\n\r\nexport const loadCampaignAsViewModel = (cid, aid, campaignId) =>\r\n loadCampaign(cid, aid, campaignId)\r\n .then(campaignModel => modelToViewModelForCampaign({\r\n campaignModel,\r\n }));\r\n","import { getPromotionDataFormatConfig } from '@bingads-webui-campaign/promotion-extension';\r\nimport { convertCurrencyCode } from '@bingads-webui-campaign-legacy/adextension-price';\r\nimport { UAPAdExtensionType as EAdExtensionType } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { readExtensionAssociations } from '@bingads-webui-campaign-react/perf-max-data';\r\n\r\nimport { SupportedExtensionPreviewTypes } from '../common/constants';\r\n\r\n\r\nexport const promotionFormatter = (i18n, promotion) => {\r\n const {\r\n OccasionI18nKeys,\r\n ItemPreviewI18nKeys,\r\n getPromotionTypeForModel,\r\n getPromotionDetailTypeForModel,\r\n Occasion,\r\n PromotionItem,\r\n } = getPromotionDataFormatConfig(promotion);\r\n\r\n const promotionType = getPromotionTypeForModel(promotion);\r\n let promotionTypeI18nKey;\r\n let promotionTypeI18nData;\r\n switch (promotionType) {\r\n case 'UptoMonetaryDiscount':\r\n promotionTypeI18nKey = ItemPreviewI18nKeys['Up to {{monetaryDiscount}} off'];\r\n promotionTypeI18nData = { monetaryDiscount: i18n.formatCurrency(promotion.MoneyAmountOff, promotion.CurrencyCode) };\r\n break;\r\n case 'MonetaryDiscount':\r\n promotionTypeI18nKey = ItemPreviewI18nKeys['{{monetaryDiscount}} off'];\r\n promotionTypeI18nData = { monetaryDiscount: i18n.formatCurrency(promotion.MoneyAmountOff, promotion.CurrencyCode) };\r\n break;\r\n case 'UptoPercentDiscount':\r\n promotionTypeI18nKey = ItemPreviewI18nKeys['Up to {{percentDiscount}} off'];\r\n promotionTypeI18nData = { percentDiscount: i18n.formatPercent(promotion.PercentOff / 100) };\r\n break;\r\n case 'PercentDiscount':\r\n promotionTypeI18nKey = ItemPreviewI18nKeys['{{percentDiscount}} off'];\r\n promotionTypeI18nData = { percentDiscount: i18n.formatPercent(promotion.PercentOff / 100) };\r\n break;\r\n default:\r\n promotionTypeI18nKey = '';\r\n promotionTypeI18nData = {};\r\n }\r\n const promotionTypeFormatted = i18n.getString(promotionTypeI18nKey, promotionTypeI18nData);\r\n\r\n const promotionDetail = getPromotionDetailTypeForModel(promotion);\r\n let promotionDetailI18nKey = '';\r\n let promotionDetailI18nData;\r\n let promotionDetailFormatted = '';\r\n const hasPromotionDetail = promotionDetail !== 'None';\r\n if (hasPromotionDetail) {\r\n switch (promotionDetail) {\r\n case 'OnOrdersOver':\r\n promotionDetailI18nKey = ItemPreviewI18nKeys['On orders over {{amount}}'];\r\n promotionDetailI18nData = { amount: i18n.formatCurrency(promotion.OrdersOverAmount, promotion.CurrencyCode) };\r\n break;\r\n case 'PromotionCode':\r\n promotionDetailI18nKey = ItemPreviewI18nKeys['Code {{promotionCode}}'];\r\n promotionDetailI18nData = { promotionCode: promotion.PromotionCode };\r\n break;\r\n default:\r\n promotionDetailI18nKey = '';\r\n promotionDetailI18nData = {};\r\n }\r\n promotionDetailFormatted = i18n.getString(promotionDetailI18nKey, promotionDetailI18nData);\r\n }\r\n\r\n let dateRangeI18nKey = '';\r\n let dateRangeI18nData;\r\n let startDateFormatted = '';\r\n let endDateFormatted = '';\r\n function formatISODateString(isoDatetimeString) {\r\n const dateToUse = i18n.parseDate(\r\n isoDatetimeString.substring(0, 10),\r\n {\r\n raw: 'yyyy-MM-dd',\r\n timeZone: null,\r\n }\r\n );\r\n\r\n return i18n.formatDate(dateToUse, { skeleton: 'MMMd', timeZone: null });\r\n }\r\n\r\n let dateRangeFormatted = '';\r\n const hasDateRange = promotion.PromotionStartDate || promotion.PromotionEndDate;\r\n if (hasDateRange) {\r\n if (promotion.PromotionStartDate) {\r\n startDateFormatted = formatISODateString(promotion.PromotionStartDate);\r\n }\r\n if (promotion.PromotionEndDate) {\r\n endDateFormatted = formatISODateString(promotion.PromotionEndDate);\r\n }\r\n if (startDateFormatted && endDateFormatted) {\r\n if (startDateFormatted !== endDateFormatted) {\r\n dateRangeI18nKey = ItemPreviewI18nKeys['Valid {{startDate}} - {{endDate}}'];\r\n dateRangeI18nData = { startDate: startDateFormatted, endDate: endDateFormatted };\r\n } else {\r\n dateRangeI18nKey = ItemPreviewI18nKeys['Valid {{date}}'];\r\n dateRangeI18nData = { date: startDateFormatted };\r\n }\r\n } else if (startDateFormatted) {\r\n dateRangeI18nKey = ItemPreviewI18nKeys['Starts {{startDate}}'];\r\n dateRangeI18nData = { startDate: startDateFormatted };\r\n } else if (endDateFormatted) {\r\n dateRangeI18nKey = ItemPreviewI18nKeys['Ends {{endDate}}'];\r\n dateRangeI18nData = { endDate: endDateFormatted };\r\n }\r\n dateRangeFormatted = i18n.getString(dateRangeI18nKey, dateRangeI18nData);\r\n }\r\n\r\n return {\r\n Occasion: i18n.getString(OccasionI18nKeys[Occasion] || Occasion),\r\n PromotionType: promotionTypeFormatted,\r\n PromotionDetail: promotionDetailFormatted,\r\n PromotionItem,\r\n DateRange: dateRangeFormatted,\r\n hasOccasion: Occasion !== 'None',\r\n hasPromotionDetail,\r\n hasDateRange,\r\n };\r\n};\r\n\r\nconst priceExtensionFormatter = price => ({\r\n ...price,\r\n Currency: convertCurrencyCode(price.CurrencyCode),\r\n});\r\n\r\nexport const getExtensionFormatters = i18n => ({\r\n [EAdExtensionType.Promotion]: promotion => promotionFormatter(i18n, promotion),\r\n [EAdExtensionType.Price]: price => priceExtensionFormatter(price),\r\n});\r\n\r\nconst getExtensionsFromResponse = (response) => {\r\n const { value } = response;\r\n return value.map(({ AdExtension }) => ({\r\n ...AdExtension,\r\n }));\r\n};\r\n\r\nexport const loadAdExtensionData = (cid, aid, campaignId) => {\r\n const payload = {\r\n gridDataParameters: {\r\n DateRange: {\r\n // Just want to get extension data and don't care BI data, so pass dummy date ranges.\r\n StartDate: '2024-05-05',\r\n EndDate: '2024-05-05',\r\n },\r\n },\r\n associationType: 'Campaign',\r\n };\r\n\r\n return Promise.all([\r\n readExtensionAssociations(cid, aid, campaignId, { ...payload, adExtensionTypes: [SupportedExtensionPreviewTypes.Sitelink] }, 4),\r\n readExtensionAssociations(cid, aid, campaignId, { ...payload, adExtensionTypes: [SupportedExtensionPreviewTypes.Callout] }, 4),\r\n readExtensionAssociations(cid, aid, campaignId, { ...payload, adExtensionTypes: [SupportedExtensionPreviewTypes.Promotion] }, 1),\r\n readExtensionAssociations(cid, aid, campaignId, { ...payload, adExtensionTypes: [SupportedExtensionPreviewTypes.StructuredSnippet] }, 1),\r\n readExtensionAssociations(cid, aid, campaignId, { ...payload, adExtensionTypes: [SupportedExtensionPreviewTypes.Price] }, 8),\r\n ]).then(([sitelinkExtensions, calloutExtensions, promotionExtensions, structuredSnippetExtensions, priceExtensions]) => ({\r\n SiteLink: getExtensionsFromResponse(sitelinkExtensions),\r\n Callout: getExtensionsFromResponse(calloutExtensions),\r\n Promotion: getExtensionsFromResponse(promotionExtensions),\r\n StructuredSnippet: getExtensionsFromResponse(structuredSnippetExtensions),\r\n Price: getExtensionsFromResponse(priceExtensions),\r\n }));\r\n};\r\n","import { isEmpty, result, noop } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { assign } from 'xstate';\r\nimport { log } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { logRecommendations } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { logCopilotRecommendations } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { getErrorsPlaceholders, loadAssetGroup, saveAssetGroupAndLinkedData, viewModelToModelForAssetGroup } from '../../model/asset-group';\r\nimport { loadCampaign, modelToViewModelForCampaign, viewModelToModelForCampaign } from '../../model/campaign';\r\nimport { loadAdExtensionData } from '../../model/ad-extension';\r\nimport { ScenarioName } from '../../common/constants';\r\n\r\nconst hasCampaignData = context =>\r\n Boolean(result(context, ['stepsData', 'campaign', 'Id']));\r\n\r\nconst getCampaignId = context =>\r\n result(context, ['stepsData', 'campaign', 'Id']) || // when coming from the Campaign settings step\r\n // result(context, ['data', 'campaign', 'data', 'Id']) || // when in the Asset group creation and settings flows and already loaded and cached the campaign's data\r\n result(context, ['stepsData', 'campaignId']); // when in the Asset group creation and settings flows\r\n\r\nconst getAssetGroupId = context =>\r\n result(context, ['data', 'assetGroup', 'data', 'Id']) || // when in the Campaign creation flow\r\n result(context, ['stepsData', 'assetGroup', 'Id']) || // when in the Asset group creation or settings flows\r\n result(context, ['stepsData', 'assetGroupId']); // when in the Asset group settings flows\r\n\r\n// FIXME: [User Story 4721721: PMax wizard perceived performance optimizations](https://msasg.visualstudio.com/Bing_Ads/_workitems/edit/4721721)\r\n// Always reloads the asset group. Optimization can be done at the EDM level\r\nexport const needsLoading = (/* context */) => true;\r\n\r\n/**\r\n * Loads step data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The step will be blocked until the promise resolves.\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n */\r\nexport const loadData = (context) => {\r\n const {\r\n cid, aid, permissions, scenarioName,\r\n } = context.stepsData;\r\n const campaignId = getCampaignId(context);\r\n if (!campaignId) {\r\n throw new Error('Asset group settings/creation page requires a campaign ID');\r\n }\r\n const assetGroupId = getAssetGroupId(context);\r\n if (context.stepsData.isEditing && !assetGroupId) {\r\n throw new Error('Asset group settings page requires an asset group ID');\r\n }\r\n const {\r\n PmaxExtensionPreview,\r\n PMaxNewAspectRatios: isPMaxNewAspectRatiosEnabled,\r\n PMaxExcludeNewAspectRatios: isPMaxNewAspectRatiosExcluded,\r\n } = permissions.dynamic;\r\n const isLoadExtensionFromAPI = PmaxExtensionPreview && (scenarioName === ScenarioName.PerformanceMaxAssetGroupCreation || scenarioName === ScenarioName.PerformanceMaxAssetGroupSettings);\r\n\r\n const isSearchThemeEnabled = permissions && permissions.dynamic && permissions.dynamic.SearchThemes;\r\n const isUrlRulesEnabled = permissions && permissions.dynamic && permissions.dynamic.AssetGroupUrlRules;\r\n const isUrlRulesV2Enabled = permissions && permissions.dynamic && permissions.dynamic.AssetGroupUrlRulesV2;\r\n const isPMaxNewAspectRatios = isPMaxNewAspectRatiosEnabled && !isPMaxNewAspectRatiosExcluded;\r\n\r\n if (isPMaxNewAspectRatios) {\r\n log('[AssetGroupSetting] - New Aspect Ratios is enabled');\r\n }\r\n\r\n const loadPromises = {\r\n ...assetGroupId ? { assetGroup: loadAssetGroup(cid, aid, campaignId, assetGroupId, context.stepsData.i18n, isSearchThemeEnabled, isUrlRulesEnabled, isUrlRulesV2Enabled) } : {},\r\n // Full campaign entity is needed and will be loaded, if it's not loaded yet\r\n // and will be used not from `data` but from `stepsData` to simplify the \"get-campaign-data\" logic\r\n ...hasCampaignData(context) ? {} : {\r\n campaign: loadCampaign(cid, aid, campaignId)\r\n .then(campaignModel => modelToViewModelForCampaign({ campaignModel })),\r\n },\r\n ...isLoadExtensionFromAPI ? { extensionsAssociations: loadAdExtensionData(cid, aid, campaignId) } : {},\r\n };\r\n\r\n return Promise.props(loadPromises).then((data) => {\r\n log('Asset step data loaded, data=_', data);\r\n return {\r\n assetGroup: context.data.assetGroup,\r\n originalAssetGroup: { ...context.data.assetGroup, ...data.assetGroup },\r\n extensionsAssociations: context.data.extensionsAssociations,\r\n recommendationContext: context.data.recommendationContext,\r\n ...getErrorsPlaceholders(),\r\n ...data,\r\n };\r\n });\r\n};\r\n\r\nconst logRecommendationsFromContext = (context, assetGroup, originalAssetGroup) => {\r\n const {\r\n isEditing, aid, uid, campaign: { Id: campaignId },\r\n } = context.stepsData;\r\n const { activity, recommendationContext } = context.data;\r\n logRecommendations({\r\n recommendationContext,\r\n activity,\r\n aid,\r\n uid,\r\n campaignId,\r\n isEditing,\r\n assetGroup,\r\n originalAssetGroup,\r\n });\r\n\r\n logCopilotRecommendations({\r\n recommendationContext,\r\n assetGroup,\r\n isEditing,\r\n });\r\n};\r\n\r\nexport const saveData = (context) => {\r\n const assetGroupChanges = {\r\n assetGroup: context.data.assetGroup,\r\n originalAssetGroup: context.data.originalAssetGroup,\r\n campaign: context.stepsData.campaign,\r\n };\r\n\r\n const saveContext = {\r\n scenario: context.stepsData.scenarioName,\r\n activity: context.data.activity || { trace: noop },\r\n activityLogger: context.stepsData.scenario.createActivity('saveAssetGroupAndLinkedData'),\r\n i18n: context.stepsData.i18n,\r\n serverContext: context.stepsData.serverContext,\r\n cid: context.stepsData.cid,\r\n aid: context.stepsData.aid,\r\n };\r\n\r\n const { permissions } = context.stepsData;\r\n const {\r\n PMaxNewAspectRatios: isPMaxNewAspectRatiosEnabled,\r\n PMaxExcludeNewAspectRatios: isPMaxNewAspectRatiosExcluded,\r\n } = permissions.dynamic;\r\n const isPMaxNewAspectRatios = isPMaxNewAspectRatiosEnabled && !isPMaxNewAspectRatiosExcluded;\r\n\r\n if (isPMaxNewAspectRatios) {\r\n saveContext.activity.trace('[AssetGroupSetting] - New Aspect Ratios is enabled');\r\n }\r\n\r\n return saveAssetGroupAndLinkedData(assetGroupChanges, saveContext)\r\n .then((data) => {\r\n saveContext.activity.trace(`[PmaxWizard] saveData succeeded. StepId: ${context.id}`);\r\n logRecommendationsFromContext(context, viewModelToModelForAssetGroup(data.assetGroup), context.data.originalAssetGroup ? viewModelToModelForAssetGroup(context.data.originalAssetGroup) : {});\r\n return data;\r\n }).then(data => ({\r\n ...data,\r\n extensionsAssociations: context.data.extensionsAssociations,\r\n recommendationContext: context.data.recommendationContext,\r\n })).catch((errorData) => {\r\n saveContext.activity.trace(`[PmaxWizard] saveData failed. StepId: ${context.id}`);\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n ...errorData,\r\n extensionsAssociations: context.data.extensionsAssociations,\r\n recommendationContext: context.data.recommendationContext,\r\n });\r\n });\r\n};\r\n\r\nexport const clearErrors = assign({\r\n data: context => ({\r\n ...context.data,\r\n ...getErrorsPlaceholders(),\r\n }),\r\n});\r\n\r\nexport const isValid = context => context.data.assetGroup.isValid;\r\nexport const isDirty = context => context.data.assetGroup.isDirty;\r\nconst hasServerErrors = context => !isEmpty(context.data.serverErrors) || !isEmpty(context.data.systemErrors);\r\nexport const needsSaving = context => isDirty(context) || hasServerErrors(context);\r\n\r\nexport const patchStepsData = assign({\r\n stepsData: (context/* , event */) => ({\r\n ...context.stepsData,\r\n assetGroup: viewModelToModelForAssetGroup(context.data.assetGroup),\r\n // Full campaign entity is needed and will be loaded, if it's not loaded yet\r\n // and will be used not from `data` but from `stepsData` to simplify the \"get-campaign-data\" logic\r\n ...hasCampaignData(context) ? {} :\r\n { campaign: viewModelToModelForCampaign(context.data.campaign) },\r\n }),\r\n});\r\n","import { isEmpty, isEqual } from 'underscore';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\n\r\nexport const serverErrorsCompare = (prev, curr) => !(!isEmpty(curr) && !isEqual(prev, curr));\r\n\r\nexport const ServerValidatedRemainingCharsValidatedTextField = RemainingCharsValidatedTextField;\r\n","import { useContext, useCallback, useMemo, useState, useEffect } from 'react';\r\nimport { useSelector } from '@xstate/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport {\r\n isCanceling as isStateMachineCanceling,\r\n StepEvents,\r\n isSaving as isStateMachineSaving,\r\n} from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { legacyI18nOfListingGroup } from '@bingads-webui-campaign-react/listing-groups-page';\r\nimport { useExitWithoutSavingConfirmation } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { useImpulse, useIsMounted, usePrevProp } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { needsSaving } from './step-campaign-asset-group-impl';\r\nimport { ScenarioName } from '../../common/constants';\r\nimport { serverErrorsCompare } from '../shared';\r\n\r\nconst hideStepHeaderSelector = state => state.context.stepInfo.hideStepHeader;\r\nconst scenarioNameSelector = state => state.context.stepsData.scenarioName;\r\nconst permissionsSelector = state => state.context.stepsData.permissions;\r\nconst doesNeedSavingSelector = state => !isStateMachineCanceling(state) && needsSaving(state.context);\r\nconst currentLocaleSelector = state => state.context.stepsData.serverContext.CurrentLocale;\r\nconst campaignObjectiveSelector = state => state.context.stepsData.campaignObjective;\r\nconst campaignIdSelector = state => state.context.stepsData.campaign.Id;\r\nconst campaignNameSelector = state => state.context.stepsData.campaign.Name;\r\nconst campaignTimeZoneSelector = state => state.context.stepsData.campaign.TimeZone;\r\nconst campaignSettingsSelector = state => state.context.stepsData.campaign.CampaignSettings;\r\nconst assetGroupSelector = state => state.context.data.assetGroup;\r\nconst headlinesSelector = state => state.context.data.assetGroup.data.Headlines;\r\nconst longHeadlinesSelector = state => state.context.data.assetGroup.data.LongHeadlines;\r\nconst descriptionsSelector = state => state.context.data.assetGroup.data.Descriptions;\r\nconst path1Selector = state => state.context.data.assetGroup.data.Path1;\r\nconst path2Selector = state => state.context.data.assetGroup.data.Path2;\r\nconst finalMobileUrlsSelector = state => state.context.data.assetGroup.data.MobileFinalUrls;\r\nconst imagesSelector = state => state.context.data.assetGroup.data.Images;\r\nconst businessNameSelector = state => state.context.data.assetGroup.data.BusinessName;\r\nconst finalUrlsSelector = state => state.context.data.assetGroup.data.FinalUrls;\r\nconst finalUrlForRecommendationSelector = state => state.context.data.assetGroup.data.FinalUrlForRecommendation;\r\nconst adExtensionsDynamicFeaturesSelector = state => state.context.stepsData.adExtensionsDynamicFeatures;\r\nconst adExtensionsAssociationsFactorySelector = state => state.context.stepsData.adExtensionsAssociationsFactory;\r\nconst extensionsAssociationsSelector = state => state.context.data.extensionsAssociations;\r\nconst assetGroupURLRulesSelector = state => state.context.data.assetGroup.data.AssetGroupUrlTargets;\r\nconst assetGroupURLRulesOptionSelector = state => state.context.data.assetGroup.data.UrlRulesOption;\r\nconst audienceGroupSelector = state => state.context.data.assetGroup.data.AudienceGroup;\r\nconst originalAudienceGroupSelector = state => state.context.data.originalAssetGroup.data.AudienceGroup;\r\nconst listingGroupSelector = state => state.context.data.assetGroup.data.listingGroup;\r\nconst productFilterSelector = state => state.context.data.assetGroup.data.productFilter;\r\nconst searchThemesSelector = state => state.context.data.assetGroup.data.AssetGroupSearchThemes;\r\nconst aidSelector = state => state.context.stepsData.aid;\r\nconst cidSelector = state => state.context.stepsData.cid;\r\nconst serverErrorsSelector = state => state.context.data.serverErrors;\r\nconst systemErrorsSelector = state => state.context.data.systemErrors;\r\nconst invalidSaveAttemptSelector = state => state.context.invalidSaveAttempt;\r\nconst isEditingSelector = state => state.context.stepsData.isEditing;\r\nconst isSavingSelector = state => isStateMachineSaving(state);\r\nconst isCancelingSelector = state => isStateMachineCanceling(state);\r\n\r\nexport const useStepAssetGroupState = (stepService, activity) => {\r\n const isMounted = useIsMounted();\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap, legacyI18nOfListingGroup]), [i18n]);\r\n\r\n const hideStepHeader = useSelector(stepService, hideStepHeaderSelector);\r\n const scenarioName = useSelector(stepService, scenarioNameSelector);\r\n const locale = useSelector(stepService, currentLocaleSelector);\r\n const assetGroup = useSelector(stepService, assetGroupSelector);\r\n const finalUrls = useSelector(stepService, finalUrlsSelector);\r\n const finalUrlForRecommendation = useSelector(stepService, finalUrlForRecommendationSelector);\r\n const headlines = useSelector(stepService, headlinesSelector);\r\n const longHeadlines = useSelector(stepService, longHeadlinesSelector);\r\n const descriptions = useSelector(stepService, descriptionsSelector);\r\n const campaignId = useSelector(stepService, campaignIdSelector);\r\n const campaignName = useSelector(stepService, campaignNameSelector);\r\n const campaignTimeZone = useSelector(stepService, campaignTimeZoneSelector);\r\n const campaignObjective = useSelector(stepService, campaignObjectiveSelector);\r\n const campaignSettings = useSelector(stepService, campaignSettingsSelector);\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n const adExtensionsDynamicFeatures = useSelector(stepService, adExtensionsDynamicFeaturesSelector);\r\n const adExtensionsAssociationsFactory = useSelector(stepService, adExtensionsAssociationsFactorySelector);\r\n const extensionsAssociations = useSelector(stepService, extensionsAssociationsSelector);\r\n const urlPath1 = useSelector(stepService, path1Selector);\r\n const urlPath2 = useSelector(stepService, path2Selector);\r\n const finalMobileUrls = useSelector(stepService, finalMobileUrlsSelector);\r\n const urlRules = useSelector(stepService, assetGroupURLRulesSelector);\r\n const urlRulesOption = useSelector(stepService, assetGroupURLRulesOptionSelector);\r\n const images = useSelector(stepService, imagesSelector);\r\n const businessName = useSelector(stepService, businessNameSelector);\r\n const audienceGroup = useSelector(stepService, audienceGroupSelector);\r\n const originalAudienceGroup = useSelector(stepService, originalAudienceGroupSelector);\r\n const listingGroup = useSelector(stepService, listingGroupSelector);\r\n const searchThemes = useSelector(stepService, searchThemesSelector);\r\n const productFilter = useSelector(stepService, productFilterSelector);\r\n const aid = useSelector(stepService, aidSelector);\r\n const cid = useSelector(stepService, cidSelector);\r\n const serverErrors = useSelector(stepService, serverErrorsSelector);\r\n const systemErrors = useSelector(stepService, systemErrorsSelector);\r\n const invalidSaveAttempt = useSelector(stepService, invalidSaveAttemptSelector);\r\n const isEditing = useSelector(stepService, isEditingSelector);\r\n const isSaving = useSelector(stepService, isSavingSelector);\r\n const isCanceling = useSelector(stepService, isCancelingSelector);\r\n\r\n const doesNeedSaving = useSelector(stepService, doesNeedSavingSelector);\r\n\r\n const { suggestedObjectiveExtensions = [], otherObjectiveExtensions = [] } = useMemo(\r\n () => (scenarioName === ScenarioName.PerformanceMaxCampaignCreation ?\r\n adExtensionsAssociationsFactory.getObjectiveExtensions(\r\n permissions,\r\n { campaignType: 'PerformanceMax', campaignObjective }\r\n ) : {}),\r\n [scenarioName, permissions, campaignObjective, adExtensionsAssociationsFactory]\r\n );\r\n\r\n const [navigationConfirmationPrompt] = useExitWithoutSavingConfirmation(doesNeedSaving, stepService, i18n);\r\n\r\n const onAssetGroupValidation = useCallback((results) => {\r\n if (!isMounted.current) return;\r\n const { data: newAssetGroupData, ...restResults } = results;\r\n const dataPatch = {\r\n assetGroup: {\r\n ...assetGroup,\r\n data: {\r\n ...assetGroup.data,\r\n ...newAssetGroupData,\r\n },\r\n ...restResults,\r\n },\r\n activity,\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [isMounted, assetGroup, activity, stepService]);\r\n\r\n const onUpdateExtensionsAssociations = useCallback((extensionType, associations) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n extensionsAssociations: {\r\n ...extensionsAssociations,\r\n [extensionType]: associations,\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, extensionsAssociations, isMounted]);\r\n\r\n // Connecting UI layer's RecommendationContext to the step's state\r\n const onUpdateRecommendationsContext = useCallback((recommendationContext) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n recommendationContext,\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, isMounted]);\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n useEffect(() => {\r\n onUpdateRecommendationsContext(recommendationContext);\r\n }, [recommendationContext, onUpdateRecommendationsContext]);\r\n\r\n const onUpdateFinalUrls = useCallback((newFinalUrls) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n assetGroup: {\r\n ...assetGroup,\r\n data: {\r\n ...assetGroup.data,\r\n FinalUrls: newFinalUrls,\r\n },\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, assetGroup, isMounted]);\r\n\r\n const onUpdateSearchThemes = useCallback((newSearchThemes) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n assetGroup: {\r\n ...assetGroup,\r\n data: {\r\n ...assetGroup.data,\r\n AssetGroupSearchThemes: newSearchThemes,\r\n },\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, assetGroup, isMounted]);\r\n\r\n const onUpdateImageList = useCallback((imageList) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n assetGroup: {\r\n ...assetGroup,\r\n data: {\r\n ...assetGroup.data,\r\n Images: {\r\n ...assetGroup.data.Images,\r\n ImageList: imageList,\r\n ImageAssets: null,\r\n },\r\n },\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, assetGroup, isMounted]);\r\n\r\n const onClearAssets = useCallback(() => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n assetGroup: {\r\n ...assetGroup,\r\n data: {\r\n ...assetGroup.data,\r\n Images: {\r\n ...assetGroup.data.Images,\r\n ImageList: [],\r\n ImageAssets: null,\r\n },\r\n Headlines: {\r\n Headline0: '',\r\n Headline1: '',\r\n Headline2: '',\r\n },\r\n LongHeadlines: {\r\n LongHeadline0: '',\r\n },\r\n Descriptions: {\r\n Description0: '',\r\n Description1: '',\r\n },\r\n },\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, assetGroup, isMounted]);\r\n\r\n // eslint-disable-next-line no-bitwise\r\n const [, hasInvalidSaveAttemptChanged] = usePrevProp(invalidSaveAttempt | 0);\r\n const [, hasServerErrorsChanged] = usePrevProp(serverErrors, serverErrorsCompare);\r\n const areBeaconsActive = useImpulse(hasInvalidSaveAttemptChanged || hasServerErrorsChanged);\r\n\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n if (hasInvalidSaveAttemptChanged) {\r\n setShowAllValidationErrors(true);\r\n }\r\n\r\n const state = {\r\n isMounted,\r\n scenarioName,\r\n i18n,\r\n legacyI18n,\r\n locale,\r\n hideStepHeader,\r\n assetGroup,\r\n navigationConfirmationPrompt,\r\n campaignId,\r\n campaignName,\r\n campaignTimeZone,\r\n campaignObjective,\r\n campaignSettings,\r\n finalUrls,\r\n finalUrlForRecommendation,\r\n headlines,\r\n longHeadlines,\r\n descriptions,\r\n suggestedObjectiveExtensions,\r\n otherObjectiveExtensions,\r\n adExtensionsDynamicFeatures,\r\n adExtensionsAssociationsFactory,\r\n extensionsAssociations,\r\n urlPath1,\r\n urlPath2,\r\n finalMobileUrls,\r\n urlRules,\r\n urlRulesOption,\r\n images,\r\n businessName,\r\n audienceGroup,\r\n originalAudienceGroup,\r\n listingGroup,\r\n productFilter,\r\n searchThemes,\r\n aid,\r\n cid,\r\n permissions,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n systemErrors,\r\n isEditing,\r\n isSaving,\r\n isCanceling,\r\n };\r\n const api = {\r\n onAssetGroupValidation,\r\n onUpdateExtensionsAssociations,\r\n onUpdateFinalUrls,\r\n onUpdateImageList,\r\n onClearAssets,\r\n onUpdateSearchThemes,\r\n };\r\n\r\n return [state, api];\r\n};\r\n","const assetGroupControlsContainer = {\r\n width: '660px',\r\n marginRight: '40px',\r\n};\r\n\r\nexport const getAssetGroupStepStyles = (components, theme) => ({\r\n collapsiblePanel: {\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n marginLeft: '-8px', // compensate 8px padding on the left of icon\r\n color: theme.palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: theme.palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n },\r\n\r\n '& .panel-collapse': {\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n\r\n h3LabelOptional: {\r\n fontSize: 14,\r\n color: theme.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: theme.palette.neutralSecondary,\r\n },\r\n },\r\n\r\n assetGroupSettingsContentContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n '& .page-title': {\r\n marginBottom: '16px',\r\n },\r\n\r\n '& .page-description': {\r\n marginBottom: '32px',\r\n },\r\n\r\n '& .section-title': {\r\n marginTop: '28px',\r\n marginBottom: '8px',\r\n },\r\n\r\n '& .section-description': {\r\n marginBottom: '16px',\r\n },\r\n\r\n '& .asset-group-controls-container': {\r\n ...assetGroupControlsContainer,\r\n },\r\n\r\n '& .asset-group-controls-with-preview-container':\r\n {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'flex-start',\r\n\r\n '& .controls-affecting-preview-container': {\r\n ...assetGroupControlsContainer,\r\n },\r\n\r\n '& .asset-group-preview-container': {\r\n marginTop: '41px',\r\n position: 'sticky',\r\n top: '0px',\r\n },\r\n },\r\n },\r\n audienceWizard: {\r\n marginTop: 24,\r\n },\r\n});\r\n\r\n","import _ from 'underscore';\r\n\r\nconst textAssetFields = ['Headlines', 'LongHeadlines', 'Descriptions'];\r\n\r\n/**\r\n * Checks if an asset group has at least 1 image or text asset.\r\n * @param {Object} data - Asset group data.\r\n * @returns {boolean} - True if asset group has at least 1 asset, false otherwise.\r\n */\r\nexport function hasAssetsInAssetGroup(data) {\r\n const ImageList = _.get(data, ['Images', 'ImageList']);\r\n if (!_.isEmpty(ImageList)) {\r\n // asset group has at least 1 image, return true\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < textAssetFields.length; i += 1) {\r\n const key = textAssetFields[i];\r\n const values = _.values(data[key]);\r\n for (let j = 0; j < values.length; j += 1) {\r\n if (!_.isEmpty(values[j])) {\r\n // asset group has at least 1 text asset, return true\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n","import _, { noop, pick, constant, first, isArray, flatten, pluck } from 'underscore';\r\nimport React, { useCallback, useMemo, useRef, useState, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { Text, Stack, Separator } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n Collapse,\r\n collapseExpander,\r\n getPanelErrorProps,\r\n TextTitle,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n ValidatedFixedPanel,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { ValidationGroup, ErrorMessages, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withStoreFromProviderId, withStoreUrl } from '@bingads-webui-campaign-react/with-store-details';\r\nimport {\r\n FormErrorGroup, UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n entityIs, andComp, propertyIs, orComp, StandardControlAdapter,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup, FocusableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors, withContainerErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidatedLegacyDateSetting, getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\nimport { constants as ImageassetsConstants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { ValidatedUrlPath, ValidatedMobileUrl, getAdvancedUrlOptionsCardSummaryDetails, getFinalUrlWithPath } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { getTextCardSummaryDetails, getHeadlinesCardSummaryDetails, getLongHeadlinesCardSummaryDetails, getDescriptionsCardSummaryDetails, hasTextAssets } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport {\r\n ValidatedStoreBackedBusinessName,\r\n ValidatedFinalUrlWithRecommendations,\r\n HeadlineAssetCollection,\r\n LongHeadlineAssetCollection,\r\n DescriptionAssetCollection,\r\n MAX_INLINE_RECOMMENDATIONS_PER_PAGE,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { ValidatedLegacyCallToAction } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { AudienceWizard } from '@bingads-webui-campaign-react/audience-signals';\r\nimport {\r\n ValidatedImageExperienceWrapper,\r\n ImageListPortalContainerWithControlErrorHandling,\r\n LogoListPortalContainerWithControlErrorHandling,\r\n ImageListSummaryCardDetails,\r\n PerfMaxAdPreviewUAPL,\r\n hasImages,\r\n PerfMaxImageSuggestionCarousel,\r\n PMaxImageExperienceMaxImageCount,\r\n SuggestionViewImageCount\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { withStepLoadingShell } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { ValidatedListingGroups } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { getListingGroupDetails, getSearchThemeDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport {\r\n useRecommendations,\r\n withFinalUrlRecommendationUpdate,\r\n uniqAssetRecommendationsInThemes,\r\n RecommendationContext,\r\n} from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport {\r\n AssetEventFeature,\r\n AssetPropertyName,\r\n getCopilotRecommendationIdsFromThemes,\r\n getFormattedThemeForApplying,\r\n getUniqueAssetsFromThemes,\r\n useCopilotRecommendationSurvey,\r\n useEventLog,\r\n} from '@bingads-webui-campaign-react/copilot-common';\r\nimport {\r\n CopilotRecommendationBanner,\r\n CopilotRepositoryProvider,\r\n CopilotThemesRecommendationDialog,\r\n useBannerService,\r\n} from '@bingads-webui/inline-copilot';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { SearchThemeSelector } from '@bingads-webui-campaign-react/search-theme-selector';\r\nimport { ValidatedUrlRules, UrlOptionsDetailsWithRules } from '@bingads-webui-campaign-react/url-rules';\r\nimport { ValidatedUrlRulesV2, UrlOptionsDetailsWithRulesV2 } from '@bingads-webui-campaign-react/url-rules-v2';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\n\r\nimport { ScenarioName } from '../../common/constants';\r\nimport {\r\n ServerValidatedRemainingCharsValidatedTextField,\r\n} from '../shared';\r\nimport { useStepAssetGroupState } from './use-step-campaign-asset-group-state';\r\nimport { getAssetGroupStepStyles } from './step-campaign-asset-group-styles';\r\nimport { hasAssetsInAssetGroup } from '../../common/has-assets-in-assets-group';\r\nimport { ERROR_ENTITY } from '../../model/api-errors';\r\nimport { getExtensionFormatters } from '../../model/ad-extension';\r\nimport SparkleImg from './media/sparkle.svg';\r\nimport ImageAssetsImg from './media/image-assets.svg';\r\nimport LogoAssetsImg from './media/logo-assets.svg';\r\nimport TextAssetsImg from './media/text-assets.svg';\r\nimport CallToActionImg from './media/call-to-action.svg';\r\nimport BusinessNameImg from './media/business-name.svg';\r\nimport StartEndDateImg from './media/start-end-date.svg';\r\nimport ListingGroupImg from './media/listing-groups.svg';\r\nimport GroupInfoImg from './media/group-info.svg';\r\nimport SearchThemesImg from './media/search-themes.svg';\r\n\r\nconst entityIsAssetGroup = entityIs(ERROR_ENTITY.AssetGroup);\r\nconst assetGroupNameProp = andComp(entityIsAssetGroup, propertyIs('Name'));\r\nconst assetGroupBusinessNameProp = andComp(entityIsAssetGroup, propertyIs('BusinessName'));\r\nconst assetGroupFinalUrlsProp = andComp(entityIsAssetGroup, propertyIs('FinalUrls'));\r\nconst assetGroupPath1AndPath2Props = andComp(entityIsAssetGroup, orComp(propertyIs('Path1'), propertyIs('Path2')));\r\nconst assetGroupMobileFinalUrlsProp = andComp(entityIsAssetGroup, propertyIs('MobileFinalUrls'));\r\nconst assetGroupSearchThemesProp = andComp(entityIsAssetGroup, propertyIs('SearchThemes'));\r\nconst assetGroupImageAssetsProp = andComp(entityIsAssetGroup, propertyIs('Images'));\r\n\r\nconst ValidatedFinalUrlWithStoreURL = withError(withCustomValidation(withFinalUrlRecommendationUpdate(withStoreFromProviderId(withStoreUrl(ValidatedFinalUrlWithRecommendations)))));\r\n\r\nconst ServerValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedFinalUrlWithStoreURL, { filter: assetGroupFinalUrlsProp }));\r\nconst ServerValidatedUrlPath = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedUrlPath, { filter: assetGroupPath1AndPath2Props }));\r\nconst ServerValidatedMobileUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedMobileUrl, { filter: assetGroupMobileFinalUrlsProp }));\r\nconst ServerValidatedSearchThemeSelector = withControlErrorHandling(withContainerErrors(SearchThemeSelector, { filter: assetGroupMobileFinalUrlsProp, Adapter: StandardControlAdapter() }), [FocusableActuator]);\r\nconst ServerValidatedImageListPortalContainer = withUnvalidatedControlErrors(ImageListPortalContainerWithControlErrorHandling, { filter: assetGroupImageAssetsProp });\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nconst AssetGroupStep = (props) => {\r\n const classes = useDefaultStyles(getAssetGroupStepStyles);\r\n\r\n const {\r\n stepService,\r\n scope,\r\n serverContext,\r\n instrumentation,\r\n wizardPerfMarker,\r\n } = props;\r\n\r\n const activity = useContext(ActivityContext);\r\n const [stepState, stepApi] = useStepAssetGroupState(stepService, activity);\r\n\r\n const {\r\n scenarioName,\r\n i18n,\r\n legacyI18n,\r\n locale,\r\n hideStepHeader,\r\n assetGroup,\r\n navigationConfirmationPrompt,\r\n finalUrls,\r\n finalUrlForRecommendation,\r\n headlines,\r\n longHeadlines,\r\n descriptions,\r\n campaignId,\r\n campaignName,\r\n campaignTimeZone,\r\n campaignSettings,\r\n suggestedObjectiveExtensions,\r\n otherObjectiveExtensions,\r\n adExtensionsDynamicFeatures = constant({}),\r\n adExtensionsAssociationsFactory,\r\n extensionsAssociations,\r\n urlPath1,\r\n urlPath2,\r\n finalMobileUrls,\r\n urlRules,\r\n urlRulesOption,\r\n images,\r\n businessName,\r\n audienceGroup,\r\n searchThemes,\r\n originalAudienceGroup,\r\n listingGroup,\r\n productFilter,\r\n isSaving,\r\n isCanceling,\r\n aid,\r\n cid,\r\n permissions,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n systemErrors,\r\n } = stepState;\r\n\r\n const {\r\n onAssetGroupValidation,\r\n onUpdateExtensionsAssociations,\r\n onUpdateFinalUrls,\r\n onUpdateImageList,\r\n onClearAssets,\r\n onUpdateSearchThemes,\r\n } = stepApi;\r\n\r\n const {\r\n UAPLPMaxLogoPreviewEnabled,\r\n CopilotCTALogoGeneration,\r\n PmaxExtensionPreview,\r\n AssetGroupUrlRules: isAssetGroupUrlRulesEnabled,\r\n AssetGroupUrlRulesV2: isAssetGroupUrlRulesV2Enabled,\r\n PerformanceMaxInCnMarket: IsPerformanceMaxInCnMarketEnabled,\r\n PMaxNewAspectRatios: isPMaxNewAspectRatiosEnabled,\r\n PMaxExcludeNewAspectRatios: isPMaxNewAspectRatiosExcluded,\r\n } = permissions.dynamic;\r\n\r\n const isPMaxAspectRatiosV2Enabled = isPMaxNewAspectRatiosEnabled && !isPMaxNewAspectRatiosExcluded;\r\n\r\n const { IsDomesticSimplifiedChineseEnabled } = permissions;\r\n\r\n const isFeatureBlockedForCnMarket = IsDomesticSimplifiedChineseEnabled && IsPerformanceMaxInCnMarketEnabled;\r\n\r\n const { send: sendCopilotBannerNotification } = useBannerService();\r\n\r\n const [finalUrlForCopilotRecommendations, setFinalUrlForCopilotRecommendations] = useState(first(finalUrls));\r\n\r\n const {\r\n handleCopilotBannerFetch,\r\n handleCopilotBannerFetchSucceeded,\r\n handleCopilotBannerFetchFailed,\r\n suggestionPoller,\r\n } = useRecommendations({\r\n cid,\r\n aid,\r\n campaignId,\r\n permissions,\r\n finalUrl: finalUrlForCopilotRecommendations,\r\n instrumentation,\r\n });\r\n\r\n const [recommendationContext, setRecommendationContext] = useContext(RecommendationContext);\r\n const {\r\n themes, imageAssets, copilotTracking, postAssetEventLog = noop, logo, cta, isCustomerIdInExclusionList,\r\n } = recommendationContext;\r\n const finalUrlRecommendations = recommendationContext.finalUrls;\r\n\r\n const {\r\n logEnterFlow,\r\n logFinalUrlRecommendations,\r\n logBannerRefresh,\r\n logBannerRefreshCompleted,\r\n logFetch,\r\n logFetchSucceeded,\r\n logFetchAssetsSucceeded,\r\n logApplyThemes,\r\n logSuggestionsViewed,\r\n logPrefillAssets,\r\n logRemoveAssets,\r\n } = useEventLog(postAssetEventLog);\r\n\r\n const {\r\n triggerSurveyOnSubmit,\r\n triggerSurveyOnCancel,\r\n } = useCopilotRecommendationSurvey(AssetEventFeature.PMAX);\r\n\r\n useEffect(() => {\r\n if (isSaving) {\r\n triggerSurveyOnSubmit();\r\n }\r\n }, [isSaving, triggerSurveyOnSubmit]);\r\n\r\n useEffect(() => {\r\n if (isCanceling && _.size(themes) > 0) {\r\n triggerSurveyOnCancel();\r\n }\r\n }, [isCanceling, triggerSurveyOnCancel, themes]);\r\n\r\n useEffect(() => {\r\n activity.trace('[PmaxWizard] AssetGroupStep mounted');\r\n }, [activity]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ PMaxCampaignsCopilotRecommendations: 'true' });\r\n });\r\n\r\n useEffect(() => {\r\n logEnterFlow();\r\n }, [logEnterFlow]);\r\n\r\n\r\n useEffect(() => {\r\n if (finalUrlRecommendations && finalUrlRecommendations.length > 0) {\r\n logFinalUrlRecommendations(finalUrlRecommendations);\r\n copilotTracking.trackReturnedFinalUrlAssets({ FinalUrls: finalUrlRecommendations });\r\n }\r\n }, [finalUrlRecommendations, logFinalUrlRecommendations, copilotTracking]);\r\n\r\n useEffect(() => {\r\n if (themes && themes.length > 0) {\r\n if (copilotTracking) {\r\n const {\r\n descriptionRecommendationIds, headlineRecommendationIds, longHeadlineRecommendationIds,\r\n } = getCopilotRecommendationIdsFromThemes(themes);\r\n\r\n // By default, user views first 5 copilot image and text recommendations when they are returned\r\n const displayedDescriptions = first(descriptionRecommendationIds, MAX_INLINE_RECOMMENDATIONS_PER_PAGE);\r\n const displayedHeadlines = first(headlineRecommendationIds, MAX_INLINE_RECOMMENDATIONS_PER_PAGE);\r\n const displayedLongHeadlines = first(longHeadlineRecommendationIds, MAX_INLINE_RECOMMENDATIONS_PER_PAGE);\r\n const viewedTextSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(flatten([displayedDescriptions, displayedHeadlines, displayedLongHeadlines]));\r\n\r\n const displayedImages = first(pluck(imageAssets, 'suggestionId'), SuggestionViewImageCount);\r\n const viewedImageSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(displayedImages);\r\n\r\n if (viewedTextSuggestionIds.length > 0 || viewedImageSuggestionIds.length > 0) {\r\n logSuggestionsViewed(viewedTextSuggestionIds, viewedImageSuggestionIds);\r\n copilotTracking.trackViewedSuggestionIds([...viewedTextSuggestionIds, ...viewedImageSuggestionIds]);\r\n }\r\n }\r\n }\r\n }, [copilotTracking, imageAssets, logSuggestionsViewed, themes]);\r\n\r\n const [\r\n allAssetsSections,\r\n assetsExpandedSections,\r\n setAssetsExpandedSections,\r\n ] = useCollapseState(\r\n ['final-url', 'images', 'logos', 'headlines', 'long-headlines', 'descriptions', 'business-name', 'call-to-action'] /* all sections */,\r\n ['final-url', 'images', 'logos', 'headlines', 'long-headlines', 'descriptions', 'business-name', 'call-to-action'] /* initially expanded sections */\r\n );\r\n\r\n const providerId = campaignSettings && campaignSettings.ProviderId;\r\n const finalUrlExpansion = campaignSettings && campaignSettings.length > 0 && !campaignSettings[0].FinalUrlExpansionOptOut;\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 const allAssetsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAssetsExpandedSections }),\r\n [setAssetsExpandedSections]\r\n );\r\n\r\n const onRenderAdGroupNameLabel = useCallback(() => (\r\n \r\n ), []);\r\n const onRenderDescription = useMemo(() => (\r\n \r\n \r\n {i18n.getString(_TL_('URL expansion is on'))}\r\n \r\n \r\n \r\n ), [i18n]);\r\n\r\n const [showCopilotDialog, setShowCopilotDialog] = useState(false);\r\n const [imageExperiencePortalContainerState, setImageExperiencePortalContainerState] = useState({});\r\n const [imageExperienceAddNewImageCallback, setImageExperienceAddNewImageCallback] = useState(noop);\r\n const [addNewDescriptionCallback, setAddNewDescriptionCallback] = useState(noop);\r\n const [addNewShortHeadlinesCallback, setAddNewShortHeadlinesCallback] = useState(noop);\r\n const [addNewLongHeadlinesCallback, setAddNewLongHeadlinesCallback] = useState(noop);\r\n const [newCTACallback, setNewCTACallback] = useState(noop);\r\n\r\n const handleRefresh = useCallback(() => {\r\n setShowCopilotDialog(true);\r\n logBannerRefresh();\r\n }, [logBannerRefresh]);\r\n\r\n const handleReset = useCallback(() => {\r\n onClearAssets();\r\n copilotTracking.removeAllInitialSuggestions();\r\n logRemoveAssets();\r\n }, [onClearAssets, logRemoveAssets, copilotTracking]);\r\n\r\n const handleCopilotDialogClose = useCallback(() => {\r\n setShowCopilotDialog(false);\r\n }, []);\r\n\r\n const maxUploadNum = useMemo(() => {\r\n const imageListLength = images && images.ImageList && isArray(images.ImageList) ? images.ImageList.length : 0;\r\n return PMaxImageExperienceMaxImageCount - imageListLength;\r\n }, [images]);\r\n\r\n // only prefill for new asset groups & when customer is not in exclusion list\r\n const [shouldPrefill, setShouldPrefill] = useState(assetGroup.data.Id == null);\r\n\r\n useEffect(() => {\r\n if (shouldPrefill && _.size(themes) > 0) {\r\n if (!hasAssetsInAssetGroup(assetGroup.data)) {\r\n setShouldPrefill(false);\r\n\r\n if (isCustomerIdInExclusionList) {\r\n activity.trace('not prefilling asset group, customer is in exclusion list');\r\n return;\r\n }\r\n\r\n // new asset group with no text or image assets, prefill with copilot recommendations\r\n activity.trace('prefilling asset group with copilot recommendations');\r\n sendCopilotBannerNotification('Apply');\r\n\r\n if (addNewShortHeadlinesCallback) {\r\n const newHeadlines = getUniqueAssetsFromThemes(themes, 'headlines', 12);\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.HEADLINE, newHeadlines);\r\n\r\n addNewShortHeadlinesCallback(newHeadlines);\r\n }\r\n\r\n if (addNewLongHeadlinesCallback) {\r\n const newLongHeadlines = getUniqueAssetsFromThemes(themes, 'longHeadlines', 4);\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.LONG_HEADLINE, newLongHeadlines);\r\n\r\n addNewLongHeadlinesCallback(newLongHeadlines);\r\n }\r\n\r\n if (addNewDescriptionCallback) {\r\n const newDescriptions = getUniqueAssetsFromThemes(themes, 'descriptions', 4);\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.DESCRIPTION, newDescriptions);\r\n\r\n addNewDescriptionCallback(newDescriptions);\r\n }\r\n\r\n // prefill images\r\n new Promise((resolve) => {\r\n if (imageExperienceAddNewImageCallback) {\r\n const newImages = getUniqueAssetsFromThemes(themes, 'images', 5);\r\n if (newImages.length > 0) {\r\n resolve(imageExperienceAddNewImageCallback(newImages, ImageassetsConstants.imageOptionKeys.Image));\r\n return;\r\n }\r\n }\r\n resolve({ processedImages: [] });\r\n }).then((response) => {\r\n if (!_.isEmpty(response.processedImages)) {\r\n const newImagesAssets = _.map(response.processedImages, image => image.idString);\r\n copilotTracking.trackInitialSuggestions(AssetPropertyName.IMAGE, newImagesAssets);\r\n }\r\n\r\n if (response.errorMessage && activity) {\r\n const message = `Apply image from copilot prefill error: ${response.errorMessage}`;\r\n activity.trace(message);\r\n }\r\n }).then(() => {\r\n if (cta && newCTACallback && assetGroup.data && assetGroup.data.CallToAction !== 'Automated') {\r\n newCTACallback({\r\n CallToAction: cta.replace(' ', ''),\r\n });\r\n }\r\n if (logo) {\r\n return imageExperienceAddNewImageCallback([{\r\n fullUrl: logo,\r\n suggestionId: -1,\r\n }], ImageassetsConstants.imageOptionKeys.Logo);\r\n }\r\n return Promise.resolve();\r\n }).finally(() => {\r\n sendCopilotBannerNotification('ApplySucceeded');\r\n logPrefillAssets();\r\n });\r\n } else {\r\n activity.trace('not prefilling asset group, text or image assets already exist');\r\n }\r\n }\r\n }, [\r\n activity,\r\n addNewDescriptionCallback,\r\n addNewLongHeadlinesCallback,\r\n addNewShortHeadlinesCallback,\r\n assetGroup.data,\r\n imageExperienceAddNewImageCallback,\r\n logPrefillAssets,\r\n sendCopilotBannerNotification,\r\n shouldPrefill,\r\n themes,\r\n cta,\r\n logo,\r\n newCTACallback,\r\n copilotTracking,\r\n isCustomerIdInExclusionList,\r\n ]);\r\n\r\n const onApplyCopilotRecommendation = useCallback((selectedThemes, selectedThemesAndAssets) => {\r\n logApplyThemes(selectedThemes);\r\n\r\n const formattedThemesAndAssets = _.map(selectedThemesAndAssets, getFormattedThemeForApplying);\r\n\r\n sendCopilotBannerNotification('Apply');\r\n setRecommendationContext({\r\n themes: [...formattedThemesAndAssets],\r\n ...uniqAssetRecommendationsInThemes(formattedThemesAndAssets),\r\n });\r\n\r\n if (addNewShortHeadlinesCallback) {\r\n addNewShortHeadlinesCallback(getUniqueAssetsFromThemes(formattedThemesAndAssets, 'headlines'));\r\n }\r\n if (addNewLongHeadlinesCallback) {\r\n addNewLongHeadlinesCallback(getUniqueAssetsFromThemes(formattedThemesAndAssets, 'longHeadlines'));\r\n }\r\n if (addNewDescriptionCallback) {\r\n addNewDescriptionCallback(getUniqueAssetsFromThemes(formattedThemesAndAssets, 'descriptions'));\r\n }\r\n\r\n const logCopilotViewedImageSuggestions = (suggestionIds) => {\r\n if (copilotTracking) {\r\n const viewedImageSuggestionIds = copilotTracking.getUntrackedViewedSuggestionIds(suggestionIds);\r\n if (viewedImageSuggestionIds.length > 0) {\r\n logSuggestionsViewed([], viewedImageSuggestionIds);\r\n copilotTracking.trackViewedSuggestionIds(viewedImageSuggestionIds);\r\n }\r\n }\r\n };\r\n\r\n const availableNewImages = getUniqueAssetsFromThemes(formattedThemesAndAssets, 'images', maxUploadNum);\r\n if (imageExperienceAddNewImageCallback && availableNewImages && availableNewImages.length > 0) {\r\n imageExperienceAddNewImageCallback(availableNewImages, ImageassetsConstants.imageOptionKeys.Image)\r\n .then((response) => {\r\n if (response.processedImages) {\r\n logCopilotViewedImageSuggestions(_.pluck(response.processedImages, 'suggestionId'));\r\n response.processedImages.forEach((image) => {\r\n copilotTracking.trackSelectedImageAssets({ ImageAssets: [{ suggestionId: image.suggestionId, imageId: image.idString }] });\r\n });\r\n }\r\n if (response.errorMessage && activity) {\r\n const message = `Apply image from copilot dialog error: ${response.errorMessage}`;\r\n activity.trace(message);\r\n }\r\n })\r\n .finally(() => {\r\n sendCopilotBannerNotification('ApplySucceeded');\r\n });\r\n } else {\r\n sendCopilotBannerNotification('ApplySucceeded');\r\n }\r\n handleCopilotDialogClose();\r\n }, [sendCopilotBannerNotification, setRecommendationContext, addNewShortHeadlinesCallback, addNewLongHeadlinesCallback, addNewDescriptionCallback, imageExperienceAddNewImageCallback, handleCopilotDialogClose, maxUploadNum, activity, copilotTracking, logSuggestionsViewed, logApplyThemes]);\r\n\r\n const onFinalURLFocusOut = useCallback(() => {\r\n // to prevent sending too many requests, only update the copilot recommendations after user has finished editing URL\r\n setFinalUrlForCopilotRecommendations(finalUrlForRecommendation);\r\n }, [finalUrlForRecommendation]);\r\n\r\n const onFinalUrlEnter = useCallback((e) => {\r\n const { key } = e;\r\n if (key === 'Enter') {\r\n setFinalUrlForCopilotRecommendations(finalUrlForRecommendation);\r\n }\r\n }, [finalUrlForRecommendation]);\r\n\r\n const finalUrlAdditionalProps = useMemo(() => ({\r\n onBlur: onFinalURLFocusOut,\r\n onKeyUp: onFinalUrlEnter,\r\n }), [onFinalUrlEnter, onFinalURLFocusOut]);\r\n\r\n const handleFetchThemes = useCallback(() => {\r\n logFetch();\r\n }, [logFetch]);\r\n\r\n const handleFetchThemesSucceeded = useCallback((finalUrl, themesList) => {\r\n logFetchSucceeded(finalUrl, themesList);\r\n }, [logFetchSucceeded]);\r\n\r\n const handleFetchAssetsSucceeded = useCallback((finalUrl, assetsRecommendationData) => {\r\n logFetchAssetsSucceeded(finalUrl, assetsRecommendationData);\r\n if (copilotTracking) {\r\n copilotTracking.trackReturnedTextAssets(assetsRecommendationData.RecommendedAssets);\r\n }\r\n }, [logFetchAssetsSucceeded, copilotTracking]);\r\n\r\n const [isRegionRestricted, setIsRegionRestricted] = useState(true);\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(setIsRegionRestricted);\r\n }, [permissions, serverContext]);\r\n\r\n const validateSpecialCharacters = permissions && permissions.dynamic && permissions.dynamic.PerformanceMaxCampaignsFinalURLValidation && permissions.dynamic.PMaxAndDSAFinalURLValidation;\r\n\r\n const assetGroupNameSection = useMemo(() => (\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n {finalUrlExpansion && onRenderDescription}\r\n \r\n \r\n {!isRegionRestricted && (\r\n \r\n \r\n {showCopilotDialog &&\r\n \r\n }\r\n \r\n )}\r\n
\r\n ), [\r\n finalUrlAdditionalProps,\r\n finalUrlExpansion,\r\n finalUrlValidationProps,\r\n handleCopilotDialogClose,\r\n handleRefresh,\r\n i18n,\r\n isRegionRestricted,\r\n onApplyCopilotRecommendation,\r\n handleCopilotBannerFetch,\r\n handleCopilotBannerFetchFailed,\r\n handleCopilotBannerFetchSucceeded,\r\n logBannerRefreshCompleted,\r\n handleReset,\r\n onRenderAdGroupNameLabel,\r\n onRenderDescription,\r\n permissions,\r\n handleFetchThemes,\r\n handleFetchThemesSucceeded,\r\n handleFetchAssetsSucceeded,\r\n providerId,\r\n scenarioName,\r\n setAssetsExpandedSections,\r\n showCopilotDialog,\r\n ]);\r\n\r\n const [\r\n allListingGroupsSections,\r\n listingGroupsExpandedSections,\r\n setListingGroupsExpandedSections,\r\n ] = useCollapseState(\r\n ['listing-groups'] /* all sections */,\r\n ['listing-groups'] /* initially expanded sections */\r\n );\r\n\r\n const listingGroupExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setListingGroupsExpandedSections }),\r\n [setListingGroupsExpandedSections]\r\n );\r\n\r\n const mergedI18n = useMemo(() => mergeI18n(\r\n legacyI18n,\r\n i18n\r\n ), [i18n, legacyI18n]);\r\n\r\n const listingGroupDetails = useMemo(() => getListingGroupDetails(\r\n i18n,\r\n !!scope.values.assetGroupId,\r\n {\r\n productFilter,\r\n listingGroup,\r\n }\r\n ), [i18n, listingGroup, productFilter, scope.values.assetGroupId]);\r\n\r\n const listingGroupsSection = useMemo(() => (\r\n
\r\n

{i18n.getString(_TL_('Add products'))}

\r\n
\r\n {i18n.getString(_TL_('Choose which products you want to display in your ads. Some of your ads will use images, headlines, and descriptions from Merchant Center.'))}\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: listingGroupExpand,\r\n expandKey: 'listing-groups',\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n ), [i18n, allListingGroupsSections, listingGroupsExpandedSections, setListingGroupsExpandedSections, listingGroupDetails, listingGroupExpand, mergedI18n, campaignId, campaignSettings, listingGroup, providerId]);\r\n\r\n\r\n const imagesContainerRef = useRef(null);\r\n const logosContainerRef = useRef(null);\r\n const collectionsSummary = [\r\n { collection: headlines, displayText: i18n.getString(_TL_('short headlines')) },\r\n { collection: longHeadlines, displayText: i18n.getString(_TL_('long headlines')) },\r\n { collection: descriptions, displayText: i18n.getString(_TL_('descriptions')) },\r\n ];\r\n\r\n const textCardSummaryDetails = useMemo(() => getTextCardSummaryDetails(collectionsSummary, i18n), [collectionsSummary, i18n]);\r\n const headlinesCardSummaryDetails = useMemo(() => getHeadlinesCardSummaryDetails(i18n, headlines), [headlines, i18n]);\r\n const longHeadlinesCardSummaryDetails = useMemo(() => getLongHeadlinesCardSummaryDetails(i18n, longHeadlines), [longHeadlines, i18n]);\r\n const descriptionsCardSummaryDetails = useMemo(() => getDescriptionsCardSummaryDetails(i18n, descriptions), [descriptions, i18n]);\r\n\r\n const textAndImageAssetsOptional = useMemo(() => providerId && !hasImages(images) && !hasTextAssets(headlines, longHeadlines, descriptions), [providerId, images, headlines, longHeadlines, descriptions]);\r\n\r\n const assetsSection = useMemo(() => (\r\n
\r\n

{i18n.getString(_TL_('Add assets'))}

\r\n
\r\n {i18n.getString(_TL_('Provide your assets and we’ll automatically determine what your ads look like, where and when they appear, and who sees them.'))}\r\n
\r\n \r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'images',\r\n }}\r\n >\r\n {i18n.getString(_TL_('You can add up to 20 images to your ad. We recommend that you add two to three relevant images. 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 attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'logos',\r\n }}\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 attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'headlines',\r\n }}\r\n >\r\n \r\n \r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'long-headlines',\r\n }}\r\n >\r\n \r\n \r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'descriptions',\r\n }}\r\n >\r\n \r\n \r\n\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n \r\n }\r\n noOverflowHidden\r\n relativePosition\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n \r\n
\r\n ), [i18n, allAssetsSections, assetsExpandedSections, setAssetsExpandedSections, isPMaxAspectRatiosV2Enabled, images, allAssetsExpand, imageExperiencePortalContainerState, imageExperienceAddNewImageCallback, permissions, maxUploadNum, headlinesCardSummaryDetails, textAndImageAssetsOptional, longHeadlinesCardSummaryDetails, descriptionsCardSummaryDetails, textCardSummaryDetails, providerId, businessName, locale, assetGroup.data, isFeatureBlockedForCnMarket]);\r\n\r\n const getAdExtensionsSections = useCallback(\r\n extensionTypes => (scenarioName === ScenarioName.PerformanceMaxCampaignCreation ?\r\n adExtensionsAssociationsFactory.extensionsAssociationsFactory(campaignId, campaignName, extensionTypes, adExtensionsDynamicFeatures) : [])\r\n .reduce((memo, {\r\n extensionType,\r\n title,\r\n topic,\r\n details,\r\n AssociationPanel,\r\n }) => {\r\n const sectionKey = extensionType;\r\n const associations = extensionsAssociations[extensionType];\r\n\r\n const panel = (\r\n }\r\n >\r\n \r\n \r\n\r\n );\r\n memo.panels.push(panel);\r\n memo.sectionsInfo.allSections.push(sectionKey);\r\n\r\n return memo;\r\n }, { panels: [], sectionsInfo: { allSections: [] } }),\r\n [scenarioName, i18n, campaignId, campaignName, adExtensionsDynamicFeatures, adExtensionsAssociationsFactory, extensionsAssociations, onUpdateExtensionsAssociations]\r\n );\r\n\r\n const suggestedAdExtensionsSections = useMemo(() => getAdExtensionsSections(suggestedObjectiveExtensions), [getAdExtensionsSections, suggestedObjectiveExtensions]);\r\n const otherAdExtensionsSections = useMemo(() => getAdExtensionsSections(otherObjectiveExtensions), [getAdExtensionsSections, otherObjectiveExtensions]);\r\n\r\n const [\r\n allEnhanceYourAdsSections,\r\n enhanceYourAdsExpandedSections,\r\n setEnhanceYourAdsExpandedSections,\r\n ] = useCollapseState(\r\n suggestedAdExtensionsSections.sectionsInfo.allSections /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const enhanceYourAdsSection = useMemo(() => (\r\n <>\r\n {suggestedAdExtensionsSections.panels.length > 0 &&\r\n
\r\n

{i18n.getString(_TL_('Add more information to your ads'))}

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {suggestedAdExtensionsSections.panels}\r\n \r\n
\r\n }\r\n \r\n ), [i18n, allEnhanceYourAdsSections, enhanceYourAdsExpandedSections, setEnhanceYourAdsExpandedSections, suggestedAdExtensionsSections]);\r\n\r\n const [\r\n allMoreAssetsSections,\r\n moreAssetsExpandedSections,\r\n setMoreAssetsExpandedSections,\r\n ] = useCollapseState(\r\n otherAdExtensionsSections.sectionsInfo.allSections /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const moreAssetsSection = useMemo(() => (\r\n <>\r\n {otherAdExtensionsSections.panels.length > 0 &&\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('More assets'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {otherAdExtensionsSections.panels}\r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n }\r\n \r\n ), [i18n, classes.collapsiblePanel, allMoreAssetsSections, moreAssetsExpandedSections, setMoreAssetsExpandedSections, otherAdExtensionsSections.panels]);\r\n\r\n const [\r\n allMoreOptionsSections,\r\n moreOptionsExpandedSections,\r\n setMoreOptionsExpandedSections,\r\n ] = useCollapseState(\r\n ['advanced-url-options'] /* all sections */,\r\n ['advanced-url-options'] /* initially expanded sections */\r\n );\r\n const moreOptionsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreOptionsExpandedSections }),\r\n [setMoreOptionsExpandedSections]\r\n );\r\n\r\n const [moreOptionsSectionExpanded, setNameAndTitleExpanded] = useState(false);\r\n const onMoreOptionsSectionToggle = useCallback((expanded) => {\r\n setNameAndTitleExpanded(expanded);\r\n }, []);\r\n\r\n const moreOptionsSection = useMemo(() => (\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('More options'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n : }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreOptionsExpand,\r\n expandKey: 'advanced-url-options',\r\n }}\r\n >\r\n \r\n \r\n {\r\n isAssetGroupUrlRulesEnabled && !isAssetGroupUrlRulesV2Enabled && (\r\n <>\r\n \r\n \r\n \r\n )\r\n }\r\n {\r\n isAssetGroupUrlRulesV2Enabled && (\r\n <>\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n ), [onMoreOptionsSectionToggle, moreOptionsSectionExpanded, classes.collapsiblePanel, i18n, allMoreOptionsSections, moreOptionsExpandedSections, setMoreOptionsExpandedSections, isAssetGroupUrlRulesEnabled, isAssetGroupUrlRulesV2Enabled, finalUrls, urlPath1, urlPath2, finalMobileUrls, urlRules, moreOptionsExpand, urlRulesOption]);\r\n\r\n const isReadOnlyUser = useMemo(() => permissions.IsReadOnlyUser || serverContext.CurrentAccount.Status === 32, [permissions.IsReadOnlyUser, serverContext.CurrentAccount.Status]); // 32 is InActive\r\n\r\n const audienceSignalSection = useMemo(() => (\r\n
\r\n

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

\r\n
\r\n \"\"\r\n {i18n.getString(_TL_('Audience signals help us reach the right audience for your ads and maximize your conversions.'))}\r\n {i18n.getString(_TL_('Create an audience signal or choose from your existing audience signals. We’ll use them as a starting point to find customers and determine who sees your ads.'))}\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n ), [i18n, classes.h3LabelOptional, classes.audienceSignalDescription, classes.audienceWizard, audienceGroup, originalAudienceGroup, aid, cid, isReadOnlyUser, wizardPerfMarker]);\r\n\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n ] = useCollapseState(\r\n permissions.dynamic.SearchThemes ? ['start-end-dates', 'search-themes'] : ['start-end-dates'] /* all sections */,\r\n permissions.dynamic.SearchThemes ? ['start-end-dates', 'search-themes'] : ['start-end-dates'] /* initially expanded sections */\r\n );\r\n const moreSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreSettingsExpandedSections }),\r\n [setMoreSettingsExpandedSections]\r\n );\r\n\r\n const searchThemesSection = useMemo(() => (\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreSettingsExpand,\r\n expandKey: 'search-themes',\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n ), [allMoreSettingsSections, moreSettingsExpandedSections, setMoreSettingsExpandedSections, i18n, searchThemes, moreSettingsExpand, wizardPerfMarker, onUpdateSearchThemes]);\r\n\r\n const moreSettingsSection = useMemo(() => (\r\n
\r\n
{i18n.getString(_TL_('MORE SETTINGS'))}
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreSettingsExpand,\r\n expandKey: 'start-end-dates',\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n ), [i18n, allMoreSettingsSections, moreSettingsExpandedSections, setMoreSettingsExpandedSections, assetGroup.data.StartDate, assetGroup.data.EndDate, assetGroup.data.Id, campaignTimeZone, moreSettingsExpand]);\r\n\r\n const [previewImagesSharedState, setPreviewImagesSharedState] = useState({\r\n previewImageId: null,\r\n previewLogoId: null,\r\n cropImageObj: null,\r\n editingPlacementType: '',\r\n });\r\n\r\n const imageExperienceComponents = useMemo(() => (\r\n
\r\n \r\n
), [i18n, permissions, campaignId, textAndImageAssetsOptional, onUpdateFinalUrls, previewImagesSharedState, assetGroup.data, suggestionPoller, wizardPerfMarker, postAssetEventLog, isPMaxAspectRatiosV2Enabled]);\r\n\r\n const displayUrl = useMemo(() => getFinalUrlWithPath(finalUrls, urlPath1, urlPath2), [finalUrls, urlPath1, urlPath2]);\r\n\r\n const adPreview = useMemo(() => {\r\n const previewProps = {\r\n i18n,\r\n imageList: images && images.ImageList,\r\n updateImageList: onUpdateImageList,\r\n shortHeadline: headlines && headlines.Headline0,\r\n longHeadline: longHeadlines && longHeadlines.LongHeadline0,\r\n description: descriptions && descriptions.Description0,\r\n businessName,\r\n callToAction: assetGroup.data.CallToAction,\r\n displayUrl,\r\n url: first(finalUrls),\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n };\r\n return (\r\n \r\n );\r\n }, [i18n, images, onUpdateImageList, headlines, longHeadlines, descriptions, businessName, assetGroup.data.CallToAction, displayUrl, finalUrls, previewImagesSharedState, UAPLPMaxLogoPreviewEnabled, extensionsAssociations, PmaxExtensionPreview, isPMaxAspectRatiosV2Enabled]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {!hideStepHeader &&\r\n <>\r\n

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

\r\n
\r\n {i18n.getString(_TL_('Performance Max campaigns consist of asset groups, which contain the information and media you want to include in your ads. We\\'ll mix and match the most optimal asset combinations to create effective, high-performing ads.'))}\r\n
\r\n \r\n }\r\n \r\n
\r\n \r\n
\r\n {assetGroupNameSection}\r\n {providerId && listingGroupsSection}\r\n
\r\n
\r\n
\r\n {assetsSection}\r\n {enhanceYourAdsSection}\r\n {moreAssetsSection}\r\n {moreOptionsSection}\r\n
\r\n
\r\n {adPreview}\r\n
\r\n
\r\n
\r\n {audienceSignalSection}\r\n {permissions.dynamic.SearchThemes && searchThemesSection}\r\n {moreSettingsSection}\r\n {imageExperienceComponents}\r\n
\r\n \r\n \r\n {navigationConfirmationPrompt}\r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nAssetGroupStep.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n assetGroupId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.shape({\r\n Status: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({\r\n AdsCopilot: PropTypes.shape({\r\n create: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n wizardPerfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n PerformanceMaxCampaignsFinalURLValidation: PropTypes.bool,\r\n PMaxAndDSAFinalURLValidation: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const StepAssetGroupShell = withStepLoadingShell(withInstrumentation(withServerContext(withScope(AssetGroupStep))));\r\n","import { stepStateMachine } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withBannerService } from '@bingads-webui/inline-copilot';\r\nimport { STEP_PATHS } from '../../common/constants';\r\nimport { getErrorsPlaceholders, initialAssetGroupViewModel } from '../../model/asset-group';\r\nimport { patchStepsData, loadData, saveData, needsLoading, needsSaving, isValid, isDirty, clearErrors } from './step-campaign-asset-group-impl';\r\nimport { StepAssetGroupShell } from './step-campaign-asset-group';\r\n\r\nexport const stepAssetGroupWizardConfig = {\r\n id: STEP_PATHS.ASSET_GROUP,\r\n title: _TL_('Asset group'),\r\n StepMachine: stepStateMachine,\r\n StepMachineOptions: (stepInfo, initialStepsData) => ({\r\n machineId: STEP_PATHS.ASSET_GROUP,\r\n initialContext: {\r\n id: stepInfo.id,\r\n stepInfo,\r\n stepsData: initialStepsData,\r\n data: {\r\n assetGroup: initialAssetGroupViewModel,\r\n extensionsAssociations: {},\r\n ...getErrorsPlaceholders(),\r\n },\r\n invalidSaveAttempt: 0,\r\n },\r\n actions: {\r\n patchStepsData,\r\n clearErrors,\r\n },\r\n guards: {\r\n needsLoading,\r\n needsSaving,\r\n isValid,\r\n isDirty,\r\n },\r\n }),\r\n StepComponent: withBannerService(withRecommendationContext(StepAssetGroupShell)),\r\n canNavigateBackWithoutSaving: true,\r\n stepRepositoryConfig: {\r\n saveData,\r\n loadData,\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport { createOrUpdateCampaign } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { Campaign, BrandListAssociation } from '@bingads-webui/campaign-odata-schemas';\r\nimport { bulkModelToViewModelForBrandExclusions, bulkModelToViewModelForCampaign, viewModelToBulkModelForCampaign, viewModelToBulkModelForConversionGoals, viewModelToBulkModelForNewCustomerAcquisitionGoals } from './campaign';\r\nimport { viewModelToBulkModelForLocationTargets, viewModelToBulkModelForAdSchedules, viewModelToBulkModelForFinalUrlExpansions } from './campaign-criterions';\r\nimport { getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors, unexpectedBulkErrorToString } from './bulk-upsert-errors';\r\nimport { CampaignNegativeReferenceId } from '../common/constants';\r\nimport { isBulkWrappedResponse } from '../common/bulk';\r\nimport { ERROR_ENTITY, genericApiError } from './api-errors';\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n 'Campaign Location Criterion Error': ERROR_ENTITY.CampaignLocation,\r\n 'Campaign Radius Criterion Error': ERROR_ENTITY.CampaignRadius,\r\n 'Campaign Negative Location Criterion Error': ERROR_ENTITY.CampaignNegativeLocation,\r\n 'Campaign Location Intent Criterion Error': ERROR_ENTITY.CampaignLocationIntent,\r\n 'Campaign Day Time Criterion Error': ERROR_ENTITY.CampaignDayTimeCriterion,\r\n 'Campaign Negative Webpage Error': ERROR_ENTITY.CampaignNegativeWebpage,\r\n [getBulkUploadErrorType(BrandListAssociation)]: ERROR_ENTITY.BrandListAssociation,\r\n};\r\n\r\nexport const getErrorsPlaceholders = () => ({\r\n serverErrors: [],\r\n systemErrors: [],\r\n});\r\n\r\nexport const saveCampaignAndLinkedData = ({\r\n campaign: campaignViewModel,\r\n originalCampaign: originalCampaignViewModel,\r\n brandExclusions: brandExclusionsViewModel,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n viewModelToBulkModelForDisclaimerAssociation = null,\r\n}, { scenario, i18n, activityLogger }) => {\r\n const campaignModel = viewModelToBulkModelForCampaign(campaignViewModel, brandExclusionsViewModel);\r\n const locationTargetsModel = viewModelToBulkModelForLocationTargets(campaignViewModel, bundleLocationCriterions);\r\n const adSchedulesModel = viewModelToBulkModelForAdSchedules(campaignViewModel);\r\n const finalUrlExpansionsModel = viewModelToBulkModelForFinalUrlExpansions(campaignViewModel, originalCampaignViewModel);\r\n const conversionGoalsAssociations = {\r\n CampaignConversionGoalAssociations: viewModelToBulkModelForConversionGoals(campaignViewModel, campaignViewModel.data.Id || CampaignNegativeReferenceId),\r\n };\r\n const newCustomerAcquisitionGoal = viewModelToBulkModelForNewCustomerAcquisitionGoals(campaignViewModel);\r\n\r\n const modelToSave = {\r\n ...campaignModel,\r\n CampaignCriterions: [\r\n ...locationTargetsModel,\r\n ...adSchedulesModel,\r\n ],\r\n ...finalUrlExpansionsModel,\r\n ...conversionGoalsAssociations,\r\n ...newCustomerAcquisitionGoal,\r\n };\r\n\r\n let adExtensionAssociations = {};\r\n if (viewModelToBulkModelForDisclaimerAssociation) {\r\n adExtensionAssociations = viewModelToBulkModelForDisclaimerAssociation({ campaignViewModel });\r\n }\r\n _.extend(modelToSave, { ...adExtensionAssociations });\r\n\r\n return createOrUpdateCampaign(modelToSave)\r\n // with bulk the result will have shape of:\r\n // - { ...entityData } - in case of success;\r\n // - { entity: { ...entityData }, errors: [(EditorialError|MTError)] } - in case of error(s).\r\n .then((result) => {\r\n const campaign = bulkModelToViewModelForCampaign({\r\n campaignModel: result,\r\n originalCampaignViewModel: campaignViewModel,\r\n bundleCountries,\r\n });\r\n const { brandExclusions } = bulkModelToViewModelForBrandExclusions({\r\n campaignModel: result,\r\n });\r\n\r\n const data = {\r\n campaign,\r\n brandExclusions,\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n return data;\r\n }, (bulkOrSystemError) => {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n const campaign = entity ?\r\n bulkModelToViewModelForCampaign({\r\n campaignModel: entity,\r\n originalCampaignViewModel: campaignViewModel,\r\n bundleCountries,\r\n errors,\r\n }) :\r\n campaignViewModel;\r\n const { brandExclusions, errors: filteredErrorsAfterBrandExclusions } = bulkModelToViewModelForBrandExclusions({\r\n campaignModel: entity,\r\n errors,\r\n });\r\n\r\n let filteredErrors = filteredErrorsAfterBrandExclusions;\r\n if (campaign.data.Id <= 0) {\r\n filteredErrors = removeReferencedEntityInvalidIdErrors(filteredErrors);\r\n }\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n filteredErrors,\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n );\r\n\r\n const data = {\r\n campaign,\r\n brandExclusions,\r\n ...getErrorsPlaceholders(),\r\n serverErrors,\r\n };\r\n\r\n return _.isEmpty(filteredErrors) ? data : Promise.reject(data);\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`Campaign bulk upsert system error: ${unexpectedBulkErrorToString(bulkOrSystemError)}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n campaign: campaignViewModel,\r\n brandExclusions: brandExclusionsViewModel,\r\n ...getErrorsPlaceholders(),\r\n serverErrors: [genericApiError],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n });\r\n });\r\n};\r\n","import { pick } from 'underscore';\r\nimport { readConversionGoalDetails } from '@bingads-webui-campaign-react/perf-max-data';\r\n\r\nconst whitelistedSchemaPropertyKeys = [\r\n 'IsActiveConversionGoalPresent', 'IsActiveConversionGoalPresentWithValidRevenueValue',\r\n];\r\n\r\nexport const modelToViewModelForConversionGoalDetails = (model) => {\r\n const data = pick(model, whitelistedSchemaPropertyKeys);\r\n\r\n return data;\r\n};\r\n\r\nexport const loadConversionGoalDetails = ({ cid, aid }) => readConversionGoalDetails(cid, aid)\r\n .then(modelToViewModelForConversionGoalDetails);\r\n","import { extend, isEmpty, result, noop } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { assign } from 'xstate';\r\nimport { readCampaignNegativeWebpages, readDayTimeCriterions, readLocationCriterions, readNewCustomerAcquisitionGoals } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { showBudgetBidCampaignNotifications } from '@bingads-webui-campaign/import-shared-utils';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport { initialBrandExclusionsViewModel, initialCampaignViewModel, loadCampaign, modelToViewModelForCampaign, viewModelToModelForCampaign } from '../../model/campaign';\r\nimport { getErrorsPlaceholders, saveCampaignAndLinkedData } from '../../model/campaign-bulk';\r\nimport { loadBundleCountries } from '../../model/campaign-criterions';\r\nimport { loadConversionGoalDetails } from '../../model/conversion-goals-details';\r\n\r\nconst getCampaignId = context =>\r\n result(context, ['data', 'campaign', 'data', 'Id']) ||\r\n result(context, ['stepsData', 'campaignId']);\r\n\r\n/**\r\n * Loads step data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The step will be blocked until the promise resolves.\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n */\r\nexport const loadData = (context) => {\r\n const {\r\n cid, aid, serverContext,\r\n } = context.stepsData;\r\n const { activity = { trace: noop } } = context.data;\r\n activity.trace(`[PmaxWizard] loadData started in campaign settings step. StepId: ${context.id}`);\r\n const campaignId = getCampaignId(context);\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = { dynamic: { ...DynamicPermissions }, ...Permissions };\r\n const {\r\n NewCustomerAcquisition: isNewCustomerAcquisitionEnabled,\r\n } = permissions.dynamic;\r\n\r\n let loadPromises = {\r\n campaign: Promise.resolve(initialCampaignViewModel),\r\n brandExclusions: Promise.resolve(initialBrandExclusionsViewModel),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n conversionGoalDetails: loadConversionGoalDetails({ cid, aid }),\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoals: readNewCustomerAcquisitionGoals(cid, aid) }),\r\n };\r\n if (campaignId) {\r\n loadPromises = extend(loadPromises, {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n // Note: CampaignCriterions are not loaded, but only saved during step life-time.\r\n // It is the responsibility of various targeting controls to load the criterions they manage.\r\n // As an optimization, there are two options:\r\n // 1) Use preFetch (shown below) to pre-load parallel with main data;\r\n // 2) In addition to #1, use stepsData for storing and retrieving\r\n // last edited criterions (can have stale data).\r\n locationCriterions: readLocationCriterions(cid, aid, campaignId),\r\n dayTimeCriterions: readDayTimeCriterions(cid, aid, campaignId),\r\n campaignNegativeWebpages: readCampaignNegativeWebpages(cid, aid, campaignId),\r\n });\r\n }\r\n return Promise.props(loadPromises).then(({\r\n bundleCountriesAndLocationCriterions,\r\n campaign,\r\n brandExclusions,\r\n locationCriterions,\r\n dayTimeCriterions,\r\n campaignNegativeWebpages,\r\n conversionGoalDetails,\r\n newCustomerAcquisitionGoals,\r\n }) => {\r\n let results = {\r\n ...bundleCountriesAndLocationCriterions,\r\n campaign,\r\n brandExclusions,\r\n conversionGoalDetails,\r\n ...getErrorsPlaceholders(),\r\n };\r\n if (campaignId) {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n campaignNegativeWebpagesModel: campaignNegativeWebpages ? campaignNegativeWebpages.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoalsModel: newCustomerAcquisitionGoals ? newCustomerAcquisitionGoals.value : [] }),\r\n });\r\n results = extend(results, {\r\n campaign: campaignData,\r\n originalCampaign: { ...campaignData },\r\n });\r\n }\r\n activity.trace(`[PmaxWizard] loadData succeeded in campaign settings step. StepId: ${context.id}`);\r\n return results;\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxWizard] loadData failed. Error: ${JSON.stringify(errorData)}`);\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n};\r\n\r\nexport const saveData = (context) => {\r\n const { activity = { trace: noop } } = context.data;\r\n\r\n return saveCampaignAndLinkedData({\r\n campaign: context.data.campaign,\r\n originalCampaign: context.data.originalCampaign,\r\n brandExclusions: context.data.brandExclusions,\r\n campaignCriterions: context.data.campaignCriterions,\r\n bundleLocationCriterions: context.data.bundleLocationCriterions,\r\n bundleCountries: context.data.bundleCountries,\r\n }, {\r\n scenario: context.stepsData.scenarioName,\r\n activityLogger: context.stepsData.scenario.createActivity('saveCampaignAndLinkedData'),\r\n i18n: context.stepsData.i18n,\r\n }).then((data) => {\r\n activity.trace(`[PmaxWizard] saveData succeeded. StepId: ${context.id}`);\r\n const { activity: BudgetBidCampaignImportNotificationActivity } = instrumentation.createScenarioAndActivity({\r\n scenarioName: 'BudgetBidCampaignImportNotification',\r\n activityName: 'PmaxCampaignSettingPage',\r\n });\r\n\r\n const initialCampaign = context.data.originalCampaign.data;\r\n const newCampaign = context.data.campaign.data;\r\n showBudgetBidCampaignNotifications({\r\n campaignItemList: [initialCampaign],\r\n oldBudget: initialCampaign.Budget,\r\n newBudget: newCampaign.Budget,\r\n oldBidStrategy: initialCampaign.BiddingScheme,\r\n newBidStrategy: newCampaign.BiddingScheme,\r\n activity: BudgetBidCampaignImportNotificationActivity,\r\n });\r\n return data;\r\n }).catch((bulkOrSystemError) => {\r\n activity.trace(`[PmaxWizard] saveData failed. StepId: ${context.id}`);\r\n return Promise.reject(bulkOrSystemError);\r\n });\r\n};\r\n\r\n\r\nexport const needsLoading = () => true;\r\n\r\nexport const isValid = context => context.data.campaign.isValid;\r\nexport const isDirty = context => context.data.campaign.isDirty || context.data.brandExclusions.isDirty;\r\nconst hasServerErrors = context => !isEmpty(context.data.serverErrors) || !isEmpty(context.data.systemErrors);\r\nexport const needsSaving = context => isDirty(context) || hasServerErrors(context);\r\n\r\nexport const patchStepsData = assign({\r\n stepsData: (context/* , event */) => ({\r\n ...context.stepsData,\r\n campaign: viewModelToModelForCampaign(context.data.campaign),\r\n }),\r\n});\r\nexport const clearErrors = assign({\r\n data: context => ({\r\n ...context.data,\r\n ...getErrorsPlaceholders(),\r\n }),\r\n});\r\nexport const hasIncomingSystemError = () => false;\r\n","import { isEmpty } from 'underscore';\r\nimport { useCallback, useMemo, useContext, useState } from 'react';\r\nimport { useSelector } from '@xstate/react';\r\nimport { isCanceling, StepEvents } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { getBidBudgetTitleDetails, getConversionGoalTitleDetails, getStoreTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useExitWithoutSavingConfirmation } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { useImpulse, usePrevProp, useIsMounted } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { needsSaving } from './step-campaign-settings-impl';\r\nimport { serverErrorsCompare } from '../shared';\r\n\r\nconst doesNeedSavingSelector = state => !isCanceling(state) && needsSaving(state.context);\r\nconst hideStepHeaderSelector = state => state.context.stepInfo.hideStepHeader;\r\nconst scenarioNameSelector = state => state.context.stepsData.scenarioName;\r\nconst campaignObjectiveSelector = state => state.context.stepsData.campaignObjective;\r\nconst serverContextSelector = state => state.context.stepsData.serverContext;\r\nconst campaignIdSelector = state => state.context.stepsData.campaignId;\r\nconst campaignSelector = state => state.context.data.campaign;\r\nconst locationTargetsSelector = state => state.context.data.campaign.data.locationTargets;\r\nconst adSchedulesSelector = state => state.context.data.campaign.data.adSchedules;\r\nconst adSchedulesBulkUpsertModelSelector = state => state.context.data.campaign.data.adSchedulesBulkUpsert;\r\nconst finalUrlExpansionsSelector = state => state.context.data.campaign.data.finalUrlExpansions;\r\nconst finalUrlExpansionOptOutSelector = state => state.context.data.campaign.data.finalUrlExpansionOptOut;\r\nconst finalUrlExpansionsBulkUpsertModelSelector = state => state.context.data.campaign.data.finalUrlExpansionsBulkUpsert;\r\nconst bundleCountriesSelector = state => state.context.data.bundleCountries;\r\nconst bundleLocationCriterionsSelector = state => state.context.data.bundleLocationCriterions;\r\nconst serverErrorsSelector = state => state.context.data.serverErrors;\r\nconst systemErrorsSelector = state => state.context.data.systemErrors;\r\nconst invalidSaveAttemptSelector = state => state.context.invalidSaveAttempt;\r\nconst urlCustomParametersSelector = state => state.context.data.campaign.data.UrlCustomParameters;\r\nconst trackingUrlTemplateSelector = state => state.context.data.campaign.data.TrackingUrlTemplate;\r\nconst finalUrlSuffixSelector = state => state.context.data.campaign.data.FinalUrlSuffix;\r\nconst conversionGoalsSelector = state => state.context.data.campaign.data.conversionGoals;\r\nconst permissionsSelector = state => state.context.stepsData.permissions;\r\nconst currentLocaleSelector = state => state.context.stepsData.serverContext.CurrentLocale;\r\nconst advertiserCustomerIdSelector = state => state.context.stepsData.serverContext.CurrentAccount.AdvertiserCustomerID;\r\nconst conversionGoalsDetailsSelector = state => state.context.data.conversionGoalDetails;\r\nconst autoGeneratedTextOptOutSelector = state => state.context.data.campaign.data.autoGeneratedTextOptOut;\r\nconst autoGeneratedImageOptOutSelector = state => state.context.data.campaign.data.autoGeneratedImageOptOut;\r\nconst savedAddedBrandListIdsSelector = state => state.context.data.brandExclusions.data.savedAddedBrandListIds;\r\nconst savedDeletedBrandListIdsSelector = state => state.context.data.brandExclusions.data.savedDeletedBrandListIds;\r\nconst costPerSaleOptOutSelector = state => state.context.data.campaign.data.costPerSaleOptOut;\r\nconst currencySelector = state => state.context.stepsData.serverContext.CurrentAccount.CurrencyCode;\r\nconst newCustomerAcquisitionSelector = state => state.context.data.campaign.data.newCustomerAcquisition;\r\nconst newCustomerAcquisitionOptOutSelector = state => state.context.data.campaign.data.newCustomerAcquisitionOptOut;\r\n\r\nexport const useStepCampaignSettingsState = (stepService, activity) => {\r\n const isMounted = useIsMounted();\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const hideStepHeader = useSelector(stepService, hideStepHeaderSelector);\r\n const scenarioName = useSelector(stepService, scenarioNameSelector);\r\n\r\n const campaignObjective = useSelector(stepService, campaignObjectiveSelector);\r\n const serverContext = useSelector(stepService, serverContextSelector);\r\n const campaignId = useSelector(stepService, campaignIdSelector);\r\n const campaign = useSelector(stepService, campaignSelector);\r\n const locationTargets = useSelector(stepService, locationTargetsSelector);\r\n const adSchedules = useSelector(stepService, adSchedulesSelector);\r\n const adSchedulesBulkUpsert = useSelector(stepService, adSchedulesBulkUpsertModelSelector);\r\n const finalUrlExpansions = useSelector(stepService, finalUrlExpansionsSelector);\r\n const finalUrlExpansionOptOut = useSelector(stepService, finalUrlExpansionOptOutSelector);\r\n const finalUrlExpansionsBulkUpsert = useSelector(stepService, finalUrlExpansionsBulkUpsertModelSelector);\r\n const autoGeneratedTextOptOut = useSelector(stepService, autoGeneratedTextOptOutSelector);\r\n const autoGeneratedImageOptOut = useSelector(stepService, autoGeneratedImageOptOutSelector);\r\n const bundleCountries = useSelector(stepService, bundleCountriesSelector);\r\n const bundleLocationCriterions = useSelector(stepService, bundleLocationCriterionsSelector);\r\n const urlCustomParameters = useSelector(stepService, urlCustomParametersSelector);\r\n const trackingUrlTemplate = useSelector(stepService, trackingUrlTemplateSelector);\r\n const finalUrlSuffix = useSelector(stepService, finalUrlSuffixSelector);\r\n const conversionGoalsState = useSelector(stepService, conversionGoalsSelector);\r\n const conversionGoalsDetails = useSelector(stepService, conversionGoalsDetailsSelector);\r\n const savedAddedBrandListIds = useSelector(stepService, savedAddedBrandListIdsSelector);\r\n const savedDeletedBrandListIds = useSelector(stepService, savedDeletedBrandListIdsSelector);\r\n const costPerSaleOptOut = useSelector(stepService, costPerSaleOptOutSelector);\r\n const newCustomerAcquisition = useSelector(stepService, newCustomerAcquisitionSelector);\r\n const newCustomerAcquisitionOptOut = useSelector(stepService, newCustomerAcquisitionOptOutSelector);\r\n\r\n const doesNeedSaving = useSelector(stepService, doesNeedSavingSelector);\r\n const serverErrors = useSelector(stepService, serverErrorsSelector);\r\n const systemErrors = useSelector(stepService, systemErrorsSelector);\r\n const invalidSaveAttempt = useSelector(stepService, invalidSaveAttemptSelector);\r\n const locale = useSelector(stepService, currentLocaleSelector);\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n const advertiserCustomerId = useSelector(stepService, advertiserCustomerIdSelector);\r\n const currency = useSelector(stepService, currencySelector);\r\n\r\n const [navigationConfirmationPrompt] = useExitWithoutSavingConfirmation(doesNeedSaving, stepService, i18n);\r\n\r\n const conversionGoals = useMemo(() => ({\r\n conversionGoals: conversionGoalsState,\r\n }), [conversionGoalsState]);\r\n const conversionGoalsTitleDetails = useMemo(() => getConversionGoalTitleDetails(i18n, conversionGoalsState), [i18n, conversionGoalsState]);\r\n\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n }), [trackingUrlTemplate, finalUrlSuffix, urlCustomParameters]);\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n const biddingScheme = useMemo(() => ({ BiddingScheme: campaign.data.BiddingScheme }), [campaign.data.BiddingScheme]);\r\n const bidBudgetTitleDetails = useMemo(\r\n () => getBidBudgetTitleDetails(serverContext, i18n, campaign.data.BiddingScheme, campaign.data.Budget),\r\n [campaign.data.BiddingScheme, campaign.data.Budget, i18n, serverContext]\r\n );\r\n\r\n const storeContainerData = useMemo(() => ({\r\n ProviderId: campaign.data.ProviderId,\r\n IsFeedFiltered: campaign.data.IsFeedFiltered,\r\n SalesCountry: campaign.data.SalesCountry,\r\n FeedLabel: campaign.data.FeedLabel,\r\n LocalInventoryAdsEnabled: campaign.data.LocalInventoryAdsEnabled,\r\n }), [campaign.data.ProviderId, campaign.data.IsFeedFiltered, campaign.data.SalesCountry, campaign.data.FeedLabel, campaign.data.LocalInventoryAdsEnabled]);\r\n\r\n const [storesData, setStoresData] = useState({ error: undefined, stores: {}, countries: {} });\r\n const onStoreDataLoaded = useCallback(({ error, stores = {}, countries = {} }) => {\r\n if (isMounted.current) {\r\n setStoresData({ error, stores, countries });\r\n }\r\n }, [isMounted]);\r\n\r\n const storeTitleDetails = useMemo(() => getStoreTitleDetails(i18n, storesData, storeContainerData), [i18n, storesData, storeContainerData]);\r\n\r\n const onCampaignValidation = useCallback((results) => {\r\n if (!isMounted.current) return;\r\n const { data: newCampaignData, ...restResults } = results;\r\n const dataPatch = {\r\n campaign: {\r\n ...campaign,\r\n data: {\r\n ...campaign.data,\r\n ...newCampaignData,\r\n },\r\n ...restResults,\r\n },\r\n activity,\r\n };\r\n // log('UPDATE_VALIDATION, results=_, dataPatch=_', results, dataPatch);\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, campaign, isMounted, activity]);\r\n\r\n // This callback tracks user-made changes to the page feeds selection.\r\n const onPageFeedsChange = useCallback((selectedPageFeeds) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n campaign: {\r\n ...campaign,\r\n isDirty: true,\r\n data: {\r\n ...campaign.data,\r\n pageFeeds: selectedPageFeeds,\r\n },\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, campaign, isMounted]);\r\n\r\n const [reportedSelectedPageFeeds, setReportedSelectedPageFeeds] = useState([]);\r\n // This callback tracks the page feeds selection reported by the page feed selector\r\n // and uses the reported information to update the page feeds details.\r\n const onSelectedPageFeedsUpdate = useCallback((selectedPageFeeds) => {\r\n if (!isMounted.current) return;\r\n setReportedSelectedPageFeeds(selectedPageFeeds);\r\n }, [isMounted]);\r\n const pageFeedsDetails = useMemo(\r\n () => {\r\n if (isEmpty(reportedSelectedPageFeeds)) {\r\n return i18n.getString(_TL_('Upload all the relevant URLs for your campaign by spreadsheet.'));\r\n }\r\n if (reportedSelectedPageFeeds.length === 1) {\r\n return i18n.getString(_TL_('You’ve successfully added 1 page feed.'));\r\n }\r\n return i18n.getString(_TL_('You’ve successfully added {{number}} page feeds.'), { number: reportedSelectedPageFeeds.length });\r\n },\r\n [i18n, reportedSelectedPageFeeds]\r\n );\r\n\r\n // This callback tracks user-made changes to the brand lists selection.\r\n const onBrandListsChange = useCallback((selectedBrandLists, [deletedBrandListIds, addedBrandListIds]) => {\r\n if (!isMounted.current) return;\r\n const dataPatch = {\r\n brandExclusions: {\r\n isDirty: true,\r\n data: {\r\n deletedBrandListIds,\r\n addedBrandListIds,\r\n },\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, isMounted]);\r\n\r\n const [reportedSelectedBrandLists, setReportedSelectedBrandLists] = useState([]);\r\n // This callback tracks the brand lists selection reported by the brand list selector\r\n // and uses the reported information to update the brand lists panel details.\r\n const onSelectedBrandListsUpdate = useCallback((selectedBrandLists) => {\r\n if (!isMounted.current) return;\r\n setReportedSelectedBrandLists(selectedBrandLists);\r\n }, [isMounted]);\r\n const brandListsDetails = useMemo(\r\n () => {\r\n if (isEmpty(reportedSelectedBrandLists)) {\r\n return i18n.getString(_TL_('Add brand exclusions so that your ads won’t show on search queries that mention those brands.'));\r\n }\r\n if (reportedSelectedBrandLists.length === 1) {\r\n return i18n.getString(_TL_('You’ve added 1 brand list, which makes it so that your ads won’t show on search queries that mention those brands.'));\r\n }\r\n return i18n.getString(_TL_('You’ve added {{number}} brand lists, which makes it so that your ads won’t show on search queries that mention those brands.'), { number: reportedSelectedBrandLists.length });\r\n },\r\n [i18n, reportedSelectedBrandLists]\r\n );\r\n\r\n const autoGenAssetsSummary = useMemo(() => {\r\n if (finalUrlExpansionOptOut && autoGeneratedTextOptOut && autoGeneratedImageOptOut) {\r\n return i18n.getString(_TL_('Off: Do not use autogenerated assets in ads.'));\r\n }\r\n return i18n.getString(_TL_('On: You’ve enabled autogenerated assets for your ads.'));\r\n }, [i18n, finalUrlExpansionOptOut, autoGeneratedTextOptOut, autoGeneratedImageOptOut]);\r\n const autoGenAssetsData = {\r\n finalUrlExpansions,\r\n options: {\r\n finalUrlExpansionOptOut,\r\n autoGeneratedTextOptOut,\r\n autoGeneratedImageOptOut,\r\n },\r\n };\r\n\r\n // eslint-disable-next-line no-bitwise\r\n const [, hasInvalidSaveAttemptChanged] = usePrevProp(invalidSaveAttempt | 0);\r\n const [, hasServerErrorsChanged] = usePrevProp(serverErrors, serverErrorsCompare);\r\n const areBeaconsActive = useImpulse(hasInvalidSaveAttemptChanged || hasServerErrorsChanged);\r\n\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n if (hasInvalidSaveAttemptChanged) {\r\n setShowAllValidationErrors(true);\r\n }\r\n\r\n const state = {\r\n isMounted,\r\n scenarioName,\r\n campaign,\r\n biddingScheme,\r\n bidBudgetTitleDetails,\r\n adSchedules,\r\n adSchedulesBulkUpsert,\r\n finalUrlExpansions,\r\n finalUrlExpansionsBulkUpsert,\r\n finalUrlExpansionOptOut,\r\n locationTargets,\r\n conversionGoals,\r\n conversionGoalsTitleDetails,\r\n conversionGoalsDetails,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n campaignId,\r\n urlOptions,\r\n urlOptionsDetails,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n systemErrors,\r\n navigationConfirmationPrompt,\r\n campaignObjective,\r\n storeContainerData,\r\n storeTitleDetails,\r\n permissions,\r\n locale,\r\n advertiserCustomerId,\r\n pageFeedsDetails,\r\n autoGenAssetsData,\r\n autoGenAssetsSummary,\r\n brandListsDetails,\r\n savedAddedBrandListIds,\r\n savedDeletedBrandListIds,\r\n costPerSaleOptOut,\r\n currency,\r\n newCustomerAcquisition,\r\n newCustomerAcquisitionOptOut,\r\n };\r\n const api = {\r\n onCampaignValidation, onStoreDataLoaded, onPageFeedsChange, onSelectedPageFeedsUpdate, onBrandListsChange, onSelectedBrandListsUpdate,\r\n };\r\n\r\n return [state, api];\r\n};\r\n","export const getStepCampaignSettingsStyles = (_, { palette = {} }) => ({\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n moreBasicCampaignSection: {\r\n '& .advanced-scheduling-grid': {\r\n '& .alert-info-inline': {\r\n '& a:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n },\r\n },\r\n },\r\n collapsiblePanel: {\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n marginLeft: '-8px', // compensate 8px padding on the left of icon\r\n color: palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n },\r\n\r\n '& .panel-collapse': {\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n\r\n advancedBidStrategyContent: {\r\n '& .toggle-icon': {\r\n visibility: 'hidden',\r\n },\r\n },\r\n\r\n header: {\r\n marginBottom: 20,\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useMemo, useCallback, useEffect, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { map, without } from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n ConversionBasedBiddingBanner,\r\n getAdScheduleDetails,\r\n getLocationTargetTitleDetails,\r\n getFinalUrlExpansionTitleDetails,\r\n} from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedBootstrapPanel,\r\n ValidatedFixedPanel,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { Link, Stack, Label } from '@bingads-webui-react/fabric-control';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { ValidatedLegacyFinalUrlExpansion } from '@bingads-webui-campaign-react/legacy-final-url-expansion';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport {\r\n FormErrorGroup, UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n entityIs, andComp, propertyIs, anyComp, notComp, StandardControlAdapter,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup, FocusableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { withUnvalidatedControlErrors, withContainerErrors, withControlErrorHandling, FormErrorBeaconAdapter } from '@bingads-webui-campaign-react/error-handling';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { StoreSelectContainer } from '@bingads-webui-campaign-react/store-select';\r\nimport { ValidatedUrlOptionsParameter } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport {\r\n LanguageTargetValidatorFactory,\r\n ValidatedLanguageTarget,\r\n ValidatedLegacyBudget,\r\n ValidatedLegacyBidStrategy,\r\n ValidatedLocationTargetSetting,\r\n ValidatedConversionGoals\r\n} from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { withStepLoadingShell } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { PageFeedSelectorSection } from '@bingads-webui-campaign-react/page-feed-selector';\r\nimport { BrandListsPicker } from '@bingads-webui-campaign-react/brand-lists-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ValidatedAutoGeneratedAssets } from '@bingads-webui-campaign-react/auto-generated-assets';\r\nimport { ValidatedCostPerSale } from '@bingads-webui-campaign-react/cost-per-sale-option';\r\nimport { ValidatedNewCustomerAcquisition, ValidatedNewCustomerAcquisitionHeader, newCustomerAcquisitionServerErrorFilter } from '@bingads-webui-campaign-react/new-customer-acquisition';\r\nimport { useStepCampaignSettingsState } from './use-step-campaign-settings-state';\r\nimport { apiErrorMapper, ERROR_ENTITY } from '../../model/api-errors';\r\nimport { ScenarioName, campaignLanguageStrings } from '../../common/constants';\r\nimport {\r\n ServerValidatedRemainingCharsValidatedTextField,\r\n} from '../shared';\r\nimport { getStepCampaignSettingsStyles } from './step-campaign-settings-styles';\r\nimport BudgetBidImg from './media/budget-bid.svg';\r\nimport AdScheduleImg from './media/ad-schedule.svg';\r\nimport UrlOptionsImg from './media/campaign-url-options.svg';\r\nimport ConversionsImg from './media/conversions.svg';\r\nimport FinalUrlExpansionsImg from './media/final-url-expansion.svg';\r\nimport LanguageImg from './media/language.svg';\r\nimport LocationImg from './media/location.svg';\r\nimport ShoppingImg from './media/shopping.svg';\r\nimport PageFeedsImg from './media/page-feeds.svg';\r\nimport AutoGenAssetsImg from './media/auto-gen-assets.svg';\r\nimport BrandExclusionsImg from './media/brand-exclusions.svg';\r\nimport CostPerSaleImg from './media/cost-per-sale.svg';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\n\r\nconst campaignNameProp = andComp(entityIsCampaign, propertyIs('Name'));\r\nconst campaignBudgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\nconst campaignBiddingSchemeProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst campaignLanguagesProp = andComp(entityIsCampaign, propertyIs('Languages'));\r\nconst feedAssociationsProp = andComp(entityIsCampaign, propertyIs('FeedAssociations'));\r\nconst campaignCPSOptOutProp = andComp(entityIsCampaign, propertyIs('CostPerSaleOptOut'));\r\nconst campaignLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\nconst campaignDayTimeCriterions = entityIs(ERROR_ENTITY.CampaignDayTimeCriterion);\r\nconst campaignNegativeWebPages = entityIs(ERROR_ENTITY.CampaignNegativeWebpage);\r\nconst campaignUrlOptionsProperties = andComp(\r\n entityIsCampaign,\r\n anyComp(\r\n propertyIs('TrackingUrlTemplate'),\r\n propertyIs('FinalUrlSuffix'),\r\n propertyIs('UrlCustomParameters')\r\n )\r\n);\r\nconst brandListAssociationEntity = entityIs(ERROR_ENTITY.BrandListAssociation);\r\n\r\nconst notCampaignUrlOptionsProperties = notComp(campaignUrlOptionsProperties);\r\nconst ServerValidatedLegacyBudget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyBudget, { filter: campaignBudgetProp }));\r\nconst ServerValidatedLegacyBidStrategy = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyBidStrategy, { filter: campaignBiddingSchemeProp }));\r\nconst ServerValidatedLanguageTarget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLanguageTarget, { filter: campaignLanguagesProp }));\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLocationTargetSetting, { filter: campaignLocationCriterions }));\r\nconst ServerValidatedLegacyAdSchedule = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyAdSchedule, { filter: campaignDayTimeCriterions }));\r\nconst ServerValidatedLegacyFinalUrlExpansion = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyFinalUrlExpansion, { filter: campaignNegativeWebPages }));\r\nconst ServerValidatedPageFeedSelectorSection = withControlErrorHandling(withContainerErrors(PageFeedSelectorSection, { filter: feedAssociationsProp, Adapter: StandardControlAdapter() }), [FocusableActuator], [FormErrorBeaconAdapter]);\r\nconst ServerValidatedBrandListsPicker = withControlErrorHandling(withContainerErrors(BrandListsPicker, { filter: brandListAssociationEntity, Adapter: StandardControlAdapter() }), [FocusableActuator], [FormErrorBeaconAdapter]);\r\nconst ServerValidatedAutoGeneratedAssets = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedAutoGeneratedAssets, { filter: campaignNegativeWebPages }));\r\nconst ServerValidatedCostPerSale = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedCostPerSale, { filter: campaignCPSOptOutProp }));\r\nconst ServerValidatedNewCustomerAcquisition = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedNewCustomerAcquisition, { filter: newCustomerAcquisitionServerErrorFilter }));\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nconst StepCampaignSettings = (props) => {\r\n const {\r\n stepService,\r\n scope,\r\n } = props;\r\n\r\n const activity = useContext(ActivityContext);\r\n const [stepState, stepApi] = useStepCampaignSettingsState(stepService, activity);\r\n\r\n const [adScheduleView, setAdScheduleView] = useState(null);\r\n const setAdScheduleViewCallback = useCallback((view) => {\r\n setAdScheduleView(view);\r\n }, []);\r\n const [finalUrlExpansionsView, setFinalUrlExpansionsView] = useState(null);\r\n const setFinalUrlExpansionsViewCallback = useCallback((view) => {\r\n setFinalUrlExpansionsView(view);\r\n }, []);\r\n\r\n const {\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n scenarioName,\r\n campaignId,\r\n campaign,\r\n campaignObjective,\r\n biddingScheme,\r\n bidBudgetTitleDetails,\r\n locationTargets,\r\n adSchedules,\r\n conversionGoals,\r\n conversionGoalsTitleDetails,\r\n conversionGoalsDetails,\r\n finalUrlExpansions,\r\n finalUrlExpansionOptOut,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n urlOptions,\r\n urlOptionsDetails,\r\n serverErrors,\r\n systemErrors,\r\n areBeaconsActive,\r\n showAllValidationErrors,\r\n navigationConfirmationPrompt,\r\n storeContainerData,\r\n storeTitleDetails,\r\n permissions,\r\n locale,\r\n advertiserCustomerId,\r\n pageFeedsDetails,\r\n autoGenAssetsSummary,\r\n autoGenAssetsData,\r\n brandListsDetails,\r\n savedAddedBrandListIds,\r\n savedDeletedBrandListIds,\r\n costPerSaleOptOut,\r\n currency,\r\n newCustomerAcquisition,\r\n newCustomerAcquisitionOptOut,\r\n } = stepState;\r\n const {\r\n onCampaignValidation, onStoreDataLoaded, onPageFeedsChange, onSelectedPageFeedsUpdate,\r\n onBrandListsChange, onSelectedBrandListsUpdate,\r\n } = stepApi;\r\n\r\n const {\r\n PerformanceMaxCampaignsPageFeeds: IsPerformanceMaxCampaignsPageFeedsEnabled,\r\n PerformanceMaxCampaignsAutoGenAssetControl: IsPerformanceMaxCampaignsAutoGenAssetControlEnabled,\r\n PerformanceMaxInCnMarket: IsPerformanceMaxInCnMarketEnabled,\r\n BrandExclusion: IsBrandExclusionEnabled,\r\n SupportCPSForPmax: IsSupportCPSForPmaxEnabled,\r\n EnableBudgetSuggestion: showBudgetSuggestion,\r\n NewCustomerAcquisition: IsNewCustomerAcquisitionEnabled,\r\n ConversionAssociationWarning: IsConversionAssociationWarningEnabled,\r\n } = permissions.dynamic;\r\n\r\n const { IsDomesticSimplifiedChineseEnabled } = permissions;\r\n\r\n const isFeatureBlockedForCnMarket = IsDomesticSimplifiedChineseEnabled && IsPerformanceMaxInCnMarketEnabled;\r\n\r\n useEffect(() => {\r\n activity.trace('[PmaxWizard] StepCampaignSettings mounted');\r\n }, [activity]);\r\n\r\n const effectiveCampaignId = useMemo(\r\n () => {\r\n let savedCampaignId;\r\n if (campaignId > 0) {\r\n savedCampaignId = campaignId;\r\n } else if (campaign.data.Id > 0) {\r\n savedCampaignId = campaign.data.Id;\r\n } else {\r\n savedCampaignId = undefined;\r\n }\r\n return savedCampaignId;\r\n },\r\n [campaignId, campaign.data.Id]\r\n );\r\n\r\n const classes = useDefaultStyles(getStepCampaignSettingsStyles);\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n flipCampaignSettingsExpandAllState,\r\n ] = useCollapseState(\r\n ['campaign', 'locations', 'language-target', 'budget-bid', 'new-customer-acquisition', 'conversions', 'shopping-ads', 'advanced-bid-strategy'] /* all sections */,\r\n ['campaign', 'locations', 'language-target', 'budget-bid', 'new-customer-acquisition', 'conversions', 'shopping-ads'] /* initially expanded sections */\r\n );\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setCampaignSettingsExpandedSections }),\r\n [setCampaignSettingsExpandedSections]\r\n );\r\n\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n flipMoreSettingsExpandAllState,\r\n ] = useCollapseState(\r\n ['ad-schedule', 'start-end-dates', 'final-url-expansion', 'page-feeds', 'auto-gen-assets', 'brand-exclusions', 'campaign-url-options'] /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n const moreBasicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreSettingsExpandedSections }),\r\n [setMoreSettingsExpandedSections]\r\n );\r\n\r\n const basicSettingsSection = useMemo(() => {\r\n const campaignPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n );\r\n const bidBudgetPanel = (\r\n }\r\n formErrorProps={{ showAllValidationErrors: true }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'budget-bid',\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n const newCustomerAcquisitionPanel = (\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'new-customer-acquisition',\r\n }}\r\n >\r\n \r\n \r\n );\r\n const advancedBidStrategy = (\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('Advanced bid strategy'))}\r\n \r\n \r\n \r\n \r\n
\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n isActive\r\n >\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n );\r\n const locationPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'locations',\r\n }}\r\n >\r\n \r\n \r\n );\r\n const languagePanel = (\r\n i18n.getString(campaignLanguageStrings[lang] || lang)).toString()}\r\n icon={LanguageImg}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'language-target',\r\n }}\r\n >\r\n \r\n \r\n );\r\n const conversionPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'conversions',\r\n }}\r\n >\r\n \r\n \r\n );\r\n const shoppingAdsPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'shopping-ads',\r\n }}\r\n >\r\n \r\n \r\n );\r\n\r\n let generalSettings = [\r\n campaignPanel,\r\n bidBudgetPanel,\r\n newCustomerAcquisitionPanel,\r\n advancedBidStrategy,\r\n locationPanel,\r\n languagePanel,\r\n conversionPanel,\r\n shoppingAdsPanel,\r\n ];\r\n let sellFromCatalogSettings = [\r\n campaignPanel,\r\n bidBudgetPanel,\r\n newCustomerAcquisitionPanel,\r\n advancedBidStrategy,\r\n shoppingAdsPanel,\r\n locationPanel,\r\n languagePanel,\r\n conversionPanel,\r\n ];\r\n\r\n if (!IsSupportCPSForPmaxEnabled) {\r\n generalSettings = without(generalSettings, advancedBidStrategy);\r\n sellFromCatalogSettings = without(sellFromCatalogSettings, advancedBidStrategy);\r\n }\r\n\r\n if (!IsNewCustomerAcquisitionEnabled) {\r\n generalSettings = without(generalSettings, newCustomerAcquisitionPanel);\r\n sellFromCatalogSettings = without(sellFromCatalogSettings, newCustomerAcquisitionPanel);\r\n }\r\n\r\n return (\r\n
\r\n \r\n {campaignSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n {campaignObjective === 'ShoppingCampaign' ? sellFromCatalogSettings\r\n : generalSettings}\r\n \r\n
\r\n );\r\n }, [i18n, bidBudgetTitleDetails, basicSettingsExpand, campaign, campaignId, showBudgetSuggestion, scenarioName, currency, biddingScheme, scope, conversionGoalsDetails, newCustomerAcquisitionOptOut, newCustomerAcquisition, advertiserCustomerId, classes.collapsiblePanel, classes.advancedBidStrategyContent, locationTargets, bundleCountries, bundleLocationCriterions, locale, permissions, conversionGoalsTitleDetails, conversionGoals, IsConversionAssociationWarningEnabled, storeTitleDetails, campaignObjective, storeContainerData, onStoreDataLoaded, IsSupportCPSForPmaxEnabled, IsNewCustomerAcquisitionEnabled, flipCampaignSettingsExpandAllState, campaignSettingsExpandedSections, allCampaignSettingsSections, setCampaignSettingsExpandedSections, costPerSaleOptOut]);\r\n\r\n const moreBasicSettingsSection = useMemo(() => (\r\n
\r\n \r\n \r\n {moreSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'ad-schedule',\r\n }}\r\n >\r\n \r\n \r\n {!IsPerformanceMaxCampaignsAutoGenAssetControlEnabled && !isFeatureBlockedForCnMarket &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'final-url-expansion',\r\n }}\r\n >\r\n \r\n \r\n }\r\n {IsPerformanceMaxCampaignsPageFeedsEnabled &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'page-feeds',\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n }\r\n {IsPerformanceMaxCampaignsAutoGenAssetControlEnabled && !isFeatureBlockedForCnMarket &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'auto-gen-assets',\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n }\r\n {IsBrandExclusionEnabled &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'brand-exclusions',\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n }\r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'campaign-url-options',\r\n }}\r\n >\r\n
\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n \r\n
\r\n \r\n
\r\n
), [classes.moreBasicCampaignSection, classes.urlOptionsContainer, i18n, flipMoreSettingsExpandAllState, moreSettingsExpandedSections, allMoreSettingsSections, setMoreSettingsExpandedSections, adScheduleView, moreBasicSettingsExpand, campaign, adSchedules, setAdScheduleViewCallback, IsPerformanceMaxCampaignsAutoGenAssetControlEnabled, isFeatureBlockedForCnMarket, finalUrlExpansionsView, finalUrlExpansionOptOut, finalUrlExpansions, setFinalUrlExpansionsViewCallback, IsPerformanceMaxCampaignsPageFeedsEnabled, pageFeedsDetails, advertiserCustomerId, scope.values.aid, effectiveCampaignId, onPageFeedsChange, onSelectedPageFeedsUpdate, autoGenAssetsSummary, autoGenAssetsData, IsBrandExclusionEnabled, brandListsDetails, onBrandListsChange, onSelectedBrandListsUpdate, savedAddedBrandListIds, savedDeletedBrandListIds, urlOptionsDetails, urlOptions]);\r\n return (\r\n \r\n \r\n \r\n {!hideStepHeader &&\r\n <>\r\n

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

\r\n {i18n.getString(_TL_('Tell us about your campaign, how much you want to spend, and where you want your ads to appear.'))}\r\n \r\n }\r\n \r\n
\r\n \r\n
\r\n \r\n {basicSettingsSection}\r\n {moreBasicSettingsSection}\r\n \r\n {navigationConfirmationPrompt}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nStepCampaignSettings.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const StepCampaignSettingsShell = withStepLoadingShell(StepCampaignSettings);\r\n","import { withScope } from '@bingads-webui-react/scope-service';\r\nimport { stepStateMachine } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { STEP_PATHS } from '../../common/constants';\r\nimport { StepCampaignSettingsShell } from './step-campaign-settings';\r\nimport { initialCampaignCriterionsViewModel } from '../../model/campaign-criterions';\r\nimport { initialBrandExclusionsViewModel, initialCampaignViewModel } from '../../model/campaign';\r\nimport { getErrorsPlaceholders } from '../../model/campaign-bulk';\r\nimport { loadData, saveData, patchStepsData, clearErrors, needsLoading, isValid, isDirty, needsSaving, hasIncomingSystemError } from './step-campaign-settings-impl';\r\n\r\nexport const stepCampaignSettingsWizardConfig = {\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n title: _TL_('Campaign settings'),\r\n StepMachine: stepStateMachine,\r\n StepMachineOptions: (stepInfo, initialStepsData) => ({\r\n machineId: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n initialContext: {\r\n id: stepInfo.id,\r\n stepsData: initialStepsData,\r\n stepInfo,\r\n data: {\r\n campaign: initialCampaignViewModel,\r\n campaignCriterions: initialCampaignCriterionsViewModel,\r\n brandExclusions: initialBrandExclusionsViewModel,\r\n ...getErrorsPlaceholders(),\r\n },\r\n invalidSaveAttempt: 0,\r\n },\r\n actions: {\r\n patchStepsData,\r\n clearErrors,\r\n },\r\n guards: {\r\n needsLoading,\r\n isValid,\r\n isDirty,\r\n needsSaving,\r\n hasIncomingSystemError,\r\n },\r\n }),\r\n StepComponent: withScope(StepCampaignSettingsShell),\r\n stepRepositoryConfig: {\r\n saveData,\r\n loadData,\r\n },\r\n};\r\n","import { ScenarioName, STEP_PATHS } from './constants';\r\nimport { stepAssetGroupWizardConfig, stepCampaignSettingsWizardConfig } from '../steps';\r\n\r\nconst STEP_INFOS = {\r\n [STEP_PATHS.CAMPAIGN_SETTINGS]: stepCampaignSettingsWizardConfig,\r\n [STEP_PATHS.ASSET_GROUP]: stepAssetGroupWizardConfig,\r\n};\r\n\r\nconst applyCommonSettingsPageSettings = stepInfo => ({\r\n ...stepInfo,\r\n hideStepHeader: true,\r\n});\r\n\r\n// Scenarios\r\n// I. Creation\r\n// 1. Campaign creation\r\n// 2. Asset group\r\n// II. Settings\r\n// 1. Campaign settings\r\n// 2. Asset group settings\r\n\r\nconst PERF_MAX_CAMPAIGN_CREATION = {\r\n scenarioName: ScenarioName.PerformanceMaxCampaignCreation,\r\n isEditing: false,\r\n stepList: [\r\n STEP_INFOS[STEP_PATHS.CAMPAIGN_SETTINGS],\r\n STEP_INFOS[STEP_PATHS.ASSET_GROUP],\r\n ],\r\n};\r\n\r\nconst PERF_MAX_ASSET_GROUP_CREATION = {\r\n scenarioName: ScenarioName.PerformanceMaxAssetGroupCreation,\r\n isEditing: false,\r\n isCenteredLayout: true,\r\n stepList: [\r\n STEP_INFOS[STEP_PATHS.ASSET_GROUP],\r\n ],\r\n};\r\n\r\nconst PERF_MAX_CAMPAIGN_SETTINGS = {\r\n scenarioName: ScenarioName.PerformanceMaxCampaignSettings,\r\n isEditing: true,\r\n stepList: [\r\n applyCommonSettingsPageSettings(STEP_INFOS[STEP_PATHS.CAMPAIGN_SETTINGS]),\r\n ],\r\n};\r\n\r\nconst PERF_MAX_ASSET_GROUP_SETTINGS = {\r\n scenarioName: ScenarioName.PerformanceMaxAssetGroupSettings,\r\n isEditing: true,\r\n isCenteredLayout: true,\r\n stepList: [\r\n applyCommonSettingsPageSettings(STEP_INFOS[STEP_PATHS.ASSET_GROUP]),\r\n ],\r\n};\r\n\r\nexport const PERF_MAX_CAMPAIGN_CRUD_SCENARIOS = {\r\n PERF_MAX_CAMPAIGN_CREATION,\r\n PERF_MAX_ASSET_GROUP_CREATION,\r\n PERF_MAX_CAMPAIGN_SETTINGS,\r\n PERF_MAX_ASSET_GROUP_SETTINGS,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { PERF_MAX_CAMPAIGN_CRUD_SCENARIOS } from '../common/perf-max-campaign-crud-scenarios';\r\n\r\nexport const PerfMaxAssetGroupCreationPage = (props) => {\r\n const routeToNavigateToWhenDone = '/campaign/vnext/assetgroups';\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nPerfMaxAssetGroupCreationPage.propTypes = {\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { PERF_MAX_CAMPAIGN_CRUD_SCENARIOS } from '../common/perf-max-campaign-crud-scenarios';\r\n\r\nexport const PerfMaxAssetGroupSettingsPage = (props) => {\r\n const routeToNavigateToWhenDone = '/campaign/vnext/assetgroups';\r\n const scopeToRemoveWhenDone = ['assetGroupId'];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nPerfMaxAssetGroupSettingsPage.propTypes = {\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n};\r\n","import { isUndefined } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport React, { useEffect, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { withCreationHeader } from '@bingads-webui-campaign-react/campaign-adgroup-creation';\r\nimport { ProgressiveLoadingBlock } from '@bingads-webui-campaign-react/shell-ui-common';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { PERF_MAX_CAMPAIGN_CRUD_SCENARIOS } from '../common/perf-max-campaign-crud-scenarios';\r\n\r\nconst getCampaignObjective = () => {\r\n let campaignObjective = config.get('CampaignObjective');\r\n if (isUndefined(campaignObjective)) {\r\n if (localStorage.supportsStorage()) {\r\n campaignObjective = localStorage.get('CampaignObjective');\r\n config.set('CampaignObjective', campaignObjective);\r\n }\r\n }\r\n\r\n return campaignObjective;\r\n};\r\n\r\nconst StepWizardWithDynamicOptions = ({\r\n dynamicOptions, campaignObjective, routeToNavigateToWhenDone, ...restProps\r\n}) => {\r\n const extraStepsData = useMemo(() => ({ campaignObjective, ...dynamicOptions }), [campaignObjective, dynamicOptions]);\r\n return (\r\n \r\n );\r\n};\r\n\r\nStepWizardWithDynamicOptions.propTypes = {\r\n dynamicOptions: PropTypes.shape({}).isRequired,\r\n campaignObjective: PropTypes.string.isRequired,\r\n routeToNavigateToWhenDone: PropTypes.string.isRequired,\r\n};\r\n\r\nconst PerfMaxCampaignCreationPageImpl = ((props) => {\r\n const campaignObjective = useMemo(() => getCampaignObjective(), []);\r\n const routeToNavigateToWhenDone = useMemo(() => getRoutePathById(props.siteMap, 'campaigns'), [props.siteMap]);\r\n\r\n const {\r\n adExtensionsDynamicFeaturesLoader, permissions, theme, scope, instrumentation, i18n,\r\n } = props;\r\n const dynamicOptionsLoader = useCallback(\r\n () => Promise.props({\r\n adExtensionsDynamicFeatures: adExtensionsDynamicFeaturesLoader({\r\n permissions,\r\n theme,\r\n scope,\r\n instrumentation,\r\n i18n,\r\n }),\r\n adExtensionsAssociationsFactory:\r\n import(/* webpackChunkName: \"perf-max-campaign-creation\" */'@bingads-webui-campaign-react/ad-extensions-associations-factory')\r\n .then(({ extensionsAssociationsFactory, getObjectiveExtensions }) => ({ extensionsAssociationsFactory, getObjectiveExtensions })),\r\n })\r\n .then(({ adExtensionsDynamicFeatures, adExtensionsAssociationsFactory }) => ({\r\n adExtensionsDynamicFeatures,\r\n adExtensionsAssociationsFactory,\r\n }))\r\n .then(dynamicOptions => ({\r\n default: withProps({ dynamicOptions }, StepWizardWithDynamicOptions),\r\n })),\r\n [adExtensionsDynamicFeaturesLoader, permissions, theme, scope, instrumentation, i18n]\r\n );\r\n\r\n const LazyView = useMemo(() => React.lazy(dynamicOptionsLoader), [dynamicOptionsLoader]);\r\n\r\n useEffect(() => {\r\n if (!campaignObjective) {\r\n props.scope.save('/campaign/vnext/createcampaign/objective');\r\n }\r\n\r\n return () => {\r\n // eslint-disable-next-line no-console\r\n console.log('[DWD] PerfMaxCampaignCreationPage unmounted');\r\n // clear objective choice in local storage\r\n if (localStorage.supportsStorage()) {\r\n localStorage.invalidate('CampaignObjective');\r\n }\r\n };\r\n }, [campaignObjective, props.scope]);\r\n\r\n return (\r\n <>\r\n {campaignObjective &&\r\n }>\r\n \r\n \r\n }\r\n {!campaignObjective &&\r\n
\r\n }\r\n \r\n );\r\n});\r\n\r\nPerfMaxCampaignCreationPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n adExtensionsDynamicFeaturesLoader: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const PerfMaxCampaignCreationPage = withSiteMap(withCreationHeader(withTheme(PerfMaxCampaignCreationPageImpl, undefined, undefined, false, true)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { PERF_MAX_CAMPAIGN_CRUD_SCENARIOS } from '../common/perf-max-campaign-crud-scenarios';\r\n\r\nexport const PerfMaxCampaignSettingsPage = (props) => {\r\n const routeToNavigateToWhenDone = '/campaign/vnext/assetgroups';\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nPerfMaxCampaignSettingsPage.propTypes = {\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n};\r\n","export const PMAX_WIZARD_ID_NAME = {\r\n PMAX_NORTH_STAR_SETTING_WIZARD: 'perf-max-north-star-setting-wizard',\r\n PMAX_NORTH_STAR_WIZARD: 'perf-max-north-star-wizard',\r\n};\r\n","import { PANEL_KEYS } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nexport const STEP_PATHS = {\r\n PRODUCTS: 'PRODUCTS',\r\n ASSETS: 'ASSETS',\r\n TARGETING: 'TARGETING',\r\n CAMPAIGNDETAILS: 'CAMPAIGNDETAILS',\r\n BUDGET: 'BUDGET',\r\n SUMMARY: 'SUMMARY',\r\n CAMPAIGNSETTING: 'CAMPAIGNSETTING',\r\n ASSETGROUPSETTING: 'ASSETGROUPSETTING',\r\n};\r\n\r\nexport const FLOWS = {\r\n PERFMAX_WIZARD: 'PERFMAX_WIZARD',\r\n RETAIL_PERF_MAX: 'RETAIL_PERF_MAX',\r\n};\r\n\r\nexport const FLOWS_TO_FIRST_STEP = {\r\n [FLOWS.PERFMAX_WIZARD]: STEP_PATHS.ASSETS,\r\n [FLOWS.RETAIL_PERF_MAX]: STEP_PATHS.PRODUCTS,\r\n};\r\n\r\nexport const getFlow = ({ flow }) => {\r\n if (flow === FLOWS.RETAIL_PERF_MAX) {\r\n const steps = [\r\n STEP_PATHS.PRODUCTS,\r\n STEP_PATHS.ASSETS,\r\n STEP_PATHS.TARGETING,\r\n STEP_PATHS.CAMPAIGNDETAILS,\r\n STEP_PATHS.BUDGET,\r\n STEP_PATHS.SUMMARY,\r\n ];\r\n\r\n return steps;\r\n }\r\n\r\n const steps = [\r\n STEP_PATHS.ASSETS,\r\n STEP_PATHS.TARGETING,\r\n STEP_PATHS.CAMPAIGNDETAILS,\r\n STEP_PATHS.BUDGET,\r\n STEP_PATHS.SUMMARY,\r\n ];\r\n\r\n return steps;\r\n};\r\n\r\nexport const getAssetsPanels = (permissions) => {\r\n const panels = ['final-url', 'images', 'logos', 'headlines', 'long-headlines', 'descriptions', 'business-name', 'call-to-action'];\r\n\r\n if (permissions.dynamic.PMaxVideo && permissions.dynamic.PmaxNorthStarAssetGroupSetting) {\r\n panels.push('videos');\r\n }\r\n\r\n return panels;\r\n};\r\n\r\nexport const getCampaignSettingsPanels = (permissions, isCampaignShoppingType) => {\r\n const {\r\n PerformanceMaxCampaignsAutoGenAssetControl: IsPerformanceMaxCampaignsAutoGenAssetControlEnabled,\r\n PerformanceMaxCampaignsPageFeeds: IsPerformanceMaxCampaignsPageFeedsEnabled,\r\n BrandExclusion: IsBrandExclusionEnabled,\r\n PerformanceMaxInCnMarket: IsPerformanceMaxInCnMarketEnabled,\r\n NewCustomerAcquisition: IsNewCustomerAcquisitionEnabled,\r\n PMaxDisclaimers,\r\n PMaxBrandShowroom,\r\n } = permissions.dynamic;\r\n\r\n const {\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsMSANDisclaimerEnabled,\r\n } = permissions;\r\n\r\n const isFeatureBlockedForCnMarket = IsDomesticSimplifiedChineseEnabled && IsPerformanceMaxInCnMarketEnabled;\r\n const isPMaxDisclaimersEnabled = !IsDomesticSimplifiedChineseEnabled && PMaxDisclaimers && IsMSANDisclaimerEnabled;\r\n\r\n const advancedPanels = [\r\n PANEL_KEYS.AD_SCHEDULE,\r\n PANEL_KEYS.URL_OPTIONS,\r\n ];\r\n\r\n\r\n if (!IsPerformanceMaxCampaignsAutoGenAssetControlEnabled && !isFeatureBlockedForCnMarket) {\r\n advancedPanels.push(PANEL_KEYS.FINAL_URL_EXPANSION);\r\n }\r\n\r\n if (IsPerformanceMaxCampaignsAutoGenAssetControlEnabled && !isFeatureBlockedForCnMarket) {\r\n advancedPanels.push(PANEL_KEYS.AUTO_GEN_ASSETS);\r\n }\r\n\r\n if (IsPerformanceMaxCampaignsPageFeedsEnabled) {\r\n advancedPanels.push(PANEL_KEYS.PAGE_FEEDS);\r\n }\r\n\r\n if (IsBrandExclusionEnabled) {\r\n advancedPanels.push(PANEL_KEYS.BRAND_EXCLUSIONS);\r\n }\r\n\r\n if (isPMaxDisclaimersEnabled && !isCampaignShoppingType) {\r\n advancedPanels.push(PANEL_KEYS.DISCLAIMERS);\r\n }\r\n\r\n const basicPanels = [\r\n PANEL_KEYS.BID_STRATEGY,\r\n PANEL_KEYS.BUDGET,\r\n PANEL_KEYS.LOCATIONS,\r\n PANEL_KEYS.LANGUAGE_TARGET,\r\n PANEL_KEYS.AD_SCHEDULE,\r\n PANEL_KEYS.URL_OPTIONS,\r\n PANEL_KEYS.SHOPPING,\r\n PANEL_KEYS.CONVERSIONS,\r\n ];\r\n\r\n if (IsNewCustomerAcquisitionEnabled) {\r\n basicPanels.push(PANEL_KEYS.NEW_CUSTOMER_ACQUISITION);\r\n }\r\n\r\n if (PMaxBrandShowroom) {\r\n advancedPanels.push(PANEL_KEYS.BRAND_SHOWROOM);\r\n }\r\n\r\n return {\r\n basicPanels,\r\n advancedPanels,\r\n };\r\n};\r\n\r\n\r\nexport const getCampaignDetailsPanels = (permissions, isCampaignShoppingType) => {\r\n const {\r\n PerformanceMaxCampaignsAutoGenAssetControl: IsPerformanceMaxCampaignsAutoGenAssetControlEnabled,\r\n PerformanceMaxCampaignsPageFeeds: IsPerformanceMaxCampaignsPageFeedsEnabled,\r\n BrandExclusion: IsBrandExclusionEnabled,\r\n PerformanceMaxInCnMarket: IsPerformanceMaxInCnMarketEnabled,\r\n PMaxDisclaimers,\r\n PMaxBrandShowroom,\r\n } = permissions.dynamic;\r\n\r\n const {\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsMSANDisclaimerEnabled,\r\n } = permissions;\r\n\r\n const isFeatureBlockedForCnMarket = IsDomesticSimplifiedChineseEnabled && IsPerformanceMaxInCnMarketEnabled;\r\n const isPMaxDisclaimersEnabled = !IsDomesticSimplifiedChineseEnabled && PMaxDisclaimers && IsMSANDisclaimerEnabled;\r\n\r\n const advancedPanels = [\r\n PANEL_KEYS.AD_SCHEDULE,\r\n PANEL_KEYS.CAMPAIGN_URL_OPTIONS,\r\n ];\r\n\r\n if (!IsPerformanceMaxCampaignsAutoGenAssetControlEnabled && !isFeatureBlockedForCnMarket) {\r\n advancedPanels.push(PANEL_KEYS.FINAL_URL_EXPANSION);\r\n }\r\n\r\n if (IsPerformanceMaxCampaignsAutoGenAssetControlEnabled && !isFeatureBlockedForCnMarket) {\r\n advancedPanels.push(PANEL_KEYS.AUTO_GEN_ASSETS);\r\n }\r\n\r\n if (IsPerformanceMaxCampaignsPageFeedsEnabled) {\r\n advancedPanels.push(PANEL_KEYS.PAGE_FEEDS);\r\n }\r\n\r\n if (IsBrandExclusionEnabled) {\r\n advancedPanels.push(PANEL_KEYS.BRAND_EXCLUSIONS);\r\n }\r\n\r\n if (isPMaxDisclaimersEnabled && !isCampaignShoppingType) {\r\n advancedPanels.push(PANEL_KEYS.DISCLAIMERS);\r\n }\r\n\r\n if (PMaxBrandShowroom) {\r\n advancedPanels.push(PANEL_KEYS.BRAND_SHOWROOM);\r\n }\r\n\r\n return {\r\n advancedPanels,\r\n };\r\n};\r\n","export 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 BrandListAssociation: 'brandListAssociation',\r\n};\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n ServerValidatedRemainingCharsValidatedTextField,\r\n GroupInfoImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withFinalUrlRecommendationUpdate, } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withStoreFromProviderId, withStoreUrl } from '@bingads-webui-campaign-react/with-store-details';\r\nimport { ValidatedFinalUrlWithRecommendations } from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { entityIs, andComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n ValidatedFixedPanel,\r\n Collapse,\r\n TextTitle,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { Text, Stack } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nimport { ERROR_ENTITY } from '../../../shared/model/api-error';\r\n\r\nconst entityIsAssetGroup = entityIs(ERROR_ENTITY.AssetGroup);\r\nconst assetGroupNameProp = andComp(entityIsAssetGroup, propertyIs('Name'));\r\nconst assetGroupFinalUrlsProp = andComp(entityIsAssetGroup, propertyIs('FinalUrls'));\r\n\r\nconst ValidatedFinalUrlWithStoreURL = withError(withCustomValidation(withFinalUrlRecommendationUpdate(withStoreFromProviderId(withStoreUrl(ValidatedFinalUrlWithRecommendations)))));\r\nconst ServerValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedFinalUrlWithStoreURL, { filter: assetGroupFinalUrlsProp }));\r\n\r\nexport const AssetGroupNameSection = ({\r\n FinalUrls,\r\n permissions,\r\n onFinalURLFocusOut,\r\n campaign,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const validateSpecialCharacters = permissions && permissions.dynamic && permissions.dynamic.PerformanceMaxCampaignsFinalURLValidation && permissions.dynamic.PMaxAndDSAFinalURLValidation;\r\n\r\n const showFinalUrlExpansion = campaign && !campaign.finalUrlExpansionOptOut;\r\n const providerId = campaign && campaign.ProviderId;\r\n\r\n const onRenderAdGroupNameLabel = useCallback(() => (\r\n \r\n ), []);\r\n\r\n const onRenderDescription = useMemo(() => (\r\n \r\n \r\n {i18n.getString(_TL_('URL expansion is on'))}\r\n \r\n \r\n \r\n ), [i18n]);\r\n\r\n const finalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n FinalUrls,\r\n },\r\n initialValue: {\r\n FinalUrls,\r\n },\r\n debounce: 700,\r\n }), [FinalUrls]);\r\n\r\n return (\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n {showFinalUrlExpansion && onRenderDescription}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nAssetGroupNameSection.propTypes = {\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n PerformanceMaxCampaignsFinalURLValidation: PropTypes.bool,\r\n PMaxAndDSAFinalURLValidation: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n campaign: PropTypes.shape({\r\n finalUrlExpansionOptOut: PropTypes.bool,\r\n ProviderId: PropTypes.number,\r\n }).isRequired,\r\n};\r\n","import { map, isEmpty } from 'underscore';\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox, Button, makeStyles } from '@fluentui/react-components';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\n\r\nconst useStyles = makeStyles({\r\n socialRecommendationContainer: {\r\n marginTop: '20px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .title': {\r\n fontWeight: '600',\r\n },\r\n '& .url-container': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n },\r\n '& .generate-button': {\r\n width: '140px',\r\n marginLeft: 'auto',\r\n },\r\n },\r\n});\r\n\r\nexport const SocialSiteRecommendationSection = ({\r\n i18n, isSocialSitesLoading, socialSites, onSocialSiteCheckboxChange, prefillAssetRecommendation,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const onCheckboxChange = useCallback((index, checked) => {\r\n onSocialSiteCheckboxChange(index, checked);\r\n }, [onSocialSiteCheckboxChange]);\r\n\r\n const onGenerateButtonClick = useCallback(() => {\r\n prefillAssetRecommendation();\r\n }, [prefillAssetRecommendation]);\r\n\r\n return (\r\n \r\n
\r\n
{i18n.getString(_TL_('Select pages to enhance recommendations'))}
\r\n {isSocialSitesLoading ?
: (\r\n
\r\n {\r\n map(socialSites, (recommendation, index) => (\r\n onCheckboxChange(index, data.checked)}\r\n />\r\n ))\r\n }\r\n
\r\n )}\r\n {!isEmpty(socialSites) && (\r\n \r\n {i18n.getString(_TL_('Generate assets'))}\r\n \r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nSocialSiteRecommendationSection.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isSocialSitesLoading: PropTypes.bool.isRequired,\r\n socialSites: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onSocialSiteCheckboxChange: PropTypes.func.isRequired,\r\n prefillAssetRecommendation: PropTypes.func.isRequired,\r\n};\r\n\r\n","import { map, first } from 'underscore';\r\nimport React, { useContext, useMemo, useCallback, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n ServerValidatedRemainingCharsValidatedTextField,\r\n GroupInfoImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withFinalUrlRecommendationUpdate, } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withStoreFromProviderId, withStoreUrl } from '@bingads-webui-campaign-react/with-store-details';\r\nimport { ValidatedFinalUrlWithRecommendations } from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { entityIs, andComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n ValidatedFixedPanel,\r\n Collapse,\r\n TextTitle,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { Text, Stack } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nimport { ERROR_ENTITY } from '../../../shared/model/api-error';\r\nimport { SocialSiteRecommendationSection } from './social-site-recommendation-section';\r\nimport { readSocialSiteRecommendation } from '../../../shared/model/social-site-recommendation';\r\n\r\nconst entityIsAssetGroup = entityIs(ERROR_ENTITY.AssetGroup);\r\nconst assetGroupNameProp = andComp(entityIsAssetGroup, propertyIs('Name'));\r\nconst assetGroupFinalUrlsProp = andComp(entityIsAssetGroup, propertyIs('FinalUrls'));\r\n\r\nconst ValidatedFinalUrlWithStoreURL = withError(withCustomValidation(withFinalUrlRecommendationUpdate(withStoreFromProviderId(withStoreUrl(ValidatedFinalUrlWithRecommendations)))));\r\nconst ServerValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedFinalUrlWithStoreURL, { filter: assetGroupFinalUrlsProp }));\r\n\r\nexport const AssetGroupNameSectionWithSocialSiteRecommendation = ({\r\n FinalUrls,\r\n permissions,\r\n onFinalURLFocusOut: prefillAssetRecommendation,\r\n campaign,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const validateSpecialCharacters = permissions && permissions.dynamic && permissions.dynamic.PerformanceMaxCampaignsFinalURLValidation && permissions.dynamic.PMaxAndDSAFinalURLValidation;\r\n\r\n const showFinalUrlExpansion = campaign && !campaign.finalUrlExpansionOptOut;\r\n const providerId = campaign && campaign.ProviderId;\r\n const campaignId = campaign && campaign.Id;\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { aid, cid } = scope.values;\r\n\r\n const [socialSites, setSocialSites] = useState([]);\r\n const [isSocialSitesLoading, setIsSocialSitesLoading] = useState(false);\r\n\r\n const onFinalURLFocusOut = useCallback(() => {\r\n setIsSocialSitesLoading(true);\r\n readSocialSiteRecommendation(cid, aid, campaignId, first(FinalUrls))\r\n .then(({ Data }) => {\r\n setIsSocialSitesLoading(false);\r\n if (Data && Data.SocialSites) {\r\n const socialSitesRecommendations = Data.SocialSites;\r\n const additionalSocialSites = map(socialSitesRecommendations, socialSite => ({\r\n ...socialSite,\r\n checked: true,\r\n }));\r\n setSocialSites([{ Url: first(FinalUrls), checked: true }].concat(additionalSocialSites));\r\n } else {\r\n setSocialSites([{ Url: first(FinalUrls), checked: true }]);\r\n }\r\n });\r\n }, [cid, aid, campaignId, FinalUrls]);\r\n\r\n const onSocialSiteCheckboxChange = useCallback((index, checked) => {\r\n socialSites[index].checked = checked;\r\n setSocialSites([...socialSites]);\r\n }, [socialSites]);\r\n\r\n const onRenderAdGroupNameLabel = useCallback(() => (\r\n \r\n ), []);\r\n\r\n const onRenderDescription = useMemo(() => (\r\n \r\n \r\n {i18n.getString(_TL_('URL expansion is on'))}\r\n \r\n \r\n \r\n ), [i18n]);\r\n\r\n const finalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n FinalUrls,\r\n },\r\n initialValue: {\r\n FinalUrls,\r\n },\r\n debounce: 700,\r\n }), [FinalUrls]);\r\n\r\n return (\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n {showFinalUrlExpansion && onRenderDescription}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nAssetGroupNameSectionWithSocialSiteRecommendation.propTypes = {\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n PerformanceMaxCampaignsFinalURLValidation: PropTypes.bool,\r\n PMaxAndDSAFinalURLValidation: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n campaign: PropTypes.shape({\r\n finalUrlExpansionOptOut: PropTypes.bool,\r\n ProviderId: PropTypes.number,\r\n Id: PropTypes.number,\r\n }).isRequired,\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const readSocialSiteRecommendation = (cid, aid, campaignId, finalUrl) => (\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)['Default.GetSocialSitesRecommendation']\r\n .$makeCall({\r\n payload: {\r\n GetSocialSitesRecommendationRequest: {\r\n FinalURL: finalUrl,\r\n },\r\n },\r\n })\r\n .toPromise()\r\n);\r\n","export const getAssetsStyles = () => ({\r\n '@global': {\r\n '.text-asset-recommendations-panel .selectable-suggested-item-toggle': {\r\n height: 'auto',\r\n minHeight: '32px',\r\n\r\n '& > span': {\r\n margin: '8px 0',\r\n textAlign: 'left',\r\n },\r\n },\r\n },\r\n container: {\r\n '& .control-label': {\r\n display: 'none',\r\n },\r\n\r\n '& .text-assets-collection-container': {\r\n width: 'auto',\r\n },\r\n\r\n '& .text-input-container': {\r\n width: '100%',\r\n },\r\n '& .business-name-container': {\r\n width: 'auto',\r\n },\r\n\r\n '& .add-asset-btn': {\r\n marginBottom: '0',\r\n },\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n '& .image-list-choice-group .ms-ChoiceFieldGroup-flexContainer': {\r\n width: 'unset !important',\r\n },\r\n '& .section-description': {\r\n marginBottom: '16px',\r\n },\r\n '& .input-asset-text.error': {\r\n '& .ms-TextField-fieldGroup, .ms-TextField-fieldGroup::after': {\r\n borderColor: '#a4262c',\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n ValidatedPanel,\r\n ValidatedFixedPanel,\r\n getPanelErrorProps,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useVideoAdsCopilot } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { TaskManager } from '@bingads-webui-universal/task-manager';\r\nimport {\r\n ImageListPortalContainerWithControlErrorHandling,\r\n LogoListPortalContainerWithControlErrorHandling,\r\n ImageListSummaryCardDetails,\r\n hasImages,\r\n PerfMaxImageSuggestionCarousel,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport {\r\n ValidatedStoreBackedBusinessName,\r\n HeadlineAssetCollection,\r\n LongHeadlineAssetCollection,\r\n DescriptionAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport {\r\n TextAssetsImg,\r\n ImageAssetsImg,\r\n LogoAssetsImg,\r\n BusinessNameImg,\r\n CallToActionImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { VideoPanel } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { ValidatedLegacyCallToAction } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { getHeadlinesCardSummaryDetails, getLongHeadlinesCardSummaryDetails, getDescriptionsCardSummaryDetails, hasTextAssets } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport { entityIs, andComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nimport { ERROR_ENTITY } from '../../../shared/model/api-error';\r\nimport { getAssetsStyles } from './get-assets-styles';\r\nimport { getAssetsPanels } from '../../step-constants';\r\n\r\nconst entityIsAssetGroup = entityIs(ERROR_ENTITY.AssetGroup);\r\n\r\nconst assetGroupImageAssetsProp = andComp(entityIsAssetGroup, propertyIs('Images'));\r\nconst assetGroupBusinessNameProp = andComp(entityIsAssetGroup, propertyIs('BusinessName'));\r\nconst ServerValidatedImageListPortalContainer = withUnvalidatedControlErrors(ImageListPortalContainerWithControlErrorHandling, { filter: assetGroupImageAssetsProp });\r\n\r\nexport const AssetsSection = ({\r\n permissions,\r\n images,\r\n videos,\r\n mergedI18n,\r\n perfMarker,\r\n businessName,\r\n headlines,\r\n longHeadlines,\r\n descriptions,\r\n imagesContainerRef,\r\n imageExperienceAddNewImageCallback,\r\n setAddNewShortHeadlinesCallback,\r\n setAddNewLongHeadlinesCallback,\r\n setAddNewDescriptionCallback,\r\n imageExperiencePortalContainerState,\r\n logosContainerRef,\r\n providerId,\r\n maxUploadNum,\r\n locale,\r\n CallToAction,\r\n setNewCTACallback,\r\n setSelectedVideoId,\r\n selectedVideoId,\r\n}) => {\r\n const { IsPerformanceMaxAutomatedCTAEnabled, IsDomesticSimplifiedChineseEnabled } = permissions;\r\n\r\n const {\r\n PerformanceMaxInCnMarket: IsPerformanceMaxInCnMarketEnabled,\r\n PMaxNewAspectRatios,\r\n PMaxExcludeNewAspectRatios,\r\n } = permissions.dynamic;\r\n\r\n const isFeatureBlockedForCnMarket = IsDomesticSimplifiedChineseEnabled && IsPerformanceMaxInCnMarketEnabled;\r\n const isPMaxAspectRatiosV2Enabled = PMaxNewAspectRatios && !PMaxExcludeNewAspectRatios;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const allPanels = useMemo(() => getAssetsPanels(permissions), [permissions]);\r\n\r\n const [\r\n allAssetsSections,\r\n assetsExpandedSections,\r\n setAssetsExpandedSections,\r\n ] = useCollapseState(\r\n allPanels, /* all sections */\r\n allPanels /* initially expanded sections */\r\n );\r\n\r\n const allAssetsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAssetsExpandedSections }),\r\n [setAssetsExpandedSections]\r\n );\r\n\r\n const headlinesCardSummaryDetails = useMemo(() => getHeadlinesCardSummaryDetails(i18n, headlines), [headlines, i18n]);\r\n const longHeadlinesCardSummaryDetails = useMemo(() => getLongHeadlinesCardSummaryDetails(i18n, longHeadlines), [longHeadlines, i18n]);\r\n const descriptionsCardSummaryDetails = useMemo(() => getDescriptionsCardSummaryDetails(i18n, descriptions), [descriptions, i18n]);\r\n\r\n const textAndImageAssetsOptional = useMemo(() => providerId && !hasImages(images) && !hasTextAssets(headlines, longHeadlines, descriptions), [providerId, images, headlines, longHeadlines, descriptions]);\r\n\r\n const classes = useDefaultStyles(getAssetsStyles);\r\n\r\n const { fetch } = useVideoAdsCopilot();\r\n\r\n const copilotFetchTaskManager = useMemo(() => new TaskManager(), []);\r\n\r\n useEffect(() => {\r\n fetch(copilotFetchTaskManager);\r\n setClarityTag({ VideoCopilotGeneration: true });\r\n }, [copilotFetchTaskManager, fetch]);\r\n\r\n const assets = useMemo(() => (\r\n
\r\n

{i18n.getString(_TL_('Add assets'))}

\r\n
\r\n {i18n.getString(_TL_('Provide your assets and we’ll automatically determine what your ads look like, where and when they appear, and who sees them.'))}\r\n
\r\n \r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'images',\r\n }}\r\n >\r\n {i18n.getString(_TL_('You can add up to 20 images to your ad. We recommend that you add two to three relevant images. 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 attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'logos',\r\n }}\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\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'headlines',\r\n }}\r\n >\r\n \r\n \r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'long-headlines',\r\n }}\r\n >\r\n \r\n \r\n\r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: 'descriptions',\r\n }}\r\n >\r\n \r\n \r\n\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n \r\n }\r\n noOverflowHidden\r\n relativePosition\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n \r\n
\r\n ), [classes.container, i18n, allAssetsSections, assetsExpandedSections, setAssetsExpandedSections, isPMaxAspectRatiosV2Enabled, images, allAssetsExpand, imagesContainerRef, imageExperiencePortalContainerState, imageExperienceAddNewImageCallback, permissions, maxUploadNum, logosContainerRef, headlinesCardSummaryDetails, textAndImageAssetsOptional, setAddNewShortHeadlinesCallback, longHeadlinesCardSummaryDetails, setAddNewLongHeadlinesCallback, descriptionsCardSummaryDetails, setAddNewDescriptionCallback, providerId, businessName, locale, CallToAction, IsPerformanceMaxAutomatedCTAEnabled, isFeatureBlockedForCnMarket, setNewCTACallback]);\r\n\r\n return assets;\r\n};\r\n\r\nAssetsSection.propTypes = {\r\n permissions: PropTypes.shape({\r\n IsPerformanceMaxAutomatedCTAEnabled: PropTypes.bool,\r\n IsDomesticSimplifiedChineseEnabled: PropTypes.bool,\r\n dynamic: PropTypes.shape({\r\n PerformanceMaxInCnMarket: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n images: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n businessName: PropTypes.string.isRequired,\r\n headlines: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n longHeadlines: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n descriptions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n imagesContainerRef: PropTypes.shape({}).isRequired,\r\n imageExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n setAddNewLongHeadlinesCallback: PropTypes.func.isRequired,\r\n setAddNewDescriptionCallback: PropTypes.func.isRequired,\r\n imageExperiencePortalContainerState: PropTypes.shape({}).isRequired,\r\n logosContainerRef: PropTypes.shape({}).isRequired,\r\n providerId: PropTypes.string.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n CallToAction: PropTypes.shape({}).isRequired,\r\n setNewCTACallback: PropTypes.func.isRequired,\r\n};\r\n","import React, { useMemo, useState, useCallback, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport {\r\n ValidatedBootstrapPanel,\r\n Collapse,\r\n ValidatedPanel,\r\n TextTitle,\r\n useCollapseState,\r\n getPanelErrorProps,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { Separator } from '@fluentui/react';\r\nimport { ValidatedUrlPath, ValidatedMobileUrl, getAdvancedUrlOptionsCardSummaryDetails } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { entityIs, andComp, orComp, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ValidatedUrlRules, UrlOptionsDetailsWithRules } from '@bingads-webui-campaign-react/url-rules';\r\nimport { ValidatedUrlRulesV2, UrlOptionsDetailsWithRulesV2 } from '@bingads-webui-campaign-react/url-rules-v2';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { ERROR_ENTITY } from '../../../shared/model/api-error';\r\n\r\nconst entityIsAssetGroup = entityIs(ERROR_ENTITY.AssetGroup);\r\nconst assetGroupPath1AndPath2Props = andComp(entityIsAssetGroup, orComp(propertyIs('Path1'), propertyIs('Path2')));\r\nconst assetGroupMobileFinalUrlsProp = andComp(entityIsAssetGroup, propertyIs('MobileFinalUrls'));\r\n\r\nconst ServerValidatedUrlPath = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedUrlPath, { filter: assetGroupPath1AndPath2Props }));\r\nconst ServerValidatedMobileUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedMobileUrl, { filter: assetGroupMobileFinalUrlsProp }));\r\n\r\nconst urlOptionStyles = () => ({\r\n urlContainer: {\r\n '& .path2, .path1': {\r\n width: '150px',\r\n },\r\n },\r\n});\r\n\r\nexport const MoreOptionsSection = ({\r\n permissions,\r\n finalUrls,\r\n urlPath1,\r\n urlPath2,\r\n finalMobileUrls,\r\n urlRules,\r\n urlRulesOption,\r\n classes,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const urlClasses = useDefaultStyles(urlOptionStyles);\r\n\r\n const {\r\n AssetGroupUrlRules: isAssetGroupUrlRulesEnabled,\r\n AssetGroupUrlRulesV2: isAssetGroupUrlRulesV2Enabled,\r\n } = permissions.dynamic;\r\n\r\n const [\r\n allMoreOptionsSections,\r\n moreOptionsExpandedSections,\r\n setMoreOptionsExpandedSections,\r\n ] = useCollapseState(\r\n ['advanced-url-options'] /* all sections */,\r\n ['advanced-url-options'] /* initially expanded sections */\r\n );\r\n\r\n const [moreOptionsSectionExpanded, setNameAndTitleExpanded] = useState(false);\r\n const onMoreOptionsSectionToggle = useCallback((expanded) => {\r\n setNameAndTitleExpanded(expanded);\r\n }, []);\r\n\r\n\r\n const moreOptionsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreOptionsExpandedSections }),\r\n [setMoreOptionsExpandedSections]\r\n );\r\n\r\n const moreOptionsSection = useMemo(() => (\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('More options'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n )\r\n : ()}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreOptionsExpand,\r\n expandKey: 'advanced-url-options',\r\n }}\r\n >\r\n \r\n \r\n {\r\n isAssetGroupUrlRulesEnabled && !isAssetGroupUrlRulesV2Enabled && (\r\n <>\r\n \r\n \r\n \r\n )\r\n }\r\n {\r\n isAssetGroupUrlRulesV2Enabled && (\r\n <>\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n ), [onMoreOptionsSectionToggle, moreOptionsSectionExpanded, classes.collapsiblePanel, i18n, urlClasses.urlContainer, allMoreOptionsSections, moreOptionsExpandedSections, setMoreOptionsExpandedSections, isAssetGroupUrlRulesEnabled, finalUrls, urlPath1, urlPath2, finalMobileUrls, urlRules, moreOptionsExpand, urlRulesOption]);\r\n\r\n return moreOptionsSection;\r\n};\r\n","import React from 'react';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nexport const getAdExtensionsSections = ({\r\n extensionTypes,\r\n extensionsAssociations,\r\n adExtensionsAssociationsFactory,\r\n adExtensionsDynamicFeatures = {},\r\n i18n,\r\n onUpdateExtensionsAssociations,\r\n campaign,\r\n}) => adExtensionsAssociationsFactory.extensionsAssociationsFactory(campaign.Id, campaign.Name, extensionTypes, adExtensionsDynamicFeatures)\r\n .reduce((memo, {\r\n extensionType,\r\n title,\r\n topic,\r\n details,\r\n AssociationPanel,\r\n }) => {\r\n const sectionKey = extensionType;\r\n const associations = extensionsAssociations[extensionType];\r\n\r\n const panel = (\r\n }\r\n >\r\n \r\n \r\n\r\n );\r\n memo.panels.push(panel);\r\n memo.sectionsInfo.allSections.push(sectionKey);\r\n\r\n return memo;\r\n }, { panels: [], sectionsInfo: { allSections: [] } });\r\n","import React, { useContext, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getAdExtensionsSections } from './get-ad-extensions-section';\r\n\r\nexport const EnhanceYourAdsSection = ({\r\n suggestedObjectiveExtensions,\r\n adExtensionsAssociationsFactory,\r\n adExtensionsDynamicFeatures,\r\n onUpdateExtensionsAssociations,\r\n extensionsAssociations,\r\n campaign,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const suggestedAdExtensionsSections = useMemo(() => getAdExtensionsSections({\r\n extensionTypes: suggestedObjectiveExtensions,\r\n i18n,\r\n adExtensionsAssociationsFactory,\r\n adExtensionsDynamicFeatures,\r\n onUpdateExtensionsAssociations,\r\n extensionsAssociations,\r\n campaign,\r\n }), [adExtensionsAssociationsFactory, adExtensionsDynamicFeatures, campaign, extensionsAssociations, i18n, onUpdateExtensionsAssociations, suggestedObjectiveExtensions]);\r\n\r\n const [\r\n allEnhanceYourAdsSections,\r\n enhanceYourAdsExpandedSections,\r\n setEnhanceYourAdsExpandedSections,\r\n ] = useCollapseState(\r\n suggestedAdExtensionsSections.sectionsInfo.allSections /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const enhanceYourAdsSection = useMemo(() => (\r\n <>\r\n {suggestedAdExtensionsSections.panels.length > 0 &&\r\n
\r\n

{i18n.getString(_TL_('Add more information to your ads'))}

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {suggestedAdExtensionsSections.panels}\r\n \r\n
\r\n }\r\n \r\n ), [i18n, allEnhanceYourAdsSections, enhanceYourAdsExpandedSections, setEnhanceYourAdsExpandedSections, suggestedAdExtensionsSections]);\r\n\r\n return enhanceYourAdsSection;\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { getAdExtensionsSections } from './get-ad-extensions-section';\r\n\r\nexport const MoreAssetsSection = ({\r\n otherObjectiveExtensions,\r\n adExtensionsAssociationsFactory,\r\n adExtensionsDynamicFeatures,\r\n onUpdateExtensionsAssociations,\r\n extensionsAssociations,\r\n classes,\r\n campaign,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const otherAdExtensionsSections = useMemo(() => getAdExtensionsSections({\r\n extensionTypes: otherObjectiveExtensions,\r\n i18n,\r\n adExtensionsAssociationsFactory,\r\n adExtensionsDynamicFeatures,\r\n onUpdateExtensionsAssociations,\r\n extensionsAssociations,\r\n campaign,\r\n }), [adExtensionsAssociationsFactory, adExtensionsDynamicFeatures, campaign, extensionsAssociations, i18n, onUpdateExtensionsAssociations, otherObjectiveExtensions]);\r\n\r\n const [\r\n allMoreAssetsSections,\r\n moreAssetsExpandedSections,\r\n setMoreAssetsExpandedSections,\r\n ] = useCollapseState(\r\n otherAdExtensionsSections.sectionsInfo.allSections /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const moreAssetsSection = useMemo(() => (\r\n <>\r\n {otherAdExtensionsSections.panels.length > 0 &&\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('More assets'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {otherAdExtensionsSections.panels}\r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n }\r\n \r\n ), [allMoreAssetsSections, classes.collapsiblePanel, i18n, moreAssetsExpandedSections, otherAdExtensionsSections.panels, setMoreAssetsExpandedSections]);\r\n\r\n return moreAssetsSection;\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Collapse, TextTitle, useCollapseState, ValidatedPanel, collapseExpander, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedLegacyDateSetting, getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\nimport { StartEndDateImg } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\n\r\nexport const MoreSettingsSection = ({\r\n assetGroup,\r\n campaignTimeZone,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['start-end-dates'] /* all sections */,\r\n ['start-end-dates'] /* initially expanded sections */\r\n );\r\n\r\n const moreSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreSettingsExpandedSections }),\r\n [setMoreSettingsExpandedSections]\r\n );\r\n\r\n const startDate = useMemo(() => (assetGroup.data && assetGroup.data.StartDate ? assetGroup.data.StartDate : new Date()), [assetGroup.data]);\r\n\r\n const moreSettingsSection = useMemo(() => (\r\n
\r\n
{i18n.getString(_TL_('MORE SETTINGS'))}
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreSettingsExpand,\r\n expandKey: 'start-end-dates',\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n ), [i18n, allMoreSettingsSections, moreSettingsExpandedSections, setMoreSettingsExpandedSections, startDate, moreSettingsExpand, assetGroup.data?.EndDate, assetGroup.data?.Id, campaignTimeZone]);\r\n\r\n return moreSettingsSection;\r\n};\r\n\r\nMoreSettingsSection.propTypes = {\r\n assetGroup: PropTypes.shape({}).isRequired,\r\n campaignTimeZone: PropTypes.string.isRequired,\r\n};\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType, mergeStyles } from '@fluentui/react';\r\n\r\nconst wrapperClass = mergeStyles({\r\n padding: 2,\r\n selectors: {\r\n '& > .ms-Shimmer-container': {\r\n margin: '10px 0',\r\n border: 'none',\r\n },\r\n },\r\n});\r\n\r\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\r\nconst audienceShimmerElement = [\r\n { type: ShimmerElementType.line, width: 200, height: 100 },\r\n { type: ShimmerElementType.gap, width: '2%', height: 100 },\r\n { type: ShimmerElementType.line, width: 200, height: 100 },\r\n { type: ShimmerElementType.gap, width: '100%', height: 100 },\r\n];\r\n\r\nconst shimmerWithElementFirstRow = [\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n];\r\nconst shimmerWithElementSecondRow = [\r\n { type: ShimmerElementType.circle, height: 24 },\r\n { type: ShimmerElementType.gap, width: '2%', height: 24 },\r\n { type: ShimmerElementType.line, height: 16, width: '20%' },\r\n { type: ShimmerElementType.gap, width: '100%', height: 16 },\r\n];\r\n\r\nexport const AudienceSignalShimmer = () => (\r\n
\r\n \r\n
\r\n);\r\n\r\nconst singleLineShimmer = [\r\n { type: ShimmerElementType.line, width: 200, height: 50 },\r\n];\r\n\r\nexport const SingleLineShimmer = () => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport const AdScheduleShimmer = () => (\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n);\r\n\r\nexport const RadioShimmer = () => (\r\n
\r\n \r\n \r\n
\r\n);\r\n\r\nexport const StoreSelectorShimmer = () => (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n);\r\n","import React, { useContext, useMemo } from 'react';\r\nimport { isEmpty } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Collapse, TextTitle, useCollapseState, ValidatedPanel, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { SearchThemesImg } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { AudienceSignalPanel } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { AudienceSignalSection, getSearchThemeDetails, PANEL_KEYS } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { ValidationSearchThemeSelector } from '@bingads-webui-campaign-react/search-theme-selector';\r\nimport { SingleLineShimmer } from '../../../shared/components/section-shimmer';\r\n\r\nexport const SignalSection = ({\r\n assetGroup,\r\n permissions,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const isSearchThemeEnabled = permissions && permissions.dynamic && permissions.dynamic.SearchThemes;\r\n const isLoading = useMemo(() => isEmpty(assetGroup), [assetGroup]);\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n\r\n const [\r\n audienceSignalSections,\r\n audienceSignalExpandedSections,\r\n setaudienceSignalSettingsExpandedSections,\r\n ] = useCollapseState(\r\n isSearchThemeEnabled ? ['audience-signal', 'search-themes'] : ['audience-signal'] /* all sections */,\r\n isSearchThemeEnabled ? ['audience-signal', 'search-themes'] : ['audience-signal'] /* initially expanded sections */\r\n );\r\n\r\n const searchThemeSection = useMemo(() => (\r\n
\r\n {isLoading ? :\r\n ()\r\n }\r\n
\r\n ), [assetGroup, i18n, isLoading, perfMarker]);\r\n\r\n const signalSection = useMemo(() => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {isSearchThemeEnabled &&\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{ expandKey: 'search-themes' }}\r\n >\r\n {searchThemeSection}\r\n \r\n }\r\n
\r\n ), [audienceSignalSections, audienceSignalExpandedSections, setaudienceSignalSettingsExpandedSections, isLoading, perfMarker, assetGroup, isSearchThemeEnabled, i18n, searchThemeSection]);\r\n\r\n return signalSection;\r\n};\r\n\r\nSignalSection.propTypes = {\r\n assetGroup: PropTypes.shape({}).isRequired,\r\n campaignTimeZone: PropTypes.string.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n SearchThemes: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n};\r\n","export const getAssetsStepStyles = () => ({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n width: '100%',\r\n gap: '32px',\r\n\r\n '& .title-item': {\r\n width: 'unset !important',\r\n },\r\n },\r\n 'container-l': {\r\n width: 'calc(100% - 64px)',\r\n },\r\n imageExperience: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n formContainer: {\r\n width: '100%',\r\n '& .text-assets-collection-container': {\r\n width: 'auto',\r\n },\r\n '& .asset-group-name-section .error-string-wrapper': {\r\n right: 'unset !important',\r\n position: 'unset !important',\r\n },\r\n\r\n '& .text-input-container': {\r\n width: '100%',\r\n },\r\n '& .date-settings table': {\r\n width: 'unset !important',\r\n },\r\n '& .asset-group-enhance-ads-section': {\r\n '& .section-description': {\r\n marginBottom: '16px',\r\n },\r\n },\r\n },\r\n 'formContainer-xxl': {\r\n width: '530px',\r\n },\r\n 'formContainer-xl': {\r\n width: '430px',\r\n },\r\n previewerContainer: {\r\n '& > div': {\r\n top: 124,\r\n },\r\n flexGrow: '1',\r\n },\r\n 'previewerContainer-l': {\r\n width: 'calc(100% - 64px)',\r\n },\r\n 'previewerContainer-m': {\r\n width: 'calc(100% - 64px)',\r\n },\r\n 'previewerContainer-s': {\r\n width: 'calc(100% - 64px)',\r\n },\r\n formHeader: {\r\n marginBottom: '24px',\r\n },\r\n});\r\n","import _, { noop, first, isArray } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useRef, useState, useContext, useMemo, useCallback, useEffect } from 'react';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withBannerService, CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { getAssetGroupStepStyles, getExtensionFormatters } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n ValidatedImageExperienceWrapper,\r\n hasImages,\r\n PerfMaxResponsiveAdPreviewUAPL,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport {\r\n FormErrorGroup, UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { hasTextAssets } from '@bingads-webui-campaign-react/validated-text-collection';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { getFinalUrlWithPath } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport {\r\n AssetEventFeature,\r\n useCopilotRecommendationSurvey,\r\n} from '@bingads-webui-campaign-react/copilot-common';\r\nimport { useCopilot } from '@bingads-webui-campaign-react/copilot-experience';\r\n\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useIsMounted } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { legacyI18nOfListingGroup } from '@bingads-webui-campaign-react/listing-groups-page';\r\nimport { AssetScenario } from '@bingads-webui-react/copilot-event-provider';\r\n\r\nimport { AssetGroupNameSection } from './components/asset-group-name-section';\r\nimport { AssetGroupNameSectionWithSocialSiteRecommendation } from './components/asset-group-name-section-with-social-site-recommendation';\r\nimport { AssetsSection } from './components/assets-section';\r\nimport { MoreOptionsSection } from './components/more-options-section';\r\nimport { EnhanceYourAdsSection } from './components/enhance-your-ads-section';\r\nimport { MoreAssetsSection } from './components/more-assets-section';\r\nimport { MoreSettingsSection } from './components/more-settings-section';\r\nimport { SignalSection } from './components/audience-signal-section';\r\nimport { getAssetsStepStyles } from './assets-step-styles';\r\nimport { STEP_PATHS } from '../step-constants';\r\n\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nconst AssetsStepFormInternal = ({\r\n data,\r\n onDataChange: onDataChangeProp,\r\n error,\r\n scope,\r\n}) => {\r\n const getStyles = useResponsiveStyles(getAssetsStepStyles);\r\n\r\n const isMounted = useIsMounted();\r\n\r\n const onDataChange = useCallback((...args) => {\r\n if (!isMounted.current) return;\r\n onDataChangeProp(...args);\r\n }, [isMounted, onDataChangeProp]);\r\n\r\n const {\r\n serverErrors = [],\r\n systemErrors = [],\r\n } = error || {};\r\n\r\n const {\r\n campaign,\r\n assetGroup,\r\n } = data;\r\n\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n\r\n const imagesContainerRef = useRef(null);\r\n const logosContainerRef = useRef(null);\r\n\r\n const { state } = useWizardService();\r\n\r\n const { context: { wizardData } } = state;\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap, legacyI18nOfListingGroup]), [i18n]);\r\n const legacyGlobalI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n\r\n const mergedI18n = useMemo(() => {\r\n const mergedTempI18n = mergeI18n(\r\n legacyI18n,\r\n i18n\r\n );\r\n\r\n return mergeI18n(\r\n legacyGlobalI18n,\r\n mergedTempI18n\r\n );\r\n }, [i18n, legacyI18n, legacyGlobalI18n]);\r\n\r\n const {\r\n adExtensionsAssociationsFactory,\r\n adExtensionsDynamicFeatures,\r\n } = wizardData;\r\n\r\n const {\r\n wizardData: { flow },\r\n } = state.context;\r\n\r\n const { state: { context: { saveFailed } } } = useFormService();\r\n\r\n const classes = useDefaultStyles(getAssetGroupStepStyles);\r\n\r\n const isSaving = matchStepState(state, STEP_STATES.SAVING);\r\n const isCanceling = matchStepState(state, STEP_STATES.CANCELING);\r\n\r\n const { cid, aid } = scope.values || {};\r\n\r\n const {\r\n FinalUrls,\r\n Images,\r\n CallToAction,\r\n FinalUrlForRecommendation,\r\n BusinessName,\r\n videos = [],\r\n Headlines = {},\r\n LongHeadlines = {},\r\n Descriptions = {},\r\n extensionsAssociations = {},\r\n Path1,\r\n Path2,\r\n MobileFinalUrls,\r\n AssetGroupUrlTargets,\r\n UrlRulesOption,\r\n } = assetGroup || {};\r\n\r\n const {\r\n ProviderId,\r\n Id,\r\n } = campaign || {};\r\n\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n UAPLPMaxLogoPreviewEnabled, CopilotCTALogoGeneration, PmaxExtensionPreview,\r\n PMaxNewAspectRatios: isPMaxNewAspectRatiosEnabled,\r\n PMaxExcludeNewAspectRatios: isPMaxNewAspectRatiosExcluded,\r\n AdPreviewRefresh: isAdPreviewRefreshEnabled,\r\n } = permissions.dynamic;\r\n\r\n const isPMaxAspectRatiosV2Enabled = isPMaxNewAspectRatiosEnabled && !isPMaxNewAspectRatiosExcluded;\r\n\r\n const {\r\n triggerSurveyOnSubmit,\r\n triggerSurveyOnCancel,\r\n } = useCopilotRecommendationSurvey(AssetEventFeature.PMAX);\r\n\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n\r\n const { postAssetEventLog } = recommendationContext || _.noop;\r\n\r\n const [selectedVideoId, setSelectedVideoId] = useState(0);\r\n\r\n const [finalUrlForCopilotRecommendations, setFinalUrlForCopilotRecommendations] = useState(first(FinalUrls) || FinalUrlForRecommendation);\r\n const [imageExperiencePortalContainerState, setImageExperiencePortalContainerState] = useState({});\r\n const [imageExperienceAddNewImageCallback, setImageExperienceAddNewImageCallback] = useState(noop);\r\n const [addNewDescriptionCallback, setAddNewDescriptionCallback] = useState(noop);\r\n const [addNewShortHeadlinesCallback, setAddNewShortHeadlinesCallback] = useState(noop);\r\n const [addNewLongHeadlinesCallback, setAddNewLongHeadlinesCallback] = useState(noop);\r\n const [newCTACallback, setNewCTACallback] = useState(noop);\r\n const [previewImagesSharedState, setPreviewImagesSharedState] = useState({\r\n previewImageId: null,\r\n previewLogoId: null,\r\n cropImageObj: null,\r\n editingPlacementType: '',\r\n });\r\n\r\n const onReset = useCallback(() => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n Images: {\r\n ...assetGroup.Images,\r\n ImageList: [],\r\n ImageAssets: null,\r\n },\r\n Headlines: {\r\n Headline0: '',\r\n Headline1: '',\r\n Headline2: '',\r\n },\r\n LongHeadlines: {\r\n LongHeadline0: '',\r\n },\r\n Descriptions: {\r\n Description0: '',\r\n Description1: '',\r\n },\r\n },\r\n }),\r\n isValid: false,\r\n });\r\n }, [assetGroup, onDataChange]);\r\n\r\n const maxUploadNum = useMemo(() => {\r\n const imageListLength = Images && Images.ImageList && isArray(Images.ImageList) ? Images.ImageList.length : 0;\r\n return 20 - imageListLength;\r\n }, [Images]);\r\n\r\n const {\r\n copilotBanner,\r\n suggestionPoller,\r\n themes,\r\n } = useCopilot({\r\n maxUploadNum,\r\n addNewShortHeadlinesCallback,\r\n addNewLongHeadlinesCallback,\r\n addNewDescriptionCallback,\r\n imageExperienceAddNewImageCallback,\r\n newCTACallback,\r\n currentCTA: CallToAction,\r\n onReset,\r\n cid,\r\n aid,\r\n serverContext,\r\n instrumentation,\r\n data: assetGroup,\r\n isSaving,\r\n isCanceling,\r\n enableCopilotRecommendations: true,\r\n feature: AssetEventFeature.PMAX,\r\n assetScenario: AssetScenario.CREATE_WORK_FLOW,\r\n });\r\n\r\n const onFinalURLFocusOut = useCallback(() => {\r\n // to prevent sending too many requests, only update the copilot recommendations after user has finished editing URL\r\n setFinalUrlForCopilotRecommendations(FinalUrlForRecommendation);\r\n }, [FinalUrlForRecommendation]);\r\n\r\n const assetGroupNameSection = useMemo(() => (\r\n <>\r\n {permissions && permissions.dynamic && permissions.dynamic.SocialSitesRecommendation ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {copilotBanner}\r\n \r\n ), [FinalUrls, campaign, copilotBanner, onFinalURLFocusOut, permissions]);\r\n\r\n const textAndImageAssetsOptional = useMemo(() => ProviderId && !hasImages(Images) && !hasTextAssets(Headlines, LongHeadlines, Descriptions), [Descriptions, Headlines, Images, LongHeadlines, ProviderId]);\r\n\r\n const updateFinalUrlCallback = useCallback((newFinalUrls) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n FinalUrls: newFinalUrls,\r\n },\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const updateExtensionsAssociations = useCallback((extensionType, associations) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n extensionsAssociations: {\r\n ...prevData.assetGroup.extensionsAssociations,\r\n [extensionType]: associations,\r\n },\r\n },\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const onUpdateImageList = useCallback((newImageList) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n Images: {\r\n ...prevData.assetGroup.Images,\r\n ImageList: newImageList,\r\n ImageAssets: null,\r\n },\r\n },\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const { suggestedObjectiveExtensions = [], otherObjectiveExtensions = [] } = useMemo(() =>\r\n flow !== STEP_PATHS.ASSETGROUPSETTING &&\r\n adExtensionsAssociationsFactory.getObjectiveExtensions(\r\n permissions,\r\n // TODO CHANGE OBJECTIVE\r\n { campaignType: 'PerformanceMax', campaignObjective: 'WebsiteConversions' }\r\n ), [flow, adExtensionsAssociationsFactory, permissions]);\r\n\r\n const assetsSection = useMemo(() => (\r\n <>\r\n \r\n \r\n ), [permissions, selectedVideoId, Images, mergedI18n, videos, perfMarker, BusinessName, Headlines, LongHeadlines, Descriptions, imageExperienceAddNewImageCallback, imageExperiencePortalContainerState, maxUploadNum, CallToAction, ProviderId]);\r\n\r\n const moreOptionsSection = useMemo(() => (\r\n \r\n ), [AssetGroupUrlTargets, FinalUrls, MobileFinalUrls, Path1, Path2, UrlRulesOption, classes, permissions]);\r\n\r\n const enhanceYourAdsSection = useMemo(() => (\r\n \r\n ), [adExtensionsAssociationsFactory, adExtensionsDynamicFeatures, campaign, extensionsAssociations, suggestedObjectiveExtensions, updateExtensionsAssociations]);\r\n\r\n const moreAssetsSection = useMemo(() => (\r\n \r\n ), [adExtensionsAssociationsFactory, adExtensionsDynamicFeatures, campaign, classes, extensionsAssociations, otherObjectiveExtensions, updateExtensionsAssociations]);\r\n\r\n const moreSettingsSection = useMemo(() => (\r\n \r\n ), [assetGroup, campaign]);\r\n\r\n const imageExperienceComponents = useMemo(() => (\r\n
\r\n \r\n
), [i18n, permissions, textAndImageAssetsOptional, updateFinalUrlCallback, previewImagesSharedState, assetGroup, suggestionPoller, perfMarker, postAssetEventLog, isPMaxAspectRatiosV2Enabled, isAdPreviewRefreshEnabled]);\r\n\r\n const displayUrl = useMemo(() => getFinalUrlWithPath(FinalUrls, Path1, Path2), [FinalUrls, Path1, Path2]);\r\n\r\n const adPreview = useMemo(() => {\r\n const previewProps = {\r\n i18n,\r\n imageList: Images && Images.ImageList,\r\n updateImageList: onUpdateImageList,\r\n shortHeadline: Headlines && Headlines.Headline0,\r\n longHeadline: LongHeadlines && LongHeadlines.LongHeadline0,\r\n description: Descriptions && Descriptions.Description0,\r\n businessName: BusinessName,\r\n callToAction: CallToAction,\r\n displayUrl,\r\n url: first(FinalUrls),\r\n videos: (videos.length > selectedVideoId && selectedVideoId !== null) ? [videos[selectedVideoId]] : [],\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n permissions,\r\n };\r\n return (\r\n \r\n );\r\n }, [i18n, Images, videos, permissions, onUpdateImageList, selectedVideoId, Headlines, LongHeadlines, Descriptions, BusinessName, CallToAction, displayUrl, FinalUrls, previewImagesSharedState, UAPLPMaxLogoPreviewEnabled, extensionsAssociations, isAdPreviewRefreshEnabled, PmaxExtensionPreview, isPMaxAspectRatiosV2Enabled]);\r\n\r\n const isSettingPage = useMemo(() => permissions.dynamic.PmaxNorthStarAssetGroupSetting && flow === STEP_PATHS.ASSETGROUPSETTING, [flow, permissions.dynamic.PmaxNorthStarAssetGroupSetting]);\r\n\r\n const signalSection = useMemo(() => (\r\n \r\n ), [assetGroup, permissions]);\r\n\r\n useEffect(() => {\r\n if (isSaving) {\r\n triggerSurveyOnSubmit();\r\n }\r\n }, [isSaving, triggerSurveyOnSubmit]);\r\n\r\n useEffect(() => {\r\n if (isCanceling && _.size(themes) > 0) {\r\n triggerSurveyOnCancel();\r\n }\r\n }, [isCanceling, themes, triggerSurveyOnCancel]);\r\n\r\n useEffect(() => {\r\n activity.trace('[PmaxNorthStarWizard] Assets step mounted');\r\n }, [activity]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ PMaxCampaignsCopilotRecommendations: 'true' });\r\n }, []);\r\n\r\n const onAssetGroupValidate = useCallback((result) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n ...result.data,\r\n },\r\n }),\r\n isValid: result.isValid,\r\n isDirty: result.isDirty,\r\n });\r\n }, [onDataChange]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {!false &&\r\n <>\r\n

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

\r\n
\r\n {i18n.getString(_TL_('Performance Max campaigns consist of asset groups, which contain the information and media you want to include in your ads. We\\'ll mix and match the most optimal asset combinations to create effective, high-performing ads.'))}\r\n
\r\n \r\n }\r\n
\r\n \r\n
\r\n \r\n
\r\n {assetGroupNameSection}\r\n
\r\n {assetsSection}\r\n {!isSettingPage && enhanceYourAdsSection}\r\n {!isSettingPage && moreAssetsSection}\r\n {moreOptionsSection}\r\n {moreSettingsSection}\r\n {isSettingPage && signalSection}\r\n
\r\n
\r\n
\r\n {adPreview}\r\n
\r\n
\r\n {imageExperienceComponents}\r\n
\r\n
\r\n \r\n \r\n {/* {navigationConfirmationPrompt} */}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nAssetsStepFormInternal.propTypes = {\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n TimeZone: PropTypes.string,\r\n }),\r\n assetGroup: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({\r\n ImageList: PropTypes.arrayOf(PropTypes.string),\r\n ImageAssets: PropTypes.shape({}),\r\n }),\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n }),\r\n FinalUrlForRecommendation: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.shape({}),\r\n LongHeadlines: PropTypes.shape({}),\r\n Descriptions: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({\r\n serverErrors: PropTypes.arrayOf(PropTypes.string),\r\n systemErrors: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.string,\r\n aid: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nAssetsStepFormInternal.defaultProps = {\r\n error: {},\r\n};\r\n\r\nexport const AssetsStepForm = withBannerService(withScope(AssetsStepFormInternal));\r\n","import React, { useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { AdAssetsFormShimmer, AdAssetsPreviewerShimmer } from '@bingads-webui-campaign-react/pmax-lite-shimmers';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { AssetsStepForm } from './assets-step-form';\r\nimport { getAssetsStepStyles } from './assets-step-styles';\r\n\r\nexport const AssetsStepShell = (props) => {\r\n const { data } = props || {};\r\n\r\n const isLoading = useMemo(() => _.isEmpty(data), [data]);\r\n const getStyles = useResponsiveStyles(getAssetsStepStyles);\r\n\r\n return (\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\n : \r\n }\r\n \r\n );\r\n};\r\n","export 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\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { MAX_CONVERSIONS_VALUE } from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\nimport { getBudgetRange } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport { URL_RULES_OPTIONS } from '@bingads-webui-campaign-react/url-rules';\r\nimport { getDefaultLocationTargetsViewModel, getDefaultLanguagesViewModel } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nexport const getDefaultCampaignData = ({\r\n i18n,\r\n serverContext,\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n cnMarketAccount,\r\n}) => ({\r\n Name: `${generateNameSuggestionSuffix(i18n.getString(_TL_('PerformanceMax-Campaign')))}-${Math.floor(Math.random() * 100)}`,\r\n Status: 'Paused',\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n Budget: {\r\n Amount: getBudgetRange(serverContext.CurrentAccount.CurrencyCode).Daily.Default,\r\n Type: 'DailyStandard',\r\n },\r\n Languages: getDefaultLanguagesViewModel(cnMarketAccount),\r\n BiddingScheme: {\r\n Type: MAX_CONVERSIONS_VALUE.type,\r\n TargetCpa: undefined,\r\n TargetRoas: undefined,\r\n },\r\n CampaignType: 'PerformanceMax',\r\n FinalUrlSuffix: '',\r\n TrackingUrlTemplate: '',\r\n UrlCustomParameters: [],\r\n locationTargets: getDefaultLocationTargetsViewModel(cnMarketAccount),\r\n adSchedules: {\r\n adScheduleUseSearcherTimeZone: undefined,\r\n dayTimeRanges: [],\r\n timeZone: undefined,\r\n },\r\n finalUrlExpansions: [],\r\n conversionGoals: {\r\n originalConversionGoals: [],\r\n goalSelection: [],\r\n goalScopeSelection: Scopes.ACCOUNT,\r\n },\r\n CampaignConversionGoal: {\r\n Goals: [],\r\n },\r\n ProviderId: providerId,\r\n IsFeedFiltered: isFeedFiltered,\r\n SalesCountry: salesCountry,\r\n FeedLabel: feedLabel,\r\n LocalInventoryAdsEnabled: localInventory,\r\n finalUrlExpansionOptOut: cnMarketAccount,\r\n autoGeneratedTextOptOut: cnMarketAccount,\r\n autoGeneratedImageOptOut: cnMarketAccount,\r\n costPerSaleOptOut: false,\r\n});\r\n\r\nexport const getDefaultAssetGroup = ({ i18n, businessName, storeFinalUrl = null }) => ({\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('AssetGroup'))),\r\n Status: 'Paused',\r\n Images: {\r\n ImageList: [],\r\n IsOptional: true,\r\n },\r\n BusinessName: businessName,\r\n FinalUrls: [storeFinalUrl],\r\n FinalUrlForRecommendation: storeFinalUrl,\r\n UrlRulesOption: URL_RULES_OPTIONS.All,\r\n});\r\n\r\n","import {\r\n apiErrorMapper,\r\n initialBrandExclusionsViewModel,\r\n saveCampaignAndLinkedData,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { notificationApi } from '@bingads-webui-campaign/notification-center';\r\nimport { getRoutePathById, allSiteMap } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { getDefaultCampaignData } from './default-data';\r\n\r\nexport const createDefaultCampaign = ({\r\n i18n,\r\n serverContext,\r\n scenarioContext,\r\n providerId = '',\r\n salesCountry = undefined,\r\n localInventory = false,\r\n isFeedFiltered = false,\r\n feedLabel = null,\r\n}) => {\r\n const permissions = serverContext.Permissions || {};\r\n\r\n const initialCampaignViewModel = {\r\n data: getDefaultCampaignData({\r\n i18n,\r\n serverContext,\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n cnMarketAccount: permissions.IsDomesticSimplifiedChineseEnabled,\r\n }),\r\n };\r\n\r\n return saveCampaignAndLinkedData({\r\n campaign: initialCampaignViewModel,\r\n originalCampaign: {},\r\n brandExclusions: initialBrandExclusionsViewModel,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n });\r\n};\r\n\r\nexport const handleDefaultCampaignCreationError = ({\r\n i18n,\r\n scope,\r\n errorData,\r\n}) => {\r\n // Only server errors are avaialble at this point\r\n const { serverErrors = [] } = errorData || {};\r\n const errorMessages = serverErrors.map(apiErrorMapper).join(', ');\r\n notificationApi.showWarning(i18n.getString(_TL_(\"We've encountered errors - {{errorMessages}} and can't continue. Please contact support for further assistance.\"), { errorMessages }));\r\n\r\n const campaignsPagePath = getRoutePathById(allSiteMap, 'campaigns');\r\n const { aid, cid, uid } = scope.values;\r\n const searchParams = `?uid=${uid}&cid=${cid}&aid=${aid}`;\r\n scope.history.push({\r\n pathname: campaignsPagePath,\r\n search: searchParams,\r\n });\r\n};\r\n","export const BudgetStepSection = {\r\n Budget: 'budget',\r\n BidStrategy: 'bid-strategy',\r\n AdvancedBidStrategy: 'advanced-bid-strategy',\r\n NewCustomerAcquisition: 'new-customer-acquisition',\r\n};\r\n\r\nexport const AllBudgetStepSections = [\r\n BudgetStepSection.Budget,\r\n BudgetStepSection.BidStrategy,\r\n BudgetStepSection.AdvancedBidStrategy,\r\n BudgetStepSection.NewCustomerAcquisition,\r\n];\r\n","import { useContext, useCallback } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const useLocalizeBudget = () => {\r\n const i18n = useContext(I18nContext);\r\n const localizeBudget = useCallback((budget, currency) => i18n.formatCurrency(\r\n Number(budget), currency.toUpperCase(),\r\n { withSymbol: false, maximumFractionDigits: 2 }\r\n ), [i18n]);\r\n return {\r\n localizeBudget,\r\n };\r\n};\r\n","export const getBudgetFormStyles = (_, { palette = {} }) => ({\r\n budgetPerformanceTile: {\r\n width: 'max-content',\r\n },\r\n header: {\r\n marginBottom: 20,\r\n },\r\n 'budgetPerformanceTile-m': {\r\n width: '100%',\r\n },\r\n 'budgetPerformanceTile-s': {\r\n width: '100%',\r\n },\r\n formContainer: {\r\n maxWidth: 680,\r\n minWidth: 300,\r\n flex: '1',\r\n '& .bid-strategy-dropdown': {\r\n '& .ms-Dropdown': {\r\n maxWidth: 312,\r\n },\r\n },\r\n '& .title-item': {\r\n width: 'auto',\r\n },\r\n },\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n collapsiblePanel: {\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n marginLeft: '-8px', // compensate 8px padding on the left of icon\r\n color: palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n },\r\n\r\n '& .panel-collapse': {\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n advancedBidStrategyContent: {\r\n '& .toggle-icon': {\r\n visibility: 'hidden',\r\n },\r\n },\r\n});\r\n","import React, { useMemo, useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport BingAdsWebUIStaticLegacyPageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { BudgetComponent } from '@bingads-webui-campaign-react/budget-component';\r\nimport {\r\n BidStrategyComponent,\r\n MAX_CONVERSIONS,\r\n MAX_CONVERSIONS_VALUE\r\n} from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { useIsMounted } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { ConversionBasedBiddingBanner } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { TargetCpaWarningBanner } from '@bingads-webui-campaign-react/target-cpa-warning-banner';\r\nimport { ValidatedCostPerSale } from '@bingads-webui-campaign-react/cost-per-sale-option';\r\nimport { ValidatedNewCustomerAcquisition, ValidatedNewCustomerAcquisitionHeader, newCustomerAcquisitionServerErrorFilter } from '@bingads-webui-campaign-react/new-customer-acquisition';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n ValidatedBootstrapPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-react/form';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n FormErrorGroup,\r\n UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n apiErrorMapper,\r\n ERROR_ENTITY,\r\n CostPerSaleImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport {\r\n withUnvalidatedControlErrors,\r\n withControlErrorHandling,\r\n} from '@bingads-webui-campaign-react/error-handling';\r\nimport { BudgetSuggestionContainer, MODE } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\nimport { CampaignTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, getFlowFactors } from '@bingads-webui-react/wizard';\r\nimport { BudgetStepSection, AllBudgetStepSections } from './utils/const';\r\nimport { useLocalizeBudget } from './utils/use-budget-localized';\r\nimport BidStrategyIcon from './media/bid-strategy.svg';\r\nimport BudgetIcon from './media/budget.svg';\r\nimport { getBudgetFormStyles } from './styles/get-budget-form-styles';\r\nimport { useBudgetSuggestionData } from './use-budget-suggestion-data';\r\nimport { FLOWS } from '../step-constants';\r\nimport { SingleLineShimmer } from '../../shared/components/section-shimmer';\r\n\r\nconst { BudgetRange } = BingAdsWebUIStaticLegacyPageContext;\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst budgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\nconst bidStrategyProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst campaignCPSOptOutProp = andComp(entityIsCampaign, propertyIs('CostPerSaleOptOut'));\r\n\r\nconst ServerValidatedBudgetComponent = withControlErrorHandling(withUnvalidatedControlErrors(BudgetComponent, { filter: budgetProp }));\r\nconst ServerValidatedBidStrategyComponent = withControlErrorHandling(withUnvalidatedControlErrors(BidStrategyComponent, { filter: bidStrategyProp }));\r\nconst ServerValidatedCostPerSale = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedCostPerSale, { filter: campaignCPSOptOutProp }));\r\nconst ServerValidatedNewCustomerAcquisition = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedNewCustomerAcquisition, { filter: newCustomerAcquisitionServerErrorFilter }));\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nconst BID_STRATEGY_OPTIONS = [\r\n MAX_CONVERSIONS,\r\n MAX_CONVERSIONS_VALUE,\r\n];\r\n\r\nexport const BudgetStepShell = ({\r\n data: budgetInfo,\r\n onDataChange,\r\n error,\r\n}) => {\r\n const {\r\n campaign,\r\n conversionGoalDetails,\r\n budgetAmount,\r\n bidStrategy,\r\n currency,\r\n cpa,\r\n roas,\r\n isInitialAdditionalDetailsChecked,\r\n budgetSuggestionData,\r\n fetchCustomBudgetPerformanceData,\r\n budgetTier,\r\n loadBudgetPartial,\r\n } = budgetInfo || {};\r\n const {\r\n costPerSaleOptOut,\r\n newCustomerAcquisition,\r\n newCustomerAcquisitionOptOut,\r\n } = campaign || {};\r\n\r\n const getStyles = useResponsiveStyles(getBudgetFormStyles);\r\n const { serverErrors, systemErrors } = error || {};\r\n const { state } = useFormService();\r\n const { saveFailed } = state.context;\r\n const isLoading = state.matches(FORM_STATES.LOADING);\r\n const isDataLoading = useMemo(() => _.isEmpty(budgetInfo), [budgetInfo]);\r\n const { localizeBudget } = useLocalizeBudget();\r\n const isMounted = useIsMounted();\r\n const serverContext = useContext(ServerContext);\r\n const bidRange = (serverContext && serverContext.KeywordBidRange) || null;\r\n const { Permissions, DynamicPermissions, CurrentAccount: { AdvertiserCustomerID: advertiserCustomerId, CurrencyCode } } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const {\r\n SupportCPSForPmax: IsSupportCPSForPmaxEnabled,\r\n EnableBudgetSuggestion,\r\n NewCustomerAcquisition: IsNewCustomerAcquisitionEnabled,\r\n } = permissions.dynamic;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state: wizardState } = useWizardService();\r\n\r\n const { flow } = getFlowFactors(wizardState);\r\n\r\n const shouldShowBudgetSuggestion = useMemo(() => EnableBudgetSuggestion && flow === FLOWS.PERFMAX_WIZARD, [EnableBudgetSuggestion, flow]);\r\n\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const mergedI18n = useMemo(() => mergeI18n(\r\n legacyI18n,\r\n i18n\r\n ), [i18n, legacyI18n]);\r\n\r\n const [\r\n allSections,\r\n expandedSections,\r\n setExpandedSections,\r\n ] = useCollapseState(AllBudgetStepSections, AllBudgetStepSections);\r\n\r\n const expandSections = useMemo(() =>\r\n collapseExpander({ setActiveKeys: setExpandedSections }), [setExpandedSections]);\r\n\r\n const {\r\n isBudgetSuggestionLoading,\r\n customPerformanceData,\r\n budgetSuggestionData: updatedBudgetSuggestionData,\r\n } = useBudgetSuggestionData({\r\n loadBudgetPartial,\r\n shouldShowBudgetSuggestion,\r\n campaign,\r\n fetchCustomBudgetPerformanceData,\r\n cpa,\r\n roas,\r\n bidStrategy,\r\n budgetTier,\r\n budgetAmount,\r\n });\r\n\r\n /**\r\n * This is a workaround to fit the budget schema inside PMaxLite's BudgetComponent.\r\n * The schema expects suggestion from UP providing minimum and maximum budget which doesn't work here.\r\n * Using the valid range from legacy budget schema instead.\r\n * */\r\n const { DailyRange } = BudgetRange || {};\r\n\r\n const budgetSuggestion = useMemo(() => ({\r\n Currency: currency,\r\n GlobalMaximumBudget: { DailyBudget: DailyRange.CeilingValue ? DailyRange.CeilingValue : 3000000 },\r\n GlobalMinimumBudget: { DailyBudget: DailyRange.FloorValue ? DailyRange.FloorValue : 0.05 },\r\n }), [currency, DailyRange.CeilingValue, DailyRange.FloorValue]);\r\n\r\n const budgetTitleDetails = useMemo(() => i18n.getString(_TL_('{{budgetAmount}} {{currency}} per day'), { budgetAmount, currency }), [budgetAmount, currency, i18n]);\r\n\r\n const bidStrategyTitleDetails = useMemo(() => {\r\n let targetValue = '';\r\n if (bidStrategy === MAX_CONVERSIONS.type && cpa) {\r\n targetValue = `${cpa} ${currency}`;\r\n } else if (bidStrategy === MAX_CONVERSIONS_VALUE.type && roas) {\r\n targetValue = `${roas} %`;\r\n }\r\n return (\r\n <>\r\n {i18n.getString(_TL_('{{bidStrategy}}'), { bidStrategy }) + (targetValue ? `, ${i18n.getString(_TL_('target {{targetValue}}'), { targetValue })}` : '')}\r\n \r\n \r\n );\r\n }, [bidStrategy, cpa, roas, i18n, budgetAmount, activity, currency]);\r\n\r\n const onFieldChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n ...updatedData,\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const onBidStrategyChange = useCallback((e, newBidStrategy) => {\r\n const bidStrategyType = _.get(newBidStrategy, 'type');\r\n onFieldChange({ bidStrategy: bidStrategyType });\r\n }, [onFieldChange]);\r\n\r\n const onBudgetChange = useCallback((newBudget, shouldLocalize = false) => {\r\n const budgetAmountValue = shouldLocalize ? localizeBudget(newBudget, currency) : newBudget;\r\n onFieldChange({ budgetAmount: budgetAmountValue });\r\n }, [currency, onFieldChange, localizeBudget]);\r\n\r\n const onBudgetValidate = useCallback(({ isValid, messages }) => {\r\n onFieldChange({ isBudgetValid: isValid, budgetErrors: messages });\r\n }, [onFieldChange]);\r\n\r\n const onBudgetSuggestionValidate = useCallback((result) => {\r\n const { data = {}, isValid, messages } = result || {};\r\n\r\n onFieldChange({\r\n budgetTier: data.budgetTier,\r\n budgetAmount: `${data.budget}`,\r\n isBudgetValid: isValid,\r\n budgetErrors: messages,\r\n });\r\n }, [onFieldChange]);\r\n\r\n const onMarketingMetricChange = useCallback(({\r\n data: newMarketingMetric,\r\n isValid,\r\n messages,\r\n }) => {\r\n onFieldChange({\r\n ...newMarketingMetric,\r\n isMarketingMetricValid: isValid,\r\n marketingMetricErrors: messages,\r\n });\r\n }, [onFieldChange]);\r\n\r\n const onCampaignValidation = useCallback((results) => {\r\n if (!isMounted.current) return;\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n ...results.data,\r\n },\r\n }),\r\n isValid: results.isValid,\r\n isDirty: results.isDirty,\r\n });\r\n }, [isMounted, onDataChange]);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n <>\r\n
\r\n

{i18n.getString(_TL_('How much do you want to spend?'))}

\r\n {i18n.getString(_TL_('Tell us about your campaign and how much you want to spend'))}\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n }\r\n actuationProps={{\r\n expandKey: BudgetStepSection.Budget,\r\n expand: expandSections,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n shouldShowBudgetSuggestion ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {IsNewCustomerAcquisitionEnabled && (\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: BudgetStepSection.NewCustomerAcquisition,\r\n expandKey: expandSections,\r\n }}\r\n >\r\n {\r\n isDataLoading ? : (\r\n \r\n )\r\n }\r\n \r\n )}\r\n \r\n }\r\n actuationProps={{\r\n expandKey: BudgetStepSection.BidStrategy,\r\n expand: expandSections,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n \r\n \r\n {\r\n IsSupportCPSForPmaxEnabled && (\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('Advanced bid strategy'))}\r\n \r\n \r\n \r\n \r\n
\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n isActive\r\n >\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n )\r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nBudgetStepShell.propTypes = {\r\n data: PropTypes.shape({\r\n budgetAmount: PropTypes.number,\r\n bidStrategy: PropTypes.string,\r\n currency: PropTypes.string,\r\n cpa: PropTypes.number,\r\n roas: PropTypes.number,\r\n costPerSaleOptOut: PropTypes.bool,\r\n isInitialAdditionalDetailsChecked: PropTypes.bool,\r\n campaign: PropTypes.shape({}),\r\n conversionGoalDetails: PropTypes.shape({}),\r\n }).isRequired,\r\n error: PropTypes.shape({\r\n serverErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n systemErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import { useState, useEffect } from 'react';\r\n\r\nexport const useBudgetSuggestionData = ({\r\n loadBudgetPartial,\r\n fetchCustomBudgetPerformanceData,\r\n cpa,\r\n roas,\r\n bidStrategy,\r\n campaign,\r\n budgetTier,\r\n budgetAmount,\r\n shouldShowBudgetSuggestion,\r\n}) => {\r\n const EnableBudgetSuggestion = shouldShowBudgetSuggestion;\r\n\r\n const [isBudgetSuggestionLoading, setIsBudgetSuggestionLoading] = useState(false);\r\n\r\n const [budgetSuggestionData, setBudgetSuggestionData] = useState(null);\r\n\r\n const [customPerformanceData, setCustomPerformanceData] = useState(null);\r\n\r\n useEffect(() => {\r\n if (loadBudgetPartial && bidStrategy && campaign && campaign.BiddingScheme.Type !== bidStrategy && EnableBudgetSuggestion) {\r\n setIsBudgetSuggestionLoading(true);\r\n\r\n loadBudgetPartial({\r\n BiddingScheme: {\r\n Type: bidStrategy,\r\n TargetCpa: cpa,\r\n TargetRoas: roas,\r\n },\r\n }).then((budgetSuggestions) => {\r\n setBudgetSuggestionData(budgetSuggestions);\r\n setIsBudgetSuggestionLoading(false);\r\n }).catch(() => {\r\n setIsBudgetSuggestionLoading(false);\r\n });\r\n }\r\n }, [EnableBudgetSuggestion, bidStrategy, campaign, cpa, loadBudgetPartial, roas]);\r\n\r\n\r\n useEffect(() => {\r\n if (loadBudgetPartial && EnableBudgetSuggestion) {\r\n setIsBudgetSuggestionLoading(true);\r\n\r\n loadBudgetPartial({\r\n BiddingScheme: {\r\n Type: bidStrategy,\r\n TargetCpa: cpa,\r\n TargetRoas: roas,\r\n },\r\n }).then((budgetSuggestions) => {\r\n setBudgetSuggestionData(budgetSuggestions);\r\n setIsBudgetSuggestionLoading(false);\r\n }).catch(() => {\r\n setIsBudgetSuggestionLoading(false);\r\n });\r\n }\r\n }, [EnableBudgetSuggestion, bidStrategy, cpa, loadBudgetPartial, roas]);\r\n\r\n useEffect(() => {\r\n if (budgetTier === 'CustomBudget' && EnableBudgetSuggestion) {\r\n setCustomPerformanceData({ isLoading: true });\r\n\r\n if (fetchCustomBudgetPerformanceData && parseInt(budgetAmount, 10) > 0) {\r\n fetchCustomBudgetPerformanceData({ budgetAmount })\r\n .then(result => setCustomPerformanceData({ isLoading: false, ...result }))\r\n .catch(() => setCustomPerformanceData({ isLoading: false }));\r\n }\r\n }\r\n }, [EnableBudgetSuggestion, budgetAmount, budgetTier, fetchCustomBudgetPerformanceData]);\r\n\r\n return {\r\n isBudgetSuggestionLoading,\r\n budgetSuggestionData,\r\n customPerformanceData,\r\n };\r\n};\r\n","import { useCallback, useContext, useMemo } from 'react';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { usePreference, preferenceNames } from '@bingads-webui-campaign-react/pmax-lite-data';\r\nimport { useWizardService, getFlowFactors, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n initialBrandExclusionsViewModel,\r\n loadCampaign,\r\n loadConversionGoalDetails,\r\n saveCampaignAndLinkedData,\r\n loadBundleCountries,\r\n modelToViewModelForCampaign,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { readLocationCriterions, readNewCustomerAcquisitionGoals } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { MAX_CONVERSIONS } from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useBudgetSuggestionRepository, MODE } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\nimport { CampaignTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { LogTargetCpaCheckOnSave } from '@bingads-webui-campaign-react/target-cpa-warning-banner';\r\nimport { useLocalizeBudget } from './utils/use-budget-localized';\r\nimport { FLOWS } from '../step-constants';\r\n\r\nexport const roasMtToUI = roas => (_.isNumber(roas) ? roas * 100 : null);\r\nexport const roasUiToMt = roas => (_.isNumber(roas) ? (roas / 100).toFixed(4) : null);\r\n\r\nexport const useBudgetStepRepository = () => {\r\n const { localizeBudget } = useLocalizeBudget();\r\n const [{ value: currencyPreference }] = usePreference(preferenceNames.SelectedCurrency);\r\n const { state, send } = useWizardService();\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions, CurrentAccount: { CurrencyCode } } = serverContext || {};\r\n\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const {\r\n EnableBudgetSuggestion,\r\n NewCustomerAcquisition: isNewCustomerAcquisitionEnabled,\r\n } = permissions.dynamic;\r\n\r\n const { flow } = getFlowFactors(state);\r\n\r\n const shouldShowBudgetSuggestion = useMemo(() => EnableBudgetSuggestion && flow === FLOWS.PERFMAX_WIZARD, [EnableBudgetSuggestion, flow]);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const { campaign: savedCampaign, assetGroup, diagnostics } = state.context.wizardData;\r\n\r\n const {\r\n loadBudget,\r\n loadBudgetPartial,\r\n saveBudget,\r\n fetchCustomBudgetPerformanceData,\r\n } = useBudgetSuggestionRepository({\r\n campaignId: savedCampaign.Id,\r\n mode: MODE.CREATION,\r\n campaignType: CampaignTypes.PerformanceMax,\r\n currency: CurrencyCode,\r\n campaign: savedCampaign,\r\n assetGroup,\r\n });\r\n\r\n const modelToViewModel = useCallback((campaign) => {\r\n const budgetAmount = _.get(campaign, ['Budget', 'Amount']);\r\n const bidStrategy = _.get(campaign, ['BiddingScheme', 'Type']);\r\n const cpa = _.get(campaign, ['BiddingScheme', 'TargetCpa']);\r\n const roas = parseFloat(_.get(campaign, ['BiddingScheme', 'TargetRoas'])) || null;\r\n const language = _.get(campaign, ['Languages', 0]);\r\n const isInitialAdditionalDetailsChecked = _.isNumber(cpa) || _.isNumber(roas);\r\n\r\n return {\r\n budgetAmount: localizeBudget(budgetAmount, 'USD'),\r\n bidStrategy,\r\n currency: currencyPreference,\r\n cpa,\r\n roas: roasMtToUI(roas),\r\n language,\r\n isInitialAdditionalDetailsChecked,\r\n isMarketingMetricValid: true,\r\n };\r\n }, [currencyPreference, localizeBudget]);\r\n\r\n const load = useCallback(() => {\r\n const { Id: campaignId } = savedCampaign || {};\r\n\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId), // This is necessary to read 'CampaignConversionGoal' from MT. The current conversion is coupled with the value.\r\n conversionGoalDetails: loadConversionGoalDetails({ cid, aid }),\r\n locationTargets: readLocationCriterions(cid, aid, campaignId),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoals: readNewCustomerAcquisitionGoals(cid, aid) }),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n locationTargets,\r\n bundleCountriesAndLocationCriterions,\r\n conversionGoalDetails,\r\n newCustomerAcquisitionGoals,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: { ...campaign, Status: savedCampaign.status },\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoalsModel: newCustomerAcquisitionGoals ? newCustomerAcquisitionGoals.value : [] }),\r\n });\r\n\r\n return {\r\n campaign: campaignData.data,\r\n assetGroup,\r\n conversionGoalDetails,\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n ...bundleCountriesAndLocationCriterions,\r\n ...modelToViewModel(campaign),\r\n fetchCustomBudgetPerformanceData,\r\n loadBudgetPartial,\r\n };\r\n })\r\n .then((result) => {\r\n if (shouldShowBudgetSuggestion) {\r\n return loadBudget()\r\n .then(budgetSuggestionData => ({ ...result, budgetSuggestionData }))\r\n .catch((err) => {\r\n activity.error('[PmaxNorthStarWizard] - failed to load budget suggestion data', err);\r\n return { ...result, budgetSuggestionData: null };\r\n });\r\n }\r\n return Promise.resolve(result);\r\n });\r\n }, [savedCampaign, cid, aid, serverContext, isNewCustomerAcquisitionEnabled, assetGroup, modelToViewModel, fetchCustomBudgetPerformanceData, loadBudgetPartial, shouldShowBudgetSuggestion, loadBudget, activity]);\r\n\r\n const save = useCallback(({ data }) => {\r\n const {\r\n campaign: updatedCampaign,\r\n budgetAmount,\r\n bidStrategy,\r\n cpa,\r\n roas,\r\n isBudgetValid,\r\n isMarketingMetricValid,\r\n conversionGoalDetails,\r\n budgetTier,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n budgetSuggestionData,\r\n } = data || {};\r\n\r\n if (!isBudgetValid || !isMarketingMetricValid) {\r\n return Promise.reject();\r\n }\r\n\r\n const newCampaign = {\r\n ...updatedCampaign,\r\n BiddingScheme: {\r\n Type: bidStrategy,\r\n ...(\r\n bidStrategy === MAX_CONVERSIONS.type\r\n ? { TargetCpa: cpa }\r\n : { TargetRoas: roasUiToMt(roas) }\r\n ),\r\n },\r\n Budget: {\r\n Amount: i18n.parseDecimal(budgetAmount),\r\n Type: 'DailyStandard',\r\n },\r\n };\r\n\r\n const savePromises = {\r\n campaign: saveCampaignAndLinkedData({\r\n campaign: { data: newCampaign },\r\n originalCampaign: { data: savedCampaign },\r\n brandExclusions: initialBrandExclusionsViewModel,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateCampaign'),\r\n }),\r\n };\r\n\r\n if (shouldShowBudgetSuggestion) {\r\n // we call save budget from the hook, since it has the necessary metrics logging to report.\r\n savePromises.budgetSuggestion = saveBudget({ campaign: newCampaign, budgetAmount, budgetTier });\r\n }\r\n\r\n return Promise.props(savePromises).then(({\r\n campaign: campaignResults,\r\n budgetSuggestion: budgetSuggestionResults,\r\n }) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign settings updated in budget step');\r\n activity.signal('[PmaxNorthStarWizard] - campaign settings updated in budget step');\r\n\r\n const { campaign } = campaignResults;\r\n\r\n LogTargetCpaCheckOnSave(i18n, permissions, campaign?.data?.Budget?.Amount, campaign?.data?.BiddingScheme.TargetCpa, activity, 'PmaxNorthStarWizard');\r\n\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: {\r\n ...campaign.data,\r\n locationTargets: updatedCampaign.locationTargets,\r\n },\r\n diagnostics: {\r\n ...diagnostics,\r\n budgetSuggestionData,\r\n },\r\n });\r\n\r\n if (budgetSuggestionResults) {\r\n activity.trace('[PmaxNorthStarWizard] - budget suggestion adopted in budget step');\r\n }\r\n\r\n return {\r\n campaign: campaign.data,\r\n conversionGoalDetails,\r\n ...modelToViewModel(campaign.data),\r\n };\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign settings update failed in budget step');\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({ error: { ...errorData } });\r\n });\r\n }, [i18n, savedCampaign, scenarioContext, shouldShowBudgetSuggestion, saveBudget, activity, permissions, send, diagnostics, modelToViewModel]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useMemo, useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { map, isEmpty } from 'underscore';\r\nimport { ValidatedLanguageTarget,\r\n ValidatedLocationTargetSetting,\r\n LanguageTargetValidatorFactory,\r\n AudienceSignalPanel } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n LocationImg,\r\n LanguageImg,\r\n apiErrorMapper,\r\n campaignLanguageStrings,\r\n SearchThemesImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { AudienceSignalSection,\r\n getLocationTargetTitleDetails,\r\n getSearchThemeDetails,\r\n PANEL_KEYS } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ValidationSearchThemeSelector } from '@bingads-webui-campaign-react/search-theme-selector';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n FormErrorGroup, UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n entityIs, andComp, propertyIs, anyComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { Campaign, AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getLocationTargetingStyles } from '@bingads-webui-campaign-react/location-targeting';\r\n\r\nimport { ERROR_ENTITY } from '../../shared/model/api-error';\r\nimport { SectionShimmer, SingleLineShimmer } from '../../shared/components/section-shimmer';\r\n\r\n\r\nconst getTargetingStyles = () => ({\r\n container: {\r\n maxWidth: 680,\r\n '& .title-item': {\r\n width: 'unset !important',\r\n },\r\n '& .specific-location-targets-editor': {\r\n marginLeft: '-25px !important',\r\n },\r\n '& .intent-target ul': {\r\n paddingLeft: '20px',\r\n },\r\n },\r\n header: {\r\n marginBottom: 20,\r\n },\r\n ...getLocationTargetingStyles(),\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\nconst campaignLanguagesProp = andComp(entityIsCampaign, propertyIs('Languages'));\r\n\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLocationTargetSetting, { filter: campaignLocationCriterions }));\r\nconst ServerValidatedLanguageTarget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLanguageTarget, { filter: campaignLanguagesProp }));\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nexport const TargetingStepShell = ({\r\n data: targetingInfo = {},\r\n onDataChange,\r\n error,\r\n}) => {\r\n const isLoading = useMemo(() => isEmpty(targetingInfo), [targetingInfo]);\r\n\r\n const classes = useDefaultStyles(getTargetingStyles);\r\n\r\n const { serverErrors, systemErrors } = error || {};\r\n\r\n const { state: { context: { saveFailed } } } = useFormService();\r\n\r\n const serverContext = useContext(ServerContext);\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n\r\n const {\r\n CurrentLocale: locale,\r\n DynamicPermissions,\r\n Permissions,\r\n } = serverContext;\r\n\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n campaign = {},\r\n assetGroup = {},\r\n } = targetingInfo || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const isSearchThemeEnabled = permissions && permissions.dynamic && permissions.dynamic.SearchThemes;\r\n\r\n const [\r\n allAssetGroupSections,\r\n assetGroupExpandedSections,\r\n setAssetGroupExpandedSections,\r\n ] = useCollapseState(\r\n isSearchThemeEnabled ? [PANEL_KEYS.AUDIENCE_SIGNAL, 'search-themes'] : [PANEL_KEYS.AUDIENCE_SIGNAL] /* all sections */,\r\n isSearchThemeEnabled ? [PANEL_KEYS.AUDIENCE_SIGNAL, 'search-themes'] : [PANEL_KEYS.AUDIENCE_SIGNAL] /* initially expanded sections */\r\n );\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['locations', 'language-target'],\r\n ['locations', 'language-target']\r\n );\r\n\r\n const campaignSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setCampaignSettingsExpandedSections }),\r\n [setCampaignSettingsExpandedSections]\r\n );\r\n\r\n const locationPanel = useMemo(() => (\r\n
\r\n \r\n
\r\n ), [bundleCountries, bundleLocationCriterions, campaign, classes.LocationTargeting, scope]);\r\n\r\n const searchThemeSection = useMemo(() => (\r\n
\r\n {\r\n isLoading ? :\r\n ()\r\n }\r\n
\r\n ), [assetGroup, i18n, isLoading, perfMarker]);\r\n\r\n const onAssetGroupSettingsValidate = useCallback((result) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n ...result.data,\r\n },\r\n }),\r\n isValid: result.isValid,\r\n isDirty: result.isDirty,\r\n });\r\n }, [onDataChange]);\r\n\r\n const onCampaignSettingsValidate = useCallback((result) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n ...result.data,\r\n },\r\n }),\r\n isValid: result.isValid,\r\n isDirty: result.isDirty,\r\n });\r\n }, [onDataChange]);\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n

{i18n.getString(_TL_('Who do you want to see your ads?'))}

\r\n {i18n.getString(_TL_('Tell us how and when you\\'d like to optimize placements for your ads'))}\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: campaignSettingsExpand,\r\n expandKey: 'locations',\r\n }}\r\n >\r\n {isLoading ? : locationPanel}\r\n \r\n i18n.getString(campaignLanguageStrings[lang] || lang)\r\n ).toString()}\r\n icon={LanguageImg}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: campaignSettingsExpand,\r\n expandKey: 'language-target',\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\n \r\n \r\n \r\n {isSearchThemeEnabled &&\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expandKey: 'search-themes',\r\n }}\r\n >\r\n {searchThemeSection}\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\nTargetingStepShell.propTypes = {\r\n data: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n bundleCountries: PropTypes.shape({}),\r\n bundleLocationCriterions: PropTypes.shape({}),\r\n campaign: PropTypes.shape({}),\r\n assetGroup: PropTypes.shape({}),\r\n }).isRequired,\r\n error: PropTypes.shape({\r\n serverErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n systemErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n scope: PropTypes.shape({}).isRequired,\r\n};\r\n\r\n","import React, { useContext, useMemo, useCallback, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { AssetGroup, Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { StoreSelectContainer } from '@bingads-webui-campaign-react/store-select';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ShoppingImg, ListingGroupImg, apiErrorMapper } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { getStoreTitleDetails, getListingGroupDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ValidatedListingGroups } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { withScope, QueryParam, ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { legacyI18nOfListingGroup } from '@bingads-webui-campaign-react/listing-groups-page';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { StoreSelectorShimmer, SingleLineShimmer } from '../../shared/components/section-shimmer';\r\n\r\nconst getProductStepStyles = () => ({\r\n container: {\r\n maxWidth: 680,\r\n },\r\n header: {\r\n marginBottom: 20,\r\n },\r\n});\r\n\r\nconst getProductSettingStyles = () => ({\r\n width: '100%',\r\n '& .text-assets-collection-container': {\r\n width: 'auto',\r\n },\r\n '& .asset-group-name-section .error-string-wrapper': {\r\n right: 'unset !important',\r\n position: 'unset !important',\r\n },\r\n\r\n '& .text-input-container': {\r\n width: '100%',\r\n },\r\n '& .date-settings table': {\r\n width: 'unset !important',\r\n },\r\n '& .asset-group-enhance-ads-section': {\r\n '& .section-description': {\r\n marginBottom: '16px',\r\n },\r\n },\r\n 'formContainer-xxl': {\r\n width: '530px',\r\n },\r\n 'formContainer-xl': {\r\n width: '430px',\r\n },\r\n});\r\n\r\nconst ProductsStepShellInternal = ({\r\n data = {},\r\n onDataChange,\r\n error,\r\n isSettingPage,\r\n}) => {\r\n const isLoading = useMemo(() => _.isEmpty(data), [data]);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const getStyles = useResponsiveStyles(getProductSettingStyles);\r\n const classes = useDefaultStyles(getProductStepStyles);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { state, send } = useWizardService();\r\n\r\n const { campaignObjective } = state.context.wizardData;\r\n\r\n const { saveFailed } = state.context;\r\n\r\n const [storesData, setStoresData] = useState(null);\r\n\r\n const { serverErrors, systemErrors } = error || {};\r\n\r\n const {\r\n campaign = {},\r\n assetGroup = {},\r\n } = data || {};\r\n\r\n const {\r\n listingGroup,\r\n productFilter,\r\n } = assetGroup;\r\n\r\n const {\r\n Id,\r\n ProviderId,\r\n IsFeedFiltered,\r\n SalesCountry,\r\n FeedLabel,\r\n LocalInventoryAdsEnabled,\r\n } = campaign || {};\r\n\r\n const storeContainerData = useMemo(() => ({\r\n ProviderId,\r\n IsFeedFiltered,\r\n SalesCountry,\r\n FeedLabel,\r\n LocalInventoryAdsEnabled,\r\n }), [ProviderId, IsFeedFiltered, SalesCountry, FeedLabel, LocalInventoryAdsEnabled]);\r\n\r\n const storeTitleDetails = useMemo(() => storesData && getStoreTitleDetails(i18n, storesData, storeContainerData), [i18n, storesData, storeContainerData]);\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap, legacyI18nOfListingGroup]), [i18n]);\r\n\r\n const mergedI18n = useMemo(() => mergeI18n(\r\n legacyI18n,\r\n i18n\r\n ), [i18n, legacyI18n]);\r\n\r\n const [\r\n allProductsSections,\r\n productsSectionsExpandedSections,\r\n setProdutsSectionExpandedSections,\r\n ] = useCollapseState(\r\n ['shopping-ads'] /* all sections */,\r\n ['shopping-ads'] /* initially expanded sections */\r\n );\r\n\r\n const [\r\n allListingGroupSections,\r\n lisitngGroupSectionsExpandedSections,\r\n setListingGroupExpandedSections,\r\n ] = useCollapseState(\r\n ['listing-groups'] /* all sections */,\r\n ['listing-groups'] /* initially expanded sections */\r\n );\r\n\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setProdutsSectionExpandedSections }),\r\n [setProdutsSectionExpandedSections]\r\n );\r\n\r\n const listingGroupDetails = useMemo(() => getListingGroupDetails(\r\n i18n,\r\n !!assetGroup.Id,\r\n {\r\n productFilter,\r\n listingGroup,\r\n }\r\n ), [assetGroup.Id, i18n, listingGroup, productFilter]);\r\n\r\n const onStoreDataLoaded = useCallback(({ error: apiError, stores = {}, countries = {} }) => {\r\n setStoresData({ apiError, stores, countries });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (storesData) {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { loadedStoresData: storesData });\r\n }\r\n }, [send, storesData]);\r\n\r\n const shoppingAdsPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'shopping-ads',\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 const onNavigateToListingGroups = useCallback(() => {\r\n const queryParam = new QueryParam(scope.history.location, scope.history);\r\n queryParam.append({ campaignId: Id, assetGroupId: assetGroup.Id });\r\n scope.history.push({\r\n pathname: '/campaign/vnext/listinggroups/list',\r\n search: queryParam.stringify(),\r\n });\r\n }, [Id, assetGroup.Id, scope.history]);\r\n\r\n const listingGroupsSection = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'listing-groups',\r\n }}\r\n >\r\n {\r\n isLoading ? : (\r\n \r\n )\r\n }\r\n \r\n ), [Id, ProviderId, assetGroup.Id, basicSettingsExpand, isLoading, listingGroup, listingGroupDetails, mergedI18n, onNavigateToListingGroups, storeContainerData]);\r\n\r\n const onAssetGroupSettingsValidate = useCallback((result) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n assetGroup: {\r\n ...prevData.assetGroup,\r\n ...result.data,\r\n },\r\n }),\r\n isValid: result.isValid,\r\n isDirty: result.isDirty,\r\n });\r\n }, [onDataChange]);\r\n\r\n const onCampaignSettingsValidate = useCallback((result) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n CampaignSettings: {\r\n ...prevData.campaign.CampaignSettings,\r\n ...storeContainerData,\r\n },\r\n ...result.data,\r\n },\r\n }),\r\n isValid: result.isValid,\r\n isDirty: result.isDirty,\r\n });\r\n }, [onDataChange, storeContainerData]);\r\n\r\n return (\r\n \r\n
\r\n {!isSettingPage &&\r\n
\r\n

{ i18n.getString(_TL_('Add your products')) }

\r\n
\r\n {i18n.getString(_TL_('Choose which products to show in your ads. Some of your ads will use images, headlines and descriptions from Merchant center'))}\r\n
\r\n
\r\n }\r\n <>\r\n {!isSettingPage &&\r\n <>\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n {shoppingAdsPanel}\r\n \r\n \r\n \r\n \r\n {listingGroupsSection}\r\n \r\n \r\n \r\n }\r\n {isSettingPage &&\r\n
\r\n \r\n \r\n {listingGroupsSection}\r\n \r\n \r\n
\r\n}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nProductsStepShellInternal.propTypes = {\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n assetGroup: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({\r\n serverErrors: PropTypes.arrayOf(PropTypes.string),\r\n systemErrors: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n assetGroupId: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n isSettingPage: PropTypes.bool,\r\n};\r\n\r\nProductsStepShellInternal.defaultProps = {\r\n error: {},\r\n isSettingPage: false,\r\n};\r\n\r\nexport const ProductsStepShell = withScope(ProductsStepShellInternal);\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useMemo, useContext, useCallback, useEffect, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport Repository from '@bingads-webui-campaign-legacy/adextension-shared/service/repository';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup, FocusableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { DisclaimerAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { DisclaimerStringMap } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport {\r\n bidAdjustmentIcon,\r\n getAssociatedDisclaimer,\r\n getCampaignStyles,\r\n ValidatedDisclaimerExtension,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n getAdScheduleDetails,\r\n getConversionGoalTitleDetails,\r\n getDisclaimerTitleDetails,\r\n getFinalUrlExpansionTitleDetails,\r\n PANEL_KEYS,\r\n} from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n ValidatedFixedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedConversionGoals, ValidatedConversionGoalsScopeSelector, useIsMounted, BrandShowroomPanel } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { ValidatedUrlOptionsParameter } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { ValidatedAutoGeneratedAssets } from '@bingads-webui-campaign-react/auto-generated-assets';\r\nimport { BrandListsPicker } from '@bingads-webui-campaign-react/brand-lists-components';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport {\r\n FormErrorGroup,\r\n UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n entityIs,\r\n andComp,\r\n anyComp,\r\n notComp,\r\n propertyIs,\r\n StandardControlAdapter,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { PageFeedSelectorSection } from '@bingads-webui-campaign-react/page-feed-selector';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport {\r\n apiErrorMapper,\r\n ERROR_ENTITY,\r\n getStepCampaignSettingsStyles,\r\n AdScheduleImg,\r\n ConversionsImg,\r\n AutoGenAssetsImg,\r\n PageFeedsImg,\r\n UrlOptionsImg,\r\n BrandExclusionsImg,\r\n FinalUrlExpansionsImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidatedLegacyFinalUrlExpansion } from '@bingads-webui-campaign-react/legacy-final-url-expansion';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling, withContainerErrors, FormErrorBeaconAdapter } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { Link, Stack, Label } from '@bingads-webui-react/fabric-control';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { SingleLineShimmer, AdScheduleShimmer, RadioShimmer } from '../../shared/components/section-shimmer';\r\nimport { getCampaignDetailsPanels } from '../step-constants';\r\n\r\nconst getCampaignStylesNorthStar = () => ({\r\n header: {\r\n marginBottom: 20,\r\n },\r\n formContainer: {\r\n maxWidth: 800,\r\n '& .advanced-scheduling-grid': {\r\n width: 'unset !important',\r\n\r\n '& .ad-scheduling-grid': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n '& .title-item': {\r\n width: 'unset !important',\r\n },\r\n '& .goal-selector-with-scope': {\r\n width: '100%',\r\n '& .ba-goal-selector': {\r\n width: '100%',\r\n ' & .multi-selector': {\r\n width: '100%',\r\n '& .multi-selector-content': {\r\n width: '100%',\r\n '& .ba-entity-selector': {\r\n minWidth: '50% !important',\r\n '& .list-selector-container': {\r\n width: 'unset !important',\r\n '& .ba-list-selector': {\r\n width: 'unset !important',\r\n },\r\n },\r\n },\r\n '& .multi-selector-result-container': {\r\n minWidth: '50% !important',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\n\r\nconst campaignNegativeWebPages = entityIs(ERROR_ENTITY.CampaignNegativeWebpage);\r\nconst campaignDayTimeCriterions = entityIs(ERROR_ENTITY.CampaignDayTimeCriterion);\r\nconst campaignNameProp = andComp(entityIsCampaign, propertyIs('Name'));\r\nconst feedAssociationsProp = andComp(entityIsCampaign, propertyIs('FeedAssociations'));\r\nconst campaignUrlOptionsProperties = andComp(\r\n entityIsCampaign,\r\n anyComp(\r\n propertyIs('TrackingUrlTemplate'),\r\n propertyIs('FinalUrlSuffix'),\r\n propertyIs('UrlCustomParameters')\r\n )\r\n);\r\nconst brandListAssociationEntity = entityIs(ERROR_ENTITY.BrandListAssociation);\r\nconst notCampaignUrlOptionsProperties = notComp(campaignUrlOptionsProperties);\r\n\r\nconst ServerValidatedLegacyAdSchedule = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyAdSchedule, { filter: campaignDayTimeCriterions }));\r\nconst ServerValidatedPageFeedSelectorSection = withControlErrorHandling(withContainerErrors(PageFeedSelectorSection, { filter: feedAssociationsProp, Adapter: StandardControlAdapter() }), [FocusableActuator], [FormErrorBeaconAdapter]);\r\nconst ServerValidatedAutoGeneratedAssets = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedAutoGeneratedAssets, { filter: campaignNegativeWebPages }));\r\nconst ServerValidatedBrandListsPicker = withControlErrorHandling(withContainerErrors(BrandListsPicker, { filter: brandListAssociationEntity, Adapter: StandardControlAdapter() }), [FocusableActuator], [FormErrorBeaconAdapter]);\r\nconst ServerValidatedLegacyFinalUrlExpansion = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyFinalUrlExpansion, { filter: campaignNegativeWebPages }));\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nexport const CampaignDetailsStepShell = ({\r\n data: campaignInfo,\r\n onDataChange,\r\n error,\r\n}) => {\r\n const isLoading = useMemo(() => _.isEmpty(campaignInfo), [campaignInfo]);\r\n\r\n const {\r\n campaign,\r\n brandExclusions,\r\n } = campaignInfo || {};\r\n const {\r\n Id: campaignId,\r\n adSchedules,\r\n conversionGoals: conversionGoalsState,\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n finalUrlExpansionOptOut,\r\n autoGeneratedTextOptOut,\r\n autoGeneratedImageOptOut,\r\n finalUrlExpansions,\r\n IsBSREnabled,\r\n } = campaign || {};\r\n const {\r\n savedAddedBrandListIds,\r\n savedDeletedBrandListIds,\r\n } = brandExclusions || {};\r\n\r\n const { serverErrors, systemErrors } = error || {};\r\n\r\n const classes = useDefaultStyles(getStepCampaignSettingsStyles);\r\n const styles = useDefaultStyles(getCampaignStylesNorthStar);\r\n const campaignClasses = useDefaultStyles(getCampaignStyles);\r\n\r\n const { state } = useFormService();\r\n const { saveFailed } = state.context;\r\n const i18n = useContext(I18nContext);\r\n const isMounted = useIsMounted();\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap, DisclaimerStringMap]), [i18n]);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions, CurrentAccount } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const { AdvertiserCustomerID: advertiserCustomerId } = CurrentAccount || {};\r\n const {\r\n ConversionWarningImprovement: ConversionWarningImprovementEnabled,\r\n PMaxDisclaimers,\r\n } = permissions.dynamic;\r\n const {\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsMSANDisclaimerEnabled,\r\n } = permissions;\r\n const isPMaxDisclaimersEnabled = !IsDomesticSimplifiedChineseEnabled && PMaxDisclaimers && IsMSANDisclaimerEnabled;\r\n\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n const [disclaimerLoadPerfMarker] = useState(() => perfMarker.createChild('Pmax_Disclaimers_Campaign_Details_Load_Perf_Marker'));\r\n const [disclaimerSavePerfMarker] = useState(() => perfMarker.createChild('Pmax_Disclaimers_Campaign_Details_Save_Perf_Marker'));\r\n\r\n const [adScheduleView, setAdScheduleView] = useState(null);\r\n const setAdScheduleViewCallback = useCallback((view) => { setAdScheduleView(view); }, []);\r\n const conversionGoals = useMemo(() => ({ conversionGoals: conversionGoalsState }), [conversionGoalsState]);\r\n const conversionGoalsTitleDetails = useMemo(() => getConversionGoalTitleDetails(i18n, conversionGoals && conversionGoals.conversionGoals), [i18n, conversionGoals]);\r\n const [reportedSelectedPageFeeds, setReportedSelectedPageFeeds] = useState([]);\r\n const onSelectedPageFeedsUpdate = useCallback((selectedPageFeeds) => {\r\n if (!isMounted.current) return;\r\n setReportedSelectedPageFeeds(selectedPageFeeds);\r\n }, [isMounted]);\r\n const pageFeedsDetails = useMemo(\r\n () => {\r\n if (_.isEmpty(reportedSelectedPageFeeds)) {\r\n return i18n.getString(_TL_('Upload all the relevant URLs for your campaign by spreadsheet.'));\r\n }\r\n if (reportedSelectedPageFeeds.length === 1) {\r\n return i18n.getString(_TL_('You’ve successfully added 1 page feed.'));\r\n }\r\n return i18n.getString(_TL_('You’ve successfully added {{number}} page feeds.'), { number: reportedSelectedPageFeeds.length });\r\n },\r\n [i18n, reportedSelectedPageFeeds]\r\n );\r\n const onPageFeedsChange = useCallback((selectedPageFeeds) => {\r\n if (!isMounted.current) return;\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n pageFeeds: selectedPageFeeds,\r\n },\r\n }),\r\n isDirty: true,\r\n });\r\n }, [isMounted, onDataChange]);\r\n const effectiveCampaignId = useMemo(\r\n () => {\r\n let savedCampaignId;\r\n if (campaignId > 0) {\r\n savedCampaignId = campaignId;\r\n } else if (campaign && campaign.data && campaign.data.Id > 0) {\r\n savedCampaignId = campaign.data.Id;\r\n } else {\r\n savedCampaignId = undefined;\r\n }\r\n return savedCampaignId;\r\n },\r\n [campaignId, campaign]\r\n );\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n }), [trackingUrlTemplate, finalUrlSuffix, urlCustomParameters]);\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n const autoGenAssetsSummary = useMemo(() => {\r\n if (finalUrlExpansionOptOut && autoGeneratedTextOptOut && autoGeneratedImageOptOut) {\r\n return i18n.getString(_TL_('Off: Do not use autogenerated assets in ads.'));\r\n }\r\n return i18n.getString(_TL_('On: You’ve enabled autogenerated assets for your ads.'));\r\n }, [i18n, finalUrlExpansionOptOut, autoGeneratedTextOptOut, autoGeneratedImageOptOut]);\r\n\r\n const onBrandListsChange = useCallback((selectedBrandLists, [deletedBrandListIds, addedBrandListIds]) => {\r\n if (!isMounted.current) return;\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n brandExclusions: {\r\n ...prevData.brandExclusions,\r\n deletedBrandListIds,\r\n addedBrandListIds,\r\n },\r\n }),\r\n isDirty: true,\r\n });\r\n }, [isMounted, onDataChange]);\r\n const [reportedSelectedBrandLists, setReportedSelectedBrandLists] = useState([]);\r\n const onSelectedBrandListsUpdate = useCallback((selectedBrandLists) => {\r\n if (!isMounted.current) return;\r\n setReportedSelectedBrandLists(selectedBrandLists);\r\n }, [isMounted]);\r\n const brandListsDetails = useMemo(\r\n () => {\r\n if (_.isEmpty(reportedSelectedBrandLists)) {\r\n return i18n.getString(_TL_('Add brand exclusions so that your ads won’t show on search queries that mention those brands.'));\r\n }\r\n if (reportedSelectedBrandLists.length === 1) {\r\n return i18n.getString(_TL_('You’ve added 1 brand list, which makes it so that your ads won’t show on search queries that mention those brands.'));\r\n }\r\n return i18n.getString(_TL_('You’ve added {{number}} brand lists, which makes it so that your ads won’t show on search queries that mention those brands.'), { number: reportedSelectedBrandLists.length });\r\n },\r\n [i18n, reportedSelectedBrandLists]\r\n );\r\n const [finalUrlExpansionsView, setFinalUrlExpansionsView] = useState(null);\r\n const setFinalUrlExpansionsViewCallback = useCallback((view) => {\r\n setFinalUrlExpansionsView(view);\r\n }, []);\r\n\r\n const DisclaimerAdsEnabled = useMemo(\r\n () =>\r\n _.result(_.find( // from campaign setting DB\r\n _.get(campaign, 'CampaignSettings', []),\r\n setting => setting['@odata.type'] === '#Model.DisclaimerSetting'\r\n ), 'DisclaimerAdsEnabled', false)\r\n , [campaign]\r\n );\r\n const disclaimerRepositoryRef = useRef(new Repository({\r\n schema: DisclaimerAdExtension,\r\n skipExtensionCache: true,\r\n }));\r\n\r\n const [associatedDisclaimer, setAssociatedDisclaimer] = useState(null);\r\n useEffect(() => {\r\n if (isPMaxDisclaimersEnabled && campaignId) {\r\n getAssociatedDisclaimer(campaignId, disclaimerRepositoryRef.current, disclaimerLoadPerfMarker).then((disclaimer) => {\r\n if (!_.isEmpty(disclaimer)) {\r\n setAssociatedDisclaimer(disclaimer);\r\n }\r\n });\r\n }\r\n return null;\r\n }, [isPMaxDisclaimersEnabled, campaignId, disclaimerLoadPerfMarker]);\r\n\r\n const disclaimersDetails = useMemo(() => getDisclaimerTitleDetails(i18n, { selectedDisclaimer: associatedDisclaimer }), [associatedDisclaimer, i18n]);\r\n const isCampaignShoppingType = useMemo(\r\n // check if the odata type is ShoppingSettings, return true if it is, false if not\r\n () => !!_.find(_.get(campaign, 'CampaignSettings', []), setting => setting['@odata.type'] === '#Model.ShoppingSettings')\r\n , [campaign]\r\n );\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['campaign', 'ad-schedule', 'conversions'] /* all sections */,\r\n ['campaign', 'ad-schedule', 'conversions'] /* initially expanded sections */\r\n );\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setCampaignSettingsExpandedSections }),\r\n [setCampaignSettingsExpandedSections]\r\n );\r\n\r\n const basicSettingsSection = useMemo(() => {\r\n const campaignPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n isLoading ? : (\r\n \r\n )\r\n }\r\n \r\n );\r\n\r\n const adSchedulePanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'ad-schedule',\r\n }}\r\n >\r\n {\r\n isLoading ? : (\r\n \r\n )\r\n }\r\n \r\n );\r\n\r\n const conversionPanel = (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'conversions',\r\n }}\r\n >\r\n {!ConversionWarningImprovementEnabled &&\r\n (isLoading ? : (\r\n \r\n ))\r\n }\r\n {ConversionWarningImprovementEnabled && (isLoading ? : (\r\n \r\n ))}\r\n \r\n );\r\n\r\n const generalSettings = [\r\n campaignPanel,\r\n adSchedulePanel,\r\n conversionPanel,\r\n ];\r\n\r\n return (\r\n
\r\n \r\n { generalSettings }\r\n \r\n
\r\n );\r\n }, [isLoading, i18n, adScheduleView, basicSettingsExpand, campaign, adSchedules, setAdScheduleViewCallback, conversionGoalsTitleDetails, ConversionWarningImprovementEnabled, conversionGoals, advertiserCustomerId, scope.values.aid, allCampaignSettingsSections, campaignSettingsExpandedSections, setCampaignSettingsExpandedSections]);\r\n\r\n const { advancedPanels } = useMemo(() => getCampaignDetailsPanels(permissions, isCampaignShoppingType), [permissions, isCampaignShoppingType]);\r\n\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n flipMoreSettingsExpandAllState,\r\n ] = useCollapseState(\r\n advancedPanels /* all sections */,\r\n [PANEL_KEYS.BRAND_SHOWROOM] /* initially expanded sections */\r\n );\r\n const moreBasicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreSettingsExpandedSections }),\r\n [setMoreSettingsExpandedSections]\r\n );\r\n\r\n const moreBasicSettingsSection = useMemo(() => (\r\n
\r\n \r\n \r\n {moreSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'final-url-expansion',\r\n }}\r\n >\r\n \r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'auto-gen-assets',\r\n }}\r\n >\r\n \r\n {\r\n isLoading ? : (\r\n \r\n )\r\n }\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'page-feeds',\r\n }}\r\n >\r\n \r\n {\r\n isLoading ? : (\r\n \r\n )\r\n }\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'campaign-url-options',\r\n }}\r\n >\r\n
\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n {\r\n isLoading ? : (\r\n \r\n )\r\n }\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'brand-exclusions',\r\n }}\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 {isLoading ? : (\r\n \r\n )}\r\n \r\n
\r\n
\r\n ), [classes.moreBasicCampaignSection, classes.urlOptionsContainer, i18n, flipMoreSettingsExpandAllState, moreSettingsExpandedSections, allMoreSettingsSections, setMoreSettingsExpandedSections, finalUrlExpansionsView, finalUrlExpansionOptOut, moreBasicSettingsExpand, campaign, finalUrlExpansions, setFinalUrlExpansionsViewCallback, autoGenAssetsSummary, isLoading, autoGeneratedTextOptOut, autoGeneratedImageOptOut, pageFeedsDetails, advertiserCustomerId, scope.values.aid, effectiveCampaignId, onPageFeedsChange, onSelectedPageFeedsUpdate, urlOptionsDetails, urlOptions, brandListsDetails, campaignId, onBrandListsChange, onSelectedBrandListsUpdate, savedAddedBrandListIds, savedDeletedBrandListIds, disclaimersDetails, campaignClasses.disclaimerContainerWrapper, legacyI18n, DisclaimerAdsEnabled, associatedDisclaimer, disclaimerSavePerfMarker, IsBSREnabled]);\r\n\r\n const onCampaignValidation = useCallback((results) => {\r\n if (!isMounted.current) return;\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n ...results.data,\r\n },\r\n }),\r\n isValid: results.isValid,\r\n isDirty: results.isDirty,\r\n });\r\n }, [isMounted, onDataChange]);\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n

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

\r\n {i18n.getString(_TL_('Tell us how and when you’d like to optimize placements for your ads.'))}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n { basicSettingsSection }\r\n { moreBasicSettingsSection }\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nCampaignDetailsStepShell.propTypes = {\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({}),\r\n adSchedules: PropTypes.shape({}),\r\n conversionGoalsState: PropTypes.shape({}),\r\n }).isRequired,\r\n error: PropTypes.shape({\r\n serverErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n systemErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import { useState, useEffect, useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport _preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getActionText } from '@bingads-webui-campaign-legacy/adextension-actionlink/model/language-type-text-mapper';\r\nimport { useWizardService, getFlowFactors } from '@bingads-webui-react/wizard';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { FLOWS } from '../step-constants';\r\n\r\n// const BiddingSchemeToBidType = {\r\n// EnhancedCpc: 'SearchBid',\r\n// ManualCpc: 'SearchBid',\r\n// ManualCpm: 'CpmBid',\r\n// };\r\n\r\nconst buildSchemaData = ({\r\n data,\r\n timeDisplayType,\r\n serverContext,\r\n cid,\r\n aid,\r\n flow,\r\n loadedStoresData,\r\n savedProductFilter,\r\n savedListingGroup,\r\n i18n,\r\n permissions,\r\n}) => {\r\n const locations = _.map(\r\n _.filter(\r\n data.campaign && data.campaign.locationTargets && data.campaign.locationTargets.currentLevelSettings.currentLocations,\r\n loc => loc.SelectionStatus === 'Included'\r\n ),\r\n loc => loc.location\r\n );\r\n\r\n const {\r\n PerformanceMaxCampaignsAutoGenAssetControl: IsPerformanceMaxCampaignsAutoGenAssetControlEnabled,\r\n SearchThemes: IsSearchThemesEnabled,\r\n SupportCPSForPmax: IsSupportCPSForPmaxEnabled,\r\n AssetGroupUrlRules: isAssetGroupUrlRulesEnabled,\r\n AssetGroupUrlRulesV2: isAssetGroupUrlRulesV2Enabled,\r\n NewCustomerAcquisition: isNewCustomerAcquisitionEnabled,\r\n PMaxDisclaimers,\r\n } = permissions.dynamic;\r\n\r\n const isPMaxDisclaimersEnabled = !serverContext.Permissions.IsDomesticSimplifiedChineseEnabled && PMaxDisclaimers && serverContext.Permissions.IsMSANDisclaimerEnabled;\r\n const isCampaignShoppingType = !!_.find(_.get(data.campaign, 'CampaignSettings', []), setting => setting['@odata.type'] === '#Model.ShoppingSettings');\r\n\r\n return ({\r\n campaignName: {\r\n data: data.campaign.Name,\r\n },\r\n assetGroupName: {\r\n data: data.assetGroup.Name,\r\n },\r\n autoGeneratedAssets: {\r\n data: {\r\n finalUrlExpansionOptOut: data.campaign.finalUrlExpansionOptOut,\r\n finalUrlExpansions: data.campaign.finalUrlExpansions,\r\n autoGeneratedTextOptOut: data.campaign.autoGeneratedTextOptOut,\r\n autoGeneratedImageOptOut: data.campaign.autoGeneratedImageOptOut,\r\n },\r\n isRendered: IsPerformanceMaxCampaignsAutoGenAssetControlEnabled,\r\n },\r\n budget: {\r\n data: data.campaign.Budget,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n },\r\n bidStrategy: {\r\n data: data.campaign.BiddingScheme,\r\n },\r\n bidTarget: {\r\n data: data.campaign.BiddingScheme,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n },\r\n costPerSale: {\r\n data: {\r\n costPerSaleOptOut: data.campaign.costPerSaleOptOut,\r\n },\r\n isRendered: IsSupportCPSForPmaxEnabled,\r\n },\r\n conversionGoals: {\r\n conversionGoals: data.campaign.conversionGoals,\r\n },\r\n disclaimer: {\r\n data: data.disclaimer,\r\n isRendered: isPMaxDisclaimersEnabled && !isCampaignShoppingType,\r\n },\r\n locationTargeting: {\r\n locations,\r\n targetOption: data.campaign && data.campaign.locationTargets && data.campaign.locationTargets.currentLevelSettings.targetOption,\r\n },\r\n languages: {\r\n data: data.campaign.Languages,\r\n },\r\n audienceSignal: {\r\n data: data.assetGroup.AudienceGroup,\r\n },\r\n searchThemes: {\r\n data: data.assetGroup.AssetGroupSearchThemes,\r\n isRendered: IsSearchThemesEnabled,\r\n },\r\n images: {\r\n data: data.assetGroup.Images,\r\n shouldFetchFromMT: true,\r\n cid,\r\n aid,\r\n },\r\n logos: {\r\n data: data.assetGroup.Images,\r\n shouldFetchFromMT: true,\r\n cid,\r\n aid,\r\n label: _TL_('Logos'),\r\n isLogo: true,\r\n },\r\n videos: {\r\n data: data.assetGroup.videos,\r\n isRendered: data.assetGroup.videos && data.assetGroup.videos.length > 0,\r\n },\r\n headlines: {\r\n data: data.assetGroup.Headlines,\r\n },\r\n descriptions: {\r\n data: data.assetGroup.Descriptions,\r\n },\r\n longHeadlines: {\r\n data: data.assetGroup.LongHeadlines,\r\n },\r\n businessName: {\r\n data: data.assetGroup.BusinessName,\r\n },\r\n callToAction: {\r\n data: data.assetGroup.CallToAction === 'Automated' ? i18n.getString(_TL_('Automated')) : getActionText({ Language: 'English', ActionType: data.assetGroup.CallToAction }),\r\n },\r\n adScheduleCampaign: {\r\n startDate: data.assetGroup.StartDate,\r\n endDate: data.assetGroup.EndDate,\r\n adSchedules: data.campaign && data.campaign.adSchedules && data.campaign.adSchedules.dayTimeRanges,\r\n useSearcherTimeZone: data.campaign.AdScheduleUseSearcherTimeZone,\r\n timeDisplayType,\r\n },\r\n productsPanel: {\r\n isRendered: flow === FLOWS.RETAIL_PERF_MAX,\r\n },\r\n storeInfo: {\r\n data: {\r\n storesData: loadedStoresData,\r\n ProviderId: data.campaign.ProviderId,\r\n IsFeedFiltered: data.campaign.IsFeedFiltered,\r\n SalesCountry: data.campaign.SalesCountry,\r\n FeedLabel: data.campaign.FeedLabel,\r\n LocalInventoryAdsEnabled: data.campaign.LocalInventoryAdsEnabled,\r\n },\r\n },\r\n listingGroup: {\r\n data: {\r\n productFilter: savedProductFilter,\r\n listingGroup: savedListingGroup,\r\n },\r\n },\r\n urlOptions: {\r\n data: {\r\n TrackingUrlTemplate: data.campaign.TrackingUrlTemplate,\r\n FinalUrlSuffix: data.campaign.FinalUrlSuffix,\r\n UrlCustomParameters: data.campaign.UrlCustomParameters,\r\n },\r\n },\r\n finalUrlExpansions: {\r\n data: {\r\n finalUrlExpansions: data.campaign.finalUrlExpansions,\r\n },\r\n isRendered: !IsPerformanceMaxCampaignsAutoGenAssetControlEnabled,\r\n },\r\n urlRules: {\r\n data: {\r\n i18n,\r\n finalUrls: data.assetGroup.FinalUrls,\r\n path1: data.assetGroup.Path1,\r\n path2: data.assetGroup.Path2,\r\n mobileFinalUrls: data.assetGroup.MobileFinalUrls,\r\n urlRules: data.assetGroup.AssetGroupUrlTargets,\r\n },\r\n isAssetGroupUrlRulesV2Enabled,\r\n isRendered: isAssetGroupUrlRulesEnabled,\r\n },\r\n newCustomerAcquisition: {\r\n data: {\r\n newCustomerAcquisitionOptOut: data.campaign.newCustomerAcquisitionOptOut,\r\n newCustomerAcquisition: data.campaign.newCustomerAcquisition,\r\n },\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n isRendered: isNewCustomerAcquisitionEnabled,\r\n },\r\n });\r\n};\r\n\r\nexport const useSummarySchemaData = ({ data }) => {\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const [timeDisplayType, setTimeDisplayType] = useState('12-hour');\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const { state } = useWizardService();\r\n\r\n const { loadedStoresData, savedProductFilter, savedListingGroup } = state.context.wizardData;\r\n\r\n const { flow } = getFlowFactors(state);\r\n\r\n useEffect(() => {\r\n const preferencesService = _preferencesService.default || _preferencesService;\r\n preferencesService.initialize().then(() => {\r\n const isTwelveHourDisplay = preferencesService.findByName('WebApp.CampaignUI.isTwelveHourDisplay') || {};\r\n setTimeDisplayType(_.isUndefined(isTwelveHourDisplay.Data) || isTwelveHourDisplay.Data ? '12-hour' : '24-hour');\r\n });\r\n }, []);\r\n\r\n return (data && buildSchemaData({\r\n data,\r\n timeDisplayType,\r\n serverContext,\r\n cid,\r\n aid,\r\n flow,\r\n loadedStoresData,\r\n savedProductFilter,\r\n savedListingGroup,\r\n i18n,\r\n permissions,\r\n })) || {};\r\n};\r\n\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Shimmer, ShimmerElementsGroup, ShimmerElementType, mergeStyles } from '@fluentui/react';\r\nimport { STEP_PATHS } from '../../steps/step-constants';\r\n\r\nconst PANEL_CONFIGS = {\r\n [STEP_PATHS.ASSETS]: {\r\n rowCount: 6,\r\n hasImages: true,\r\n },\r\n [STEP_PATHS.PRODUCTS]: {\r\n rowCount: 2,\r\n },\r\n [STEP_PATHS.TARGETING]: {\r\n rowCount: 3,\r\n },\r\n [STEP_PATHS.CAMPAIGNDETAILS]: {\r\n rowCount: 3,\r\n },\r\n [STEP_PATHS.BUDGET]: {\r\n rowCount: 3,\r\n },\r\n};\r\n\r\nconst wrapperClass = mergeStyles({\r\n padding: 2,\r\n width: 700,\r\n selectors: {\r\n '& > .ms-Shimmer-container': {\r\n margin: '10px 0',\r\n },\r\n },\r\n});\r\n\r\nconst getPanelTitleShimmer = () => (\r\n \r\n);\r\n\r\nconst getSummaryRowElement = isLastRow => (\r\n <>\r\n \r\n {!isLastRow && }\r\n \r\n\r\n\r\n);\r\n\r\nconst getSummaryImageRowElement = (isLastRow) => {\r\n const shimmerElements = [{ type: ShimmerElementType.line, width: 200, height: 50 }];\r\n\r\n // add 3 images\r\n _.range(3).forEach(() => {\r\n shimmerElements.push({ type: ShimmerElementType.gap, width: 30, height: 50 });\r\n shimmerElements.push({ type: ShimmerElementType.line, width: 100, height: 50 });\r\n });\r\n\r\n // add gap\r\n shimmerElements.push({ type: ShimmerElementType.gap, width: '100%', height: 50 });\r\n\r\n return (\r\n <>\r\n \r\n {!isLastRow && }\r\n \r\n );\r\n};\r\n\r\nconst getPanel = ({ rowCount, hasImages }) => {\r\n const title = getPanelTitleShimmer();\r\n\r\n const rows = Array.from({ length: rowCount }, (value, index) => (hasImages && index === 1\r\n ? getSummaryImageRowElement(index === rowCount - 1)\r\n : getSummaryRowElement(index === rowCount - 1)));\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport const SummaryShimmer = ({\r\n currentSteps = [],\r\n panelConfigs = PANEL_CONFIGS,\r\n}) => {\r\n const panels = currentSteps.map((step) => {\r\n const panelConfig = panelConfigs[step];\r\n return panelConfig && getPanel(panelConfig);\r\n });\r\n\r\n return
{panels}
;\r\n};\r\n\r\nSummaryShimmer.propTypes = {\r\n currentSteps: PropTypes.arrayOf(PropTypes.shape({})),\r\n panelConfigs: PropTypes.shape({}),\r\n};\r\n\r\nSummaryShimmer.defaultProps = {\r\n currentSteps: [],\r\n panelConfigs: PANEL_CONFIGS,\r\n};\r\n\r\n","import { DiagnosticsTypes } from '@bingads-webui-campaign-react/summary-diagnostic';\r\nimport { STEP_PATHS } from '../../step-constants';\r\n\r\nexport const Areas = {\r\n AssetGroup: 'AssetGroup',\r\n Bidding: 'Bidding',\r\n Budget: 'Budget',\r\n Campaign: 'Campaign',\r\n Conversion: 'Conversion',\r\n};\r\n\r\nexport const ActionTypes = {\r\n View: 'View',\r\n Apply: 'Apply',\r\n SetUpNow: 'SetUpNow',\r\n};\r\n\r\nconst AuditPoints = {\r\n IncreaseYourBudget: 'increase-your-budget',\r\n EnableAutoGeneratedAssets: 'enable-auto-generated-assets',\r\n NoAccountConversionGoals: 'no-account-conversion-goals',\r\n NoCampaignConversionGoals: 'no-campaign-conversion-goals',\r\n TargetCpaHigherThanBudget: 'target-cpa-higher-than-budget',\r\n HasNoValidGoalAtCampaignOrAccountLevel: 'has-no-valid-goal-at-campaign-or-account-level',\r\n};\r\n\r\nconst getDefaultConversionsWarning = locator => ({\r\n title: _TL_('Conversion goal issues'),\r\n description: _TL_('There are issues with the configuration of your conversion goals. Please review the warnings to make sure they are set up correctly.'),\r\n type: DiagnosticsTypes.Issue,\r\n actions: [\r\n {\r\n type: ActionTypes.SetUpNow,\r\n text: _TL_('Set up now'),\r\n stepId: STEP_PATHS.CAMPAIGNDETAILS,\r\n },\r\n ],\r\n locator,\r\n});\r\n\r\nconst getNoConversionGoalsWarning = locator => ({\r\n title: _TL_('No conversion goals'),\r\n description: _TL_('Maximize clicks will remain the default bid strategy for this campaign until you\\'ve either created a conversion goal or selected a campaign level conversion goal.'),\r\n type: DiagnosticsTypes.Issue,\r\n actions: [\r\n {\r\n type: ActionTypes.SetUpNow,\r\n text: _TL_('Set up now'),\r\n stepId: STEP_PATHS.CAMPAIGNDETAILS,\r\n },\r\n ],\r\n locator,\r\n});\r\n\r\nexport const ConversionMapping = {\r\n NotSetUpGoal: {\r\n HasNoValidCampaignLevelGoal: {\r\n title: _TL_('Select a conversion goal for this campaign'),\r\n description: _TL_('Your campaign doesn\\'t have a conversion goal set up to attribute conversions, which may impact its performance.'),\r\n link: {\r\n text: _TL_('Learn more about conversion goals'),\r\n url: 'https://help.ads.microsoft.com/#apex/ads/en/56709/2',\r\n },\r\n type: DiagnosticsTypes.Issue,\r\n actions: [\r\n {\r\n type: ActionTypes.View,\r\n text: _TL_('View'),\r\n stepId: STEP_PATHS.CAMPAIGNDETAILS,\r\n },\r\n ],\r\n locator: AuditPoints.NoCampaignConversionGoals,\r\n },\r\n HasNoValidAccountLevelGoal: {\r\n title: _TL_('Create a conversion goal'),\r\n description: _TL_('You haven\\'t created a conversion goal for this account to attribute conversions, which may impact its performance.'),\r\n link: {\r\n text: _TL_('Learn more about conversion goals'),\r\n url: 'https://help.ads.microsoft.com/#apex/ads/en/56709/2',\r\n },\r\n type: DiagnosticsTypes.Issue,\r\n locator: AuditPoints.NoAccountConversionGoals,\r\n },\r\n },\r\n NoConversionGoal: {\r\n HasNoValidGoalAtCampaignOrAccountLevel: getNoConversionGoalsWarning(AuditPoints.HasNoValidGoalAtCampaignOrAccountLevel),\r\n HasNoValidGoalAtCampaignOrAccountLevel_NoAccountGoal: getNoConversionGoalsWarning('has-no-valid-goal-at-campaign-or-account-level-no-account-goal'),\r\n HasNoValidGoalAtCampaignOrAccountLevel_ChangeToMainGoal: getDefaultConversionsWarning('has-no-valid-goal-at-campaign-or-account-level-change-to-main-goal'),\r\n },\r\n NoRecentConversion: {\r\n TrackingStatusNoConversions_NotUploadOfflineConversion: getDefaultConversionsWarning('tracking-status-no-conversions-not-upload-offline-conversion'),\r\n TrackingStatusNoConversions_EventGoalInvalidParameter: getDefaultConversionsWarning('tracking-status-no-conversions-event-goal-invalid-parameter'),\r\n TrackingStatusNoConversions_UrlGoalInvalidParameter: getDefaultConversionsWarning('tracking-status-no-conversions-url-goal-invalid-parameter'),\r\n TrackingStatusNoConversions_UETMismatch: getDefaultConversionsWarning('tracking-status-no-conversions-uet-mismatch'),\r\n TrackingStatusNoConversions_UETActiveMissingConversionEvent: getDefaultConversionsWarning('tracking-status-no-conversions-uet-active-missing-conversion-event'),\r\n TrackingStatusNoConversions_ChangeToMainGoal: getDefaultConversionsWarning('tracking-status-no-conversions-change-to-main-goal'),\r\n TrackingStatusNoConversions: getDefaultConversionsWarning('tracking-status-no-conversions'),\r\n },\r\n Unverified: {\r\n TrackingStatusUnverified_UETMismatch: getDefaultConversionsWarning('tracking-status-unverified-uet-mismatch'),\r\n TrackingStatusUnverified_ChangeToMainGoal: getDefaultConversionsWarning('tracking-status-unverified-change-to-main-goal'),\r\n TrackingStatusUnverified: getDefaultConversionsWarning('tracking-status-unverified'),\r\n },\r\n TagInactive: {\r\n TrackingStatusTagInactive_UETMismatch: getDefaultConversionsWarning('tracking-status-tag-inactive-uet-mismatch'),\r\n TrackingStatusTagInactive_ChangeToMainGoal: getDefaultConversionsWarning('tracking-status-tag-inactive-change-to-main-goal'),\r\n TrackingStatusTagInactive: getDefaultConversionsWarning('tracking-status-tag-inactive'),\r\n },\r\n InactiveDueToTagUnavailable: {\r\n TrackingStatusInactiveDueToTagUnavailable_UETMismatch: getDefaultConversionsWarning('tracking-status-inactive-due-to-tag-unavailable-uet-mismatch'),\r\n TrackingStatusInactiveDueToTagUnavailable_ChangeToMainGoal: getDefaultConversionsWarning('tracking-status-inactive-due-to-tag-unavailable-change-to-main-goal'),\r\n TrackingStatusInactiveDueToTagUnavailable: getDefaultConversionsWarning('tracking-status-inactive-due-to-tag-unavailable'),\r\n },\r\n MissGoalWithRevenueValue: {\r\n MissGoalWithRevenueValue: getDefaultConversionsWarning('miss-goal-with-revenue-value'),\r\n },\r\n};\r\n\r\nexport const ScenarioMap = {\r\n [Areas.Budget]: {\r\n LowerThanSuggestion: {\r\n EstimatedIncreaseInBudget: {\r\n title: _TL_('Increase your campaign budget'),\r\n description: _TL_('Your campaign budget is lower than the suggested amount, which may prevent it from performing optimally.'),\r\n link: {\r\n text: _TL_('Learn more about increasing your campaign budget.'),\r\n url: 'https://help.ads.microsoft.com/#apex/ads/en/53050/1',\r\n },\r\n type: DiagnosticsTypes.Issue,\r\n actions: [\r\n {\r\n type: ActionTypes.View,\r\n text: _TL_('View'),\r\n stepId: STEP_PATHS.BUDGET,\r\n },\r\n ],\r\n locator: AuditPoints.IncreaseYourBudget,\r\n },\r\n },\r\n InvalidCpa: {\r\n TargetCpaHigherThanBudget: {\r\n title: _TL_('Adjust your target CPA'),\r\n description: _TL_('Your campaign\\'s total cost per acquisition is higher than the daily budget, which could prevent you from receiving any conversions. Please consider lowering your total cost per acquisition or raising your daily budget.'),\r\n type: DiagnosticsTypes.Issue,\r\n actions: [\r\n {\r\n type: ActionTypes.View,\r\n text: _TL_('View'),\r\n stepId: STEP_PATHS.BUDGET,\r\n },\r\n ],\r\n locator: AuditPoints.TargetCpaHigherThanBudget,\r\n },\r\n },\r\n },\r\n [Areas.Campaign]: {\r\n NoAutoGeneratedAssets: {\r\n EnableAutoGeneratedAssets: {\r\n title: _TL_('Enable auto-generated assets'),\r\n description: _TL_('Create additional AI-generated assets for your ads.'),\r\n type: DiagnosticsTypes.Recommendation,\r\n actions: [\r\n {\r\n type: ActionTypes.View,\r\n text: _TL_('View'),\r\n stepId: STEP_PATHS.CAMPAIGNDETAILS,\r\n },\r\n ],\r\n locator: AuditPoints.EnableAutoGeneratedAssets,\r\n },\r\n },\r\n },\r\n [Areas.Conversion]: {\r\n ...ConversionMapping,\r\n ...Object.keys(ConversionMapping).reduce((a, c) => {\r\n const newObj = { ...a };\r\n newObj[`${c}MaxClicks`] = ConversionMapping[c];\r\n return newObj;\r\n }, {}),\r\n },\r\n};\r\n","import React, { useMemo, useCallback, useContext, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { GeneratedUI } from '@bingads-webui-campaign-react/ui-generator';\r\nimport { summaryPageComponentTypes } from '@bingads-webui-campaign-react/summary-page';\r\nimport { WIZARD_EVENTS, useWizardService, getCurrentFlow } from '@bingads-webui-react/wizard';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { SummaryDiagnostic } from '@bingads-webui-campaign-react/summary-diagnostic';\r\nimport { buildSchema } from './schema';\r\nimport { useSummarySchemaData } from './use-summary-schema-data';\r\nimport { STEP_PATHS } from '../step-constants';\r\nimport { SummaryShimmer } from '../../shared/components/summary-shimmer';\r\nimport { extractAuditPoints } from './diagnostics/utils';\r\nimport { useActionCallback } from './diagnostics/use-action-callback';\r\n\r\nexport const SummaryStepShell = ({\r\n data,\r\n onDataChange,\r\n}) => {\r\n const { issueList, recommendList } = useMemo(() => extractAuditPoints(_.get(data, 'diagnosticsData')), [data]);\r\n const onActionClick = useActionCallback();\r\n const isLoading = useMemo(() => _.isEmpty(data), [data]);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const schemaData = useSummarySchemaData({ data });\r\n\r\n const { send, state } = useWizardService();\r\n\r\n const currentFlow = getCurrentFlow(state);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const {\r\n PMaxCreationDiagnostic: isPMaxCreationDiagnosticEnabled,\r\n } = permissions.dynamic;\r\n\r\n const onAssetsHeaderActionClick = useCallback(() => {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.ASSETS,\r\n });\r\n }, [send]);\r\n\r\n const onTargetingHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.TARGETING,\r\n }), [send]);\r\n\r\n const onCampaignSettingsHeaderActionClick = useCallback(() =>\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.CAMPAIGNDETAILS,\r\n }), [send]);\r\n\r\n const onBudgetSettingsHeaderActionClick = useCallback(() =>\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.BUDGET,\r\n }), [send]);\r\n\r\n const onProductsHeaderActionClick = useCallback(() =>\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.PRODUCTS,\r\n }), [send]);\r\n\r\n const options = useMemo(() => ({\r\n onAssetsHeaderActionClick,\r\n onTargetingHeaderActionClick,\r\n onCampaignSettingsHeaderActionClick,\r\n onBudgetSettingsHeaderActionClick,\r\n onProductsHeaderActionClick,\r\n }), [onAssetsHeaderActionClick, onTargetingHeaderActionClick, onCampaignSettingsHeaderActionClick, onBudgetSettingsHeaderActionClick, onProductsHeaderActionClick]);\r\n\r\n const schema = useMemo(() => buildSchema(options), [options]);\r\n\r\n useEffect(() => (\r\n onDataChange({\r\n data,\r\n isValid: true,\r\n })\r\n ), [data, onDataChange]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n

{i18n.getString(_TL_('Prepare for success!'))}

\r\n
\r\n {i18n.getString(_TL_('Here\\'s a summary of everything in your campaign. All objects are available, but campaign is not live yet.'))}\r\n
\r\n
\r\n
\r\n {isLoading ? : (\r\n <>\r\n {isPMaxCreationDiagnosticEnabled && }\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nSummaryStepShell.propTypes = {\r\n data: PropTypes.shape({}),\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n\r\nSummaryStepShell.defaultProps = {\r\n data: null,\r\n};\r\n","import _ from 'underscore';\r\nimport { DiagnosticsTypes } from '@bingads-webui-campaign-react/summary-diagnostic';\r\nimport { ScenarioMap } from './constants';\r\n\r\nexport const extractAuditPoints = (dataArray) => {\r\n const issueList = [];\r\n const recommendList = [];\r\n\r\n if (!dataArray) return { issueList, recommendList };\r\n\r\n dataArray.forEach((item) => {\r\n const { Key, Value } = item;\r\n const { Status, AuditPoints } = Value;\r\n\r\n const scenario = _.get(ScenarioMap, [Key, Status]);\r\n if (!scenario) return;\r\n\r\n AuditPoints.forEach((auditPoint) => {\r\n const auditDetails = scenario[auditPoint];\r\n if (auditDetails) {\r\n if (auditDetails.type === DiagnosticsTypes.Issue) {\r\n issueList.push(auditDetails);\r\n } else if (auditDetails.type === DiagnosticsTypes.Recommendation) {\r\n recommendList.push(auditDetails);\r\n }\r\n }\r\n });\r\n });\r\n\r\n return { issueList, recommendList };\r\n};\r\n\r\nexport const convertDiagnosticsDataToTrackingLog = (diagnosticsData) => {\r\n let msg = '';\r\n if (!diagnosticsData) return msg;\r\n\r\n const auditCheckList = [];\r\n diagnosticsData.forEach((item) => {\r\n const { Key, Value } = item;\r\n const { Status, AuditPoints } = Value;\r\n const scenario = _.get(ScenarioMap, [Key, Status]);\r\n if (!scenario) return;\r\n\r\n AuditPoints.forEach((auditPoint) => {\r\n const auditDetails = scenario[auditPoint];\r\n if (auditDetails) {\r\n auditCheckList.push(auditPoint);\r\n }\r\n });\r\n });\r\n msg += `@auditCheckCount=${auditCheckList.length};`;\r\n msg += `@auditCheckList=${auditCheckList.join(',')};`;\r\n\r\n return msg;\r\n};\r\n","import { useContext } from 'react';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { WIZARD_EVENTS, useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ActionTypes } from './constants';\r\n\r\nexport const useActionCallback = () => {\r\n const activity = useContext(ActivityContext);\r\n const { send } = useWizardService();\r\n return ({ action, item }) => {\r\n if (action.type === ActionTypes.View || action.type === ActionTypes.SetUpNow) {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: action.stepId,\r\n });\r\n activity.trace(`[PmaxNorthStarWizard][SummaryStep][Checks] View action clicked: ${item.locator}`);\r\n }\r\n };\r\n};\r\n","import { buildDefaultDataProperty } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const buildSchema = options => ({\r\n separatorStyles: {\r\n marginBottom: 20,\r\n },\r\n products: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Products'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onProductsHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n storeInfo: {\r\n type: 'store-info',\r\n dynamicProps: props => props.storeInfo,\r\n },\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n listingGroup: {\r\n type: 'listing-group',\r\n dynamicProps: props => props.listingGroup,\r\n },\r\n },\r\n dynamicProps: props => props.productsPanel,\r\n },\r\n assets: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Assets'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onAssetsHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n assetGroupName: buildDefaultDataProperty({\r\n label: _TL_('Asset group name'),\r\n dynamicProps: props => props.assetGroupName,\r\n }),\r\n hd3: {\r\n type: 'horizontal-divider',\r\n },\r\n images: {\r\n type: 'images',\r\n dynamicProps: props => props.images,\r\n },\r\n videos: {\r\n type: 'videos',\r\n dynamicProps: props => props.videos,\r\n },\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n logos: {\r\n type: 'images',\r\n dynamicProps: props => props.logos,\r\n },\r\n hd2: {\r\n type: 'horizontal-divider',\r\n },\r\n headlines: {\r\n type: 'headlines',\r\n dynamicProps: props => props.headlines,\r\n },\r\n longHeadlines: {\r\n type: 'long-headlines',\r\n dynamicProps: props => props.longHeadlines,\r\n },\r\n descriptions: {\r\n type: 'descriptions',\r\n dynamicProps: props => props.descriptions,\r\n },\r\n hd4: {\r\n type: 'horizontal-divider',\r\n },\r\n businessName: buildDefaultDataProperty({\r\n label: _TL_('Business name'),\r\n dynamicProps: props => props.businessName,\r\n }),\r\n callToAction: buildDefaultDataProperty({\r\n label: _TL_('Call to action'),\r\n dynamicProps: props => props.callToAction,\r\n }),\r\n hd5: {\r\n type: 'horizontal-divider',\r\n },\r\n urlRules: {\r\n type: 'url-rules',\r\n dynamicProps: props => props.urlRules,\r\n },\r\n },\r\n },\r\n targeting: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Targeting'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onTargetingHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n locationTargeting: {\r\n type: 'location-targeting',\r\n dynamicProps: props => props.locationTargeting,\r\n },\r\n languages: {\r\n type: 'languages',\r\n dynamicProps: props => props.languages,\r\n },\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n audienceSignal: {\r\n type: 'audience-signal',\r\n dynamicProps: props => props.audienceSignal,\r\n },\r\n searchThemes: {\r\n type: 'search-themes',\r\n dynamicProps: props => props.searchThemes,\r\n },\r\n },\r\n },\r\n campaignSettings: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Campaign settings'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onCampaignSettingsHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n campaignName: buildDefaultDataProperty({\r\n label: _TL_('Campaign name'),\r\n dynamicProps: props => props.campaignName,\r\n }),\r\n adScheduleCampaign: {\r\n type: 'ad-schedule',\r\n dynamicProps: props => props.adScheduleCampaign,\r\n },\r\n conversionGoals: {\r\n type: 'conversion-goals',\r\n dynamicProps: props => props.conversionGoals,\r\n },\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n finalUrlExpansions: {\r\n type: 'final-url-expansions',\r\n dynamicProps: props => props.finalUrlExpansions,\r\n },\r\n autoGeneratedAssets: {\r\n type: 'auto-generated-assets',\r\n dynamicProps: props => props.autoGeneratedAssets,\r\n },\r\n urlOptions: {\r\n type: 'url-options',\r\n dynamicProps: props => props.urlOptions,\r\n },\r\n disclaimer: {\r\n type: 'disclaimer',\r\n dynamicProps: props => props.disclaimer,\r\n },\r\n },\r\n },\r\n budget: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Budget'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onBudgetSettingsHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n budget: {\r\n type: 'budget',\r\n dynamicProps: props => props.budget,\r\n },\r\n bidStrategy: {\r\n type: 'bid-strategy',\r\n dynamicProps: props => props.bidStrategy,\r\n },\r\n bidTarget: {\r\n type: 'bid-target',\r\n dynamicProps: props => props.bidTarget,\r\n },\r\n costPerSale: {\r\n type: 'cost-per-sale',\r\n dynamicProps: props => props.costPerSale,\r\n },\r\n newCustomerAcquisition: {\r\n type: 'new-customer-acquisition',\r\n dynamicProps: props => props.newCustomerAcquisition,\r\n },\r\n },\r\n },\r\n});\r\n","import Promise from 'bluebird';\r\nimport { createOrUpdateCampaign, createOrUpdateAssetGroup } from '@bingads-webui-campaign-react/perf-max-data';\r\n\r\nexport const updateAssetGroupAndCampaignStatus = ({ campaignId, assetGroupId }) => {\r\n const campaignData = {\r\n Id: campaignId,\r\n Status: 'Active',\r\n };\r\n\r\n const assetGroupData = {\r\n Id: assetGroupId,\r\n Status: 'Active',\r\n Campaign: {\r\n Id: campaignId,\r\n },\r\n };\r\n\r\n return Promise.props({\r\n campaign: createOrUpdateCampaign(campaignData),\r\n assetGroup: createOrUpdateAssetGroup(assetGroupData),\r\n });\r\n};\r\n","import { useCallback, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { Areas } from './constants';\r\n\r\nconst 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() ? 'AdInsight/V2' : 'AdInsight/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.AdInsightAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.AdInsightAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n\r\nexport const useDiagnosticsData = ({\r\n advertiserCustomerId,\r\n aid,\r\n campaignId,\r\n serverContext,\r\n areas = [Areas.AssetGroup, Areas.Conversion], // Default to AssetGroup and Conversion\r\n}) => {\r\n const timeZoneId = _.get(serverContext, ['CurrentAccount', 'TimeZone']);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n const oDataOptions = useMemo(() => ({\r\n contentType: 'application/json',\r\n path: oDataConfig.odataPath,\r\n oDataToken: oDataConfig.odataToken,\r\n }), [oDataConfig]);\r\n\r\n const fetchDiagnosticData = useCallback(() => {\r\n if (_.get(serverContext, ['DynamicPermissions', 'DiagnosticCMMTApi']) || _.get(serverContext, ['DynamicPermissions', 'ConversionWarningImprovement'])) {\r\n return edmCampaign\r\n .Customers.$withKey(advertiserCustomerId)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .Diagnostic['Default.GetCampaignCreationDiagnostics']\r\n .$makeCall({})\r\n .toPromise()\r\n .then(data => data.CampaignDiagnosticDetail);\r\n }\r\n const areasStr = areas.map(area => `\"${area}\"`).join(',');\r\n const baseURL = `${oDataConfig.odataPath}/Customers(${advertiserCustomerId})/Accounts(${aid})/Campaigns(${campaignId})/Recommendation.GetCampaignCreationDiagnostics(timeZoneId=${timeZoneId},areas=[${areasStr}])`;\r\n const options = _.extend(\r\n {},\r\n oDataOptions,\r\n {\r\n url: baseURL,\r\n }\r\n );\r\n const promise = odata.get(options);\r\n\r\n return promise.then(data => data.CampaignDiagnosticDetail);\r\n }, [advertiserCustomerId, aid, areas, campaignId, oDataConfig.odataPath, oDataOptions, timeZoneId, serverContext]);\r\n\r\n const patchDiagnosticsData = useCallback(({\r\n diagnosticsData,\r\n campaignData,\r\n budgetSuggestionData,\r\n }) => {\r\n const patchedDiagnosticsData = _.clone(diagnosticsData);\r\n\r\n const {\r\n autoGeneratedImageOptOut,\r\n autoGeneratedTextOptOut,\r\n finalUrlExpansionOptOut,\r\n } = campaignData || {};\r\n if (autoGeneratedImageOptOut || autoGeneratedTextOptOut || finalUrlExpansionOptOut) {\r\n patchedDiagnosticsData.push({\r\n Key: Areas.Campaign,\r\n Value: {\r\n AuditPoints: ['EnableAutoGeneratedAssets'],\r\n Status: 'NoAutoGeneratedAssets',\r\n },\r\n });\r\n }\r\n\r\n const enableTcpaCheck = _.get(serverContext, ['DynamicPermissions', 'TargetCpaValueCheck']);\r\n if (enableTcpaCheck) {\r\n const {\r\n Budget: { Amount: BudgetAmount, Type: BudgetType, Status: BudgetStatus } = {},\r\n BiddingScheme: { Type: BiddingSchemeType, TargetCpa } = {},\r\n } = campaignData || {};\r\n if (BudgetType === 'DailyStandard' && BudgetStatus === 'Private' && BiddingSchemeType === 'MaxConversions' && TargetCpa && BudgetAmount < TargetCpa) {\r\n patchedDiagnosticsData.push({\r\n Key: Areas.Budget,\r\n Value: {\r\n AuditPoints: ['TargetCpaHigherThanBudget'],\r\n Status: 'InvalidCpa',\r\n },\r\n });\r\n }\r\n }\r\n\r\n if (budgetSuggestionData) {\r\n const currentDailyBudget = _.get(campaignData, ['Budget', 'Amount']);\r\n const suggestedDailyBudget = _.get(budgetSuggestionData, ['Balanced', 'BudgetAmountDaily']);\r\n if (suggestedDailyBudget && currentDailyBudget < suggestedDailyBudget) {\r\n patchedDiagnosticsData.push({\r\n Key: Areas.Budget,\r\n Value: {\r\n AuditPoints: ['EstimatedIncreaseInBudget'],\r\n Status: 'LowerThanSuggestion',\r\n },\r\n });\r\n }\r\n }\r\n\r\n return patchedDiagnosticsData;\r\n }, [serverContext]);\r\n\r\n return {\r\n fetchDiagnosticData,\r\n patchDiagnosticsData,\r\n };\r\n};\r\n","import React from 'react';\r\nimport { Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { STEP_PATHS, FLOWS } from './step-constants';\r\nimport { AssetsStepShell, useAssetStepRepository } from './assets';\r\nimport { BudgetStepShell, useBudgetStepRepository } from './budget';\r\nimport { TargetingStepShell, useTargetingStepRepository } from './targeting';\r\nimport { ProductsStepShell, useProductsStepRepository } from './products';\r\nimport { CampaignDetailsStepShell, useCampaignDetailsStepRepository } from './campaign-details';\r\nimport { SummaryStepShell, useSummaryStepRepository } from './summary';\r\n\r\nexport const StepConfig = [{\r\n id: STEP_PATHS.ASSETS,\r\n view: props => ,\r\n repository: useAssetStepRepository,\r\n},\r\n{\r\n id: STEP_PATHS.PRODUCTS,\r\n view: props => ,\r\n repository: useProductsStepRepository,\r\n},\r\n{\r\n id: STEP_PATHS.TARGETING,\r\n view: props => ,\r\n repository: useTargetingStepRepository,\r\n},\r\n{\r\n id: STEP_PATHS.CAMPAIGNDETAILS,\r\n view: props => ,\r\n repository: useCampaignDetailsStepRepository,\r\n},\r\n{\r\n id: STEP_PATHS.BUDGET,\r\n view: props => ,\r\n repository: useBudgetStepRepository,\r\n},\r\n{\r\n id: STEP_PATHS.SUMMARY,\r\n view: props => ,\r\n repository: useSummaryStepRepository,\r\n}];\r\n\r\n\r\nexport const getStepListConfig = ({ i18n, flow }) => {\r\n const stepListConfig = [{\r\n id: STEP_PATHS.ASSETS,\r\n title: i18n.getString(_TL_('Assets')),\r\n }, {\r\n id: STEP_PATHS.TARGETING,\r\n title: i18n.getString(_TL_('Targeting')),\r\n }, {\r\n id: STEP_PATHS.CAMPAIGNDETAILS,\r\n title: i18n.getString(_TL_('Campaign details')),\r\n }, {\r\n id: STEP_PATHS.BUDGET,\r\n title: i18n.getString(_TL_('Budget')),\r\n }, {\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n }];\r\n\r\n if (flow === FLOWS.RETAIL_PERF_MAX) {\r\n // add products step to the first\r\n stepListConfig.unshift({\r\n id: STEP_PATHS.PRODUCTS,\r\n title: i18n.getString(_TL_('Products')),\r\n });\r\n }\r\n\r\n return stepListConfig;\r\n};\r\n","import { useCallback, useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { saveAssetGroupAndLinkedData } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport Promise from 'bluebird';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { logCopilotRecommendations } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport {\r\n getLoggerWithoutPageInfo,\r\n createVideoRepository,\r\n createImageRepository,\r\n createFolderRepository,\r\n uploadVideoMetadata,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { getODataConfig } from '../../shared/components/odata-config';\r\nimport { createDefaultCampaign, handleDefaultCampaignCreationError } from '../../shared/model/create-default-campaign';\r\nimport { getDefaultAssetGroup } from '../../shared/model/default-data';\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nexport const useAssetStepRepository = () => {\r\n const scenarioContext = useContext(ScenarioContext);\r\n const i18n = useContext(I18nContext);\r\n const permissions = useContext(PermissionsContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n\r\n const versionForLog = getLogVersion(permissions);\r\n\r\n const logger = getLoggerWithoutPageInfo(activity, versionForLog, 'PMaxAdsStep');\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n PMaxNewAspectRatios: isPMaxNewAspectRatiosEnabled,\r\n PMaxExcludeNewAspectRatios: isPMaxNewAspectRatiosExcluded,\r\n AssetGroupUrlRulesV2: isAssetGroupUrlRulesV2Enabled,\r\n } = serverContext.DynamicPermissions || {};\r\n\r\n const isPMaxNewAspectRatios = isPMaxNewAspectRatiosEnabled && !isPMaxNewAspectRatiosExcluded;\r\n\r\n const { aid, cid } = scope.values;\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n\r\n const folderRepository = createFolderRepository({\r\n i18n,\r\n logger,\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n\r\n const imageRepository = createImageRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n logger,\r\n i18n,\r\n activity,\r\n });\r\n\r\n const uploadVideoIfNeeded = useCallback(({ assetGroup }) => {\r\n const videoPromises = [];\r\n\r\n if (!assetGroup.videos) {\r\n return Promise.resolve(assetGroup);\r\n }\r\n\r\n // check for videos in the assetGroup that dont have an id.\r\n assetGroup.videos.forEach((video) => {\r\n if (!video.id) {\r\n videoPromises.push(uploadVideoMetadata({\r\n videoMetadata: video,\r\n newVideoFromMTObject,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n }).then((newVideo) => {\r\n _.extend(video, newVideo);\r\n }));\r\n }\r\n });\r\n\r\n if (_.isEmpty(videoPromises)) {\r\n return Promise.resolve(assetGroup);\r\n }\r\n\r\n return Promise.all(videoPromises).then(() => assetGroup).catch(((err) => {\r\n activity.trace('[PmaxNorthStarWizard] - Error uploading video metadata', { ...err });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n serverErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n });\r\n }));\r\n }, [folderRepository, imageRepository, videoRepository, activity, i18n]);\r\n\r\n const load = useCallback(() => {\r\n const { assetGroup: savedAssetGroup, campaign: savedCampaign } = state.context.wizardData;\r\n\r\n if (isPMaxNewAspectRatios) {\r\n activity.trace('[PmaxNorthStarWizard] - New Aspect Ratios is enabled');\r\n }\r\n\r\n if (isAssetGroupUrlRulesV2Enabled) {\r\n activity.trace('[PmaxNorthStarWizard] - URL Rules V2 is enabled');\r\n }\r\n\r\n const saveCampaignsPromise = savedCampaign\r\n ? Promise.resolve(savedCampaign)\r\n : createDefaultCampaign({\r\n i18n,\r\n serverContext,\r\n scenarioContext,\r\n }).then((result) => {\r\n const { campaign } = result;\r\n\r\n activity.trace('[PmaxNorthStarWizard] - Default Campaign saved');\r\n activity.signal(`[PmaxNorthStarWizard] - Default Campaign saved, campaignId: ${campaign.data.Id}`);\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: result.campaign.data });\r\n\r\n return result.campaign.data;\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - Default Campaign creation failed', { ...errorData });\r\n\r\n handleDefaultCampaignCreationError({ i18n, scope, errorData });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({ ...errorData });\r\n });\r\n\r\n const savedAssetGroupPromise = savedAssetGroup ? Promise.resolve(savedAssetGroup) : Promise.resolve(getDefaultAssetGroup({ i18n }));\r\n\r\n return Promise.props({ campaign: saveCampaignsPromise, assetGroup: savedAssetGroupPromise }).then(({ campaign, assetGroup }) => ({\r\n campaign,\r\n assetGroup,\r\n })).catch((errorData) => {\r\n activity.trace(`[PmaxNorthStarWizard] loadData failed. Error: ${errorData}`);\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, i18n, isPMaxNewAspectRatios, isAssetGroupUrlRulesV2Enabled, scenarioContext, scope, send, serverContext, state.context.wizardData]);\r\n\r\n const save = useCallback(({\r\n data,\r\n initialData,\r\n }) => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n\r\n const { assetGroup: assetGroupToSave } = data;\r\n\r\n const { assetGroup: initialAssetGroup } = initialData;\r\n\r\n if (isPMaxNewAspectRatios) {\r\n activity.trace('[PmaxNorthStarWizard] - New Aspect Ratios is enabled');\r\n }\r\n\r\n if (isAssetGroupUrlRulesV2Enabled) {\r\n activity.trace('[PmaxNorthStarWizard] - URL Rules V2 is enabled');\r\n }\r\n\r\n const saveCampaignsPromise = savedCampaign\r\n ? Promise.resolve({\r\n campaign: {\r\n data: savedCampaign,\r\n },\r\n }) :\r\n createDefaultCampaign({\r\n i18n,\r\n serverContext,\r\n scenarioContext,\r\n });\r\n\r\n return saveCampaignsPromise.then((result) => {\r\n const { campaign } = result;\r\n\r\n activity.trace('[PmaxNorthStarWizard] - Default Campaign saved');\r\n activity.signal(`[PmaxNorthStarWizard] - Default Campaign saved, campaignId: ${campaign.data.Id}`);\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: result.campaign.data });\r\n\r\n return {\r\n campaign: result.campaign.data,\r\n };\r\n }).then((result) => {\r\n const assetGroupChanges = {\r\n assetGroup: {\r\n data: assetGroupToSave,\r\n },\r\n originalAssetGroup: {\r\n data: initialAssetGroup,\r\n },\r\n campaign: result.campaign,\r\n };\r\n\r\n const saveContext = {\r\n scenario: scenarioContext.name,\r\n activity,\r\n activityLogger: scenarioContext.createActivity('saveAssets'),\r\n i18n,\r\n serverContext,\r\n cid,\r\n aid,\r\n };\r\n\r\n return Promise.props({\r\n campaign: Promise.resolve(result.campaign),\r\n savedAssetGroup: uploadVideoIfNeeded({ assetGroup: assetGroupToSave })\r\n .then(() => saveAssetGroupAndLinkedData(assetGroupChanges, saveContext)),\r\n });\r\n }).then((result) => {\r\n const { savedAssetGroup } = result;\r\n\r\n activity.trace(`[PmaxWizard] saveData succeeded. Assets count: ${result}`);\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { assetGroup: savedAssetGroup.assetGroup.data });\r\n\r\n logCopilotRecommendations({\r\n recommendationContext,\r\n assetGroup: savedAssetGroup.assetGroup.data,\r\n campaignId: result.campaign.Id,\r\n });\r\n\r\n return {\r\n campaign: result.campaign,\r\n assetGroup: savedAssetGroup.assetGroup.data,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxWizard] saveData failed. Error: ${errorData}`);\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, aid, cid, i18n, recommendationContext, uploadVideoIfNeeded, scenarioContext, send, serverContext, state.context.wizardData.campaign, isAssetGroupUrlRulesV2Enabled]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useCallback, useContext, useMemo } from 'react';\r\nimport Promise from 'bluebird';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { saveCampaignAndLinkedData, initialBrandExclusionsViewModel, saveAssetGroupAndLinkedData } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { getStoreQueriesWithLocalMock } from '@bingads-webui-campaign-react/merchant-shared';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { createDefaultCampaign, handleDefaultCampaignCreationError } from '../../shared/model/create-default-campaign';\r\nimport { getDefaultAssetGroup } from '../../shared/model/default-data';\r\n\r\nexport const useProductsStepRepository = () => {\r\n const { state, send } = useWizardService();\r\n\r\n const scenarioContext = useContext(ScenarioContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const storeQueries = useMemo(() => getStoreQueriesWithLocalMock(), []);\r\n\r\n const load = useCallback(() => {\r\n const {\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n campaign: savedCampaign,\r\n assetGroup: savedAssetGroup,\r\n } = state.context.wizardData;\r\n\r\n const saveCampaignsPromise = savedCampaign\r\n ? Promise.resolve(savedCampaign)\r\n : createDefaultCampaign({\r\n i18n,\r\n serverContext,\r\n scenarioContext,\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n }).then((result) => {\r\n const { campaign } = result;\r\n\r\n activity.trace('[PmaxNorthStarWizard] - Default Campaign saved');\r\n activity.signal(`[PmaxNorthStarWizard] - Default Campaign saved, campaignId: ${campaign.data.Id}`);\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: result.campaign.data });\r\n\r\n return result.campaign.data;\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - Default Campaign creation failed', { ...errorData });\r\n\r\n handleDefaultCampaignCreationError({ i18n, scope, errorData });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({ ...errorData });\r\n });\r\n\r\n const getStoreInfoPromise = storeQueries.getStore(providerId, true);\r\n\r\n const savedAssetGroupsPromise = savedAssetGroup ?\r\n Promise.resolve(savedAssetGroup) :\r\n getStoreInfoPromise.then((storeInfo) => {\r\n const assetGroup = getDefaultAssetGroup({\r\n businessName: storeInfo && storeInfo.Name,\r\n i18n,\r\n storeFinalUrl: storeInfo && storeInfo.DestinationUrl,\r\n });\r\n\r\n return assetGroup;\r\n });\r\n\r\n const promises = {\r\n campaign: saveCampaignsPromise,\r\n assetGroup: savedAssetGroupsPromise,\r\n };\r\n\r\n return Promise.props(promises).then(({ campaign, assetGroup }) => ({\r\n campaign,\r\n assetGroup,\r\n })).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - Default Campaign save failed');\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, i18n, scenarioContext, scope, send, serverContext, state.context.wizardData, storeQueries]);\r\n\r\n const save = useCallback(({\r\n data,\r\n initialData,\r\n }) => {\r\n const {\r\n campaign: campaignToSave, assetGroup: assetGroupToSave,\r\n } = data;\r\n\r\n const { assetGroup: savedAssetGroup } = state.context.wizardData;\r\n\r\n const { campaign: initialCampaign, assetGroup: initialAssetGroup } = initialData;\r\n\r\n const saveCampaignPromise = saveCampaignAndLinkedData({\r\n campaign: { data: campaignToSave },\r\n originalCampaign: { data: initialCampaign },\r\n brandExclusions: initialBrandExclusionsViewModel,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n });\r\n\r\n const saveAssetGroupPromise = savedAssetGroup ? saveAssetGroupAndLinkedData({\r\n assetGroup: { data: assetGroupToSave },\r\n originalAssetGroup: { data: initialAssetGroup },\r\n campaign: campaignToSave,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateAssetGroup'),\r\n serverContext,\r\n cid,\r\n aid,\r\n activity,\r\n }) : Promise.resolve({ assetGroup: { data: assetGroupToSave } });\r\n\r\n return Promise.props({\r\n campaign: saveCampaignPromise,\r\n assetGroup: saveAssetGroupPromise,\r\n }).then(({\r\n campaign: campaignResults,\r\n assetGroup: assetGroupResults,\r\n }) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign/assetgroup settings updated in product step');\r\n activity.signal('[PmaxNorthStarWizard] - campaign/assetgroup settings updated in product step');\r\n\r\n const {\r\n campaign,\r\n } = campaignResults;\r\n\r\n const {\r\n assetGroup,\r\n } = assetGroupResults;\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: campaign.data,\r\n assetGroup: assetGroup.data,\r\n savedProductFilter: assetGroupToSave.productFilter,\r\n savedListingGroup: assetGroupToSave.listingGroup,\r\n });\r\n\r\n return {\r\n campaign: campaign.data,\r\n assetGroup: assetGroup.data,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign/assetgroup settings update failed in product step');\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, aid, cid, i18n, scenarioContext, send, serverContext, state.context.wizardData]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useCallback, useContext } from 'react';\r\nimport Promise from 'bluebird';\r\nimport {\r\n loadBundleCountries,\r\n initialBrandExclusionsViewModel,\r\n saveCampaignAndLinkedData,\r\n saveAssetGroupAndLinkedData,\r\n loadCampaign,\r\n modelToViewModelForCampaign,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n readLocationCriterions,\r\n} from '@bingads-webui-campaign-react/perf-max-data';\r\n\r\nexport const useTargetingStepRepository = () => {\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const { state, send } = useWizardService();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const load = useCallback(() => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAssetGroup = state.context.wizardData.assetGroup;\r\n const { Id: campaignId } = savedCampaign || {};\r\n\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n locationTargets: readLocationCriterions(cid, aid, campaignId),\r\n assetGroup: Promise.resolve(savedAssetGroup),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n bundleCountriesAndLocationCriterions,\r\n campaign,\r\n assetGroup,\r\n locationTargets,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: { ...campaign, Status: savedCampaign.status }, // MT sends UserPaused, if we send this back they mark it as active. So we just use Paused from the saved ad model\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n });\r\n\r\n return ({\r\n ...bundleCountriesAndLocationCriterions,\r\n campaign: campaignData.data,\r\n assetGroup,\r\n });\r\n });\r\n }, [aid, cid, serverContext, state.context.wizardData.assetGroup, state.context.wizardData.campaign]);\r\n\r\n const save = useCallback(({\r\n data,\r\n initialData,\r\n }) => {\r\n const {\r\n campaign: campaignToSave, assetGroup: assetGroupToSave, bundleCountries, bundleLocationCriterions,\r\n } = data;\r\n\r\n const { campaign: initialCampaign, assetGroup: initialAssetGroup } = initialData;\r\n\r\n const savePromises = {\r\n campaign: saveCampaignAndLinkedData({\r\n campaign: { data: campaignToSave },\r\n originalCampaign: { data: initialCampaign },\r\n brandExclusions: initialBrandExclusionsViewModel,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateCampaign'),\r\n }),\r\n assetGroup: saveAssetGroupAndLinkedData({\r\n assetGroup: { data: assetGroupToSave },\r\n originalAssetGroup: { data: initialAssetGroup },\r\n campaign: campaignToSave,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateAssetGroup'),\r\n serverContext,\r\n cid,\r\n aid,\r\n activity,\r\n }),\r\n };\r\n\r\n return Promise.props(savePromises).then(({\r\n campaign: campaignResults,\r\n assetGroup: assetGroupResults,\r\n }) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign/assetgroup settings updated in targeting step');\r\n activity.signal('[PmaxNorthStarWizard] - campaign/assetgroup settings updated in targeting step');\r\n\r\n const {\r\n campaign,\r\n } = campaignResults;\r\n\r\n const {\r\n assetGroup,\r\n } = assetGroupResults;\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: campaign.data });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { assetGroup: assetGroup.data });\r\n\r\n return {\r\n campaign: campaign.data,\r\n assetGroup: assetGroup.data,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign/assetgroup settings update failed in targeting step');\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, aid, cid, i18n, scenarioContext, send, serverContext]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useCallback, useContext } from 'react';\r\nimport Promise from 'bluebird';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n initialBrandExclusionsViewModel,\r\n loadCampaign,\r\n loadBundleCountries,\r\n saveCampaignAndLinkedData,\r\n modelToViewModelForCampaign,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n readLocationCriterions,\r\n readCampaignNegativeWebpages,\r\n readDayTimeCriterions,\r\n} from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { viewModelToBulkModelForDisclaimerAssociation } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\n\r\nexport const useCampaignDetailsStepRepository = () => {\r\n const { state, send } = useWizardService();\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const load = useCallback(() => {\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const { Id: campaignId } = savedCampaign || {};\r\n\r\n const savedBrandExclusions = state.context.wizardData.brandExclusions;\r\n const BrandExclusionsViewModel = savedBrandExclusions\r\n ? { data: savedBrandExclusions, isDirty: false, isValid: true }\r\n : initialBrandExclusionsViewModel;\r\n\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId), // This is necessary to read ['Budget', 'CampaignConversionGoal/Goals'] from MT as the original model doesn't come with it\r\n locationTargets: readLocationCriterions(cid, aid, campaignId),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n dayTimeCriterions: readDayTimeCriterions(cid, aid, campaignId),\r\n campaignNegativeWebpages: readCampaignNegativeWebpages(cid, aid, campaignId),\r\n brandExclusions: Promise.resolve(BrandExclusionsViewModel),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n locationTargets,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n campaignNegativeWebpages,\r\n brandExclusions,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: { ...campaign, Status: savedCampaign.status }, // MT sends UserPaused, if we send this back they mark it as active. So we just use Paused from the saved ad model\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n campaignNegativeWebpagesModel: campaignNegativeWebpages ? campaignNegativeWebpages.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n });\r\n\r\n return {\r\n campaign: campaignData.data,\r\n brandExclusions: brandExclusions.data,\r\n ...bundleCountriesAndLocationCriterions,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxNorthStarWizard] loadData failed. Error: ${errorData}`);\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, aid, cid, serverContext, state.context.wizardData.brandExclusions, state.context.wizardData.campaign]);\r\n\r\n const save = useCallback(({\r\n data,\r\n initialData,\r\n }) => {\r\n const {\r\n campaign: campaignToSave,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n brandExclusions: brandExclusionsToSave,\r\n } = data;\r\n\r\n const { campaign: initialCampaign } = initialData;\r\n\r\n const { locationTargets: savedLocationTargets } = campaignToSave;\r\n\r\n const savePromises = {\r\n campaign: saveCampaignAndLinkedData({\r\n campaign: { data: campaignToSave },\r\n originalCampaign: { data: initialCampaign },\r\n brandExclusions: { data: brandExclusionsToSave },\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n viewModelToBulkModelForDisclaimerAssociation, // Pass in the disclaimer association model\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateCampaign'),\r\n }),\r\n };\r\n\r\n return Promise.props(savePromises).then(({\r\n campaign: campaignResults,\r\n }) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign settings updated in campaign details step');\r\n activity.signal('[PmaxNorthStarWizard] - campaign settings updated in campaign details step');\r\n\r\n const { campaign, brandExclusions } = campaignResults;\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: { ...campaign.data, locationTargets: savedLocationTargets }, brandExclusions: brandExclusions.data });\r\n\r\n return {\r\n campaign: { ...campaign.data, locationTargets: savedLocationTargets },\r\n brandExclusions: brandExclusions.data,\r\n bundleLocationCriterions,\r\n bundleCountries,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarWizard] - campaign settings update failed in campaign details step');\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, i18n, scenarioContext, send]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useCallback, useContext, useMemo, useRef } from 'react';\r\nimport Promise from 'bluebird';\r\nimport { extend } from 'underscore';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n readCampaignNegativeWebpages,\r\n readDayTimeCriterions,\r\n readLocationCriterions,\r\n readNewCustomerAcquisitionGoals,\r\n} from '@bingads-webui-campaign-react/perf-max-data';\r\nimport {\r\n loadCampaign,\r\n modelToViewModelForCampaign,\r\n loadBundleCountries,\r\n loadAssetGroupWithVideos,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { createVideoRepository } from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport Repository from '@bingads-webui-campaign-legacy/adextension-shared/service/repository';\r\nimport { DisclaimerAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport {\r\n getAssociatedDisclaimer,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { updateAssetGroupAndCampaignStatus } from '../../shared/model/update-entity-status';\r\nimport { useDiagnosticsData } from './diagnostics/use-diagnostics-data';\r\nimport { convertDiagnosticsDataToTrackingLog } from './diagnostics/utils';\r\nimport { getODataConfig } from '../../shared/components/odata-config';\r\n\r\nexport const useSummaryStepRepository = () => {\r\n const { state } = useWizardService();\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const serverContext = useContext(ServerContext);\r\n const activity = useContext(ActivityContext);\r\n const isSearchThemeEnabled = serverContext.DynamicPermissions.SearchThemes;\r\n const isUrlRulesEnabled = serverContext.DynamicPermissions.AssetGroupUrlRules;\r\n const isPMaxCreationDiagnosticEnabled = serverContext.DynamicPermissions.PMaxCreationDiagnostic;\r\n const isBudgetSuggestionEnabled = serverContext.DynamicPermissions.EnableBudgetSuggestion;\r\n const isNewCustomerAcquisitionEnabled = serverContext.DynamicPermissions.NewCustomerAcquisition;\r\n const { AdvertiserCustomerID: advertiserCustomerId } = serverContext.CurrentAccount || {};\r\n const isPMaxDisclaimersEnabled = !serverContext.Permissions.IsDomesticSimplifiedChineseEnabled && serverContext.DynamicPermissions.PMaxDisclaimers && serverContext.Permissions.IsMSANDisclaimerEnabled;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n const { cid, aid } = scope.values;\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n\r\n const disclaimerRepositoryRef = useRef(new Repository({\r\n schema: DisclaimerAdExtension,\r\n skipExtensionCache: true,\r\n }));\r\n\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n const disclaimerPerfMarker = perfMarker.createChild('Pmax_Disclaimers_Summary_Step_Load_Perf_Marker');\r\n\r\n const {\r\n campaign: savedCampaign,\r\n assetGroup: savedAssetGroup,\r\n diagnostics: savedDiagnostics,\r\n isPublishing,\r\n } = state.context.wizardData;\r\n\r\n const { fetchDiagnosticData, patchDiagnosticsData } = useDiagnosticsData({\r\n advertiserCustomerId,\r\n aid,\r\n campaignId: savedCampaign.Id,\r\n serverContext,\r\n });\r\n\r\n const load = useCallback(() => {\r\n const { Id: campaignId } = savedCampaign || {};\r\n\r\n const { Id: assetGroupId } = savedAssetGroup || {};\r\n\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n locationTargets: readLocationCriterions(cid, aid, campaignId),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n dayTimeCriterions: readDayTimeCriterions(cid, aid, campaignId),\r\n campaignNegativeWebpages: readCampaignNegativeWebpages(cid, aid, campaignId),\r\n assetGroup: loadAssetGroupWithVideos(cid, aid, campaignId, assetGroupId, i18n, isSearchThemeEnabled, isUrlRulesEnabled, videoRepository),\r\n ...(isPMaxCreationDiagnosticEnabled && { diagnostics: fetchDiagnosticData() }),\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoals: readNewCustomerAcquisitionGoals(cid, aid) }),\r\n ...(isPMaxDisclaimersEnabled && {\r\n disclaimer: getAssociatedDisclaimer(campaignId, disclaimerRepositoryRef.current, disclaimerPerfMarker),\r\n }),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n locationTargets,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n campaignNegativeWebpages,\r\n assetGroup,\r\n diagnostics,\r\n newCustomerAcquisitionGoals,\r\n disclaimer,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n campaignNegativeWebpagesModel: campaignNegativeWebpages ? campaignNegativeWebpages.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoalsModel: newCustomerAcquisitionGoals ? newCustomerAcquisitionGoals.value : [] }),\r\n });\r\n\r\n let data = {\r\n campaign: campaignData.data,\r\n assetGroup: assetGroup.data,\r\n };\r\n\r\n if (isPMaxCreationDiagnosticEnabled && diagnostics) {\r\n const budgetSuggestionData = isBudgetSuggestionEnabled ? savedDiagnostics.budgetSuggestionData : null;\r\n data = extend(data, {\r\n diagnosticsData: patchDiagnosticsData({\r\n diagnosticsData: diagnostics,\r\n campaignData: campaignData.data,\r\n budgetSuggestionData,\r\n }),\r\n });\r\n if (data.diagnosticsData.length > 0) {\r\n setClarityTag({ isPMaxDiagnostic: true });\r\n }\r\n activity.trace(`[PmaxNorthStarWizard][SummaryStep][Checks] ${convertDiagnosticsDataToTrackingLog(data.diagnosticsData)}`);\r\n }\r\n\r\n if (isPMaxDisclaimersEnabled && disclaimer) {\r\n data = extend(data, {\r\n disclaimer: {\r\n Name: disclaimer.Name,\r\n },\r\n });\r\n }\r\n\r\n return data;\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxNorthStarWizard][SummaryStep] loadData failed. Error: ${errorData}`);\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, aid, cid, fetchDiagnosticData, i18n, isBudgetSuggestionEnabled, isNewCustomerAcquisitionEnabled, isPMaxCreationDiagnosticEnabled, isSearchThemeEnabled, isUrlRulesEnabled, patchDiagnosticsData, savedAssetGroup, savedCampaign, savedDiagnostics.budgetSuggestionData, serverContext, isPMaxDisclaimersEnabled]);\r\n\r\n const save = useCallback(({ data }) => {\r\n const { Id: campaignId } = savedCampaign || {};\r\n const { Id: assetGroupId } = savedAssetGroup || {};\r\n\r\n if (isPublishing) {\r\n return updateAssetGroupAndCampaignStatus({ campaignId, assetGroupId }).then(() => ({\r\n campaign: data.campaign,\r\n assetGroup: data.assetGroup,\r\n })).catch(errorData => (\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n Promise.reject({ error: { ...errorData } })));\r\n }\r\n\r\n // no update necessary if not publishing.\r\n return Promise.resolve({\r\n campaign: data.campaign,\r\n assetGroup: data.assetGroup,\r\n });\r\n }, [isPublishing, savedAssetGroup, savedCampaign]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { ResponsiveStepList } from '@bingads-webui-react/step-progress-indicator';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\nimport {\r\n useWizardService,\r\n getCurrentStepId,\r\n getCurrentFlow,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\n\r\nimport { getStepListConfig } from './step-config';\r\n\r\nexport const StepList = () => {\r\n const { state, send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n\r\n const currentStepId = getCurrentStepId(state);\r\n const currentFlow = getCurrentFlow(state);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n const { flow } = state.context.wizardData;\r\n\r\n const stepListConfig = useMemo(() => getStepListConfig({ i18n, flow, currentStepId }), [currentStepId, flow, i18n]);\r\n\r\n const getDefaultOnItemClickFn = useCallback((step) => {\r\n let toStep;\r\n if (currentFlow.includes(step.id)) {\r\n toStep = step;\r\n } else if (!_.isEmpty(step.steps)) {\r\n const firstSubStep = _.find(step.steps, s => currentFlow.includes(s.id));\r\n if (firstSubStep) {\r\n toStep = firstSubStep;\r\n }\r\n }\r\n if (toStep && toStep.isBehind) {\r\n return () => {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: toStep.id,\r\n });\r\n };\r\n }\r\n return undefined;\r\n }, [currentFlow, send]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n","import React, { useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack, PrimaryButton, DefaultButton } from '@bingads-webui-react/fluent-controls';\r\nimport {\r\n useWizardService,\r\n getIsFirstStep,\r\n getIsLastStep,\r\n getCurrentStepId,\r\n matchStepState,\r\n STEP_STATES,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { STEP_PATHS, FLOWS } from './step-constants';\r\n\r\nconst SaveAndPublish = ({ saveButtonText }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndPublishClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isPublishing: true });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => {\r\n const currentStep = getCurrentStepId(state);\r\n\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n return i18n.getString(_TL_('Go live'));\r\n }\r\n\r\n if (currentStep === STEP_PATHS.CAMPAIGNSETTING && saveButtonText) {\r\n return i18n.getString(saveButtonText);\r\n }\r\n\r\n if (currentStep === STEP_PATHS.ASSETGROUPSETTING) {\r\n return i18n.getString(_TL_('Save'));\r\n }\r\n return i18n.getString(_TL_('Save & go live'));\r\n }, [i18n, saveButtonText, state]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\nSaveAndPublish.propTypes = {\r\n saveButtonText: PropTypes.string,\r\n};\r\nSaveAndPublish.defaultProps = {\r\n saveButtonText: undefined,\r\n};\r\n\r\nconst SaveAsDraft = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAsDraftClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isPublishing: false });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => {\r\n const currentStep = getCurrentStepId(state);\r\n\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n return i18n.getString(_TL_('Don\\'t go live'));\r\n }\r\n\r\n return i18n.getString(_TL_('Save & don\\'t go live'));\r\n }, [i18n, state]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\n\r\nexport const NextButton = ({ buttonText, disabled }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n const currentStepId = getCurrentStepId(state);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (currentStepId === STEP_PATHS.MULTI_AD_MANAGER) {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, { stepId: STEP_PATHS.AD_GROUP });\r\n } else {\r\n send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n }\r\n }, [currentStepId, send]);\r\n\r\n return (\r\n \r\n {buttonText ? i18n.getString(buttonText) : i18n.getString(_TL_('Next'))}\r\n \r\n );\r\n};\r\n\r\nexport const BackButton = ({ buttonText }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n const currentStepId = getCurrentStepId(state);\r\n\r\n const onBackClicked = useCallback(() => {\r\n if (currentStepId === STEP_PATHS.AD_GROUP && state.context.wizardData.flow === FLOWS.MULTI_AUDIENCE_CAMPAIGNS) {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, { stepId: STEP_PATHS.MULTI_AD_MANAGER });\r\n } else {\r\n send(WIZARD_EVENTS.BACK);\r\n }\r\n }, [currentStepId, send, state.context.wizardData.flow]);\r\n\r\n return (\r\n \r\n {buttonText ? i18n.getString(buttonText) : i18n.getString(_TL_('Back'))}\r\n \r\n );\r\n};\r\nBackButton.propTypes = {\r\n buttonText: PropTypes.string,\r\n};\r\nBackButton.defaultProps = {\r\n buttonText: undefined,\r\n};\r\n\r\n\r\nNextButton.propTypes = {\r\n buttonText: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n};\r\nNextButton.defaultProps = {\r\n buttonText: undefined,\r\n disabled: false,\r\n};\r\n\r\nexport const PerfMaxStepFooter = ({\r\n nextButtonText,\r\n nextDisabled,\r\n backButtonText,\r\n cancelButtonText,\r\n hideBackButton,\r\n}) => {\r\n const { state } = useWizardService();\r\n const isFirstStep = getIsFirstStep(state);\r\n const isLastStep = getIsLastStep(state);\r\n\r\n return (\r\n \r\n {(!isFirstStep && !hideBackButton) && }\r\n {(!isLastStep ? : )}\r\n {isLastStep && }\r\n {isFirstStep && }\r\n \r\n );\r\n};\r\nPerfMaxStepFooter.propTypes = {\r\n nextButtonText: PropTypes.string,\r\n nextDisabled: PropTypes.bool,\r\n backButtonText: PropTypes.string,\r\n cancelButtonText: PropTypes.string,\r\n hideBackButton: PropTypes.bool,\r\n};\r\nPerfMaxStepFooter.defaultProps = {\r\n nextButtonText: undefined,\r\n nextDisabled: false,\r\n backButtonText: undefined,\r\n cancelButtonText: undefined,\r\n hideBackButton: false,\r\n};\r\n\r\nexport const PerfMaxSettingStepFooter = ({\r\n cancelButtonText,\r\n}) => (\r\n \r\n \r\n \r\n \r\n);\r\nPerfMaxSettingStepFooter.propTypes = {\r\n cancelButtonText: PropTypes.string,\r\n};\r\nPerfMaxSettingStepFooter.defaultProps = {\r\n cancelButtonText: undefined,\r\n};\r\n","import { useContext, useEffect, useCallback, useRef } from 'react';\r\nimport _ from 'underscore';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { STEP_PATHS } from '../../steps';\r\n\r\nconst STATES_TO_LOG = [\r\n STEP_STATES.LOADING,\r\n STEP_STATES.ACTIVE,\r\n STEP_STATES.SAVING,\r\n STEP_STATES.GOING_NEXT,\r\n STEP_STATES.GOING_BACK,\r\n STEP_STATES.DONE,\r\n];\r\n\r\nexport const WizardLogger = () => {\r\n const activity = useContext(ActivityContext) || _.noop;\r\n\r\n const stepTime = useRef({\r\n loadStart: 0,\r\n loadEnd: 0,\r\n saveStart: 0,\r\n saveEnd: 0,\r\n });\r\n\r\n const wizardTime = useRef({\r\n start: 0,\r\n end: 0,\r\n });\r\n\r\n const { state } = useWizardService();\r\n\r\n const currentStep = state.toStrings()[0];\r\n\r\n const logStepStates = useCallback(() => {\r\n // 0 index has the step name\r\n // 1 index has the step state.\r\n const stepState = state.toStrings()[1].split('.')[1];\r\n if (STATES_TO_LOG.includes(stepState)) {\r\n activity.trace(`[PmaxNorthStarWizard] - ${state.toStrings()[0]} ${state.toStrings()[1]}`);\r\n activity.signal(`[PmaxNorthStarWizard] - ${state.toStrings()[0]} ${state.toStrings()[1]}`);\r\n }\r\n\r\n if (stepState === STEP_STATES.LOADING) {\r\n stepTime.current.loadStart = Date.now();\r\n }\r\n\r\n if (stepState === STEP_STATES.ACTIVE) {\r\n stepTime.current.loadEnd = Date.now();\r\n stepTime.current.saveStart = Date.now();\r\n activity.signal(`[PmaxNorthStarWizard] - ${state.toStrings()[0]} loaded in ${stepTime.current.loadEnd - stepTime.current.loadStart}ms`);\r\n }\r\n\r\n if (stepState === STEP_STATES.SAVING) {\r\n stepTime.current.saveEnd = Date.now();\r\n activity.signal(`[PmaxNorthStarWizard] - ${state.toStrings()[0]} saved in ${stepTime.current.saveEnd - stepTime.current.saveStart}ms`);\r\n }\r\n }, [activity, state]);\r\n\r\n useEffect(() => {\r\n logStepStates();\r\n }, [logStepStates]);\r\n\r\n useEffect(() => {\r\n // mark wizard start time.\r\n if (wizardTime.current.start === 0) {\r\n wizardTime.current.start = Date.now();\r\n }\r\n\r\n return () => {\r\n // mark wizard end time.\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n wizardTime.current.end = Date.now();\r\n activity.signal(`[PmaxNorthStarWizard] - Wizard exited in ${wizardTime.current.end - wizardTime.current.start}ms`);\r\n }\r\n };\r\n }, [activity, currentStep]);\r\n\r\n return null;\r\n};\r\n","import React, { useMemo, useContext, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport { isUndefined } from 'underscore';\r\nimport {\r\n Wizard,\r\n LayoutContainer,\r\n Layout,\r\n StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n SaveBlocker,\r\n DefaultTemplate,\r\n CancelWizardDialog,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { FluentSwitcherContext } from '@bingads-webui-react/fluent-version-switcher';\r\nimport { withTheme } from 'react-jss';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { getLocalStorage } from '@bingads-webui/storage';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { ProgressiveLoadingBlock } from '@bingads-webui-campaign-react/shell-ui-common';\r\n\r\nimport { StepConfig, FLOWS_TO_FIRST_STEP, FLOWS, getFlow, StepList, PerfMaxStepFooter } from './steps';\r\nimport { WizardLogger } from './shared/components/wizard-logger';\r\nimport { PMAX_WIZARD_ID_NAME } from './constants';\r\n\r\nconst getCampaignObjective = (localStorage) => {\r\n let campaignObjective = config.get('CampaignObjective');\r\n let providerId = null;\r\n let salesCountry = null;\r\n let localInventory = null;\r\n let isFeedFiltered = null;\r\n let feedLabel = null;\r\n\r\n if (isUndefined(campaignObjective)) {\r\n if (localStorage.supportsStorage()) {\r\n campaignObjective = localStorage.get('CampaignObjective');\r\n config.set('CampaignObjective', campaignObjective);\r\n }\r\n }\r\n\r\n if (localStorage.supportsStorage()) {\r\n providerId = config.get('ProviderId') || localStorage.get('ProviderId');\r\n salesCountry = config.get('SalesCountry') || localStorage.get('SalesCountry');\r\n localInventory = config.get('LocalInventoryAdsEnabled') || localStorage.get('LocalInventoryAdsEnabled');\r\n isFeedFiltered = config.get('IsFeedFiltered') || localStorage.get('IsFeedFiltered');\r\n feedLabel = config.get('FeedLabel') || localStorage.get('FeedLabel');\r\n }\r\n\r\n return {\r\n campaignObjective,\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n };\r\n};\r\n\r\nconst PerfMaxNorthStarWizardImpl = ({\r\n perfMarker,\r\n scope,\r\n permissions,\r\n siteMap,\r\n dynamicOptions,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild('PerfMaxNorthStarWizard')\r\n ), [perfMarker]);\r\n\r\n const localStorage = useMemo(() => getLocalStorage(), []);\r\n\r\n const routeToNavigateToWhenDone = useMemo(() => getRoutePathById(siteMap, 'campaigns'), [siteMap]);\r\n\r\n const { dynamic: { AppsAdsPerfMaxFluentV2 } } = permissions;\r\n\r\n const {\r\n campaignObjective,\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n } = useMemo(() => getCampaignObjective(localStorage), [localStorage]);\r\n\r\n const wizardFlow = useMemo(() => {\r\n if (providerId !== null && providerId !== '') {\r\n return FLOWS.RETAIL_PERF_MAX;\r\n }\r\n return FLOWS.PERFMAX_WIZARD;\r\n }, [providerId]);\r\n\r\n const initialStep = FLOWS_TO_FIRST_STEP[wizardFlow];\r\n\r\n const wizardConfig = useMemo(() => ({\r\n id: PMAX_WIZARD_ID_NAME.PMAX_NORTH_STAR_WIZARD,\r\n initialStep,\r\n steps: StepConfig,\r\n initialFlowFactors: { flow: wizardFlow },\r\n initialWizardData: {\r\n flow: wizardFlow,\r\n campaignObjective,\r\n providerId,\r\n salesCountry,\r\n localInventory,\r\n isFeedFiltered,\r\n feedLabel,\r\n ...dynamicOptions,\r\n },\r\n getFlow: ({ flow }) => getFlow({ flow, permissions }),\r\n actions: {\r\n onDone: () => scope.save(routeToNavigateToWhenDone),\r\n onExited: () => scope.save(routeToNavigateToWhenDone),\r\n },\r\n attachStepActivities: false,\r\n }), [initialStep, wizardFlow, campaignObjective, providerId, salesCountry, localInventory, isFeedFiltered, feedLabel, dynamicOptions, permissions, scope, routeToNavigateToWhenDone]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ PerfMaxNorthStarWizard: FLOWS.PERFMAX_WIZARD });\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nPerfMaxNorthStarWizardImpl.propTypes = {\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AppsAdsPerfMaxFluentV2: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n siteMap: PropTypes.shape({}).isRequired,\r\n dynamicOptions: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nconst PerfMaxNorthStarWizardInternal = ({\r\n adExtensionsDynamicFeaturesLoader,\r\n permissions,\r\n theme,\r\n scope,\r\n instrumentation,\r\n i18n,\r\n ...rest\r\n}) => {\r\n const dynamicOptionsLoader = useCallback(\r\n () => Promise.props({\r\n adExtensionsDynamicFeatures: adExtensionsDynamicFeaturesLoader({\r\n permissions,\r\n theme,\r\n scope,\r\n instrumentation,\r\n i18n,\r\n }),\r\n adExtensionsAssociationsFactory:\r\n // eslint-disable-next-line import/no-unresolved\r\n import(/* webpackChunkName: \"perf-max-north-star-campaign-creation\" */'@bingads-webui-campaign-react/ad-extensions-associations-factory')\r\n .then(({ extensionsAssociationsFactory, getObjectiveExtensions }) => ({ extensionsAssociationsFactory, getObjectiveExtensions })),\r\n })\r\n .then(({ adExtensionsDynamicFeatures, adExtensionsAssociationsFactory }) => ({\r\n adExtensionsDynamicFeatures,\r\n adExtensionsAssociationsFactory,\r\n }))\r\n .then(dynamicOptions => ({\r\n default: withProps({ dynamicOptions }, PerfMaxNorthStarWizardImpl),\r\n })),\r\n [adExtensionsDynamicFeaturesLoader, permissions, theme, scope, instrumentation, i18n]\r\n );\r\n\r\n const LazyView = useMemo(() => React.lazy(dynamicOptionsLoader), [dynamicOptionsLoader]);\r\n\r\n // useEffect(() => {\r\n // if (!campaignObjective) {\r\n // props.scope.save('/campaign/vnext/createcampaign/objective');\r\n // }\r\n\r\n // return () => {\r\n // // eslint-disable-next-line no-console\r\n // console.log('[DWD] PerfMaxCampaignCreationPage unmounted');\r\n // // clear objective choice in local storage\r\n // if (localStorage.supportsStorage()) {\r\n // localStorage.invalidate('CampaignObjective');\r\n // }\r\n // };\r\n // }, [campaignObjective, props.scope]);\r\n\r\n return (\r\n <>\r\n }>\r\n \r\n \r\n {/* {!campaignObjective &&\r\n
\r\n } */}\r\n \r\n );\r\n};\r\n\r\nPerfMaxNorthStarWizardInternal.propTypes = {\r\n adExtensionsDynamicFeaturesLoader: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AppsAdsPerfMaxFluentV2: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const PerfMaxNorthStarWizard = withSiteMap(withPermissions(withRecommendationContext(withScope(withTheme(PerfMaxNorthStarWizardInternal), undefined, undefined, false, true))));\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useMemo, useContext, useCallback, useState, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport Repository from '@bingads-webui-campaign-legacy/adextension-shared/service/repository';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup, FocusableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { DisclaimerAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { DisclaimerStringMap } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport {\r\n bidAdjustmentIcon,\r\n getAssociatedDisclaimer,\r\n getCampaignStyles,\r\n ValidatedDisclaimerExtension,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport {\r\n getConversionGoalTitleDetails,\r\n CampaignNamePanel,\r\n AdSchedulePanel,\r\n UrlOptionsPanel,\r\n PANEL_KEYS,\r\n LanguageTargetPanel,\r\n BidStrategyPanel,\r\n getFinalUrlExpansionTitleDetails,\r\n getStoreTitleDetails,\r\n BudgetPanel,\r\n getDisclaimerTitleDetails,\r\n} from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedConversionGoals, ValidatedConversionGoalsScopeSelector, useIsMounted, LocationTargetingSettingPanel, BrandShowroomPanel } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport {\r\n FormErrorGroup,\r\n UnmappedFormErrors as OriginalUnmappedFormErrors,\r\n entityIs,\r\n andComp,\r\n anyComp,\r\n notComp,\r\n propertyIs,\r\n StandardControlAdapter\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport {\r\n apiErrorMapper,\r\n ERROR_ENTITY,\r\n getStepCampaignSettingsStyles,\r\n ConversionsImg,\r\n FinalUrlExpansionsImg,\r\n PageFeedsImg,\r\n AutoGenAssetsImg,\r\n BrandExclusionsImg,\r\n ShoppingImg,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors, withContainerErrors, FormErrorBeaconAdapter } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { Link, Stack, Label } from '@bingads-webui-react/fabric-control';\r\nimport { ValidatedLegacyFinalUrlExpansion } from '@bingads-webui-campaign-react/legacy-final-url-expansion';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { PageFeedSelectorSection } from '@bingads-webui-campaign-react/page-feed-selector';\r\nimport { BrandListsPicker } from '@bingads-webui-campaign-react/brand-lists-components';\r\nimport { ValidatedAutoGeneratedAssets } from '@bingads-webui-campaign-react/auto-generated-assets';\r\nimport { StoreSelectContainer } from '@bingads-webui-campaign-react/store-select';\r\nimport { MAX_CONVERSIONS, MAX_CONVERSIONS_VALUE } from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { getMessageType } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\nimport { useWizardService, WIZARD_EVENTS, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { ValidatedNewCustomerAcquisition, ValidatedNewCustomerAcquisitionHeader, newCustomerAcquisitionServerErrorFilter } from '@bingads-webui-campaign-react/new-customer-acquisition';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\n\r\nimport { RadioShimmer, StoreSelectorShimmer, SingleLineShimmer } from '../../shared/components/section-shimmer';\r\nimport { PMAX_WIZARD_ID_NAME } from '../../constants';\r\nimport { getCampaignSettingsPanels } from '../step-constants';\r\n\r\nconst getCampaignStylesNorthStar = () => ({\r\n header: {\r\n marginBottom: 20,\r\n },\r\n formContainer: {\r\n maxWidth: 800,\r\n '& .advanced-scheduling-grid': {\r\n width: 'unset !important',\r\n\r\n '& .ad-scheduling-grid': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n '& .title-item': {\r\n width: 'unset !important',\r\n },\r\n '& .goal-selector-with-scope': {\r\n width: '100%',\r\n '& .ba-goal-selector': {\r\n width: '100%',\r\n ' & .multi-selector': {\r\n width: '100%',\r\n '& .multi-selector-content': {\r\n width: '100%',\r\n '& .ba-entity-selector': {\r\n minWidth: '50% !important',\r\n '& .list-selector-container': {\r\n width: 'unset !important',\r\n '& .ba-list-selector': {\r\n width: 'unset !important',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n '& .bid-strategy-dropdown': {\r\n '& .ms-Dropdown': {\r\n maxWidth: 312,\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\n\r\nconst campaignUrlOptionsProperties = andComp(\r\n entityIsCampaign,\r\n anyComp(\r\n propertyIs('TrackingUrlTemplate'),\r\n propertyIs('FinalUrlSuffix'),\r\n propertyIs('UrlCustomParameters')\r\n )\r\n);\r\n\r\nconst notCampaignUrlOptionsProperties = notComp(campaignUrlOptionsProperties);\r\n\r\nconst UnmappedFormErrors = withControlErrorHandling(OriginalUnmappedFormErrors);\r\n\r\nconst feedAssociationsProp = andComp(entityIsCampaign, propertyIs('FeedAssociations'));\r\nconst campaignNegativeWebPages = entityIs(ERROR_ENTITY.CampaignNegativeWebpage);\r\nconst brandListAssociationEntity = entityIs(ERROR_ENTITY.BrandListAssociation);\r\n\r\nconst ServerValidatedLegacyFinalUrlExpansion = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyFinalUrlExpansion, { filter: campaignNegativeWebPages }));\r\nconst ServerValidatedPageFeedSelectorSection = withControlErrorHandling(withContainerErrors(PageFeedSelectorSection, { filter: feedAssociationsProp, Adapter: StandardControlAdapter() }), [FocusableActuator], [FormErrorBeaconAdapter]);\r\nconst ServerValidatedBrandListsPicker = withControlErrorHandling(withContainerErrors(BrandListsPicker, { filter: brandListAssociationEntity, Adapter: StandardControlAdapter() }), [FocusableActuator], [FormErrorBeaconAdapter]);\r\nconst ServerValidatedAutoGeneratedAssets = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedAutoGeneratedAssets, { filter: campaignNegativeWebPages }));\r\nconst ServerValidatedNewCustomerAcquisition = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedNewCustomerAcquisition, { filter: newCustomerAcquisitionServerErrorFilter }));\r\n\r\nexport const CampaignSettingStepShell = ({\r\n data: campaignInfo,\r\n onDataChange,\r\n error,\r\n}) => {\r\n const isLoading = useMemo(() => _.isEmpty(campaignInfo), [campaignInfo]);\r\n\r\n const {\r\n campaign,\r\n brandExclusions,\r\n budgetAmount,\r\n currency,\r\n bidStrategy,\r\n } = campaignInfo || {};\r\n const {\r\n Id: campaignId,\r\n conversionGoals: conversionGoalsState,\r\n finalUrlExpansionOptOut,\r\n autoGeneratedTextOptOut,\r\n autoGeneratedImageOptOut,\r\n finalUrlExpansions,\r\n IsBSREnabled,\r\n } = campaign || {};\r\n const {\r\n savedAddedBrandListIds,\r\n savedDeletedBrandListIds,\r\n } = brandExclusions || {};\r\n\r\n const { serverErrors, systemErrors } = error || {};\r\n\r\n const classes = useDefaultStyles(getStepCampaignSettingsStyles);\r\n const styles = useDefaultStyles(getCampaignStylesNorthStar);\r\n const campaignClasses = useDefaultStyles(getCampaignStyles);\r\n\r\n const { state } = useFormService();\r\n const { config: wizardConfig, state: wizardState, send } = useWizardService();\r\n const wizardData = getWizardData(wizardState);\r\n\r\n const { saveFailed } = state.context;\r\n const i18n = useContext(I18nContext);\r\n const isMounted = useIsMounted();\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap, DisclaimerStringMap]), [i18n]);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n const {\r\n Permissions, DynamicPermissions, CurrentAccount,\r\n } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const { AdvertiserCustomerID: advertiserCustomerId } = CurrentAccount || {};\r\n const {\r\n EnableBudgetSuggestion: showBudgetSuggestion,\r\n ConversionAssociationWarningP2: IsConversionAssociationWarningP2Enabled,\r\n ConversionWarningImprovement: ConversionWarningImprovementEnabled,\r\n PMaxDisclaimers,\r\n } = permissions.dynamic;\r\n\r\n const {\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsMSANDisclaimerEnabled,\r\n } = permissions;\r\n const isPMaxDisclaimersEnabled = !IsDomesticSimplifiedChineseEnabled && PMaxDisclaimers && IsMSANDisclaimerEnabled;\r\n\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n const [disclaimerLoadPerfMarker] = useState(() => perfMarker.createChild('Pmax_Disclaimers_Campaign_Settings_Load_Perf_Marker'));\r\n const [disclaimerSavePerfMarker] = useState(() => perfMarker.createChild('Pmax_Disclaimers_Campaign_Settings_Save_Perf_Marker'));\r\n\r\n const conversionGoals = useMemo(() => ({ conversionGoals: conversionGoalsState }), [conversionGoalsState]);\r\n const conversionGoalsTitleDetails = useMemo(() => getConversionGoalTitleDetails(i18n, conversionGoals && conversionGoals.conversionGoals), [i18n, conversionGoals]);\r\n const [reportedSelectedPageFeeds, setReportedSelectedPageFeeds] = useState([]);\r\n const onSelectedPageFeedsUpdate = useCallback((selectedPageFeeds) => {\r\n if (!isMounted.current) return;\r\n setReportedSelectedPageFeeds(selectedPageFeeds);\r\n }, [isMounted]);\r\n const pageFeedsDetails = useMemo(\r\n () => {\r\n if (_.isEmpty(reportedSelectedPageFeeds)) {\r\n return i18n.getString(_TL_('Upload all the relevant URLs for your campaign by spreadsheet.'));\r\n }\r\n if (reportedSelectedPageFeeds.length === 1) {\r\n return i18n.getString(_TL_('You’ve successfully added 1 page feed.'));\r\n }\r\n return i18n.getString(_TL_('You’ve successfully added {{number}} page feeds.'), { number: reportedSelectedPageFeeds.length });\r\n },\r\n [i18n, reportedSelectedPageFeeds]\r\n );\r\n const onPageFeedsChange = useCallback((selectedPageFeeds) => {\r\n if (!isMounted.current) return;\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n pageFeeds: selectedPageFeeds,\r\n },\r\n }),\r\n isDirty: true,\r\n });\r\n }, [isMounted, onDataChange]);\r\n const autoGenAssetsSummary = useMemo(() => {\r\n if (finalUrlExpansionOptOut && autoGeneratedTextOptOut && autoGeneratedImageOptOut) {\r\n return i18n.getString(_TL_('Off: Do not use autogenerated assets in ads.'));\r\n }\r\n return i18n.getString(_TL_('On: You’ve enabled autogenerated assets for your ads.'));\r\n }, [i18n, finalUrlExpansionOptOut, autoGeneratedTextOptOut, autoGeneratedImageOptOut]);\r\n\r\n const autoGenAssetsData = useMemo(() => ({\r\n finalUrlExpansions,\r\n options: {\r\n finalUrlExpansionOptOut,\r\n autoGeneratedTextOptOut,\r\n autoGeneratedImageOptOut,\r\n },\r\n }), [autoGeneratedImageOptOut, autoGeneratedTextOptOut, finalUrlExpansionOptOut, finalUrlExpansions]);\r\n\r\n const onBrandListsChange = useCallback((selectedBrandLists, [deletedBrandListIds, addedBrandListIds]) => {\r\n if (!isMounted.current) return;\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n brandExclusions: {\r\n ...prevData.brandExclusions,\r\n deletedBrandListIds,\r\n addedBrandListIds,\r\n },\r\n }),\r\n isDirty: true,\r\n });\r\n }, [isMounted, onDataChange]);\r\n const [reportedSelectedBrandLists, setReportedSelectedBrandLists] = useState([]);\r\n const onSelectedBrandListsUpdate = useCallback((selectedBrandLists) => {\r\n if (!isMounted.current) return;\r\n setReportedSelectedBrandLists(selectedBrandLists);\r\n }, [isMounted]);\r\n const brandListsDetails = useMemo(\r\n () => {\r\n if (_.isEmpty(reportedSelectedBrandLists)) {\r\n return i18n.getString(_TL_('Add brand exclusions so that your ads won’t show on search queries that mention those brands.'));\r\n }\r\n if (reportedSelectedBrandLists.length === 1) {\r\n return i18n.getString(_TL_('You’ve added 1 brand list, which makes it so that your ads won’t show on search queries that mention those brands.'));\r\n }\r\n return i18n.getString(_TL_('You’ve added {{number}} brand lists, which makes it so that your ads won’t show on search queries that mention those brands.'), { number: reportedSelectedBrandLists.length });\r\n },\r\n [i18n, reportedSelectedBrandLists]\r\n );\r\n const [finalUrlExpansionsView, setFinalUrlExpansionsView] = useState(null);\r\n const setFinalUrlExpansionsViewCallback = useCallback((view) => {\r\n setFinalUrlExpansionsView(view);\r\n }, []);\r\n\r\n const DisclaimerAdsEnabled = useMemo(\r\n () =>\r\n _.result(_.find( // from campaign setting DB\r\n _.get(campaign, 'CampaignSettings', []),\r\n setting => setting['@odata.type'] === '#Model.DisclaimerSetting'\r\n ), 'DisclaimerAdsEnabled', false)\r\n , [campaign]\r\n );\r\n const disclaimerRepositoryRef = useRef(new Repository({\r\n schema: DisclaimerAdExtension,\r\n skipExtensionCache: true,\r\n }));\r\n\r\n const [associatedDisclaimer, setAssociatedDisclaimer] = useState(null);\r\n useEffect(() => {\r\n if (isPMaxDisclaimersEnabled && campaignId) {\r\n getAssociatedDisclaimer(campaignId, disclaimerRepositoryRef.current, disclaimerLoadPerfMarker).then((disclaimer) => {\r\n if (!_.isEmpty(disclaimer)) {\r\n setAssociatedDisclaimer(disclaimer);\r\n }\r\n });\r\n }\r\n return null;\r\n }, [isPMaxDisclaimersEnabled, campaignId, disclaimerLoadPerfMarker]);\r\n\r\n const disclaimersDetails = useMemo(() => getDisclaimerTitleDetails(i18n, { selectedDisclaimer: associatedDisclaimer }), [associatedDisclaimer, i18n]);\r\n const isCampaignShoppingType = useMemo(\r\n // check if the odata type is ShoppingSettings, return true if it is, false if not\r\n () => !!_.find(_.get(campaign, 'CampaignSettings', []), setting => setting['@odata.type'] === '#Model.ShoppingSettings')\r\n , [campaign]\r\n );\r\n\r\n const { basicPanels, advancedPanels } = useMemo(() => getCampaignSettingsPanels(permissions, isCampaignShoppingType), [permissions, isCampaignShoppingType]);\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['campaign'] /* all sections */,\r\n ['campaign'] /* initially expanded sections */\r\n );\r\n\r\n const basicSettingsSection = useMemo(() => {\r\n const campaignNamePanel = (\r\n \r\n );\r\n\r\n const generalSettings = [\r\n campaignNamePanel,\r\n ];\r\n\r\n return (\r\n
\r\n \r\n { generalSettings }\r\n \r\n
\r\n );\r\n }, [isLoading, allCampaignSettingsSections, campaignSettingsExpandedSections, setCampaignSettingsExpandedSections]);\r\n\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n flipMoreSettingsExpandAllState,\r\n ] = useCollapseState(\r\n advancedPanels /* all sections */,\r\n [PANEL_KEYS.BRAND_SHOWROOM] /* initially expanded sections */\r\n );\r\n const moreBasicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreSettingsExpandedSections }),\r\n [setMoreSettingsExpandedSections]\r\n );\r\n\r\n const moreBasicSettingsSection = useMemo(() => (\r\n
\r\n \r\n \r\n {moreSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: PANEL_KEYS.FINAL_URL_EXPANSION,\r\n }}\r\n >\r\n \r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: PANEL_KEYS.AUTO_GEN_ASSETS,\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'page-feeds',\r\n }}\r\n >\r\n \r\n { isLoading ? :\r\n \r\n }\r\n \r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: PANEL_KEYS.BRAND_EXCLUSIONS,\r\n }}\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\n {isLoading ? : (\r\n \r\n )}\r\n \r\n\r\n \r\n
\r\n ), [classes.moreBasicCampaignSection, i18n, flipMoreSettingsExpandAllState, moreSettingsExpandedSections, allMoreSettingsSections, setMoreSettingsExpandedSections, isLoading, moreBasicSettingsExpand, campaign, finalUrlExpansionsView, finalUrlExpansionOptOut, finalUrlExpansions, setFinalUrlExpansionsViewCallback, autoGenAssetsSummary, autoGenAssetsData, pageFeedsDetails, advertiserCustomerId, scope.values.aid, campaignId, onPageFeedsChange, onSelectedPageFeedsUpdate, brandListsDetails, onBrandListsChange, onSelectedBrandListsUpdate, savedAddedBrandListIds, savedDeletedBrandListIds, disclaimersDetails, campaignClasses.disclaimerContainerWrapper, legacyI18n, DisclaimerAdsEnabled, associatedDisclaimer, disclaimerSavePerfMarker, IsBSREnabled]);\r\n\r\n const onCampaignValidation = useCallback((results) => {\r\n if (!isMounted.current) return;\r\n\r\n onDataChange({\r\n data: (prevData) => {\r\n const patchedData = {\r\n ...prevData,\r\n campaign: {\r\n ...prevData.campaign,\r\n ...results.data,\r\n },\r\n };\r\n if (IsConversionAssociationWarningP2Enabled && wizardConfig && wizardConfig.id === PMAX_WIZARD_ID_NAME.PMAX_NORTH_STAR_SETTING_WIZARD) {\r\n const message = getMessageType(prevData, patchedData);\r\n\r\n if (message) {\r\n const updatedData = {\r\n wizardData: {\r\n ...wizardData,\r\n customConfirmMessages: [message],\r\n },\r\n };\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, updatedData.wizardData);\r\n }\r\n }\r\n return ({\r\n ...patchedData,\r\n });\r\n },\r\n isValid: results.isValid,\r\n isDirty: results.isDirty,\r\n });\r\n }, [IsConversionAssociationWarningP2Enabled, isMounted, onDataChange, send, wizardConfig, wizardData]);\r\n\r\n const [\r\n allSections,\r\n allExpandedSections,\r\n setExpandedSections,\r\n ] = useCollapseState(\r\n basicPanels,\r\n [PANEL_KEYS.BID_STRATEGY, PANEL_KEYS.BUDGET, PANEL_KEYS.LOCATIONS, PANEL_KEYS.LANGUAGE_TARGET, PANEL_KEYS.AD_SCHEDULE, PANEL_KEYS.URL_OPTIONS, PANEL_KEYS.CONVERSIONS, PANEL_KEYS.NEW_CUSTOMER_ACQUISITION]\r\n );\r\n\r\n const expandSections = useMemo(() =>\r\n collapseExpander({ setActiveKeys: setExpandedSections }), [setExpandedSections]);\r\n\r\n const {\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n } = campaignInfo || {};\r\n\r\n const {\r\n ProviderId,\r\n IsFeedFiltered,\r\n SalesCountry,\r\n FeedLabel,\r\n LocalInventoryAdsEnabled,\r\n newCustomerAcquisition,\r\n newCustomerAcquisitionOptOut,\r\n } = campaign || {};\r\n\r\n const storeContainerData = useMemo(() => ({\r\n ProviderId,\r\n IsFeedFiltered,\r\n SalesCountry,\r\n FeedLabel,\r\n LocalInventoryAdsEnabled,\r\n }), [ProviderId, IsFeedFiltered, SalesCountry, FeedLabel, LocalInventoryAdsEnabled]);\r\n const [storesData, setStoresData] = useState({ error: undefined, stores: {}, countries: {} });\r\n const storeTitleDetails = useMemo(() => storesData && getStoreTitleDetails(i18n, storesData, storeContainerData), [i18n, storesData, storeContainerData]);\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n const onStoreDataLoaded = useCallback(({ error, stores = {}, countries = {} }) => {\r\n if (isMounted.current) {\r\n setStoresData({ error, stores, countries });\r\n }\r\n }, [isMounted]);\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 { basicSettingsSection }\r\n \r\n \r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: PANEL_KEYS.NEW_CUSTOMER_ACQUISITION,\r\n expandKey: expandSections,\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 attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: { expandSections },\r\n expandKey: 'conversions',\r\n }}\r\n >\r\n {!ConversionWarningImprovementEnabled && (isLoading ? : (\r\n \r\n ))}\r\n {ConversionWarningImprovementEnabled && (isLoading ? : (\r\n \r\n ))}\r\n \r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: expandSections,\r\n expandKey: PANEL_KEYS.SHOPPING,\r\n }}\r\n >\r\n {isLoading ? : (\r\n }\r\n />\r\n )}\r\n \r\n \r\n { moreBasicSettingsSection }\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nCampaignSettingStepShell.propTypes = {\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({}),\r\n adSchedules: PropTypes.shape({}),\r\n conversionGoalsState: PropTypes.shape({}),\r\n }).isRequired,\r\n error: PropTypes.shape({\r\n serverErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n systemErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import { useCallback, useContext } from 'react';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n initialBrandExclusionsViewModel,\r\n loadCampaign,\r\n loadBundleCountries,\r\n saveCampaignAndLinkedData,\r\n modelToViewModelForCampaign,\r\n loadConversionGoalDetails,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { ScenarioContext, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n readLocationCriterions,\r\n readCampaignNegativeWebpages,\r\n readDayTimeCriterions,\r\n readNewCustomerAcquisitionGoals\r\n} from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { usePreference, preferenceNames } from '@bingads-webui-campaign-react/pmax-lite-data';\r\nimport { MAX_CONVERSIONS } from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { LogTargetCpaCheckOnSave } from '@bingads-webui-campaign-react/target-cpa-warning-banner';\r\nimport { showBudgetBidCampaignNotifications } from '@bingads-webui-campaign/import-shared-utils';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport { viewModelToBulkModelForDisclaimerAssociation } from '@bingads-webui-campaign-react/ads-campaign-disclaimers';\r\nimport { useLocalizeBudget } from '../budget/utils/use-budget-localized';\r\n\r\nexport const roasMtToUI = roas => (_.isNumber(roas) ? roas * 100 : null);\r\nexport const roasUiToMt = roas => (_.isNumber(roas) ? (roas / 100).toFixed(4) : null);\r\n\r\nexport const useCampaignSettingStepRepository = () => {\r\n const { localizeBudget } = useLocalizeBudget();\r\n const [{ value: currencyPreference }] = usePreference(preferenceNames.SelectedCurrency);\r\n const { state, send } = useWizardService();\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid, campaignId } = scope.values;\r\n\r\n const modelToViewModel = useCallback((campaign) => {\r\n const budgetAmount = _.get(campaign, ['Budget', 'Amount']);\r\n const bidStrategy = _.get(campaign, ['BiddingScheme', 'Type']);\r\n const cpa = _.get(campaign, ['BiddingScheme', 'TargetCpa']);\r\n const roas = parseFloat(_.get(campaign, ['BiddingScheme', 'TargetRoas'])) || null;\r\n const language = _.get(campaign, ['Languages', 0]);\r\n const isInitialAdditionalDetailsChecked = _.isNumber(cpa) || _.isNumber(roas);\r\n\r\n return {\r\n budgetAmount: localizeBudget(budgetAmount, 'USD'),\r\n bidStrategy,\r\n currency: currencyPreference,\r\n cpa,\r\n roas: roasMtToUI(roas),\r\n language,\r\n isInitialAdditionalDetailsChecked,\r\n isMarketingMetricValid: true,\r\n };\r\n }, [currencyPreference, localizeBudget]);\r\n\r\n const load = useCallback(() => {\r\n activity.trace('[PmaxNorthStarSettingWizard] - loadData started in campaign settings step');\r\n const savedBrandExclusions = state.context.wizardData.brandExclusions;\r\n const BrandExclusionsViewModel = savedBrandExclusions\r\n ? { data: savedBrandExclusions, isDirty: false, isValid: true }\r\n : initialBrandExclusionsViewModel;\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = { dynamic: { ...DynamicPermissions }, ...Permissions };\r\n const {\r\n NewCustomerAcquisition: isNewCustomerAcquisitionEnabled,\r\n } = permissions.dynamic;\r\n\r\n\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId), // This is necessary to read ['Budget', 'CampaignConversionGoal/Goals'] from MT as the original model doesn't come with it\r\n locationTargets: readLocationCriterions(cid, aid, campaignId),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n dayTimeCriterions: readDayTimeCriterions(cid, aid, campaignId),\r\n campaignNegativeWebpages: readCampaignNegativeWebpages(cid, aid, campaignId),\r\n brandExclusions: Promise.resolve(BrandExclusionsViewModel),\r\n conversionGoalDetails: loadConversionGoalDetails({ cid, aid }),\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoals: readNewCustomerAcquisitionGoals(cid, aid) }),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n locationTargets,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n campaignNegativeWebpages,\r\n brandExclusions,\r\n newCustomerAcquisitionGoals,\r\n conversionGoalDetails,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: { ...campaign }, // MT sends UserPaused, if we send this back they mark it as active. So we just use Paused from the saved ad model\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n campaignNegativeWebpagesModel: campaignNegativeWebpages ? campaignNegativeWebpages.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n budgetAmount: campaign.Budget.Amount,\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoalsModel: newCustomerAcquisitionGoals ? newCustomerAcquisitionGoals.value : [] }),\r\n });\r\n\r\n activity.trace('[PmaxNorthStarSettingWizard] - loadData succeeded in campaign settings step');\r\n activity.signal('[PmaxNorthStaSettingrWizard] - loadData succeeded in campaign settings step');\r\n\r\n return {\r\n campaign: campaignData.data,\r\n brandExclusions: brandExclusions.data,\r\n conversionGoalDetails,\r\n ...modelToViewModel(campaign),\r\n ...bundleCountriesAndLocationCriterions,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxNorthStaSettingrWizard] loadData failed. Error: ${JSON.stringify(errorData)}`);\r\n setClarityTag({ IsPmaxNorthStarSettingFailure: 'true' });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, aid, campaignId, cid, modelToViewModel, serverContext, state.context.wizardData.brandExclusions]);\r\n\r\n const save = useCallback(({\r\n data,\r\n initialData,\r\n }) => {\r\n const {\r\n campaign: campaignToSave,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n brandExclusions: brandExclusionsToSave,\r\n budgetAmount,\r\n bidStrategy,\r\n cpa,\r\n roas,\r\n isBudgetValid,\r\n isMarketingMetricValid,\r\n } = data;\r\n\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = { dynamic: { ...DynamicPermissions }, ...Permissions };\r\n\r\n if (!isBudgetValid || !isMarketingMetricValid) {\r\n return Promise.reject();\r\n }\r\n\r\n const { campaign: initialCampaign } = initialData;\r\n\r\n const { locationTargets: savedLocationTargets } = campaignToSave;\r\n\r\n const newCampaign = {\r\n ...campaignToSave,\r\n BiddingScheme: {\r\n Type: bidStrategy,\r\n ...(\r\n bidStrategy === MAX_CONVERSIONS.type\r\n ? { TargetCpa: cpa }\r\n : { TargetRoas: roasUiToMt(roas) }\r\n ),\r\n },\r\n Budget: {\r\n Amount: i18n.parseDecimal(budgetAmount),\r\n Type: 'DailyStandard',\r\n },\r\n };\r\n\r\n const savePromises = {\r\n campaign: saveCampaignAndLinkedData({\r\n campaign: { data: newCampaign },\r\n originalCampaign: { data: initialCampaign },\r\n brandExclusions: { data: brandExclusionsToSave },\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n viewModelToBulkModelForDisclaimerAssociation,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateCampaign'),\r\n }),\r\n };\r\n\r\n return Promise.props(savePromises).then(({\r\n campaign: campaignResults,\r\n }) => {\r\n activity.trace('[PmaxNorthStarSettingWizard] - campaign settings updated');\r\n activity.signal('[PmaxNorthStaSettingrWizard] - campaign settings updated');\r\n\r\n const { activity: BudgetBidCampaignImportNotificationActivity } = instrumentation.createScenarioAndActivity({\r\n scenarioName: 'BudgetBidCampaignImportNotification',\r\n activityName: 'PmaxCampaignSettingPage',\r\n });\r\n\r\n showBudgetBidCampaignNotifications({\r\n campaignItemList: [initialCampaign],\r\n oldBudget: initialCampaign.Budget,\r\n newBudget: newCampaign.Budget,\r\n oldBidStrategy: initialCampaign.BiddingScheme,\r\n newBidStrategy: newCampaign.BiddingScheme,\r\n activity: BudgetBidCampaignImportNotificationActivity,\r\n });\r\n\r\n const { campaign, brandExclusions } = campaignResults;\r\n\r\n LogTargetCpaCheckOnSave(i18n, permissions, campaign?.data?.Budget?.Amount, campaign?.data?.BiddingScheme.TargetCpa, activity, 'PmaxNorthStarSettingWizard');\r\n\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: { ...campaign.data, locationTargets: savedLocationTargets }, brandExclusions: brandExclusions.data });\r\n\r\n return {\r\n campaign: { ...campaign.data, locationTargets: savedLocationTargets },\r\n brandExclusions: brandExclusions.data,\r\n bundleLocationCriterions,\r\n bundleCountries,\r\n };\r\n }).catch((errorData) => {\r\n activity.trace('[PmaxNorthStarSettingWizard] - campaign settings update failed');\r\n setClarityTag({ IsPmaxNorthStarSettingFailure: 'true' });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, i18n, scenarioContext, send, serverContext]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Wizard,\r\n LayoutContainer,\r\n Layout,\r\n StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n SaveBlocker,\r\n DefaultTemplate,\r\n CancelWizardDialog,\r\n ConfirmWizardDialog,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { FluentSwitcherContext } from '@bingads-webui-react/fluent-version-switcher';\r\nimport { withTheme } from 'react-jss';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { withSiteMap } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { useConfirmDialogConfigWithLogger } from '@bingads-webui-campaign-react/campaign-settings-wizard-v1-utils';\r\nimport { getNeedConfirming } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\n\r\nimport { STEP_PATHS } from './steps/step-constants';\r\nimport { CampaignSettingStepShell, useCampaignSettingStepRepository } from './steps/campaign-setting';\r\nimport { PerfMaxSettingStepFooter } from './steps';\r\nimport { WizardLogger } from './shared/components/wizard-logger';\r\nimport { PMAX_WIZARD_ID_NAME } from './constants';\r\n\r\nconst StepConfig = [\r\n {\r\n id: STEP_PATHS.CAMPAIGNSETTING,\r\n view: props => ,\r\n repository: useCampaignSettingStepRepository,\r\n },\r\n];\r\n\r\nexport const getStepConfig = permissions => StepConfig.map((step) => {\r\n if (_.get(permissions, ['dynamic', 'ConversionAssociationWarningP2']) && step.id === STEP_PATHS.CAMPAIGNSETTING) {\r\n const mapStep = {\r\n ...step,\r\n machineOptions: {\r\n ...step.machineOptions,\r\n guards: {\r\n needsConfirming: context => getNeedConfirming(permissions, context),\r\n },\r\n },\r\n };\r\n return mapStep;\r\n }\r\n return step;\r\n});\r\n\r\nconst PerfMaxNorthStarSettingWizardImpl = ({\r\n perfMarker,\r\n scope,\r\n permissions,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild('PerfMaxNorthStarWizard')\r\n ), [perfMarker]);\r\n\r\n const routeToNavigateToWhenDone = '/campaign/vnext/assetgroups';\r\n\r\n const { dynamic: { AppsAdsPerfMaxFluentV2, ConversionAssociationWarningP2 } } = permissions;\r\n\r\n const wizardConfig = useMemo(() => ({\r\n id: PMAX_WIZARD_ID_NAME.PMAX_NORTH_STAR_SETTING_WIZARD,\r\n initialStep: STEP_PATHS.CAMPAIGNSETTING,\r\n steps: getStepConfig(permissions),\r\n initialFlowFactors: { flow: STEP_PATHS.CAMPAIGNSETTING },\r\n initialWizardData: {\r\n flow: STEP_PATHS.CAMPAIGNSETTING,\r\n },\r\n getFlow: [STEP_PATHS.CAMPAIGNSETTING],\r\n actions: {\r\n onDone: () => scope.save(routeToNavigateToWhenDone),\r\n onExited: () => scope.save(routeToNavigateToWhenDone),\r\n },\r\n attachStepActivities: false,\r\n }), [permissions, scope]);\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 {ConversionAssociationWarningP2 && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nPerfMaxNorthStarSettingWizardImpl.propTypes = {\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AppsAdsPerfMaxFluentV2: PropTypes.bool,\r\n ConversionAssociationWarningP2: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n siteMap: PropTypes.shape({}).isRequired,\r\n dynamicOptions: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const PerfMaxNorthStarSettingWizard = withSiteMap(withPermissions(withRecommendationContext(withScope(withTheme(PerfMaxNorthStarSettingWizardImpl, undefined, undefined, false, true)))));\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Wizard,\r\n LayoutContainer,\r\n Layout,\r\n StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n SaveBlocker,\r\n DefaultTemplate,\r\n CancelWizardDialog,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { FluentSwitcherContext } from '@bingads-webui-react/fluent-version-switcher';\r\nimport { withTheme } from 'react-jss';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { withSiteMap } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { getNeedConfirming } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\n\r\nimport { STEP_PATHS } from './steps/step-constants';\r\nimport { useAssetGroupSettingStepRepository } from './steps/asset-group-setting';\r\nimport { AssetsStepShell } from './steps/assets';\r\nimport { PerfMaxSettingStepFooter } from './steps';\r\nimport { WizardLogger } from './shared/components/wizard-logger';\r\nimport { PMAX_WIZARD_ID_NAME } from './constants';\r\nimport { ProductsStepShell } from './steps/products';\r\n\r\nconst StepConfig = [\r\n {\r\n id: STEP_PATHS.ASSETGROUPSETTING,\r\n view: props => (\r\n \r\n \r\n \r\n {props?.data?.campaign?.ProviderId && }\r\n
\r\n ),\r\n repository: useAssetGroupSettingStepRepository,\r\n },\r\n];\r\n\r\nexport const getAssetStepConfig = permissions => StepConfig.map((step) => {\r\n if (_.get(permissions, ['dynamic', 'ConversionAssociationWarningP2']) && step.id === STEP_PATHS.ASSETGROUPSETTING) {\r\n const mapStep = {\r\n ...step,\r\n machineOptions: {\r\n ...step.machineOptions,\r\n guards: {\r\n needsConfirming: context => getNeedConfirming(permissions, context),\r\n },\r\n },\r\n };\r\n return mapStep;\r\n }\r\n return step;\r\n});\r\n\r\nconst PerfMaxNorthStarAssetGroupSettingWizardInternal = ({\r\n perfMarker,\r\n scope,\r\n permissions,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild('PerfMaxNorthStarWizardAssetGroupSetting')\r\n ), [perfMarker]);\r\n\r\n const routeToNavigateToWhenDone = '/campaign/vnext/assetgroups';\r\n const wizardName = 'PerfMaxNorthStarWizard-asset-group-setting';\r\n\r\n const { dynamic: { AppsAdsPerfMaxFluentV2 } } = permissions;\r\n\r\n const wizardConfig = useMemo(() => ({\r\n id: PMAX_WIZARD_ID_NAME.PMAX_NORTH_STAR_SETTING_WIZARD,\r\n initialStep: STEP_PATHS.ASSETGROUPSETTING,\r\n steps: getAssetStepConfig(permissions),\r\n initialFlowFactors: { flow: STEP_PATHS.ASSETGROUPSETTING },\r\n initialWizardData: {\r\n flow: STEP_PATHS.ASSETGROUPSETTING,\r\n },\r\n getFlow: [STEP_PATHS.ASSETGROUPSETTING],\r\n actions: {\r\n onDone: () => scope.save(routeToNavigateToWhenDone),\r\n onExited: () => scope.save(routeToNavigateToWhenDone),\r\n },\r\n attachStepActivities: false,\r\n }), [permissions, scope]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nPerfMaxNorthStarAssetGroupSettingWizardInternal.propTypes = {\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AppsAdsPerfMaxFluentV2: PropTypes.bool,\r\n ConversionAssociationWarningP2: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n siteMap: PropTypes.shape({}).isRequired,\r\n dynamicOptions: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const PerfMaxNorthStarAssetGroupSettingWizard = withSiteMap(withPermissions(withRecommendationContext(withScope(withTheme(PerfMaxNorthStarAssetGroupSettingWizardInternal, undefined, undefined, false, true)))));\r\n","import { useCallback, useContext, useMemo } from 'react';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n readCampaignNegativeWebpages,\r\n readDayTimeCriterions,\r\n readLocationCriterions,\r\n readNewCustomerAcquisitionGoals,\r\n // createOrUpdateAssetGroup,\r\n} from '@bingads-webui-campaign-react/perf-max-data';\r\nimport {\r\n loadCampaign,\r\n modelToViewModelForCampaign,\r\n loadBundleCountries,\r\n loadAssetGroupWithVideos,\r\n saveAssetGroupAndLinkedData,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport {\r\n getLoggerWithoutPageInfo,\r\n createVideoRepository,\r\n createImageRepository,\r\n createFolderRepository,\r\n uploadVideoMetadata,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport cacheManager from '@bingads-webui-campaign-legacy/cache-manager/index';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { getODataConfig } from '../../shared/components/odata-config';\r\n\r\nexport const useAssetGroupSettingStepRepository = () => {\r\n const { state } = useWizardService();\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const serverContext = useContext(ServerContext);\r\n const activity = useContext(ActivityContext);\r\n const permissions = useContext(PermissionsContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n const isSearchThemeEnabled = serverContext.DynamicPermissions.SearchThemes;\r\n const isUrlRulesEnabled = serverContext.DynamicPermissions.AssetGroupUrlRules;\r\n const isNewCustomerAcquisitionEnabled = serverContext.DynamicPermissions.NewCustomerAcquisition;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n cid, aid, campaignId, assetGroupId,\r\n } = scope.values;\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const {\r\n PMaxNewAspectRatios: isPMaxNewAspectRatiosEnabled,\r\n PMaxExcludeNewAspectRatios: isPMaxNewAspectRatiosExcluded,\r\n AssetGroupUrlRulesV2: isAssetGroupUrlRulesV2Enabled,\r\n } = serverContext.DynamicPermissions || {};\r\n\r\n const isPMaxNewAspectRatios = isPMaxNewAspectRatiosEnabled && !isPMaxNewAspectRatiosExcluded;\r\n\r\n const versionForLog = getLogVersion(permissions);\r\n\r\n const logger = getLoggerWithoutPageInfo(activity, versionForLog, 'PMaxAdsStep');\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n\r\n const folderRepository = createFolderRepository({\r\n i18n,\r\n logger,\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n\r\n const imageRepository = createImageRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n logger,\r\n i18n,\r\n activity,\r\n });\r\n\r\n const {\r\n isPublishing,\r\n } = state.context.wizardData;\r\n\r\n const uploadVideoIfNeeded = useCallback(({ assetGroup }) => {\r\n const videoPromises = [];\r\n\r\n if (!assetGroup.videos) {\r\n return Promise.resolve(assetGroup);\r\n }\r\n\r\n // check for videos in the assetGroup that dont have an id.\r\n assetGroup.videos.forEach((video) => {\r\n if (!video.id) {\r\n videoPromises.push(uploadVideoMetadata({\r\n videoMetadata: video,\r\n newVideoFromMTObject,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n }).then((newVideo) => {\r\n _.extend(video, newVideo);\r\n }));\r\n }\r\n });\r\n\r\n if (_.isEmpty(videoPromises)) {\r\n return Promise.resolve(assetGroup);\r\n }\r\n\r\n return Promise.all(videoPromises).then(() => assetGroup);\r\n }, [folderRepository, imageRepository, videoRepository]);\r\n\r\n const stepName = useMemo(() => (assetGroupId ? 'settings' : 'creation'), [assetGroupId]);\r\n\r\n const load = useCallback(() => {\r\n activity.trace(`[PmaxNorthStarAssetGroup${stepName}Wizard] - loadData started in asset group ${stepName} step`);\r\n const loadPromises = {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n locationTargets: readLocationCriterions(cid, aid, campaignId),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n dayTimeCriterions: readDayTimeCriterions(cid, aid, campaignId),\r\n campaignNegativeWebpages: readCampaignNegativeWebpages(cid, aid, campaignId),\r\n assetGroup: assetGroupId ? loadAssetGroupWithVideos(cid, aid, campaignId, assetGroupId, i18n, isSearchThemeEnabled, isUrlRulesEnabled, videoRepository) : {},\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoals: readNewCustomerAcquisitionGoals(cid, aid) }),\r\n };\r\n\r\n if (isPMaxNewAspectRatios) {\r\n activity.trace('[PmaxNorthStarAssetGroupSettingWizard] - New Aspect Ratios is enabled');\r\n }\r\n\r\n if (isAssetGroupUrlRulesV2Enabled) {\r\n activity.trace('[PmaxNorthStarAssetGroupSettingWizard] - URL Rules V2 is enabled');\r\n }\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n locationTargets,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n campaignNegativeWebpages,\r\n assetGroup,\r\n newCustomerAcquisitionGoals,\r\n }) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n locationCriterionsModel: locationTargets ? locationTargets.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n campaignNegativeWebpagesModel: campaignNegativeWebpages ? campaignNegativeWebpages.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n ...(isNewCustomerAcquisitionEnabled && { newCustomerAcquisitionGoalsModel: newCustomerAcquisitionGoals ? newCustomerAcquisitionGoals.value : [] }),\r\n });\r\n\r\n const data = {\r\n campaign: campaignData.data,\r\n assetGroup: assetGroup.data,\r\n };\r\n activity.trace(`[PmaxNorthStarAssetGroup${stepName}Wizard] - loadData succeeded in asset group ${stepName} step`);\r\n activity.signal(`[PmaxNorthStarAssetGroup${stepName}Wizard] - loadData succeeded in asset group ${stepName} step`);\r\n\r\n return data;\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxNorthStarAssetGroup${stepName}Wizard] loadData failed in asset group ${stepName} step. Error: ${JSON.stringify(errorData)}`);\r\n\r\n if (assetGroupId) {\r\n setClarityTag({ IsPmaxNorthStarAssetGroupSettingFailure: 'true' });\r\n } else {\r\n setClarityTag({ IsPmaxNorthStarAssetGroupCreationFailure: 'true' });\r\n }\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n error: {\r\n ...errorData,\r\n },\r\n });\r\n });\r\n }, [activity, stepName, cid, aid, campaignId, serverContext, assetGroupId, i18n, isSearchThemeEnabled, isUrlRulesEnabled, videoRepository, isNewCustomerAcquisitionEnabled, isPMaxNewAspectRatios, isAssetGroupUrlRulesV2Enabled]);\r\n\r\n const save = useCallback(({ data, initialData }) => {\r\n if (isPMaxNewAspectRatios) {\r\n activity.trace('[PmaxNorthStarAssetGroupSettingWizard] - New Aspect Ratios is enabled');\r\n }\r\n\r\n if (isAssetGroupUrlRulesV2Enabled) {\r\n activity.trace('[PmaxNorthStarAssetGroupSettingWizard] - URL Rules V2 is enabled');\r\n }\r\n\r\n if (isPublishing) {\r\n return uploadVideoIfNeeded({ assetGroup: data.assetGroup }).then(() => saveAssetGroupAndLinkedData({\r\n assetGroup: { data: data.assetGroup },\r\n originalAssetGroup: { data: initialData.assetGroup },\r\n campaign: data.campaign,\r\n }, {\r\n scenario: scenarioContext.name,\r\n i18n,\r\n activityLogger: scenarioContext.createActivity('updateAssetGroup'),\r\n serverContext,\r\n cid,\r\n aid,\r\n activity,\r\n }).then(() => {\r\n activity.trace('[PmaxNorthStarAssetGroupSettingWizard] - asset group settings updated');\r\n activity.signal('[PmaxNorthStarAssetGroupSettingWizard] - asset group settings updated');\r\n\r\n cacheManager.invalidate('AssetGroup');\r\n }).catch((errorData) => {\r\n activity.trace(`[PmaxNorthStarAssetGroupSettingWizard] - asset group settings update failed. Error: ${JSON.stringify(errorData)}`);\r\n setClarityTag({ IsPmaxNorthStarAssetGroupSettingFailure: 'true' });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({ error: { ...errorData } });\r\n }));\r\n }\r\n\r\n // no update necessary if not publishing.\r\n return Promise.resolve({\r\n assetGroup: data.assetGroup,\r\n });\r\n }, [activity, aid, cid, i18n, isPMaxNewAspectRatios, isAssetGroupUrlRulesV2Enabled, isPublishing, scenarioContext, serverContext, uploadVideoIfNeeded]);\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\n\r\nexport const DuplicateWordAlert = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n )}\r\n dismissible\r\n />\r\n );\r\n};\r\n\r\nexport const TooLongWordAlert = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n )}\r\n dismissible\r\n />\r\n );\r\n};\r\n\r\nexport const MaxSelectionAlert = ({ selectedOptionsLimit }) => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n )}\r\n dismissible\r\n />\r\n\r\n );\r\n};\r\n\r\nMaxSelectionAlert.propTypes = {\r\n selectedOptionsLimit: PropTypes.number.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { SelectedItem } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport { SearchBox } from '@fluentui/react';\r\nimport {\r\n MaxSelectionAlert,\r\n DuplicateWordAlert,\r\n} from './alerts';\r\n\r\n\r\nconst useSearchThemeSelectorStyles = makeStyles({\r\n root: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('10px'),\r\n },\r\n description: {\r\n marginBottom: tokens.spacingVerticalS,\r\n },\r\n tagsList: {\r\n marginBottom: tokens.spacingVerticalXS,\r\n marginTop: 0,\r\n paddingLeft: 0,\r\n display: 'flex',\r\n gridGap: tokens.spacingHorizontalXS,\r\n flexWrap: 'wrap',\r\n },\r\n searchBox: {\r\n flexDirection: 'row',\r\n columnGap: tokens.spacingHorizontalM,\r\n width: '100%',\r\n maxWidth: '600px',\r\n },\r\n alertMes: {\r\n marginTop: '10px',\r\n },\r\n});\r\n\r\nexport const SearchThemeSelectorImpl = ({ onUpdateSearchThemes: onChangeFromProp, searchThemes }) => {\r\n const i18n = useContext(I18nContext);\r\n const styles = useSearchThemeSelectorStyles();\r\n const [selectedOptions, setSelectedOptions] = useState(searchThemes);\r\n const [isLimitReached, setIsLimitReached] = useState(false);\r\n const [isDuplicate, seIsDuplicate] = useState(false);\r\n\r\n const maxOptionsLen = 25;\r\n const maxWordLen = 80;\r\n\r\n const onDeleteItem = useCallback((item) => {\r\n const newSelectedOptions = _.clone(selectedOptions);\r\n const indexSelected = newSelectedOptions.findIndex(option => option.SearchTheme === item.SearchTheme && !option.Status);\r\n const draftItem = newSelectedOptions[indexSelected];\r\n if (draftItem.Id) {\r\n newSelectedOptions[indexSelected].Status = 'Deleted';\r\n } else {\r\n newSelectedOptions.splice(indexSelected, 1);\r\n }\r\n if (_.isFunction(onChangeFromProp)) {\r\n onChangeFromProp(newSelectedOptions);\r\n }\r\n if (isLimitReached) {\r\n setIsLimitReached(false);\r\n }\r\n setSelectedOptions(newSelectedOptions);\r\n }, [selectedOptions, onChangeFromProp, isLimitReached]);\r\n\r\n const [searchValue, updateSearchValue] = useState('');\r\n\r\n return (\r\n
\r\n {i18n.getString(_TL_('Words or phrases that people search for on Bing (up to 25)'))}\r\n\r\n
\r\n {selectedOptions.filter(item => item.Status !== 'Deleted').map((item, index) => (\r\n onDeleteItem(item)}\r\n />\r\n ))}\r\n
\r\n\r\n
\r\n {\r\n const newVal = newValue.replace(/\\/|\\\\/g, '');\r\n const draftSelectedOptions = selectedOptions.filter(item => item.Status !== 'Deleted');\r\n if (!newVal) {\r\n updateSearchValue('');\r\n } else if (draftSelectedOptions.length >= maxOptionsLen) {\r\n setIsLimitReached(true);\r\n } else if (draftSelectedOptions.find(item => item.SearchTheme === newVal)) {\r\n seIsDuplicate(true);\r\n } else {\r\n setIsLimitReached(false);\r\n seIsDuplicate(false);\r\n selectedOptions.push({ SearchTheme: newVal });\r\n\r\n if (_.isFunction(onChangeFromProp)) {\r\n onChangeFromProp(selectedOptions);\r\n }\r\n\r\n updateSearchValue('');\r\n }\r\n }}\r\n onClear={() => {\r\n updateSearchValue('');\r\n seIsDuplicate(false);\r\n setIsLimitReached(false);\r\n }}\r\n onChange={(e, newValue) => {\r\n const newVal = newValue ? newValue.replace(/\\/|\\\\/g, '') : '';\r\n updateSearchValue(newVal);\r\n seIsDuplicate(false);\r\n }}\r\n />\r\n\r\n
\r\n {isLimitReached && }\r\n {isDuplicate && }\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nSearchThemeSelectorImpl.propTypes = {\r\n onUpdateSearchThemes: PropTypes.func,\r\n searchThemes: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nSearchThemeSelectorImpl.defaultProps = {\r\n onUpdateSearchThemes: undefined,\r\n searchThemes: [],\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { SearchThemeSelectorImpl } from './search-theme-selector-section-impl';\r\n\r\nexport const SearchThemeSelector = ({\r\n searchThemes, onUpdateSearchThemes,\r\n}) => (\r\n \r\n);\r\n\r\nSearchThemeSelector.propTypes = {\r\n searchThemes: PropTypes.arrayOf(PropTypes.shape({})),\r\n onUpdateSearchThemes: PropTypes.func.isRequired,\r\n};\r\nSearchThemeSelector.defaultProps = {\r\n searchThemes: [],\r\n};\r\n\r\nexport const ValidationSearchThemeSelectorInternal = ({\r\n searchThemes, updateValidation,\r\n}) => {\r\n const onUpdateSearchThemes = useCallback((newsearchThemes) => {\r\n updateValidation([], { AssetGroupSearchThemes: [...newsearchThemes] });\r\n }, [updateValidation]);\r\n return ;\r\n};\r\nValidationSearchThemeSelectorInternal.propTypes = {\r\n searchThemes: PropTypes.arrayOf(PropTypes.shape({})),\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\nValidationSearchThemeSelectorInternal.defaultProps = {\r\n searchThemes: [],\r\n};\r\nexport const ValidationSearchThemeSelector = withCustomValidation(ValidationSearchThemeSelectorInternal);\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport const useImpulse = (activate) => {\r\n const [isActive, setIsActive] = useState(false);\r\n const [isRestarting, setIsRestarting] = useState(false);\r\n\r\n if (activate) {\r\n if (isActive && !isRestarting) {\r\n setIsRestarting(true);\r\n setIsActive(false);\r\n } else if (!isActive) {\r\n setIsActive(true);\r\n }\r\n }\r\n useEffect(() => {\r\n if (isRestarting && !isActive) {\r\n setIsActive(true);\r\n setIsRestarting(false);\r\n }\r\n }, [isActive, isRestarting]);\r\n\r\n return isActive;\r\n};\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport const useIsMounted = () => {\r\n const isMountedRef = useRef(false);\r\n useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => {\r\n isMountedRef.current = false;\r\n };\r\n }, []);\r\n\r\n return isMountedRef;\r\n};\r\n","import { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getStyles = (theme, palette = {}) => ({\r\n budgetContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n '& .container-budget': {\r\n '& span': {\r\n color: palette.neutralPrimary,\r\n },\r\n '& .form-control-static': {\r\n padding: '9px 0px',\r\n lineHeight: '14px',\r\n minHeight: 'auto',\r\n },\r\n '& .input-group': {\r\n marginLeft: 15,\r\n '& .input-group-addon': {\r\n color: '#323130',\r\n border: 0,\r\n padding: '6px',\r\n background: '#ffffff',\r\n },\r\n },\r\n '& .col-sm-3': {\r\n display: 'table',\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n },\r\n '& .margin-rt-five': {\r\n paddingLeft: 28,\r\n },\r\n\r\n },\r\n '& span.bold': {\r\n fontWeight: 1000,\r\n },\r\n '& .alert-budget-button': {\r\n marginLeft: '10px',\r\n paddingTop: '5px',\r\n '& button': {\r\n color: 'black',\r\n fontSize: '13px',\r\n fontWeight: 500,\r\n borderColor: '#edebe9',\r\n },\r\n },\r\n }\r\n ),\r\n },\r\n});\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { clone } from 'underscore';\r\nimport classnames from 'classnames';\r\nimport Backbone from 'backbone';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport BudgetView from '@bingads-webui-campaign-legacy/budget/view/budget';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { getStyles } from './style';\r\n\r\nexport const LegacyBudget = React.memo(({\r\n id, className, campaignId, budget, onChange, i18n, validationDailyMinBudget, hideBudgetMinRecommendation,\r\n}) => {\r\n const view = useRef();\r\n const viewListener = useMemo(() => clone(Backbone.Events), []);\r\n let container;\r\n\r\n useEffect(() => {\r\n view.current = new BudgetView({\r\n withRealTimeUpdates: true,\r\n model: budget,\r\n campaignId,\r\n isForVNext: true,\r\n hideDailyBudgetOptions: true,\r\n showBudgetMinRecommend: PageContext.Permissions.dynamic.BCCBudgetImprovementEnabled &&\r\n campaignId !== undefined &&\r\n !hideBudgetMinRecommendation,\r\n currencySymbol: i18n.getCurrencySymbol(PageContext.AccountCurrencyCode),\r\n minimumBudget: budget ? budget.Amount * 0.5 : undefined,\r\n validationDailyMinBudget,\r\n });\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n viewListener.listenTo(view.current, 'change', onChange);\r\n\r\n return () => viewListener.stopListening(view.current);\r\n }, [onChange, viewListener]);\r\n\r\n useEffect(() => {\r\n view.current.update(budget);\r\n }, [budget]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n \r\n
{ container = ref; }} />\r\n
\r\n );\r\n});\r\n\r\nLegacyBudget.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string,\r\n campaignId: PropTypes.string,\r\n budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n }),\r\n onChange: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({ getCurrencySymbol: PropTypes.func.isRequired }).isRequired,\r\n validationDailyMinBudget: PropTypes.number,\r\n hideBudgetMinRecommendation: PropTypes.bool,\r\n};\r\n\r\nLegacyBudget.defaultProps = {\r\n id: undefined,\r\n className: undefined,\r\n budget: undefined,\r\n campaignId: undefined,\r\n validationDailyMinBudget: undefined,\r\n hideBudgetMinRecommendation: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useState, useEffect, useMemo } from 'react';\r\nimport { Text } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { LegacyBudget } from '@bingads-webui-campaign-react/legacy-budget';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { BudgetSuggestionDialog, useBudgetSuggestionRepository, MODE } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\nimport { CampaignTypes } from '@bingads-webui-campaign-react/constants';\r\n// eslint-disable-next-line\r\nimport _bingads_webui_static_legacy_page_context from '@bingads-webui-static-legacy/page-context';\r\n// eslint-disable-next-line\r\nconst { BudgetRange } = _bingads_webui_static_legacy_page_context;\r\n\r\nconst LegacyBudgetWithCustomValidation = ({\r\n campaignId, showBudgetSuggestion, isCampaignSetting, currency, validationProps, updateValidation, campaign, isPremiumStreaming, ...restProps\r\n}) => {\r\n const { data } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { DailyRange } = BudgetRange || {};\r\n\r\n const budgetSuggestion = useMemo(() => ({\r\n Currency: currency,\r\n GlobalMaximumBudget: { DailyBudget: DailyRange.CeilingValue ? DailyRange.CeilingValue : 3000000 },\r\n GlobalMinimumBudget: { DailyBudget: DailyRange.FloorValue ? DailyRange.FloorValue : 0.05 },\r\n }), [currency, DailyRange.CeilingValue, DailyRange.FloorValue]);\r\n\r\n const onChange = useCallback((newData, newIsValid) => {\r\n updateValidation(newIsValid ? [] : [i18n.getString(_TL_('Legacy Budget has validation errors'))], { Budget: newData });\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyBudgetChange - ${JSON.stringify(newData.Amount)} - isValid: ${newIsValid}}`);\r\n }\r\n }, [i18n, updateValidation, activity]);\r\n\r\n const [budgetSuggestionData, setBudgetSuggestionData] = useState(null);\r\n const {\r\n loadBudget,\r\n } = useBudgetSuggestionRepository({\r\n campaignId,\r\n mode: MODE.EDITING,\r\n campaignType: CampaignTypes.PerformanceMax,\r\n currency,\r\n });\r\n\r\n\r\n useEffect(() => {\r\n if (showBudgetSuggestion && isCampaignSetting) {\r\n loadBudget({ campaign: {}, assetGroup: {} }).then((datas) => {\r\n setBudgetSuggestionData(datas);\r\n }).finally(() => {\r\n });\r\n }\r\n }, [isCampaignSetting, loadBudget, showBudgetSuggestion]);\r\n\r\n return (\r\n
\r\n
\r\n {i18n.getString(_TL_('Daily budget'))}\r\n \r\n
\r\n \r\n\r\n {/* will check Delivery Status in campaign when MT added */}\r\n {/* {showBudgetSuggestion && (data.DeliveryStatus === 'BudgetSuggestions' || 'BudgetSuggestions' in data.DeliveryStatusDetails) && isCampaignSetting && */}\r\n {showBudgetSuggestion &&\r\n isCampaignSetting &&\r\n !_.isEmpty(budgetSuggestionData) &&\r\n \r\n }\r\n
\r\n\r\n );\r\n};\r\n\r\nLegacyBudgetWithCustomValidation.propTypes = {\r\n campaignId: PropTypes.string.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n }),\r\n DeliveryStatus: PropTypes.string,\r\n DeliveryStatusDetails: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n showBudgetSuggestion: PropTypes.bool,\r\n isCampaignSetting: PropTypes.bool,\r\n isPremiumStreaming: PropTypes.bool,\r\n currency: PropTypes.string,\r\n campaign: PropTypes.shape({\r\n data: PropTypes.shape({\r\n }),\r\n }),\r\n};\r\n\r\nLegacyBudgetWithCustomValidation.defaultProps = {\r\n showBudgetSuggestion: false,\r\n isCampaignSetting: false,\r\n isPremiumStreaming: false,\r\n currency: 'USD',\r\n campaign: {\r\n data: {},\r\n },\r\n};\r\n\r\nexport const ValidatedLegacyBudget = withCustomValidation(LegacyBudgetWithCustomValidation);\r\n\r\n","import { isEqual } from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text } from '@fluentui/react';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useP$DaterangeDefault, ConversionGoalKeyToStringMapping } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n ConversionGoalSelector,\r\n} from '@bingads-webui-campaign-react/goal-selector';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { paginationStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nexport const getConversionGoalStyles = (_, theme) => ({\r\n ConversionGoalSelectorContainer: {\r\n ...paginationStyle(theme),\r\n '& .list-selector-container': {\r\n width: 468,\r\n },\r\n },\r\n});\r\n\r\nconst ConversionGoalsWithCustomValidation = ({ validationProps, updateValidation, ...restProps }) => {\r\n const { data: conversionGoalsData } = validationProps;\r\n const { conversionGoals = {} } = conversionGoalsData;\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getConversionGoalStyles);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(\r\n i18n,\r\n [ConversionGoalKeyToStringMapping]\r\n ), [i18n]);\r\n const $dataRange = useP$DaterangeDefault();\r\n\r\n const onChange = useCallback((changedData) => {\r\n const newData = {\r\n conversionGoals: {\r\n ...conversionGoalsData.conversionGoals,\r\n ...changedData,\r\n },\r\n };\r\n\r\n updateValidation([], isEqual(newData, conversionGoalsData) ? conversionGoalsData : newData);\r\n\r\n if (activity) {\r\n activity.signal(`onConversionGoalsChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [conversionGoalsData, updateValidation, activity]);\r\n const campaignConversionGoal = useMemo(() => ({\r\n Goals: conversionGoals.originalConversionGoals,\r\n }), [conversionGoals.originalConversionGoals]);\r\n\r\n return (conversionGoals && conversionGoals.goalScopeSelection ?\r\n
\r\n
\r\n {i18n.getString(_TL_('Select which conversions are included in the Conversion columns for this campaign and used for optimizing your bid strategy. Updating this setting will override the “Include in conversions” setting made at the account level.'))}\r\n \r\n
\r\n \r\n
: null\r\n );\r\n};\r\n\r\nConversionGoalsWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n conversionGoals: PropTypes.shape({\r\n goalSelection: PropTypes.arrayOf(PropTypes.shape({})),\r\n goalScopeSelection: PropTypes.string,\r\n originalConversionGoals: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n showTrackingStatusIcon: PropTypes.bool, // included in restProps\r\n};\r\n\r\nConversionGoalsWithCustomValidation.defaultProps = {\r\n showTrackingStatusIcon: false,\r\n};\r\n\r\nexport const ValidatedConversionGoals = withCustomValidation(ConversionGoalsWithCustomValidation);\r\n","import { isEqual } from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { GoalSelector } from '@bingads-webui-campaign-react/goal-selector-v3';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getConversionGoalStyles } from './validated-conversion-goals';\r\n\r\nconst ConversionGoalsWithCustomValidation = ({\r\n validationProps, updateValidation, cid, aid, ...restProps\r\n}) => {\r\n const { data: conversionGoalsData } = validationProps;\r\n const { conversionGoals = {} } = conversionGoalsData;\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getConversionGoalStyles);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((changedData) => {\r\n const newData = {\r\n conversionGoals: {\r\n ...conversionGoalsData.conversionGoals,\r\n ...changedData,\r\n },\r\n };\r\n\r\n updateValidation([], isEqual(newData, conversionGoalsData) ? conversionGoalsData : newData);\r\n\r\n if (activity) {\r\n activity.signal(`onConversionGoalsChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [conversionGoalsData, updateValidation, activity]);\r\n\r\n const campaignConversionGoal = useMemo(() => ({\r\n Goals: conversionGoals.originalConversionGoals,\r\n }), [conversionGoals.originalConversionGoals]);\r\n\r\n return (conversionGoals && conversionGoals.goalScopeSelection ?\r\n
\r\n \r\n
: null\r\n );\r\n};\r\n\r\nConversionGoalsWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n conversionGoals: PropTypes.shape({\r\n goalSelection: PropTypes.arrayOf(PropTypes.shape({})),\r\n goalScopeSelection: PropTypes.string,\r\n originalConversionGoals: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n isCreationWorkflow: PropTypes.bool,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n};\r\n\r\nConversionGoalsWithCustomValidation.defaultProps = {\r\n isCreationWorkflow: false,\r\n};\r\n\r\nexport const ValidatedConversionGoalsScopeSelector = withCustomValidation(ConversionGoalsWithCustomValidation);\r\n","import { withValidation, withError } from '@bingads-webui-react/validation';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const ValidatedTextField = withError(withValidation(TextField));\r\n","import { identity, pluck } from 'underscore';\r\nimport React, { useCallback, useMemo, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton, ChoiceGroup, Text, Stack } from '@fluentui/react';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getRoutePathById, withCampaignSiteMap } from '@bingads-webui-react/with-site-map';\r\nimport { PanelSelector, useTreeViewPanelSelector, fillDataToBulkAddedItem, useAPIsOfListingGroup } from '@bingads-webui-campaign-react/listing-groups-page';\r\nimport { SelectedItem } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport { withStoreFromProviderId } from '@bingads-webui-campaign-react/with-store-details';\r\nimport { useDateRange } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { siteMapPropType } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nexport const getStyles = (_, { palette = {} }) => ({\r\n productOptions: {\r\n '& label': {\r\n padding: 0,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n buttonContainer: {\r\n marginTop: 10,\r\n '& .iconba': {\r\n fontSize: '16px',\r\n color: palette.themePrimary,\r\n marginRight: '8px',\r\n paddingBottom: '5px', // align to link\r\n },\r\n },\r\n merchantCenterAccountContainer: {\r\n marginBottom: 12,\r\n },\r\n productFilterEditContainer: {\r\n marginBottom: 12,\r\n },\r\n});\r\n\r\nconst stackContainerToken = {\r\n childrenGap: 8,\r\n};\r\n\r\nconst ListingGroupsWithCustomValidation = (props) => {\r\n const {\r\n scope, campaignId, i18n, updateValidation, campaignSettings, siteMap, listingGroup, storeDetails, assetGroupId, onClickNavigateToListingGroups,\r\n } = props;\r\n const classes = useDefaultStyles(getStyles);\r\n const {\r\n isTreeViewSelectorOpen,\r\n setIsTreeViewSelectorOpen,\r\n treeViewSelectorColumns,\r\n treeViewSelectorDimensions,\r\n treeViewSelectorInitialSelectedItems,\r\n treeViewSelectorItems,\r\n treeViewSelectorHeaderText,\r\n onTreeViewCancel,\r\n onTreeViewSelectedDimensionChangeWithoutStatistics,\r\n isTreeViewShimmerEnabled,\r\n onFilterProduct,\r\n } = useTreeViewPanelSelector({\r\n i18n,\r\n setAllRowRawData: identity,\r\n scope,\r\n currentCampaign: {\r\n Id: campaignId,\r\n CampaignSettings: [campaignSettings],\r\n },\r\n refreshGridData: identity,\r\n getArguemntsOfUpdateGridDataByCurrentState: identity,\r\n });\r\n const { listingGroupGridData } = useAPIsOfListingGroup();\r\n const options = useMemo(() => [\r\n {\r\n key: 'all-products',\r\n text: i18n.getString(_TL_('All products')),\r\n },\r\n {\r\n key: 'filter-products',\r\n text: (\r\n
\r\n {i18n.getString(_TL_('Filtered products'))}\r\n \r\n
\r\n ),\r\n },\r\n ], [i18n]);\r\n const isEditing = useMemo(() => !!scope.values.assetGroupId || assetGroupId, [assetGroupId, scope.values.assetGroupId]);\r\n const [selectedOption, setSelectedOption] = useState(listingGroup && listingGroup.items && listingGroup.items.length > 0 ? options[1] : options[0]);\r\n const [selectedProducts, setSelectedProducts] = useState(listingGroup && listingGroup.items);\r\n const [selectedOperand, setSelectedOperand] = useState(listingGroup && listingGroup.operand);\r\n const [productFilter, setProductFilter] = useState(null);\r\n\r\n const onChange = useCallback((newData, selectedDimension) => {\r\n newData.forEach((selectedItem) => {\r\n fillDataToBulkAddedItem(selectedItem);\r\n });\r\n setSelectedProducts(newData);\r\n setSelectedOperand(selectedDimension);\r\n setIsTreeViewSelectorOpen(false);\r\n updateValidation([], {\r\n listingGroup: {\r\n items: newData,\r\n operand: selectedDimension.data.operand,\r\n },\r\n });\r\n }, [setIsTreeViewSelectorOpen, updateValidation]);\r\n const onOpenPanel = useCallback(() => {\r\n onFilterProduct();\r\n }, [onFilterProduct]);\r\n const onDeleteProduct = useCallback((index) => {\r\n selectedProducts.splice(index, 1);\r\n setSelectedProducts([...selectedProducts]);\r\n updateValidation([], {\r\n listingGroup: {\r\n items: [...selectedProducts],\r\n operand: selectedOperand.data.operand,\r\n },\r\n });\r\n }, [selectedOperand, selectedProducts, updateValidation]);\r\n const navigateToListingGroupPage = useCallback(() => {\r\n if (onClickNavigateToListingGroups) {\r\n onClickNavigateToListingGroups();\r\n } else {\r\n scope.save(getRoutePathById(siteMap, 'listing-groups'));\r\n }\r\n }, [onClickNavigateToListingGroups, scope, siteMap]);\r\n const onChangeOptions = useCallback((_, option) => {\r\n setSelectedOption(option);\r\n\r\n const hasSelectedProducts = selectedProducts && selectedProducts.length > 0;\r\n const hasSelectedOperand = selectedOperand && selectedOperand.data && selectedOperand.data.operand;\r\n\r\n const updatedListingGroup = option.key === 'all-products' || !hasSelectedProducts || !hasSelectedOperand ?\r\n null : { items: selectedProducts, operand: selectedOperand.data.operand };\r\n\r\n updateValidation([], { listingGroup: updatedListingGroup });\r\n }, [selectedOperand, selectedProducts, updateValidation]);\r\n\r\n const dataRange = useDateRange();\r\n\r\n useEffect(() => {\r\n if (isEditing) {\r\n listingGroupGridData({\r\n queryOptions: {\r\n $top: 2,\r\n },\r\n entityPath: {\r\n accountId: scope.values.aid,\r\n campaignId: scope.values.campaignId || campaignId,\r\n customerId: scope.values.cid,\r\n assetGroupId: scope.values.assetGroupId || assetGroupId,\r\n },\r\n payload: {\r\n gridDataParameters: {\r\n DateRange: {\r\n StartDate: dataRange.StartDate,\r\n EndDate: dataRange.EndDate,\r\n },\r\n },\r\n },\r\n }).then(({ value }) => {\r\n if (value.length === 1) {\r\n setProductFilter(i18n.getString('ProductsGrid_Column_All'));\r\n updateValidation([], {\r\n productFilter: i18n.getString('ProductsGrid_Column_All'),\r\n });\r\n } else if (value.length === 2) {\r\n setProductFilter(i18n.getString(`ProductsGrid_Column_${value[1].Condition.Operand}`));\r\n updateValidation([], {\r\n productFilter: i18n.getString(`ProductsGrid_Column_${value[1].Condition.Operand}`),\r\n });\r\n }\r\n });\r\n }\r\n // Remove the functions from dependency to reduce duplicate calls\r\n }, [scope.values.cid, scope.values.aid, scope.values.uid, dataRange.StartDate, dataRange.EndDate, scope.values.campaignId, scope.values.assetGroupId, isEditing, campaignId, assetGroupId]);\r\n\r\n return (\r\n
\r\n {storeDetails && storeDetails.text &&\r\n
\r\n \r\n {i18n.getString(_TL_('Merchant Center account: '))}\r\n \r\n \r\n {storeDetails.text}\r\n \r\n
\r\n }\r\n {isEditing && productFilter &&\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Products:'))}\r\n \r\n \r\n {`${i18n.getString(_TL_(' Filtered by '))}${productFilter}`}\r\n \r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Go to listing groups'))}\r\n \r\n
\r\n
\r\n }\r\n {\r\n !isEditing &&\r\n \r\n }\r\n {!isEditing && selectedOption.key === 'filter-products' &&\r\n
\r\n
\r\n \r\n {pluck(selectedProducts, 'primary').map((item, index) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n \r\n {i18n.getString(_TL_('Add filter'))}\r\n \r\n
\r\n
\r\n }\r\n {isTreeViewSelectorOpen && []}// TO DO SIMXU update to real error handling\r\n isOpen={isTreeViewSelectorOpen}\r\n columns={treeViewSelectorColumns}\r\n dimensions={treeViewSelectorDimensions}\r\n headerText={treeViewSelectorHeaderText}\r\n initialSelectedItems={treeViewSelectorInitialSelectedItems}\r\n items={treeViewSelectorItems}\r\n onCancel={onTreeViewCancel}\r\n onSave={onChange}\r\n onSelectedDimensionChange={onTreeViewSelectedDimensionChangeWithoutStatistics}\r\n enableShimmer={isTreeViewShimmerEnabled}\r\n keyOfItem={item => item.key}\r\n isBulkAddEnabledForDimension={d => d.data.isBulkAddEnabled}\r\n />}\r\n
\r\n );\r\n};\r\n\r\nListingGroupsWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n assetGroupId: PropTypes.number,\r\n }).isRequired,\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n campaignSettings: PropTypes.arrayOf(PropTypes.shape({})),\r\n siteMap: siteMapPropType.isRequired,\r\n listingGroup: PropTypes.shape({\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n key: PropTypes.string,\r\n })),\r\n operand: PropTypes.string,\r\n }),\r\n storeDetails: PropTypes.shape({\r\n text: PropTypes.string,\r\n }),\r\n assetGroupId: PropTypes.number,\r\n onClickNavigateToListingGroups: PropTypes.func,\r\n};\r\n\r\nListingGroupsWithCustomValidation.defaultProps = {\r\n campaignSettings: [],\r\n listingGroup: {},\r\n storeDetails: undefined,\r\n assetGroupId: undefined,\r\n onClickNavigateToListingGroups: undefined,\r\n};\r\n\r\nexport const ValidatedListingGroups = withCampaignSiteMap(withScope(withCustomValidation(withStoreFromProviderId(ListingGroupsWithCustomValidation))));\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n LocationTargetSetting,\r\n isLocationValid,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nconst LocationTargetSettingWithCustomValidation = ({\r\n validationProps, updateValidation, skipValidation, allowBidAdjustment, dealInfo, ...restProps\r\n}) => {\r\n const { data: locationTargets } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((newData) => {\r\n let errors = [];\r\n\r\n if (!skipValidation) {\r\n errors = isLocationValid(newData) ? [] : [i18n.getString(_TL_('Location target has validation errors'))];\r\n }\r\n\r\n const isForDeal = _.get(dealInfo, 'isForDeal', false);\r\n if (isForDeal) {\r\n errors = isLocationValid(newData, 'placeholder', dealInfo) ? [] : [i18n.getString(_TL_('Location target has validation errors.'))];\r\n }\r\n\r\n updateValidation(errors, { locationTargets: newData });\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLocationTargettingChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [skipValidation, updateValidation, activity, i18n, dealInfo]);\r\n\r\n return (locationTargets ?\r\n :
\r\n );\r\n};\r\n\r\nLocationTargetSettingWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n skipValidation: PropTypes.bool,\r\n allowBidAdjustment: PropTypes.bool,\r\n dealInfo: PropTypes.shape({\r\n isForDeal: PropTypes.bool,\r\n dealCountryCode: PropTypes.string,\r\n dealSupportedLocationType: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n};\r\n\r\nLocationTargetSettingWithCustomValidation.defaultProps = {\r\n skipValidation: true,\r\n allowBidAdjustment: false,\r\n dealInfo: {},\r\n};\r\n\r\nexport const ValidatedLocationTargetSetting = withCustomValidation(LocationTargetSettingWithCustomValidation);\r\n","import React, { useContext, } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n anyComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getLocationTargetingStyles } from '@bingads-webui-campaign-react/location-targeting';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { SectionShimmer, getLocationTargetTitleDetails, ERROR_ENTITY } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nimport { LocationImg } from './media';\r\nimport { ValidatedLocationTargetSetting } from './validated-location-target-setting';\r\n\r\nconst getTargetingStyles = () => ({\r\n container: {\r\n maxWidth: 680,\r\n '& .title-item': {\r\n width: 'unset !important',\r\n },\r\n '& .specific-location-targets-editor': {\r\n marginLeft: '-25px !important',\r\n },\r\n '& .intent-target ul': {\r\n paddingLeft: '20px',\r\n },\r\n },\r\n header: {\r\n marginBottom: 20,\r\n },\r\n ...getLocationTargetingStyles(),\r\n});\r\n\r\nconst campaignLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\n\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLocationTargetSetting,\r\n { filter: campaignLocationCriterions }\r\n));\r\n\r\nexport const LocationTargetingSettingPanel = (props) => {\r\n const { scope } = useContext(ScopeContext) || {};\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getTargetingStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n options,\r\n expand,\r\n data = {},\r\n topicKey,\r\n ...rest\r\n } = props;\r\n\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: key,\r\n }}\r\n {...rest}\r\n >\r\n {\r\n isLoading ?\r\n :\r\n
\r\n \r\n
\r\n }\r\n \r\n );\r\n};\r\n\r\nLocationTargetingSettingPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n options: PropTypes.shape({\r\n bundleCountries: PropTypes.arrayOf(PropTypes.shape({})),\r\n bundleLocationCriterions: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nLocationTargetingSettingPanel.defaultProps = {\r\n isLoading: false,\r\n options: {},\r\n data: {},\r\n topicKey: null,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { AudienceWizard } from '@bingads-webui-campaign-react/audience-signals';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedFixedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { AudienceSignalShimmer, withShimmer } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { AudienceImg } from './media';\r\n\r\nconst AudienceWizardWithShimmer = withShimmer(AudienceWizard, AudienceSignalShimmer);\r\n\r\nexport const AudienceSignalPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n DynamicPermissions,\r\n Permissions,\r\n } = serverContext;\r\n\r\n const { aid, cid } = scope.values;\r\n\r\n const permissions = useMemo(\r\n () => ({ dynamic: { ...DynamicPermissions }, ...Permissions }),\r\n [DynamicPermissions, Permissions]\r\n );\r\n\r\n const isReadOnlyUser = useMemo(\r\n () => permissions.IsReadOnlyUser || serverContext.CurrentAccount.Status === 32, // 32 is InActive\r\n [permissions.IsReadOnlyUser, serverContext.CurrentAccount.Status]\r\n );\r\n\r\n const {\r\n key,\r\n isLoading,\r\n options,\r\n expand,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n AudienceGroup,\r\n OriginalAudienceGroup,\r\n } = data;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: key,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nAudienceSignalPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n options: PropTypes.shape({\r\n wizardPerfMarker: PropTypes.shape({}),\r\n }),\r\n expand: PropTypes.func,\r\n wizardPerfMarker: PropTypes.shape({}).isRequired,\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nAudienceSignalPanel.defaultProps = {\r\n isLoading: false,\r\n options: {},\r\n data: {},\r\n expand: () => {},\r\n};\r\n","import _, { compose, partial } from 'underscore';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { propertyIs, StandardControlAdapter } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidatedUrlOptionsParameters } from '@bingads-webui-campaign-react/url-options';\r\n\r\nconst campaignTrackingUrlTemplate = propertyIs('TrackingUrlTemplate');\r\nconst campaignFinalUrlSuffix = propertyIs('FinalUrlSuffix');\r\nconst campaignUrlCustomParameters = propertyIs('UrlCustomParameters');\r\nconst trackingUrlTemplateControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignTrackingUrlTemplate, Adapter: StandardControlAdapter() })\r\n);\r\nconst finalUrlSuffixControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignFinalUrlSuffix, Adapter: StandardControlAdapter() })\r\n);\r\nconst urlCustomParametersControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignUrlCustomParameters, Adapter: StandardControlAdapter({ functionsToInject: ['onCustomParameterKeyChange', 'onCustomParameterValueChange', 'onRemoveUrlParameter', 'onAddUrlParameter'] }) })\r\n);\r\n\r\nexport const ServerValidatedUrlOptionsParameters = withControlErrorHandling(withProps({\r\n trackingUrlTemplateControlsWrapper,\r\n finalUrlSuffixControlsWrapper,\r\n urlCustomParametersControlsWrapper,\r\n}, ValidatedUrlOptionsParameters));\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { noop } from 'underscore';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedVideoExperience, getODataConfig } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport {\r\n ImageListSummaryCardDetails,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\n\r\nimport { PANEL_KEYS } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nconst DisplayPlusMaxVideoCount = 5;\r\n\r\nexport const VideoPanel = ({\r\n perfMarker,\r\n mergedI18n,\r\n videos,\r\n setSelectedVideoId = noop,\r\n selectedVideoId,\r\n icon,\r\n allAssetsExpand,\r\n isVideoRequired,\r\n topicKey,\r\n skipQualityValidation,\r\n loadClipchampPlayer,\r\n ...rest\r\n}) => {\r\n const permissions = useContext(PermissionsContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const { scope } = useContext(ScopeContext);\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const videoTypesWithOrder = useMemo(() => (['VideoMedia16X9']), []);\r\n\r\n const videosContainer = useMemo(() => {\r\n const videoAd = { videos: videos || [] };\r\n\r\n return (\r\n \r\n );\r\n }, [videos, mergedI18n, perfMarker, permissions, videoTypesWithOrder, selectedVideoId, oDataConfig, cid, aid, setSelectedVideoId, isVideoRequired, skipQualityValidation, loadClipchampPlayer]);\r\n\r\n return (\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: PANEL_KEYS.VIDEOS,\r\n }}\r\n {...rest}\r\n >\r\n {i18n.getString(_TL_('You can add up to {{limit}} videos to your ad.'), { limit: DisplayPlusMaxVideoCount })}\r\n
\r\n {videosContainer}\r\n
\r\n \r\n );\r\n};\r\n\r\nVideoPanel.propTypes = {\r\n perfMarker: PropTypes.string.isRequired,\r\n mergedI18n: PropTypes.shape({}).isRequired,\r\n videos: PropTypes.shape([]).isRequired,\r\n setSelectedVideoId: PropTypes.func,\r\n selectedVideoId: PropTypes.number.isRequired,\r\n skipQualityValidation: PropTypes.bool,\r\n icon: PropTypes.node.isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n isVideoRequired: PropTypes.bool,\r\n topicKey: PropTypes.string,\r\n loadClipchampPlayer: PropTypes.func,\r\n};\r\n\r\nVideoPanel.defaultProps = {\r\n isVideoRequired: false,\r\n topicKey: null,\r\n skipQualityValidation: false,\r\n loadClipchampPlayer: () => {},\r\n};\r\n","import React, { useContext, useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { Switch, makeStyles, Label, Field, Radio, RadioGroup } from '@fluentui/react-components';\r\nimport { ValidatedCollapseCard } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody, FormCardHeader, AccordionButton, FormCardError, Spacer } from '@bingads-webui-fluent-component/form-cards';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withValidation, AdapterFactory } from '@bingads-webui-react/validation';\r\n\r\nconst useClasses = makeStyles({\r\n root: {\r\n marginBottom: '8px',\r\n },\r\n switch: {\r\n alignItems: 'center',\r\n '& input[type=\"checkbox\"]': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n});\r\n\r\nconst CustomAdapter = AdapterFactory({\r\n valueToInject: 'checked',\r\n convertEventToValue: event => event.target.checked,\r\n});\r\n\r\nconst CustomRadioGroupAdapter = AdapterFactory({\r\n valueToInject: 'value',\r\n convertEventToValue: event => event.target.value,\r\n});\r\n\r\nconst SwitchInternal = ({\r\n checked,\r\n onChange,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useClasses();\r\n\r\n const onChangeInternal = useCallback((e) => {\r\n e.stopPropagation();\r\n onChange(e);\r\n }, [onChange]);\r\n\r\n return (\r\n {i18n.getString(_TL_('Enable Showroom ads'))} }\r\n className={classes.switch}\r\n />\r\n );\r\n};\r\n\r\nSwitchInternal.propTypes = {\r\n checked: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nconst ValidatedSwitch = withValidation(SwitchInternal, CustomAdapter);\r\n\r\n\r\nconst RadioGroupInternal = ({\r\n value,\r\n onChange,\r\n children,\r\n disabled,\r\n}) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nRadioGroupInternal.propTypes = {\r\n value: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n children: PropTypes.node.isRequired,\r\n disabled: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst ValidatedRadioGroup = withValidation(RadioGroupInternal, CustomRadioGroupAdapter);\r\n\r\nexport const BrandShowroomPanel = ({\r\n switchValidationProps,\r\n radioValidationProps,\r\n isEnabled,\r\n ...cardProps\r\n}) => {\r\n const classes = useClasses();\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {i18n.getString(_TL_('Where do you want your ads to serve?'))} } >\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\nBrandShowroomPanel.propTypes = {\r\n switchValidationProps: PropTypes.shape({\r\n data: PropTypes.bool,\r\n }).isRequired,\r\n radioValidationProps: PropTypes.shape({}).isRequired,\r\n isEnabled: PropTypes.bool.isRequired,\r\n};\r\n","export const WizardEvents = {\r\n STEP_LOADING: 'STEP_LOADING',\r\n STEP_SAVING: 'STEP_SAVING',\r\n STEP_DONE_LOADING: 'STEP_DONE_LOADING',\r\n STEP_DONE_SAVING: 'STEP_DONE_SAVING',\r\n STEP_DONE_CANCELING: 'STEP_DONE_CANCELING',\r\n STEP_FAILED_LOADING: 'STEP_FAILED_LOADING',\r\n STEP_ABORTED_SAVING: 'STEP_ABORTED_SAVING',\r\n STEP_ABORTED_CANCELING: 'STEP_ABORTED_CANCELING',\r\n STEP_STOPPED: 'STEP_STOPPED',\r\n\r\n\r\n NAVIGATE_BACK: 'NAVIGATE_BACK',\r\n NAVIGATE_NEXT: 'NAVIGATE_NEXT',\r\n CANCEL: 'CANCEL',\r\n EXIT: 'EXIT',\r\n};\r\n","export const StepEvents = {\r\n SAVE: 'SAVE',\r\n DONE_SAVING: 'DONE_SAVING',\r\n FAILED_SAVING: 'DAILED_SAVING',\r\n DONE_LOADING: 'DONE_LOADING',\r\n FAILED_LOADING: 'FAILED_LOADING',\r\n CANCEL: 'CANCEL',\r\n ACTIVATE: 'ACTIVATE',\r\n DEACTIVATE: 'DEACTIVATE',\r\n UPDATE_VALIDATION: 'UPDATE_VALIDATION',\r\n STOP: 'STOP',\r\n DONE_STOPPING: 'DONE_STOPPING',\r\n\r\n OVERRIDE_ACTIONS: 'OVERRIDE_ACTIONS',\r\n OVERRIDE_GUARDS: 'OVERRIDE_GUARDS',\r\n};\r\n","import { noop } from 'underscore';\r\n\r\nconst isDebugLoggingEnabled = true;\r\n\r\nconst jsonArgsSerializer = (...args) => args.map(JSON.stringify);\r\nconst identityArgsSerializer = (...args) => args;\r\n\r\nconst logF = argsSerializer => (isDebugLoggingEnabled ?\r\n (msg, ...args) => {\r\n // eslint-disable-next-line\r\n console.log(`[DWD] ${msg}`, ...(argsSerializer(...args)));\r\n } :\r\n noop\r\n);\r\n\r\nexport const log = logF(identityArgsSerializer);\r\nexport const logJson = logF(jsonArgsSerializer);\r\n\r\nexport const logWrapper = (tag, func, toJson) => {\r\n const logg = toJson ? logJson : log;\r\n\r\n return (...args) => {\r\n logg(`${tag}.ENTER: args=_`, ...args);\r\n let ret;\r\n try {\r\n ret = func(...args);\r\n return ret;\r\n } finally {\r\n // logg(`${tag}.EXIT: ret=_`, ret);\r\n }\r\n };\r\n};\r\n\r\nexport const logAction = (msg, ...args) =>\r\n (context, event) =>\r\n log(`${(context && context.id) || 'UNKNOWN'}: ${msg}`, ...args, context, event);\r\n\r\nexport const stateLoggingListener = (state) => {\r\n // subscribes to state changes\r\n log(`${state && state.machine && state.machine.id}: state=_`, state);\r\n};\r\n","import { isFunction, isNumber, noop } from 'underscore';\r\nimport { createMachine, assign, spawn, send } from 'xstate';\r\nimport { logAction } from './debug';\r\nimport { StepEvents } from './step-events';\r\nimport { WizardEvents } from './wizard-events';\r\n\r\nconst WizardStates = {\r\n INIT: 'INIT',\r\n STEP_ACTIVE: 'STEP_ACTIVE',\r\n STEP_LOADING: 'STEP_LOADING',\r\n STEP_SAVING: 'STEP_SAVING',\r\n STEP_FAILED: 'STEP_FAILED',\r\n STEP_CANCELING: 'STEP_CANCELING',\r\n DONE: 'DONE',\r\n FIN: 'FIN',\r\n};\r\n\r\n// Public state selectors\r\nexport const stepListSelector = state => state.context.stepList;\r\nexport const stepIndexSelector = state => state.context.stepIndex;\r\nexport const stepServicesCacheSelector = state => state.context.stepServicesCache;\r\nexport const isBusySelector = state => state.matches(WizardStates.STEP_LOADING) || state.matches(WizardStates.STEP_SAVING) || state.matches(WizardStates.STEP_CANCELING) || state.matches(WizardStates.DONE) || state.matches(WizardStates.FIN);\r\nexport const wasSavingSelector = state => state.matches(WizardStates.STEP_SAVING);\r\nexport const wasWaitingForConfirmationSelector = state => state.matches(WizardStates.STEP_CANCELING);\r\nexport const wasStoppingSelector = state => state.matches(WizardStates.DONE) || state.matches(WizardStates.FIN);\r\n\r\n\r\n// Derived state accessors\r\nconst getStepInfo = context => context.stepList[context.stepIndex];\r\nconst getStepServiceRef = context => context.stepServicesCache[getStepInfo(context).id];\r\n\r\n// Guards\r\nconst doesServiceNeedActivation = context => context.stepServiceNeedsActivation;\r\nconst isNotNavigating = context => !isNumber(context.navigatingTo) && !context.isExiting;\r\nconst isExiting = context => context.isExiting || (isNumber(context.navigatingTo) && context.navigatingTo >= context.stepList.length);\r\nconst isFirstStep = context => context.stepIndex - 1 < 0;\r\nconst canNavigateBackWithoutSaving = context => getStepInfo(context).canNavigateBackWithoutSaving;\r\n\r\n// Actions\r\nconst acquireStepService = assign((context) => {\r\n const stepInfo = getStepInfo(context);\r\n let stepService = getStepServiceRef(context);\r\n if (stepService) {\r\n return {\r\n ...context,\r\n stepService,\r\n stepServiceNeedsActivation: true,\r\n };\r\n }\r\n\r\n const extendedStepMachine = stepInfo\r\n .StepMachine(stepInfo.StepMachineOptions(stepInfo, context.stepsData));\r\n stepService = spawn(extendedStepMachine);\r\n\r\n return {\r\n ...context,\r\n stepServicesCache: {\r\n ...context.stepServicesCache,\r\n [stepInfo.id]: stepService,\r\n },\r\n stepService,\r\n stepServiceNeedsActivation: false,\r\n };\r\n});\r\n\r\nconst stopStep = send(StepEvents.STOP, { to: getStepServiceRef });\r\n\r\nconst activateStep = send(\r\n context => ({\r\n type: StepEvents.ACTIVATE,\r\n stepsData: context.stepsData,\r\n }),\r\n { to: getStepServiceRef }\r\n);\r\nconst deactivateStep = send(StepEvents.DEACTIVATE, { to: getStepServiceRef });\r\nconst notifyStepToSave = send(StepEvents.SAVE, { to: getStepServiceRef });\r\nconst notifyStepToCancel = send(StepEvents.CANCEL, { to: getStepServiceRef });\r\nconst setNavigatingForward = assign({\r\n navigatingTo: context => context.stepIndex + 1,\r\n});\r\nconst setNavigatingBack = assign({\r\n navigatingTo: context => context.stepIndex - 1,\r\n});\r\nconst setExiting = assign({\r\n isExiting: () => true,\r\n});\r\nconst applyNavigation = assign({\r\n stepIndex: context => context.navigatingTo,\r\n navigatingTo: () => null,\r\n});\r\nconst resetNavigation = assign({\r\n navigatingTo: () => null,\r\n isExiting: () => false,\r\n});\r\nconst notifyDone = (context) => {\r\n if (isFunction(context.onDone)) {\r\n context.onDone(context.stepsData);\r\n }\r\n};\r\nconst patchStepsData = assign({\r\n stepsData: (context, event) => ({\r\n ...context.stepsData,\r\n ...event.stepsData,\r\n }),\r\n});\r\n\r\nconst defaultActions = {\r\n acquireStepService,\r\n stopStep,\r\n activateStep,\r\n deactivateStep,\r\n notifyStepToSave,\r\n notifyStepToCancel,\r\n setNavigatingForward,\r\n setNavigatingBack,\r\n setExiting,\r\n applyNavigation,\r\n resetNavigation,\r\n notifyDone,\r\n patchStepsData,\r\n};\r\n\r\nconst defaultServices = {\r\n};\r\n\r\nconst defaultGuards = {\r\n isFirstStep,\r\n isNotNavigating,\r\n isExiting,\r\n doesServiceNeedActivation,\r\n canNavigateBackWithoutSaving,\r\n};\r\n\r\nconst getStartingState = (machineId, wizardOptions) => {\r\n const {\r\n stepList, stepsData, onDone = noop,\r\n } = wizardOptions;\r\n const stepIndex = 0;\r\n return {\r\n id: machineId,\r\n stepList,\r\n stepIndex,\r\n stepServicesCache: {},\r\n\r\n stepsData,\r\n\r\n navigatingTo: null, // pending navigation direction\r\n isExiting: false, // pending exit\r\n\r\n onDone,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a new instance of the wizard state machine.\r\n * The xstate-based wizard state machine must be created only once per the lifetime of the hosting React component.\r\n * If props' changes need to be reflected in the state machine, the state machine must provide\r\n * event-based API to communicate such changes.\r\n * @param {object} options - wizard options\r\n * @returns {object} xstate machine\r\n */\r\nexport const wizardStateMachine = ({\r\n machineId = 'WizardStateMachine',\r\n wizardOptions,\r\n actions = defaultActions,\r\n services = defaultServices,\r\n guards = defaultGuards,\r\n} = {}) => createMachine({\r\n preserveActionOrder: true,\r\n predictableActionArguments: true,\r\n strict: true,\r\n\r\n id: machineId,\r\n context: getStartingState(machineId, wizardOptions),\r\n initial: WizardStates.INIT,\r\n states: {\r\n [WizardStates.INIT]: {\r\n entry: ['acquireStepService'],\r\n always: [\r\n {\r\n target: WizardStates.STEP_ACTIVE,\r\n cond: 'doesServiceNeedActivation',\r\n actions: 'activateStep',\r\n },\r\n {\r\n target: WizardStates.STEP_ACTIVE,\r\n },\r\n ],\r\n },\r\n [WizardStates.STEP_ACTIVE]: {\r\n on: {\r\n [WizardEvents.STEP_LOADING]: [WizardStates.STEP_LOADING],\r\n [WizardEvents.CANCEL]: [\r\n {\r\n target: WizardStates.STEP_CANCELING,\r\n actions: ['setExiting', 'notifyStepToCancel'],\r\n },\r\n ],\r\n [WizardEvents.EXIT]: [\r\n {\r\n target: WizardStates.STEP_SAVING,\r\n actions: ['setExiting', 'notifyStepToSave'],\r\n },\r\n ],\r\n [WizardEvents.NAVIGATE_NEXT]: [\r\n {\r\n target: WizardStates.STEP_SAVING,\r\n actions: ['setNavigatingForward', 'notifyStepToSave'],\r\n },\r\n ],\r\n [WizardEvents.NAVIGATE_BACK]: [\r\n {\r\n // Gracefully handling of navigating back at 1st step\r\n cond: 'isFirstStep',\r\n },\r\n {\r\n target: WizardStates.INIT,\r\n cond: 'canNavigateBackWithoutSaving',\r\n actions: ['deactivateStep', 'setNavigatingBack', 'applyNavigation'],\r\n },\r\n {\r\n target: WizardStates.STEP_SAVING,\r\n actions: ['setNavigatingBack', 'notifyStepToSave'],\r\n },\r\n ],\r\n },\r\n },\r\n [WizardStates.STEP_LOADING]: {\r\n on: {\r\n [WizardEvents.STEP_DONE_LOADING]: [\r\n {\r\n target: WizardStates.STEP_ACTIVE,\r\n },\r\n ],\r\n [WizardEvents.STEP_FAILED_LOADING]: [\r\n {\r\n target: WizardStates.STEP_FAILED,\r\n },\r\n ],\r\n },\r\n },\r\n [WizardStates.STEP_SAVING]: {\r\n on: {\r\n [WizardEvents.STEP_DONE_SAVING]: [\r\n // Save and stay on the same step\r\n {\r\n target: WizardStates.STEP_ACTIVE,\r\n cond: 'isNotNavigating',\r\n actions: [logAction('STEP_SAVING: STEP_DONE_SAVING -> STEP_ACTIVE'), 'patchStepsData'],\r\n },\r\n // Save and exit\r\n {\r\n target: WizardStates.DONE,\r\n cond: 'isExiting',\r\n actions: [logAction('STEP_SAVING: STEP_DONE_SAVING -> done'), 'patchStepsData'],\r\n },\r\n // Save and navigate\r\n {\r\n target: WizardStates.INIT,\r\n actions: [logAction('STEP_SAVING: STEP_DONE_SAVING -> INIT'), 'patchStepsData', 'deactivateStep', 'applyNavigation'],\r\n },\r\n ],\r\n [WizardEvents.STEP_ABORTED_SAVING]: [\r\n {\r\n target: WizardStates.STEP_ACTIVE,\r\n actions: [logAction('STEP_SAVING: STEP_ABORTED_SAVING -> STEP_ACTIVE'), 'resetNavigation'],\r\n },\r\n ],\r\n },\r\n },\r\n [WizardStates.STEP_CANCELING]: {\r\n on: {\r\n [WizardEvents.STEP_SAVING]: [WizardStates.STEP_SAVING],\r\n [WizardEvents.STEP_ABORTED_CANCELING]: [\r\n {\r\n target: WizardStates.STEP_ACTIVE,\r\n actions: ['resetNavigation'],\r\n },\r\n ],\r\n [WizardEvents.STEP_DONE_CANCELING]: [WizardStates.DONE],\r\n },\r\n },\r\n [WizardStates.STEP_FAILED]: {},\r\n\r\n [WizardStates.DONE]: {\r\n entry: ['stopStep'],\r\n on: {\r\n [WizardEvents.STEP_STOPPED]: [\r\n { target: WizardStates.FIN, actions: [logAction('DONE: STEP_STOPPED -> FIN')] },\r\n ],\r\n },\r\n },\r\n\r\n [WizardStates.FIN]: { entry: [logAction('calling notifyDone'), 'notifyDone'] },\r\n },\r\n}, {\r\n actions: {\r\n ...defaultActions,\r\n ...actions,\r\n },\r\n services: {\r\n ...defaultServices,\r\n ...services,\r\n },\r\n guards: {\r\n ...defaultGuards,\r\n ...guards,\r\n },\r\n});\r\n","import { isFunction, delay } from 'underscore';\r\nimport { createMachine, assign, sendParent } from 'xstate';\r\nimport { StepEvents } from './step-events';\r\nimport { WizardEvents } from './wizard-events';\r\n\r\nconst StepStates = {\r\n INIT: 'INIT',\r\n FAILED_INIT: 'FAILED_INIT',\r\n LOADING: 'LOADING',\r\n SAVING: 'SAVING',\r\n CANCELING: 'CANCELING',\r\n VALIDATING: 'VALIDATING',\r\n VALID: 'VALID',\r\n INVALID: 'INVALID',\r\n INACTIVE: 'INACTIVE',\r\n STOPPING: 'STOPPING',\r\n FIN: 'FIN',\r\n};\r\n\r\n// Public state selectors\r\nexport const isCanceling = state => state.matches(StepStates.CANCELING);\r\nexport const isStopping = state => state.matches(StepStates.STOPPING);\r\nexport const isFin = state => state.matches(StepStates.FIN);\r\nexport const isFailedInit = state => state.matches(StepStates.FAILED_INIT);\r\nexport const isActive = state => state.matches(StepStates.VALID) || state.matches(StepStates.INVALID);\r\nexport const isLoading = state => state.matches(StepStates.LOADING);\r\nexport const isSaving = state => state.matches(StepStates.SAVING);\r\n\r\nexport const contextSelector = state => state.context;\r\n\r\nconst defaultInitialContext = {\r\n stepsData: {},\r\n actionsOverride: {},\r\n guardsOverride: {},\r\n data: {\r\n data: {},\r\n isValid: true,\r\n isDirty: false,\r\n },\r\n invalidSaveAttempt: 0,\r\n};\r\n\r\n// Derived state accessors\r\nconst needsLoading = () => false;\r\nconst hasIncomingSystemError = () => false;\r\nconst isValid = context => context.data.isValid;\r\nconst isDirty = context => context.data.isDirty;\r\nconst needsSaving = isDirty;\r\nconst needsStopping = (context) => {\r\n if (isFunction(context.guardsOverride.needsStopping)) {\r\n return context.guardsOverride.needsStopping(context);\r\n }\r\n return false;\r\n};\r\n// State \"assigners\"\r\nconst replaceData = assign({\r\n data: (_, event) => event.data,\r\n});\r\nconst patchStepsData = assign({\r\n stepsData: (context, event) => ({\r\n ...context.stepsData,\r\n ...event.stepsData,\r\n }),\r\n});\r\nconst replaceStepsData = assign({\r\n stepsData: (_, event) => event.stepsData,\r\n});\r\nconst patchData = assign({\r\n data: (context, event) => ({\r\n ...context.data,\r\n ...event.data,\r\n }),\r\n});\r\nconst clearErrors = () => { };\r\nconst onInvalidSaveAttempt = assign({\r\n // eslint-disable-next-line no-bitwise\r\n invalidSaveAttempt: context => (context.invalidSaveAttempt | 0) + 1,\r\n});\r\nconst overrideActions = assign({\r\n actionsOverride: (context, event) => ({\r\n ...context.actionsOverride,\r\n ...event.data,\r\n }),\r\n});\r\nconst overrideGuards = assign({\r\n guardsOverride: (context, event) => ({\r\n ...context.guardsOverride,\r\n ...event.data,\r\n }),\r\n});\r\n\r\nconst notifyLoading = sendParent(WizardEvents.STEP_LOADING);\r\nconst notifyDoneLoading = sendParent(WizardEvents.STEP_DONE_LOADING);\r\n// non-recoverable step failure\r\nconst notifyFailedLoading = sendParent(WizardEvents.STEP_FAILED_LOADING);\r\n\r\nconst notifySaving = sendParent(WizardEvents.STEP_SAVING);\r\nconst notifyDoneSaving = sendParent((context/* , event */) => ({\r\n type: WizardEvents.STEP_DONE_SAVING,\r\n stepsData: context.stepsData,\r\n}));\r\nconst notifyDoneCanceling = sendParent({ type: WizardEvents.STEP_DONE_CANCELING });\r\nconst notifyAbortedSaving = sendParent(WizardEvents.STEP_ABORTED_SAVING);\r\nconst notifyAbortedCanceling = sendParent(WizardEvents.STEP_ABORTED_CANCELING);\r\nconst notifyStopped = sendParent({ type: WizardEvents.STEP_STOPPED });\r\nconst requestConfirmation = context => new Promise((resolve, reject) => {\r\n delay(() => {\r\n const response = { aborted: false };\r\n if (isFunction(context.actionsOverride.confirmCancel)) {\r\n if (!context.actionsOverride.confirmCancel()) {\r\n response.aborted = true;\r\n }\r\n }\r\n if (response.aborted) {\r\n reject();\r\n } else {\r\n resolve();\r\n }\r\n }, 200);\r\n});\r\n\r\n\r\nconst defaultActions = {\r\n notifyLoading,\r\n notifySaving,\r\n notifyAbortedSaving,\r\n notifyAbortedCanceling,\r\n notifyFailedLoading,\r\n notifyDoneLoading,\r\n notifyDoneSaving,\r\n notifyDoneCanceling,\r\n notifyStopped,\r\n\r\n replaceData,\r\n patchData,\r\n replaceStepsData,\r\n patchStepsData,\r\n\r\n clearErrors,\r\n onInvalidSaveAttempt,\r\n\r\n overrideActions,\r\n overrideGuards,\r\n};\r\n\r\nconst defaultServices = {\r\n requestConfirmation,\r\n};\r\n\r\nconst defaultGuards = {\r\n needsLoading,\r\n isValid,\r\n needsSaving,\r\n needsStopping,\r\n};\r\n\r\n\r\nexport const stepStateMachine = ({\r\n machineId = 'StepStateMachine',\r\n initialContext = defaultInitialContext,\r\n actions = defaultActions,\r\n services = defaultServices,\r\n guards = defaultGuards,\r\n} = {}) => createMachine({\r\n preserveActionOrder: true,\r\n predictableActionArguments: true,\r\n strict: true,\r\n\r\n id: machineId,\r\n context: {\r\n ...defaultInitialContext,\r\n ...initialContext,\r\n },\r\n initial: StepStates.INIT,\r\n on: {\r\n [StepEvents.OVERRIDE_ACTIONS]: [\r\n { actions: 'overrideActions' },\r\n ],\r\n [StepEvents.OVERRIDE_GUARDS]: [\r\n { actions: 'overrideGuards' },\r\n ],\r\n [StepEvents.STOP]: [\r\n { target: StepStates.STOPPING, cond: 'needsStopping' },\r\n StepStates.FIN,\r\n ],\r\n },\r\n states: {\r\n [StepStates.INIT]: {\r\n always: [\r\n { target: StepStates.LOADING, cond: 'needsLoading' },\r\n { target: StepStates.VALIDATING },\r\n ],\r\n },\r\n [StepStates.LOADING]: {\r\n entry: ['notifyLoading'],\r\n on: {\r\n [StepEvents.DONE_LOADING]: {\r\n target: StepStates.VALIDATING,\r\n actions: [\r\n 'replaceData',\r\n 'patchStepsData',\r\n 'notifyDoneLoading',\r\n ],\r\n },\r\n [StepEvents.FAILED_LOADING]: [\r\n {\r\n target: StepStates.FAILED_INIT,\r\n cond: hasIncomingSystemError,\r\n actions: [\r\n 'replaceData',\r\n 'patchStepsData',\r\n 'notifyFailedLoading',\r\n ],\r\n },\r\n {\r\n target: StepStates.VALIDATING,\r\n actions: [\r\n 'replaceData',\r\n 'patchStepsData',\r\n 'notifyDoneLoading',\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n [StepStates.FAILED_INIT]: {},\r\n [StepStates.SAVING]: {\r\n entry: ['clearErrors', 'notifySaving'],\r\n on: {\r\n [StepEvents.DONE_SAVING]: {\r\n target: StepStates.VALIDATING,\r\n actions: [\r\n 'replaceData',\r\n 'patchStepsData',\r\n 'notifyDoneSaving',\r\n ],\r\n },\r\n [StepEvents.FAILED_SAVING]: {\r\n target: StepStates.VALIDATING,\r\n actions: [\r\n 'replaceData',\r\n 'patchStepsData',\r\n 'onInvalidSaveAttempt',\r\n 'notifyAbortedSaving',\r\n ],\r\n },\r\n },\r\n },\r\n [StepStates.CANCELING]: {\r\n invoke: {\r\n id: 'requestConfirmationCallback',\r\n src: 'requestConfirmation',\r\n onDone: {\r\n target: StepStates.VALIDATING,\r\n actions: ['notifyDoneCanceling'],\r\n },\r\n onError: {\r\n target: StepStates.VALIDATING,\r\n actions: ['notifyAbortedCanceling'],\r\n },\r\n },\r\n },\r\n [StepStates.STOPPING]: {\r\n on: {\r\n [StepEvents.DONE_STOPPING]: [StepStates.FIN],\r\n },\r\n },\r\n [StepStates.VALIDATING]: {\r\n always: [\r\n { target: StepStates.VALID, cond: 'isValid' },\r\n { target: StepStates.INVALID },\r\n ],\r\n },\r\n [StepStates.VALID]: {\r\n on: {\r\n [StepEvents.UPDATE_VALIDATION]: [\r\n {\r\n target: StepStates.VALIDATING,\r\n actions: ['patchData'],\r\n },\r\n ],\r\n [StepEvents.CANCEL]: [\r\n { target: StepStates.CANCELING, cond: 'needsSaving' },\r\n { actions: ['notifyDoneCanceling'] },\r\n ],\r\n [StepEvents.SAVE]: [\r\n { target: StepStates.SAVING, cond: 'needsSaving' },\r\n { actions: ['notifyDoneSaving'] },\r\n ],\r\n [StepEvents.DEACTIVATE]: StepStates.INACTIVE,\r\n },\r\n },\r\n [StepStates.INVALID]: {\r\n on: {\r\n [StepEvents.UPDATE_VALIDATION]: [\r\n {\r\n target: StepStates.VALIDATING,\r\n actions: ['patchData'],\r\n },\r\n ],\r\n [StepEvents.CANCEL]: [\r\n { target: StepStates.CANCELING, cond: 'needsSaving' },\r\n { actions: ['notifyDoneCanceling'] },\r\n ],\r\n [StepEvents.SAVE]: {\r\n actions: ['onInvalidSaveAttempt', 'notifyAbortedSaving'],\r\n },\r\n [StepEvents.DEACTIVATE]: StepStates.INACTIVE,\r\n },\r\n },\r\n [StepStates.INACTIVE]: {\r\n on: {\r\n [StepEvents.ACTIVATE]: [\r\n { target: StepStates.LOADING, cond: 'needsLoading', actions: ['replaceStepsData'] },\r\n { target: StepStates.VALIDATING, actions: ['replaceStepsData'] },\r\n ],\r\n },\r\n },\r\n [StepStates.FIN]: {\r\n entry: ['notifyStopped'],\r\n },\r\n },\r\n}, {\r\n actions: {\r\n ...defaultActions,\r\n ...actions,\r\n },\r\n services: {\r\n ...defaultServices,\r\n ...services,\r\n },\r\n guards: {\r\n ...defaultGuards,\r\n ...guards,\r\n },\r\n});\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const xstateStateMachine = PropTypes.oneOfType([\r\n PropTypes.shape({}),\r\n PropTypes.func,\r\n]);\r\n\r\nexport const stepListProp = PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired,\r\n StepMachine: xstateStateMachine.isRequired,\r\n StepMachineOptions: PropTypes.func.isRequired,\r\n StepComponent: PropTypes.elementType.isRequired,\r\n}));\r\n","import { mergeStyles, convertToLocalStyle, glyphIconStyle }\r\n from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst borderWidth = '2px';\r\n\r\nconst formStyle = ({ palette = {} }) => ({\r\n '.error': {\r\n color: '#A80000',\r\n },\r\n\r\n 'input.error, select.error, textarea.error, input.campaign-error-row, select.campaign-error-row, textarea.campaign-error-row': {\r\n border: '1px solid @input-error-border !important',\r\n color: palette.neutralPrimary,\r\n },\r\n});\r\n\r\nexport const getWizardStyles = (components, theme = {}) => ({\r\n '@global': {\r\n ...components.spinnerKeyframe, // FIXME: UINext must load this, or '@bingads-webui-react/ui-blocker' must properly style itself\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n show: {\r\n display: 'flex',\r\n },\r\n uiBlockerAdapter: {\r\n ...mergeStyles(\r\n { theme },\r\n components.reactUIBlockerStyle(theme.palette, 'rgba(255, 255, 255, 0.4)'),\r\n {\r\n '& .react-block-ui-none, & .react-block-ui': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden', // to not extend to the content, but shrink to flex-parent\r\n },\r\n },\r\n {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden',\r\n }\r\n ),\r\n },\r\n wizardContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n convertToLocalStyle(components.helpbuttonStyle(theme)),\r\n convertToLocalStyle(glyphIconStyle(theme)),\r\n {\r\n display: 'flex',\r\n flexGrow: 1,\r\n overflowY: 'hidden',\r\n }\r\n ),\r\n },\r\n // StepProgressList on left side\r\n wizardListContainer: {\r\n width: '228px',\r\n minWidth: '228px',\r\n borderRight: `1px solid ${theme.palette.neutralQuaternaryAlt}`,\r\n paddingLeft: '32px',\r\n paddingTop: '32px',\r\n paddingBottom: '32px',\r\n overflow: 'hidden auto',\r\n\r\n '& ol': {\r\n margin: 0,\r\n padding: 0,\r\n listStyle: 'none',\r\n },\r\n\r\n // Styles for drawing the vertical line\r\n '& .step-progress-list-item': {\r\n borderLeft: `${borderWidth} solid ${theme.palette.blue}`,\r\n '&.step-progress-list-item-ahead': { borderLeftColor: '#ebebeb' },\r\n },\r\n\r\n '& .step-progress-list-item-title': {\r\n position: 'absolute',\r\n float: 'right',\r\n maxWidth: 165,\r\n },\r\n\r\n // top level list items\r\n '& ol.step-progress-list>.step-progress-list-item': {\r\n paddingTop: 39,\r\n position: 'relative',\r\n\r\n '&:first-child': { borderLeftColor: theme.palette.white, paddingTop: 0 },\r\n\r\n '&>.step-progress-list-item-glyphicon': {\r\n marginLeft: '-8px',\r\n marginRight: '8px',\r\n background: theme.palette.white,\r\n paddingTop: '5px',\r\n paddingBottom: '4px',\r\n },\r\n\r\n '&>.step-progress-list-item-glyphicon.iconba-RadioBullet2': {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n transform: 'scale(1.52)',\r\n },\r\n },\r\n\r\n // nested list items\r\n '& ol.step-progress-list-item-list>.step-progress-list-item': {\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n paddingTop: '24px',\r\n marginLeft: `-${borderWidth}`,\r\n\r\n '&>.step-progress-list-item-glyphicon': {\r\n marginLeft: '-8px',\r\n marginRight: '12px',\r\n white: theme.palette.white,\r\n paddingBottom: '1px',\r\n },\r\n },\r\n\r\n '& .step-progress-list-item-selected, & .step-progress-list-item-contains-selected': { fontWeight: '600' },\r\n\r\n // glyphicon colors\r\n '& .step-progress-list-item-behind .step-progress-list-item-glyphicon': {\r\n color: theme.palette.blue,\r\n },\r\n '& .step-progress-list-item-selected .step-progress-list-item-glyphicon, & .step-progress-list-item-contains-selected>.step-progress-list-item-glyphicon': {\r\n color: '#c0def6',\r\n },\r\n '& .step-progress-list-item-ahead .step-progress-list-item-glyphicon': {\r\n color: theme.palette.neutralLight,\r\n },\r\n },\r\n wizardMainContainer: {\r\n backgroundColor: theme.palette.neutralLighterAlt,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n wizardStepContainer: {\r\n display: 'flex',\r\n overflowY: 'auto',\r\n },\r\n wizardSingleStepLayoutStepScrollingContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflowY: 'auto',\r\n },\r\n wizardSingleStepLayoutCenteredStepContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n },\r\n wizardSingleStepLayoutStepContainer: {\r\n display: 'flex',\r\n },\r\n wizardStep: {\r\n ...mergeStyles(\r\n { theme },\r\n convertToLocalStyle(formStyle(theme)),\r\n {\r\n display: 'flex',\r\n flexBasis: '1px',\r\n flexDirection: 'column',\r\n paddingLeft: 32,\r\n paddingRight: 32,\r\n }\r\n ),\r\n },\r\n wizardFooter: {\r\n marginTop: 'auto', // to expand as flex-item\r\n backgroundColor: theme.palette.white,\r\n },\r\n mobileNavContainer: {\r\n position: 'fixed',\r\n display: 'none',\r\n height: 60,\r\n width: '100%',\r\n background: theme.palette.white,\r\n zIndex: 2,\r\n boxShadow: '0px 3.2px 7.2px rgba(0, 0, 0, 0.132), 0px 0.6px 1.8px rgba(0, 0, 0, 0.108)',\r\n },\r\n});\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport const useIsMounted = () => {\r\n const isMountedRef = useRef(false);\r\n useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => {\r\n isMountedRef.current = false;\r\n };\r\n }, []);\r\n\r\n return isMountedRef;\r\n};\r\n","import { useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from '@xstate/react';\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport {\r\n isLoading as isLoadingSelector,\r\n isSaving as isSavingSelector, contextSelector,\r\n StepEvents,\r\n log,\r\n} from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { useIsMounted } from './use-is-mounted';\r\n\r\n/**\r\n * Loads step's data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property, completely replacing\r\n * the current value.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The wizard and the step will be blocked until the promise resolves.\r\n *\r\n * If promise is rejected, the step will:\r\n * - transition to `FAILED_INIT` state if `hasIncomingSystemError` returns true;\r\n * - transition through `VALIDATING -> (VALID | INVALID)`.\r\n * @callback loadData\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property, completely replacing\r\n * the current value.\r\n */\r\n\r\n/**\r\n * Saves step's data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property, completely replacing\r\n * the current value.\r\n *\r\n * The function is called when the wizard attempts to leave the step.\r\n * The wizard and the step will be blocked until the promise resolves.\r\n *\r\n * If promise is rejected, the step will transition through `VALIDATING -> (VALID | INVALID)`.\r\n * @callback saveData\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property, completely replacing\r\n * the current value.\r\n */\r\n\r\n\r\n/**\r\n * Default step repository React component.\r\n * @param {Object} props the component's props\r\n * @param {Object} props.stepService an instance of the step's state machine\r\n * @param {loadData} props.loadData a callback which loads data\r\n * @param {saveData} props.saveData a callback which saves data\r\n * @returns {Element} an empty VDOM\r\n */\r\nexport const StepRepository = ({\r\n stepService,\r\n loadData,\r\n saveData,\r\n}) => {\r\n const isMountedRef = useIsMounted();\r\n\r\n const isLoading = useSelector(stepService, isLoadingSelector);\r\n const isSaving = useSelector(stepService, isSavingSelector);\r\n const context = useSelector(stepService, contextSelector);\r\n const contextRef = useRef(context);\r\n contextRef.current = context;\r\n const asyncTokenRef = useRef();\r\n\r\n useEffect(() => {\r\n if (isLoading) {\r\n log('StepRepository loading data with loadData');\r\n if (asyncTokenRef.current) {\r\n asyncTokenRef.current.cancel();\r\n asyncTokenRef.current = null;\r\n }\r\n asyncTokenRef.current = createAsyncToken(loadData(contextRef.current))\r\n .on({\r\n onSuccess: (arg0) => {\r\n if (isMountedRef.current) {\r\n log('StepRepository sending DONE_LOADING');\r\n stepService.send({ type: StepEvents.DONE_LOADING, data: arg0 });\r\n } else {\r\n log('StepRepository ignoring sending DONE_LOADING due to unmount');\r\n }\r\n },\r\n onError: (arg0) => {\r\n if (isMountedRef.current) {\r\n log('StepRepository sending FAILED_LOADING');\r\n stepService.send({ type: StepEvents.FAILED_LOADING, data: arg0 });\r\n } else {\r\n log('StepRepository ignoring sending FAILED_LOADING due to unmount');\r\n }\r\n },\r\n });\r\n } else if (isSaving) {\r\n log('StepRepository saving data with saveData');\r\n if (asyncTokenRef.current) {\r\n asyncTokenRef.current.cancel();\r\n asyncTokenRef.current = null;\r\n }\r\n asyncTokenRef.current = createAsyncToken(saveData(contextRef.current))\r\n .on({\r\n onSuccess: (arg0) => {\r\n if (isMountedRef.current) {\r\n log('StepRepository sending DONE_SAVING');\r\n stepService.send({ type: StepEvents.DONE_SAVING, data: arg0 });\r\n } else {\r\n log('StepRepository ignoring sending DONE_SAVING due to unmount');\r\n }\r\n },\r\n onError: (arg0) => {\r\n if (isMountedRef.current) {\r\n log('StepRepository sending FAILED_SAVING');\r\n stepService.send({ type: StepEvents.FAILED_SAVING, data: arg0 });\r\n } else {\r\n log('StepRepository ignoring sending FAILED_SAVING due to unmount');\r\n }\r\n },\r\n });\r\n }\r\n }, [stepService, loadData, saveData, isLoading, isSaving, isMountedRef]);\r\n\r\n log('StepRepository.render: isLoading=_, isSaving=_', isLoading, isSaving);\r\n\r\n return null;\r\n};\r\n\r\nStepRepository.propTypes = {\r\n stepService: PropTypes.shape({\r\n subscribe: PropTypes.func.isRequired,\r\n send: PropTypes.func,\r\n }).isRequired,\r\n loadData: PropTypes.func.isRequired,\r\n saveData: PropTypes.func.isRequired,\r\n};\r\n","import { isEmpty } from 'underscore';\r\nimport { useCallback, useContext, useMemo, useRef, useEffect } from 'react';\r\nimport { useInterpret, useSelector } from '@xstate/react';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { useRefInit } from '@bingads-webui-campaign-react/common-generic-hooks';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport {\r\n wizardStateMachine, WizardEvents,\r\n isBusySelector, stepIndexSelector, stepServicesCacheSelector,\r\n wasSavingSelector, wasWaitingForConfirmationSelector, wasStoppingSelector, stateLoggingListener,\r\n} from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { StepRepository } from '../shared/step-repository';\r\n\r\nconst getStepRepository = stepInfo => (!stepInfo.stepRepositoryConfig && !stepInfo.StepRepository ?\r\n undefined :\r\n withProps(\r\n stepInfo.stepRepositoryConfig || {},\r\n stepInfo.StepRepository || StepRepository\r\n ));\r\n\r\nexport const useWizardState = (props) => {\r\n const {\r\n routeToNavigateToWhenDone,\r\n scopeToRemoveWhenDone,\r\n scope,\r\n instrumentation,\r\n permissions,\r\n extraStepsData = {},\r\n wizardScenario: {\r\n scenarioName, isCenteredLayout, isEditing, stepList, withContentFooter,\r\n },\r\n machineId = 'StepWizard',\r\n } = props;\r\n const { scenario, activity } = useMemo(() => instrumentation.createScenarioAndActivity({\r\n scenarioName, // TODO: consider '...ForRetail' and '...ForSearch\r\n activityName: isEditing ? 'Settings' : 'Creation',\r\n }), [instrumentation, isEditing, scenarioName]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ StepWizardScenario: scenarioName });\r\n }, [scenarioName]);\r\n\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const scopeRef = useRef(scope);\r\n scopeRef.current = scope;\r\n const onDone = useCallback(() => {\r\n if (!isEmpty(scopeToRemoveWhenDone)) {\r\n scopeRef.current.remove(scopeToRemoveWhenDone);\r\n }\r\n scopeRef.current.save(routeToNavigateToWhenDone);\r\n }, [routeToNavigateToWhenDone, scopeToRemoveWhenDone]);\r\n\r\n // The xstate-based wizard state machine must be created only once per the lifetime of the component.\r\n // If props' changes need to be reflected in the state machine, the state machine must provide\r\n // event-based API to communicate such changes.\r\n const wizardMachineRef = useRefInit(() => wizardStateMachine({\r\n machineId,\r\n wizardOptions: {\r\n stepList,\r\n onDone,\r\n stepsData: {\r\n permissions,\r\n isEditing,\r\n scenarioName,\r\n scenario,\r\n activity,\r\n i18n,\r\n serverContext,\r\n scope,\r\n ...scope.values,\r\n ...extraStepsData,\r\n },\r\n },\r\n }));\r\n const wizardMachine = wizardMachineRef.current;\r\n const service = useInterpret(wizardMachine, undefined, stateLoggingListener);\r\n const { send } = service;\r\n\r\n const stepServicesCache = useSelector(service, stepServicesCacheSelector);\r\n const stepListWithServiceInfo = useMemo(() => stepList.map(stepInfo2 => ({\r\n stepInfo: stepInfo2,\r\n stepService: stepServicesCache[stepInfo2.id],\r\n StepRepository: getStepRepository(stepInfo2),\r\n })), [stepList, stepServicesCache]);\r\n\r\n const stepIndex = useSelector(service, stepIndexSelector);\r\n const isBusy = useSelector(service, isBusySelector);\r\n const wasSaving = useSelector(service, wasSavingSelector);\r\n const wasWaitingForConfirmation = useSelector(service, wasWaitingForConfirmationSelector);\r\n const wasStopping = useSelector(service, wasStoppingSelector);\r\n\r\n const stepInfo = useMemo(() => stepList[stepIndex], [stepIndex, stepList]);\r\n\r\n const isReadOnlyUser = useMemo(() => permissions.IsReadOnlyUser || serverContext.CurrentAccount.Status === 32, [permissions.IsReadOnlyUser, serverContext.CurrentAccount.Status]); // 32 is InActive\r\n\r\n const state = {\r\n isReadOnlyUser,\r\n isCenteredLayout,\r\n withContentFooter,\r\n i18n,\r\n scenarioName,\r\n scenario,\r\n activity,\r\n\r\n stepListWithServiceInfo,\r\n stepIndex,\r\n stepInfo,\r\n isBusy,\r\n wasSaving,\r\n wasWaitingForConfirmation,\r\n wasStopping,\r\n };\r\n\r\n\r\n const saveAndNavigateNext = useCallback(() => {\r\n send(WizardEvents.NAVIGATE_NEXT);\r\n }, [send]);\r\n const saveAndNavigateBack = useCallback(() => {\r\n send(WizardEvents.NAVIGATE_BACK);\r\n }, [send]);\r\n const cancelAndExit = useCallback(() => {\r\n send(WizardEvents.CANCEL);\r\n }, [send]);\r\n const saveAndExit = useCallback(() => {\r\n send(WizardEvents.EXIT);\r\n }, [send]);\r\n\r\n useEffect(() => {\r\n window.addEventListener('popstate', cancelAndExit);\r\n\r\n return () => {\r\n window.removeEventListener('popstate', cancelAndExit);\r\n };\r\n }, [cancelAndExit]);\r\n\r\n const api = {\r\n saveAndNavigateNext, saveAndNavigateBack, cancelAndExit, saveAndExit,\r\n };\r\n\r\n return [state, api];\r\n};\r\n","export const getStepProgressItemGlyphicon = (step) => {\r\n // sub steps\r\n if (step.path.indexOf('.') >= 0) {\r\n return 'ba-RadioBullet';\r\n }\r\n\r\n if (step.isSelected || step.containsSelected) {\r\n return 'ba-RadioBullet2'; // current step\r\n } else if (step.isBehind) {\r\n return 'ba-CompletedSolid';\r\n }\r\n\r\n // default\r\n return 'ba-RadioBtnOff';\r\n};\r\n","export const footerStyleOverrides = {\r\n skippingLink: {\r\n marginLeft: 28,\r\n },\r\n cancelButton: {\r\n marginLeft: 12,\r\n },\r\n};\r\n","import { last } from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { VerticalSeparatedLayout } from '@bingads-webui-react/steps';\r\nimport { StepFooter } from '@bingads-webui-campaign-react/step-wizard-layout';\r\nimport { getStepProgressItemGlyphicon } from '../styles/get-step-progress-item-glyphicon';\r\nimport { footerStyleOverrides } from '../styles/footer-style-overrides';\r\n\r\nconst {\r\n StepsContextProvider,\r\n StepContainer,\r\n StepProgressList,\r\n} = VerticalSeparatedLayout;\r\n\r\n// Navigation buttons scenarios:\r\n// - 1st step:\r\n// - Before campaign is created:\r\n// - Next button: \"Save & go to the next step\"\r\n// - Cancel button: \"Cancel\"\r\n// - After campaign is created:\r\n// - Next button: \"Save & go to the next step\"\r\n// - Exit button: \"Save & exit\"\r\n// - [2nd..last) steps:\r\n// - Next button: \"Save & go to the next step\"\r\n// - Back button: \"Back\"\r\n// - Exit button: \"Save & exit\"\r\n// - last step (with data entry):\r\n// - Next/Exit button: \"Save\"\r\n// - Back button: \"Back\"\r\n// - last step (read-only):\r\n// - Next/Exit button: \"Done\"\r\n// - Back button: \"Back\"\r\n\r\nexport const MultiStepLayout = React.memo(({\r\n children,\r\n wizardState: {\r\n i18n, stepInfo, isBusy, stepIndex, stepListWithServiceInfo,\r\n },\r\n wizardActions: {\r\n saveAndNavigateNext, saveAndNavigateBack, cancelAndExit, saveAndExit,\r\n },\r\n classes,\r\n}) => {\r\n const stepFooter = useMemo(() => {\r\n const beforeLastStepNextButtonText = i18n.getString(_TL_('Save & go to next step'));\r\n const saveAndExitButtonText = i18n.getString(_TL_('Save & exit'));\r\n const previousButtonText = i18n.getString(_TL_('Back'));\r\n if (stepIndex === 0) {\r\n // 1st step\r\n // will use the presence of 2nd step's stepService\r\n // as the fact that campaign has been saved\r\n if (stepListWithServiceInfo[1].stepService) {\r\n // After campaign is created\r\n return (\r\n \r\n );\r\n }\r\n // Before campaign is created\r\n return (\r\n \r\n );\r\n }\r\n if (stepIndex < stepListWithServiceInfo.length - 1) {\r\n // [2nd..last) steps\r\n return (\r\n \r\n );\r\n }\r\n // last step\r\n const lastStepInfo = last(stepListWithServiceInfo);\r\n if (lastStepInfo.isReadOnly) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }, [\r\n stepIndex, classes.wizardFooter, i18n, stepListWithServiceInfo,\r\n saveAndNavigateNext, saveAndNavigateBack, saveAndExit, cancelAndExit, isBusy,\r\n ]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {children}\r\n \r\n {stepFooter}\r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\nMultiStepLayout.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]).isRequired,\r\n wizardState: PropTypes.shape({\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n stepInfo: PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n }),\r\n stepIndex: PropTypes.number.isRequired,\r\n stepListWithServiceInfo: PropTypes.arrayOf(PropTypes.shape({\r\n stepService: PropTypes.shape({}),\r\n })).isRequired,\r\n isBusy: PropTypes.bool.isRequired,\r\n }).isRequired,\r\n wizardActions: PropTypes.shape({\r\n saveAndNavigateNext: PropTypes.func.isRequired,\r\n saveAndNavigateBack: PropTypes.func.isRequired,\r\n cancelAndExit: PropTypes.func.isRequired,\r\n saveAndExit: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n wizardContainer: PropTypes.string.isRequired,\r\n wizardListContainer: PropTypes.string.isRequired,\r\n wizardMainContainer: PropTypes.string.isRequired,\r\n wizardStepContainer: PropTypes.string.isRequired,\r\n wizardFooter: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { VerticalSeparatedLayout } from '@bingads-webui-react/steps';\r\nimport { StepFooter } from '@bingads-webui-campaign-react/step-wizard-layout';\r\nimport { footerStyleOverrides } from '../styles/footer-style-overrides';\r\n\r\nconst {\r\n StepsContextProvider,\r\n StepContainer,\r\n} = VerticalSeparatedLayout;\r\n\r\nexport const SingleStepLayout = React.memo(({\r\n children,\r\n wizardState: {\r\n i18n,\r\n stepInfo,\r\n isBusy,\r\n isReadOnlyUser,\r\n },\r\n wizardActions: {\r\n saveAndNavigateNext,\r\n cancelAndExit,\r\n },\r\n isCenteredLayout, classes,\r\n}) => (\r\n \r\n
\r\n
\r\n \r\n {children}\r\n \r\n
\r\n \r\n
\r\n
\r\n));\r\n\r\nSingleStepLayout.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]).isRequired,\r\n wizardState: PropTypes.shape({\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n stepInfo: PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n }),\r\n isBusy: PropTypes.bool.isRequired,\r\n isReadOnlyUser: PropTypes.bool.isRequired,\r\n }).isRequired,\r\n wizardActions: PropTypes.shape({\r\n saveAndNavigateNext: PropTypes.func.isRequired,\r\n cancelAndExit: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isCenteredLayout: PropTypes.bool,\r\n classes: PropTypes.shape({\r\n wizardContainer: PropTypes.string.isRequired,\r\n wizardMainContainer: PropTypes.string.isRequired,\r\n wizardSingleStepLayoutStepScrollingContainer: PropTypes.string.isRequired,\r\n wizardSingleStepLayoutCenteredStepContainer: PropTypes.string.isRequired,\r\n wizardSingleStepLayoutStepContainer: PropTypes.string.isRequired,\r\n wizardFooter: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nSingleStepLayout.defaultProps = {\r\n isCenteredLayout: false,\r\n};\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ContentFooter } from '@bingads-webui-campaign-react/content-footer';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { InstrumentationContext, withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { log } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { stepListProp } from '@bingads-webui-campaign-react/step-wizard-machine-capi';\r\nimport { VerticalSeparatedLayout } from '@bingads-webui-react/steps';\r\nimport { getWizardStyles } from '../styles/wizard-styles';\r\nimport { useWizardState } from './use-wizard-state';\r\nimport { MultiStepLayout } from './multi-step-layout';\r\nimport { SingleStepLayout } from './single-step-layout';\r\n\r\nconst { Step } = VerticalSeparatedLayout;\r\n\r\nconst StepWizardImpl = ({\r\n wizardScenario, instrumentation, extraStepsData, permissions, scope, routeToNavigateToWhenDone, scopeToRemoveWhenDone, perfMarker,\r\n}) => {\r\n useEffect(() => {\r\n log('StepWizard mounted');\r\n return () => {\r\n log('StepWizard unmounted');\r\n };\r\n }, []);\r\n\r\n const classes = useDefaultStyles(getWizardStyles);\r\n\r\n const [wizardState, wizardActions] = useWizardState({\r\n permissions,\r\n wizardScenario,\r\n scope,\r\n routeToNavigateToWhenDone,\r\n scopeToRemoveWhenDone,\r\n instrumentation,\r\n extraStepsData,\r\n perfMarker,\r\n });\r\n\r\n const {\r\n isCenteredLayout,\r\n withContentFooter = true,\r\n i18n,\r\n scenarioName,\r\n scenario,\r\n stepListWithServiceInfo,\r\n isBusy,\r\n wasSaving,\r\n wasWaitingForConfirmation,\r\n wasStopping,\r\n } = wizardState;\r\n\r\n const Layout = useMemo(\r\n () => (wizardScenario.stepList.length > 1 ? MultiStepLayout : SingleStepLayout),\r\n [wizardScenario.stepList.length]\r\n );\r\n\r\n const loadingText = useMemo(\r\n () => {\r\n if (wasWaitingForConfirmation) {\r\n return i18n.getString(_TL_('Waiting for confirmation...'));\r\n }\r\n if (wasStopping) {\r\n return i18n.getString(_TL_('Finishing...'));\r\n }\r\n return wasSaving ? i18n.getString(_TL_('Saving...')) : i18n.getString(_TL_('Loading...'));\r\n },\r\n [wasWaitingForConfirmation, wasSaving, wasStopping, i18n]\r\n );\r\n\r\n const steps = useMemo(() => stepListWithServiceInfo\r\n .map(({ stepInfo: stepInfo2, stepService, StepRepository }) => (\r\n \r\n \r\n {stepService && stepService.initialized &&\r\n <>\r\n {StepRepository &&\r\n \r\n }\r\n \r\n \r\n }\r\n {/* the below element is there because StepContainer complains if Step.children is null,\r\n even though it is not going to render them. It is a bug in Step component. It scans the React VDOM tree to\r\n extract meta-information about steps, nested steps and so on. */}\r\n {!stepService &&\r\n

Loading...

\r\n }\r\n
\r\n \r\n )), [stepListWithServiceInfo, classes.wizardStep, i18n, wizardActions, perfMarker]);\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {steps}\r\n \r\n {withContentFooter && }\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nStepWizardImpl.propTypes = {\r\n permissions: PropTypes.shape({}).isRequired,\r\n wizardScenario: PropTypes.shape({\r\n scenarioName: PropTypes.string.isRequired,\r\n stepList: stepListProp.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n routeToNavigateToWhenDone: PropTypes.string.isRequired,\r\n scopeToRemoveWhenDone: PropTypes.arrayOf(PropTypes.string),\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n extraStepsData: PropTypes.shape({}),\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nStepWizardImpl.defaultProps = {\r\n extraStepsData: {},\r\n scopeToRemoveWhenDone: [],\r\n};\r\n\r\nexport const StepWizard = withInstrumentation(withScope(StepWizardImpl));\r\n","import { isFunction } from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo } from 'react';\r\nimport { Prompt } from 'react-router-dom';\r\n\r\nexport const useNavigationConfirmationPrompt = (needsConfirmation, confirmationMessage) => {\r\n const onUserNavigation = useCallback((location, action) => {\r\n if ((isFunction(needsConfirmation) && needsConfirmation(location, action)) || needsConfirmation) {\r\n return confirmationMessage;\r\n }\r\n return true;\r\n }, [needsConfirmation, confirmationMessage]);\r\n\r\n const navigationConfirmationPrompt = useMemo(() => (\r\n \r\n ), [onUserNavigation]);\r\n\r\n const beforeUnloadListener = useCallback((event) => {\r\n event.preventDefault();\r\n // eslint-disable-next-line no-param-reassign\r\n event.returnValue = confirmationMessage;\r\n return confirmationMessage;\r\n }, [confirmationMessage]);\r\n useEffect(() => {\r\n if (needsConfirmation) {\r\n addEventListener('beforeunload', beforeUnloadListener, { capture: true });\r\n } else {\r\n removeEventListener('beforeunload', beforeUnloadListener, { capture: true });\r\n }\r\n\r\n return () => {\r\n removeEventListener('beforeunload', beforeUnloadListener, { capture: true });\r\n };\r\n }, [needsConfirmation, beforeUnloadListener]);\r\n\r\n return navigationConfirmationPrompt;\r\n};\r\n","import { useEffect, useMemo } from 'react';\r\nimport { StepEvents } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { useNavigationConfirmationPrompt } from './use-navigation-confirmation-prompt';\r\nimport { useWindowConfirm } from './use-window-confirm';\r\n\r\nconst EXIT_WITHOUT_SAVING_MESSAGE_KEY = _TL_('Your latest changes have not been saved. Do you want to continue without saving changes?');\r\n\r\nexport const useExitWithoutSavingConfirmation = (needsConfirmation, stepService, i18n, confirmationMessage = undefined) => {\r\n // Browser and router navigation cancelation must be synchronous, so cannot be handled by wizard-state-machine\r\n // because wizard-state-machine doesn't have enough information on whether an individual step can\r\n // navigate away or not, and would need to delegate this to the step-state-machine.\r\n // Wizard's navigation button based existing/canceling can be asynchronous and, again, will be\r\n // delegated to the current step as the step has necessary information.\r\n const exitConfirmationMessage = useMemo(() => confirmationMessage || i18n.getString(EXIT_WITHOUT_SAVING_MESSAGE_KEY), [i18n, confirmationMessage]);\r\n const navigationConfirmationPrompt = useNavigationConfirmationPrompt(needsConfirmation, exitConfirmationMessage);\r\n const confirmCancel = useWindowConfirm(exitConfirmationMessage);\r\n useEffect(() => {\r\n stepService.send({ type: StepEvents.OVERRIDE_ACTIONS, data: { confirmCancel } });\r\n }, [stepService, confirmCancel]);\r\n\r\n return [navigationConfirmationPrompt];\r\n};\r\n","import { useCallback } from 'react';\r\n\r\nexport const useWindowConfirm = message =>\r\n // eslint-disable-next-line no-alert\r\n useCallback(() => window.confirm(message), [message]);\r\n","import { constant } from 'underscore';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from '@xstate/react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { ProgressiveLoadingBlock } from '@bingads-webui-campaign-react/shell-ui-common';\r\nimport {\r\n StepEvents,\r\n isLoading as isLoadingSelector,\r\n isFailedInit as isFailedInitSelector,\r\n isFin as isFinSelector,\r\n isStopping as sharedIsStoppingSelector,\r\n log,\r\n stateLoggingListener,\r\n} from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { useUpdateChildPerfMarker } from '@bingads-webui-campaign-react/performance-marker-provider';\r\n\r\nexport const StepLoadingStatus = {\r\n loading: 'loading',\r\n ready: 'ready',\r\n failed: 'failed',\r\n};\r\n\r\nexport const defaultLoadingStatusSelector = (state) => {\r\n if (isFailedInitSelector(state)) {\r\n return StepLoadingStatus.failed;\r\n }\r\n\r\n if (isLoadingSelector(state)) {\r\n return StepLoadingStatus.loading;\r\n }\r\n\r\n return StepLoadingStatus.ready;\r\n};\r\n\r\nexport const defaultIsStoppingSelector = state => sharedIsStoppingSelector(state) || isFinSelector(state);\r\n\r\nexport const defaultFallback = () => ();\r\n\r\n/**\r\n * The step state machine-aware higher-order React component for wrapping an actual step UI component.\r\n * The HOC will render the provided fallback UI until the step has loaded initial data\r\n * required for it to render.\r\n */\r\nconst StepLoadingShell = React.memo(({\r\n stepService,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n loadingStatusSelector,\r\n isStoppingSelector,\r\n stepComponent: StepComponent,\r\n fallback: Fallback,\r\n wizardPerfMarker,\r\n stepPerfMarkerName,\r\n ...restProps\r\n}) => {\r\n useEffect(() => {\r\n const subscription = stepService.subscribe(stateLoggingListener);\r\n log('StepLoadingShell mounted');\r\n return () => {\r\n log('StepLoadingShell unmounted');\r\n subscription.unsubscribe();\r\n };\r\n }, [stepService]);\r\n\r\n const isLoading = useSelector(stepService, isLoadingSelector);\r\n const isStopping = useSelector(stepService, isStoppingSelector);\r\n const perfmarker = useMemo(\r\n () => {\r\n const child = wizardPerfMarker.createChild(stepPerfMarkerName, { autoEnd: false });\r\n child.willInit();\r\n return child;\r\n },\r\n [wizardPerfMarker, stepPerfMarkerName]\r\n );\r\n\r\n useUpdateChildPerfMarker(perfmarker, isLoading);\r\n\r\n useEffect(() => {\r\n stepService.send({ type: StepEvents.OVERRIDE_GUARDS, data: { needsStopping: constant(true) } });\r\n }, [stepService]);\r\n\r\n useEffect(() => {\r\n if (isStopping) {\r\n log('StepLoadingShell sending DONE_STOPPING');\r\n stepService.send({ type: StepEvents.DONE_STOPPING });\r\n }\r\n }, [stepService, isStopping]);\r\n\r\n log('StepLoadingShell.render: isLoading, isStopping', isLoading, isStopping);\r\n\r\n if (isLoading) {\r\n return ;\r\n } else if (!isStopping) {\r\n return ;\r\n }\r\n return null;\r\n});\r\n\r\nStepLoadingShell.propTypes = {\r\n stepService: PropTypes.shape({\r\n subscribe: PropTypes.func.isRequired,\r\n send: PropTypes.func,\r\n }).isRequired,\r\n stepComponent: PropTypes.elementType.isRequired,\r\n loadingStatusSelector: PropTypes.func,\r\n isStoppingSelector: PropTypes.func,\r\n fallback: PropTypes.elementType,\r\n wizardPerfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n stepPerfMarkerName: PropTypes.string.isRequired,\r\n};\r\n\r\nStepLoadingShell.defaultProps = {\r\n loadingStatusSelector: defaultLoadingStatusSelector,\r\n isStoppingSelector: defaultIsStoppingSelector,\r\n fallback: defaultFallback,\r\n};\r\n\r\nexport const withStepLoadingShell = (\r\n StepComponent,\r\n {\r\n loadingStatusSelector: staticLoadingStatusSelector,\r\n isStoppingSelector: staticIsStoppingSelector,\r\n fallback: staticFallback,\r\n } = {}\r\n) => {\r\n const HOC = ({\r\n stepService, loadingStatusSelector, isStoppingSelector, fallback, wizardPerfMarker, stepPerfMarkerName, ...restProps\r\n }) => (\r\n \r\n );\r\n\r\n HOC.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n loadingStatusSelector: PropTypes.func,\r\n isStoppingSelector: PropTypes.func,\r\n fallback: PropTypes.elementType,\r\n wizardPerfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n stepPerfMarkerName: PropTypes.string.isRequired,\r\n };\r\n\r\n HOC.defaultProps = {\r\n loadingStatusSelector: undefined,\r\n isStoppingSelector: undefined,\r\n fallback: undefined,\r\n };\r\n\r\n HOC.displayName = `withStepLoadingShell(${getDisplayName(StepComponent)})`;\r\n hoistNonReactStatics(HOC, StepComponent);\r\n\r\n return HOC;\r\n};\r\n","import { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from '@xstate/react';\r\nimport {\r\n isLoading as isLoadingSelector,\r\n isSaving as isSavingSelector,\r\n StepEvents,\r\n log,\r\n} from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { useIsMounted } from './use-is-mounted';\r\n\r\n/**\r\n * A step repository React component for steps that neither load, nor save any data.\r\n * @param {Object} props the component's props\r\n * @param {Object} props.stepService an instance of the step's state machine\r\n * @returns {Element} an empty VDOM\r\n */\r\nexport const NoDataStepRepository = ({ stepService }) => {\r\n const isMountedRef = useIsMounted();\r\n\r\n const isLoading = useSelector(stepService, isLoadingSelector);\r\n const isSaving = useSelector(stepService, isSavingSelector);\r\n\r\n useEffect(() => {\r\n if (isLoading) {\r\n log('NoDataStepRepository loading data with loadData');\r\n if (isMountedRef.current) {\r\n log('NoDataStepRepository sending DONE_LOADING');\r\n stepService.send({ type: StepEvents.DONE_LOADING, data: {} });\r\n }\r\n } else if (isSaving) {\r\n log('NoDataStepRepository saving data with saveData');\r\n if (isMountedRef.current) {\r\n log('NoDataStepRepository sending DONE_SAVING');\r\n stepService.send({ type: StepEvents.DONE_SAVING, data: {} });\r\n }\r\n }\r\n }, [stepService, isLoading, isSaving, isMountedRef]);\r\n\r\n log('NoDataStepRepository.render: isLoading=_, isSaving=_', isLoading, isSaving);\r\n\r\n return null;\r\n};\r\n\r\nNoDataStepRepository.propTypes = {\r\n stepService: PropTypes.shape({\r\n subscribe: PropTypes.func.isRequired,\r\n send: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import { ComponentSettings } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport CircleSolid from '../media/CircleSolid.svg';\r\nimport CircleDotted from '../media/CircleDotted.svg';\r\nimport DiamondSolid from '../media/DiamondSolid.svg';\r\nimport DiamondDotted from '../media/DiamondDotted.svg';\r\nimport Waterdrop from '../media/Waterdrop.svg';\r\n\r\nconst { getBlockerStyle } = ComponentSettings;\r\n\r\nexport const inlineChartContainerStyle = palette => ({\r\n flexShrink: 0,\r\n zIndex: 400,\r\n boxShadow: 'inset 0px 0.6px 1.8px rgba(0, 0, 0, 0.108), inset 0px 3.2px 7.2px rgba(0, 0, 0, 0.132)',\r\n '& .top-grid-form': {\r\n minWidth: 'initial',\r\n maxWidth: 'initial',\r\n },\r\n '& .chart-area-wrapper': {\r\n display: 'flex',\r\n\r\n '& .react-block-ui-none, .react-block-ui': {\r\n flexGrow: 1,\r\n },\r\n\r\n '& .inline-chart-container': {\r\n flexGrow: 1,\r\n paddingTop: 16,\r\n paddingLeft: 32,\r\n paddingRight: 32,\r\n paddingBottom: 22,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: 'auto !important',\r\n '& .highcharts-label-box.highcharts-tooltip-box': {\r\n opacity: '0 !important',\r\n },\r\n '& .tool-tip-value': {\r\n fontSize: 16,\r\n paddingLeft: 20,\r\n paddingTop: 2,\r\n },\r\n '& .primary-daterange': {\r\n color: palette.neutralPrimary,\r\n fontSize: 11,\r\n fallbacks: [\r\n {\r\n color: '#323130',\r\n },\r\n ],\r\n },\r\n '& .primary-start-date, & .comparison-start-date': {\r\n paddingLeft: 20,\r\n display: 'inline-block',\r\n fallbacks: [\r\n {\r\n paddingLeft: 20,\r\n },\r\n ],\r\n },\r\n '& .primary-end-date, & .comparison-end-date': {\r\n position: 'absolute',\r\n display: 'inline-block',\r\n right: '0',\r\n fallbacks: [\r\n {\r\n right: '0',\r\n },\r\n {\r\n position: 'absolute',\r\n },\r\n ],\r\n },\r\n '& .comparison-daterange': {\r\n color: palette.neutralSecondary,\r\n fontSize: 11,\r\n fallbacks: [\r\n {\r\n color: '#605E5C',\r\n },\r\n ],\r\n },\r\n '& .flex-chart-panel': {\r\n display: 'flex',\r\n paddingBottom: '16px',\r\n alignSelf: 'flex-end',\r\n },\r\n '& .chart-panel-left': {\r\n alignItems: 'flex-start',\r\n lineHeight: '19px',\r\n paddingTop: '6px',\r\n height: 38,\r\n },\r\n '& .chart-panel-right': {\r\n display: 'flex',\r\n flex: '1 1 auto',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n '& .glyphicon-triangle-bottom': {\r\n fontSize: 12,\r\n marginLeft: 5,\r\n fontFamily: 'MsAds MDL2 Assets !important',\r\n float: 'right',\r\n marginRight: '0',\r\n height: '12px !important',\r\n width: '12px !important',\r\n },\r\n '& .glyphicon-triangle-bottom:before': {\r\n content: '\"\\\\E70D\" !important',\r\n },\r\n },\r\n '& .metrics-pickers': {\r\n display: 'flex',\r\n\r\n '& .metric-colors': {\r\n display: 'flex',\r\n },\r\n '& .metrics-vs': {\r\n margin: '0px 16px 0px 16px',\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n },\r\n '& .metric-color-line': {\r\n width: 12,\r\n height: 42,\r\n backgroundRepeat: 'no-repeat',\r\n },\r\n '& .show-comparison-line': {\r\n display: 'inline-block',\r\n },\r\n '& .hide-comparison-line': {\r\n display: 'none',\r\n },\r\n '& .comparison-color': {\r\n marginLeft: '4px',\r\n },\r\n '& .primary-metric .metric-color': {\r\n backgroundImage: `url(\"${CircleSolid}\")`,\r\n },\r\n '& .primary-metric .comparison-color': {\r\n backgroundImage: `url(\"${CircleDotted}\")`,\r\n },\r\n '& .secondary-metric .metric-color': {\r\n backgroundImage: `url(\"${DiamondSolid}\")`,\r\n },\r\n '& .secondary-metric .comparison-color': {\r\n backgroundImage: `url(\"${DiamondDotted}\")`,\r\n },\r\n '& .list-selector-container': {\r\n maxHeight: 400,\r\n overflow: 'auto',\r\n },\r\n },\r\n '& .granularity-picker, & .primary-metric, & .secondary-metric': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignSelf: 'center',\r\n height: '100%',\r\n '& .btn': {\r\n fontSize: 14,\r\n },\r\n '& .btn-default': {\r\n fontWeight: 'normal',\r\n },\r\n '& .dropdown-menu': {\r\n top: 'auto',\r\n position: 'absolute',\r\n minWidth: 110,\r\n whiteSpace: 'nowrap',\r\n\r\n '& .container': {\r\n padding: 0,\r\n },\r\n },\r\n '& .dropdown-toggle.btn': {\r\n border: 'none',\r\n width: '100%',\r\n height: '100%',\r\n paddingLeft: 8,\r\n paddingRight: 8,\r\n borderRadius: 2,\r\n },\r\n\r\n '& .ba-dropdown-selector': {\r\n position: 'relative',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n minWidth: 132,\r\n verticalAlign: 'baseline',\r\n marginLeft: 8,\r\n height: 30,\r\n borderRadius: 2,\r\n '& > button': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n },\r\n\r\n '& .selectedItem-data': {\r\n display: 'inline-block',\r\n marginRight: 5,\r\n },\r\n\r\n '& .comparison-container': {\r\n display: 'inline-block',\r\n },\r\n\r\n '& .show-selectedItem-percentage': {\r\n paddingLeft: 5,\r\n display: 'inline-block',\r\n },\r\n\r\n '& .hide-selectedItem-percentage': {\r\n padding: 0,\r\n margin: 0,\r\n display: 'none',\r\n },\r\n\r\n '& .ba-list-selector': {\r\n border: 'none',\r\n '& .empty-message': {\r\n position: 'absolute',\r\n padding: '5px 10px',\r\n },\r\n '& .list-selector-item': {\r\n padding: '5px 10px',\r\n margin: '0',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: '#f5f5f5',\r\n },\r\n '&.selected': {\r\n background: '#E7F0F6',\r\n },\r\n '& .item-actions': {\r\n float: 'right',\r\n },\r\n '& .inline-recommendation-grid-icon:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\EA80\"',\r\n display: 'inline-block',\r\n fontWeight: 'normal',\r\n fontStyle: 'normal',\r\n textDecoration: 'inherit',\r\n speak: 'none',\r\n fontVariant: 'normal',\r\n textTransform: 'none',\r\n lineHeight: 1,\r\n WebkitFontSmoothing: 'antialiased',\r\n MozOsxFontSmoothing: 'grayscale',\r\n fontSize: 14,\r\n verticalAlign: 'middle',\r\n color: '#0078D4',\r\n paddingBottom: 2,\r\n },\r\n '& .inline-recommendation-grid-icon:hover': {\r\n cursor: 'pointer',\r\n },\r\n '& .inline-chart-option': {\r\n marginLeft: 5,\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .granularity-picker, & .secondary-metric': {\r\n '& .dropdown-menu': {\r\n left: 'auto',\r\n right: '0',\r\n },\r\n },\r\n\r\n '& .moving-average': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n fontStyle: 'normal',\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n marginLeft: 16,\r\n whiteSpace: 'nowrap',\r\n '& input[type=checkbox]': {\r\n height: 20,\r\n width: 20,\r\n },\r\n '& label': {\r\n display: 'inline-block',\r\n fontWeight: 'normal',\r\n '& input': {\r\n margin: '0px 5px 0 5px',\r\n lineHeight: 'normal',\r\n verticalAlign: 'middle',\r\n },\r\n },\r\n },\r\n '& .react-highchart-wrapper': {\r\n '& > div[role=\"region\"]': {\r\n overflow: 'visible !important',\r\n },\r\n },\r\n '& .highcharts-container': {\r\n overflow: 'visible !important',\r\n },\r\n '& .chart-container': {\r\n padding: '0',\r\n position: 'relative',\r\n },\r\n\r\n '& .balloon, & .balloonYellow, & .balloonUnknown': {\r\n position: 'absolute',\r\n top: -20,\r\n },\r\n '& .balloon, & .balloonYellow, & .balloonUnknown:hover': {\r\n cursor: 'pointer',\r\n },\r\n\r\n '& .fluc-image': {\r\n backgroundImage: `url(\"${Waterdrop}\")`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPositionX: 'left',\r\n backgroundPositionY: 'center',\r\n width: '28px',\r\n height: '38px',\r\n textAlign: 'center',\r\n paddingLeft: '1px !important',\r\n paddingTop: '11px !important',\r\n\r\n '&:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\EA80\"',\r\n color: 'white',\r\n fontSize: 16,\r\n },\r\n },\r\n\r\n '& .fluc-lightbulb': {\r\n '&:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\EA80\"',\r\n color: '#0078D4',\r\n fontSize: 16,\r\n },\r\n },\r\n\r\n '& .chart-no-data-container': {\r\n textAlign: 'center',\r\n borderLeft: '0 !important',\r\n borderRight: '0 !important',\r\n height: '120px',\r\n lineHeight: 'initial',\r\n paddingTop: 22,\r\n paddingBottom: 60,\r\n border: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n marginRight: 0,\r\n marginTop: 19,\r\n '& .chart-no-data-label': {\r\n marginLeft: 0,\r\n borderBottom: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n display: 'inline-block',\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .spinner': {\r\n paddingTop: 50,\r\n paddingBottom: 59,\r\n '& .spinner-icon': Object.assign(getBlockerStyle(30, palette), {\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n }),\r\n },\r\n '& .highcharts-label.highcharts-tooltip': {\r\n margin: '0 !important',\r\n width: 'auto !important',\r\n minWidth: '150px !important',\r\n height: 'auto !important',\r\n minHeight: '100px !important',\r\n '& > span:nth-of-type(1)': {\r\n fontFamily: 'Segoe UI !important',\r\n border: 'none',\r\n },\r\n },\r\n '& .perf-graph-tool-tip': {\r\n display: 'flex',\r\n boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n padding: '11px 15px',\r\n '@supports (backdrop-filter: blur(60px))': {\r\n backdropFilter: 'blur(60px)',\r\n backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n },\r\n '& .charts-tooltip': {\r\n color: palette.neutralPrimary,\r\n fontSize: '12px',\r\n fontFamily: 'Segoe UI',\r\n display: 'inline-block',\r\n\r\n '& .primary, & .primary-comparison, & .movingaverage, & .movingaverage-comparison': {\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: '12px 40px',\r\n height: '40px',\r\n '& .toolTipMetric': {\r\n height: 12,\r\n marginRight: 8,\r\n marginTop: 8,\r\n paddingLeft: 20,\r\n },\r\n },\r\n '& b': {\r\n fontWeight: 'normal',\r\n },\r\n '& .primary': {\r\n backgroundImage: `url(\"${CircleSolid}\")`,\r\n },\r\n '& .primary-comparison': {\r\n backgroundImage: `url(\"${DiamondSolid}\")`,\r\n },\r\n '& .movingaverage': {\r\n backgroundImage: `url(\"${CircleDotted}\")`,\r\n },\r\n '& .movingaverage-comparison': {\r\n backgroundImage: `url(\"${DiamondDotted}\")`,\r\n },\r\n },\r\n '& .charts-tooltip:nth-of-type(2)': {\r\n marginLeft: '16px !important',\r\n },\r\n },\r\n },\r\n },\r\n '& .bingads-popover': {\r\n zIndex: '100',\r\n },\r\n});\r\n","export const EntityName = {\r\n AccountEntity: 'Account',\r\n AdGroupEntity: 'AdGroup',\r\n AdEntity: 'Ad',\r\n AuctionInsightEntity: 'AuctionInsight',\r\n AudiencesAssociationEntity: 'AdGroupAudienceAssociation',\r\n AssetGroupEntity: 'AssetGroup',\r\n CampaignEntity: 'Campaign',\r\n KeywordEntity: 'Keyword',\r\n SearchTermEntity: 'SearchTerm',\r\n DsaTargetEntity: 'DsaTarget',\r\n PortfolioBidStrategyEntity: 'PortfolioBidStrategy',\r\n};\r\n\r\nexport const EdmEntityName = {\r\n AccountEdmEntity: 'Accounts',\r\n AdEdmEntity: 'Ads',\r\n AdGroupEdmEntity: 'AdGroups',\r\n AdGroupCriterionEdmEntity: 'AdGroupCriterions',\r\n AssetGroupEdmEntity: 'AssetGroups',\r\n CampaignEdmEntity: 'Campaigns',\r\n CampaignCriterionEdmEntity: 'CampaignCriterions',\r\n KeywordEdmEntity: 'Keywords',\r\n AudienceCriterionWithBIEdmEntity: 'AudienceCriterionWithBIs',\r\n DsaTargetEdmEntity: 'DsaTargets',\r\n PortfolioBidStrategyEdmEntity: 'PortfolioBidStrategies',\r\n};\r\n\r\n// For entities like DsaTarget, they should escape the logic of quering\r\n// on their parent entities even if no filter is applied\r\nexport const PersistentEntity = [\r\n EntityName.DsaTargetEntity,\r\n EntityName.PortfolioBidStrategyEntity,\r\n // Accounts Summary should always query on the Account entity, regardless of filter.\r\n EntityName.AccountEntity,\r\n];\r\n","// Start your code from here for component inlinechart-query-builder\r\nimport _ from 'underscore';\r\nimport * as Constants from './constants';\r\n\r\nexport class InlineChartRequest {\r\n constructor(options) {\r\n this.edm = options.edm;\r\n this.state = options.state;\r\n this.pageContext = options.pageContext;\r\n }\r\n\r\n getParentLevels = () => {\r\n const currentCampaign = this.pageContext.CurrentCampaign;\r\n const currentAdGroup = this.pageContext.CurrentAdGroup;\r\n const parentLevels = [];\r\n\r\n if (currentCampaign) {\r\n parentLevels.push({\r\n name: Constants.EdmEntityName.CampaignEdmEntity,\r\n id: currentCampaign.Id,\r\n });\r\n }\r\n\r\n if (currentAdGroup) {\r\n parentLevels.push({\r\n name: Constants.EdmEntityName.AdGroupEdmEntity,\r\n id: currentAdGroup.Id,\r\n });\r\n }\r\n\r\n return parentLevels;\r\n };\r\n\r\n getDefaultEntityBaseOnParentLevels = (parentLevels) => {\r\n let entity = Constants.EntityName.CampaignEntity;\r\n const currentCampaign = this.pageContext.CurrentCampaign;\r\n const isPerfMaxCampaign = _.findWhere(currentCampaign?.CampaignSettings, { '@odata.type': '#Model.PerformanceMaxSetting' });\r\n const isAppCampaign = _.findWhere(currentCampaign?.CampaignSettings, { '@odata.type': '#Model.AppSetting' });\r\n\r\n if (parentLevels && parentLevels.constructor === Array && parentLevels.length > 0) {\r\n if (parentLevels[parentLevels.length - 1].name ===\r\n Constants.EdmEntityName.AdGroupEdmEntity) {\r\n entity = Constants.EntityName.AdEntity;\r\n } else if (parentLevels[parentLevels.length - 1].name ===\r\n Constants.EdmEntityName.CampaignEdmEntity) {\r\n if (isPerfMaxCampaign || isAppCampaign) {\r\n entity = Constants.EntityName.AssetGroupEntity;\r\n } else {\r\n entity = Constants.EntityName.AdGroupEntity;\r\n }\r\n }\r\n }\r\n\r\n return entity;\r\n };\r\n\r\n isFilterActive = (filter) => {\r\n const filterString = filter && filter.odataV4 ?\r\n filter.odataV4({ ignoreCase: false }) : '';\r\n return (!!filterString);\r\n };\r\n\r\n getCurrentEntity = (entity, filter) => {\r\n if (_.contains(Constants.PersistentEntity, entity)) {\r\n return entity;\r\n }\r\n\r\n // When there is no filter applied, PerformanceTimeSerieis request for all entities\r\n // (Adsgroup, Ads, Kewords) needs to query on Campaign entity inorder to improve\r\n // MT performance.\r\n // the PerformanceData fetched is for Account or Campaign based on the parent level.\r\n // Always use default parent entity if current entity is SearchTerm\r\n if (!this.isFilterActive(filter) || entity === Constants.EntityName.SearchTermEntity) {\r\n // No filters or SearchTerm use default parent entity\r\n return this.getDefaultEntityBaseOnParentLevels(this.getParentLevels());\r\n }\r\n return entity || this.getDefaultEntityBaseOnParentLevels(this.getParentLevels());\r\n };\r\n\r\n formatDateString = (dateStr) => {\r\n const leftPadding = s => ((s.length === 1) ? `0${s}` : s);\r\n const dt = new Date(Date.parse(dateStr));\r\n const year = `${dt.getFullYear()}`;\r\n const month = `${dt.getMonth() + 1}`;\r\n const day = `${dt.getDate()}`;\r\n\r\n return `${year}-${leftPadding(month)}-${leftPadding(day)}`;\r\n };\r\n\r\n getEntityCollectionName = (name) => {\r\n const nameMapping = {\r\n Campaign: Constants.EdmEntityName.CampaignEdmEntity,\r\n Keyword: Constants.EdmEntityName.KeywordEdmEntity,\r\n Account: Constants.EdmEntityName.AccountEdmEntity,\r\n // Negative keywords also show keyword performance trend\r\n NegativeKeyword: Constants.EdmEntityName.KeywordEdmEntity,\r\n // Negative keyword lists also show keyword performance trend\r\n NegativeKeywordList: Constants.EdmEntityName.KeywordEdmEntity,\r\n AdGroup: Constants.EdmEntityName.AdGroupEdmEntity,\r\n AssetGroup: Constants.EdmEntityName.AssetGroupEdmEntity,\r\n Ad: Constants.EdmEntityName.AdEdmEntity,\r\n CampaignCriterion: Constants.EdmEntityName.CampaignCriterionEdmEntity,\r\n AdGroupCriterion: Constants.EdmEntityName.AdGroupCriterionEdmEntity,\r\n AudienceCriterionWithBI: Constants.EdmEntityName.AudienceCriterionWithBIEdmEntity,\r\n DsaTarget: Constants.EdmEntityName.DsaTargetEdmEntity,\r\n PortfolioBidStrategy: Constants.EdmEntityName.PortfolioBidStrategyEdmEntity,\r\n };\r\n\r\n if (nameMapping[name]) {\r\n return nameMapping[name];\r\n }\r\n return name;\r\n };\r\n\r\n generateRequest = (context, metric) => {\r\n const request = {};\r\n const entity = context.currentEntity\r\n ? this.getCurrentEntity(context.currentEntity, context.filter)\r\n : Constants.EntityName.CampaignEntity;\r\n\r\n let accountModes = null;\r\n if (entity === Constants.EntityName.AccountEntity\r\n && this.pageContext.CurrentTabId === 'Performance') {\r\n if (this.pageContext.CurrentGridName === 'SmartPerformanceGrid') {\r\n accountModes = 'Smart';\r\n } else if (this.pageContext.CurrentGridName === 'PerformanceGrid') {\r\n accountModes = 'Expert';\r\n }\r\n }\r\n\r\n if (entity === Constants.EntityName.CampaignEntity ||\r\n entity === Constants.EntityName.AdGroupEntity ||\r\n entity === Constants.EntityName.AdEntity ||\r\n entity === Constants.EntityName.KeywordEntity) {\r\n request.currentCustomerId = this.pageContext.CurrentCustomer.Id;\r\n }\r\n\r\n _.extend(request, {\r\n parentLevels: this.getParentLevels(),\r\n edmEntity: this.getEntityCollectionName(entity),\r\n entity,\r\n startDate: context.period\r\n ? this.formatDateString(context.period.start)\r\n : null,\r\n endDate: context.period\r\n ? this.formatDateString(context.period.end)\r\n : null,\r\n compareStartDate: context.period && context.period.compared\r\n ? this.formatDateString(context.period.compared.start)\r\n : null,\r\n compareEndDate: context.period && context.period.compared\r\n ? this.formatDateString(context.period.compared.end)\r\n : null,\r\n granularity: context.granularity,\r\n metrics: context.metric || metric,\r\n filters: context.currentEntity === Constants.EntityName.SearchTermEntity\r\n ? null // Ignore filters on SearchTerm\r\n : context.filter,\r\n movingAverage: context.isMovingAverageOn,\r\n });\r\n if (accountModes) {\r\n _.extend(request, {\r\n accountModes,\r\n });\r\n }\r\n return request;\r\n };\r\n\r\n getQuery = context => this.generateRequest(context, 'All');\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport * as Constants from './constants';\r\nimport { InlineChartRequest } from './inline-chart-request';\r\n\r\nexport class InlineChartService {\r\n constructor(options) {\r\n this.request = new InlineChartRequest(options);\r\n this.jsdata = options.jsdata;\r\n this.edm = options.edm;\r\n }\r\n\r\n findAll = context => (new Promise((resolve, reject) => {\r\n const filterObj = context.filter;\r\n // Ignore filter string for SearchTerm\r\n const filterString = filterObj && filterObj.odataV4\r\n && context.currentEntity !== Constants.EntityName.SearchTermEntity ?\r\n filterObj.odataV4({ ignoreCase: false }) :\r\n '';\r\n\r\n const request = this.request.getQuery(context);\r\n if (!this.jsdata.PerformanceTimeSeries || !this.jsdata.PerformanceTimeSeries.findAll) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n return this.jsdata.PerformanceTimeSeries.findAll(\r\n {\r\n where: filterString,\r\n entitySet: this.getScope(request).toJSON(),\r\n },\r\n {\r\n // bypass cache, as inline chart needs data aligned with grid, we need always\r\n // update to date here use bypassCache instead of cacheResponse as elsewhere\r\n // (performance card) may cache the response\r\n bypassCache: true,\r\n }\r\n ).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n }));\r\n\r\n getScope = (request) => {\r\n let navigation = null;\r\n\r\n navigation = this.getNavigation(request.edmEntity);\r\n\r\n _.each(request.parentLevels, (nav) => {\r\n const navLocal = nav;\r\n if (navLocal && _.isString(navLocal.id)) {\r\n navLocal.id = parseInt(nav.id, 10);\r\n }\r\n navigation = navigation[navLocal.name].$withKey(navLocal.id);\r\n });\r\n\r\n if (request && request.edmEntity) {\r\n navigation = navigation[request.edmEntity];\r\n }\r\n\r\n const entitySetArgs = {\r\n granularity: `Enum.Granularity'${request.granularity}'`,\r\n startDate: request.startDate,\r\n endDate: request.endDate,\r\n comparisonStartDate: request.compareStartDate ? request.compareStartDate : null,\r\n comparisonEndDate: request.compareEndDate ? request.compareEndDate : null,\r\n metrics: `'${request.metrics}'`,\r\n movingAverage: request.movingAverage,\r\n };\r\n\r\n if (request.currentCustomerId) {\r\n entitySetArgs.currentCustomerId = request.currentCustomerId;\r\n }\r\n\r\n const isHierarchical = request.edmEntity === Constants.EdmEntityName.AccountEdmEntity;\r\n if (isHierarchical && request.accountModes) {\r\n entitySetArgs.accountModes = `'${request.accountModes}'`;\r\n }\r\n\r\n const entitySet = navigation[isHierarchical ? 'Default.HierarchicalPerformanceTimeSeries' : 'Default.PerformanceTimeSeries'].$call(entitySetArgs);\r\n return entitySet;\r\n };\r\n\r\n getNavigation = (entityType) => {\r\n switch (entityType) {\r\n case Constants.EdmEntityName.AccountEdmEntity:\r\n return this.edm.currentCustomer;\r\n case Constants.EdmEntityName.CampaignEdmEntity:\r\n return this.edm.currentAccount;\r\n default:\r\n return this.edm.currentAccount;\r\n }\r\n };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport { InlineChart } from '@bingads-webui-campaign-react/inline-chart';\r\nimport { InlineChartService } from '@bingads-webui-campaign/inline-chart-service';\r\nimport { InlineChartPreferences } from '@bingads-webui-campaign/inline-chart-preferences';\r\nimport { FluctuationService } from '@bingads-webui-campaign/fluctuation-service';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\n\r\n/**\r\n * Creates an inline chart with an accompanying data source and set of chart options.\r\n */\r\nexport class InlineChartWrapper extends React.PureComponent {\r\n static propTypes = {\r\n /**\r\n * grid-preferences adapter.\r\n */\r\n adapter: PropTypes.shape({\r\n registerSubadapter: PropTypes.func,\r\n }).isRequired,\r\n /**\r\n * Used for adding a date change listener.\r\n */\r\n addDateChangeListener: PropTypes.func.isRequired,\r\n /**\r\n * Entity data model.\r\n */\r\n edm: PropTypes.shape({\r\n currentAccount: PropTypes.any,\r\n currentCustomer: PropTypes.any,\r\n }).isRequired,\r\n\r\n /**\r\n * New data range as props for inline-chart whenever there is a date range update\r\n */\r\n dateRange: PropTypes.shape({}),\r\n /**\r\n * Type of entity to fetch chart data for.\r\n */\r\n entityType: PropTypes.string,\r\n /**\r\n * Filter object.\r\n */\r\n filter: PropTypes.shape({\r\n odataV4: PropTypes.func,\r\n }),\r\n /**\r\n * i18n\r\n * */\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n formatDate: PropTypes.func,\r\n }).isRequired,\r\n /**\r\n * Path to use for inline images like fluctuation-bulb.png.\r\n */\r\n imagePath: PropTypes.string,\r\n /**\r\n * instrumentation component.\r\n */\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n inlineChart: PropTypes.shape({\r\n create: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n /**\r\n * True if Fluctuations feature is enabled.\r\n */\r\n isFluctuationsEnabled: PropTypes.bool,\r\n IsFluctuationExperimentEnabled: PropTypes.bool,\r\n /**\r\n * True if chart should be visible.\r\n */\r\n isShowChart: PropTypes.bool.isRequired,\r\n\r\n /**\r\n * True if chart panel should be hidden.\r\n */\r\n hideChartPanel: PropTypes.bool,\r\n\r\n /**\r\n * jsdata resource used for fetching chart data.\r\n */\r\n jsdata: PropTypes.shape({\r\n PerformanceTimeSeries: PropTypes.shape({\r\n findAll: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n /**\r\n * PageContext component.\r\n */\r\n pageContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentCampaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentAccount: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentUser: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentTabId: PropTypes.string,\r\n }).isRequired,\r\n /**\r\n * config component.\r\n */\r\n pathConfig: PropTypes.shape({\r\n get: PropTypes.func,\r\n }).isRequired,\r\n /**\r\n * preferenceService component.\r\n */\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n /**\r\n * Resize window change listener to set highchart container width.\r\n */\r\n resizeChartListener: PropTypes.func.isRequired,\r\n resizeEventHandler: PropTypes.func,\r\n /**\r\n * state component.\r\n */\r\n state: PropTypes.shape({}).isRequired,\r\n /**\r\n * grid-preferences store.\r\n */\r\n store: PropTypes.shape({}).isRequired,\r\n /**\r\n * Auth token used by Fluctuation service.\r\n */\r\n token: PropTypes.string,\r\n /**\r\n * Theme colors, can be null\r\n */\r\n seriesColors: PropTypes.shape({\r\n primary: PropTypes.shape({\r\n original: PropTypes.string,\r\n comparative: PropTypes.string,\r\n }),\r\n secondary: PropTypes.shape({\r\n original: PropTypes.string,\r\n comparative: PropTypes.string,\r\n }),\r\n }),\r\n\r\n /**\r\n * Current gridCriterion Type\r\n */\r\n gridCriterionType: PropTypes.string,\r\n\r\n perfMarker: perfMarkerPropTypes,\r\n\r\n serverContext: PropTypes.shape({}),\r\n\r\n gridDataSource: PropTypes.shape({}),\r\n\r\n defaultPrimaryMetric: PropTypes.number,\r\n scope: PropTypes.shape({}),\r\n };\r\n\r\n static defaultProps = {\r\n entityType: null,\r\n filter: null,\r\n imagePath: null,\r\n isFluctuationsEnabled: false,\r\n IsFluctuationExperimentEnabled: false,\r\n hideChartPanel: false,\r\n resizeEventHandler: noop,\r\n token: null,\r\n seriesColors: null,\r\n gridCriterionType: '',\r\n dateRange: null,\r\n perfMarker: null,\r\n serverContext: null,\r\n gridDataSource: null,\r\n defaultPrimaryMetric: null,\r\n scope: {},\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n\r\n // dataSource and chartOptions are created only once during construction\r\n this.dataSource = this.getDataSource();\r\n this.chartOptions = this.getChartOptions();\r\n }\r\n\r\n getDataSource() {\r\n const {\r\n edm,\r\n jsdata,\r\n pageContext,\r\n state,\r\n } = this.props;\r\n\r\n return new InlineChartService({\r\n edm,\r\n jsdata,\r\n pageContext,\r\n state,\r\n });\r\n }\r\n\r\n /**\r\n * Creates the chartOptions object used for dependency injection of legacy components.\r\n * @param {Object} options - Dictionary of legacy components.\r\n * @returns {Object} chartOptions object to be passed in as an InlineChart prop.\r\n */\r\n getChartOptions() {\r\n const {\r\n adapter,\r\n addDateChangeListener,\r\n entityType,\r\n imagePath,\r\n instrumentation,\r\n isFluctuationsEnabled,\r\n IsFluctuationExperimentEnabled,\r\n pageContext,\r\n pathConfig,\r\n preferenceService,\r\n resizeChartListener,\r\n resizeEventHandler,\r\n state,\r\n store,\r\n token,\r\n seriesColors,\r\n gridCriterionType,\r\n hideChartPanel,\r\n defaultPrimaryMetric,\r\n } = this.props;\r\n\r\n const preferences = new InlineChartPreferences(\r\n store,\r\n pathConfig,\r\n adapter,\r\n preferenceService\r\n );\r\n\r\n return {\r\n isFluctuationsEnabled,\r\n isFluctuationsExperiementEnabled: IsFluctuationExperimentEnabled,\r\n hideChartPanel,\r\n defaultPrimaryMetric,\r\n fluctuationService: FluctuationService,\r\n entityType,\r\n preference: preferences,\r\n pageContext,\r\n instrumentation,\r\n token,\r\n pageState: state,\r\n addDateChangeListener,\r\n resizeChartListener,\r\n resizeEventHandler,\r\n imagePath,\r\n seriesColors,\r\n gridCriterionType,\r\n };\r\n }\r\n\r\n render() {\r\n const {\r\n i18n,\r\n filter,\r\n isShowChart,\r\n dateRange,\r\n perfMarker,\r\n serverContext,\r\n gridDataSource,\r\n scope,\r\n } = this.props;\r\n\r\n return ();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport { InlineChartWrapper } from './inline-chart-wrapper';\r\n\r\nexport class InlineChartView extends Backbone.View {\r\n constructor(options) {\r\n super(options);\r\n\r\n this.filter = options.filter;\r\n this.isShowChart = true;\r\n this.options = _.omit(options, 'filter', 'isShowChart', 'resizeChartListener');\r\n }\r\n\r\n toggleView() {\r\n this.isShowChart = !this.isShowChart;\r\n this.render();\r\n }\r\n\r\n filterUpdated = (filter) => {\r\n this.filter = filter;\r\n this.render();\r\n };\r\n\r\n resizeChartListener = (handler) => {\r\n this.resizeListener = handler;\r\n };\r\n\r\n resizeChart = (width) => {\r\n if (this.resizeListener && width) {\r\n // Invoke the resize chart listener\r\n this.resizeListener(width);\r\n }\r\n };\r\n\r\n render() {\r\n ReactDOM.render(, this.el);\r\n return this;\r\n }\r\n\r\n remove() {\r\n if (this.resizeListener) {\r\n // Invoke the resize chart listener\r\n this.resizeListener = null;\r\n }\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n return super.remove();\r\n }\r\n}\r\n","import { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\n\r\nconst paddingLeft = Constants.PagePadding.smallMainSectionLeftPadding;\r\n\r\nexport const gridPaddingStyle = () => ({\r\n '.small-padding-left.bingadsgrid': {\r\n paddingLeft: 0,\r\n '& .table-container': {\r\n '& table.table': {\r\n '& tbody tr td:first-child': {\r\n paddingLeft,\r\n },\r\n '& thead.header tr th:first-child': {\r\n paddingLeft,\r\n },\r\n '& tfoot.footer tr td': {\r\n paddingLeft,\r\n },\r\n '& colgroup.column-group col.col-Status': {\r\n minWidth: 50,\r\n width: 50,\r\n },\r\n },\r\n },\r\n '& .flex-layout': {\r\n '& .flex-column-group': {\r\n '& .flex-cell[data-column=selection]': {\r\n paddingLeft,\r\n },\r\n '& .flex-cell[data-column=Status]': {\r\n minWidth: 50,\r\n width: 50,\r\n },\r\n },\r\n '& .tfoot.footer .pagination-row': {\r\n paddingLeft,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const pagePaddingStyle = () => ({\r\n '.small-padding-left .disclaimer-banner': {\r\n paddingLeft,\r\n },\r\n ...gridPaddingStyle(),\r\n '.small-padding-left .navbar .container-fluid': {\r\n paddingLeft,\r\n },\r\n});\r\n"],"names":["TurnOnAllAlert","i18n","useContext","I18nContext","_jsx","Alert","message","_jsxs","_Fragment","children","getString","_TL_","level","icon","className","dismissible","FullyOptimizedAlert","extractExclusionRules","finalUrlExpansions","urlEquals","urlContains","customLabels","each","target","conditions","get","isEmpty","Operand","Operator","push","ArgumentOperand","rules","condition","withHttpsPrefix","url","startsWith","concat","keywordsToCriterionName","keywords","forEach","keyword","join","OverflowPlaceholder","_useOverflowMenu","useOverflowMenu","ref","isOverflowing","FinalUrlExpansionPreview","withDefaultStyles","_ref","classes","setToggleFinalURLsEditor","onChange","_useMemo","useMemo","_useMemo2","_slicedToArray","urls","labels","onEditClick","useCallback","onDismissClick","renderUrlsRow","previewRow","UrlsImage","src","alt","length","Overflow","overflowContainer","map","OverflowItem","id","classnames","renderRulesRow","RulesImage","rule","tag","renderLabelsRow","LabelsImage","label","previewContainer","previewHeader","Button","appearance","onClick","EditImage","DismissImage","display","flexDirection","background","boxShadow","padding","margin","borderRadius","gap","maxWidth","justifyContent","minWidth","flexWrap","textWrap","flexGrow","overflowX","flexShrink","textOverflow","whiteSpace","EXCLUSTION_TYPE","UrlInput","memo","validationProps","updateValidation","placeholder","input","validateAndUpdateUrl","value","finalUrlValidatorErrors","fullUrl","indexOf","isValidUrl","lengthLimit","onTextChange","ev","TextField","prevProps","nextProps","data","defaultProps","ValidatedUrlInput","withCustomValidation","TagWithTooltip","content","_useState","useState","_useState2","isOverflow","setIsOverflow","_useState3","_useState4","isTooltipVisible","setIsTooltipVisible","tagRef","useRef","useEffect","current","clientWidth","scrollWidth","Tooltip","relationship","withArrow","visible","onVisibleChange","ValidatedInput","withValidation","ValidationSchema","name","type","properties","maxLength","getFinalURLSectionStyle","_","_ref$palette","palette","inputContainer","dropdown","height","marginRight","dropdownOption","iconStyles","textField","width","addButton","float","sectionsContainer","fontSize","marginLeft","marginTop","marginBottom","borderBottom","alignItems","backgroundColor","fontWeight","color","neutralSecondary","overflow","errorContainer","FinalURLsEditor","props","isOpen","onClose","useDefaultStyles","newFinalUrlExpansions","setNewFinalUrlExpansions","selectedOption","setSelectedOption","_useState5","_useState6","setInput","_useState7","_useState8","validationErrors","setValidationErrors","onAddTag","newUrl","includes","_toConsumableArray","Criterion","WebPage","Type","Parameter","Conditions","CriterionName","filter","flat","onRemovetag","seletedGroup","exclusion","onSave","options","key","text","renderInputField","field","renderUrlTags","Label","index","IconButton","iconProps","iconName","renderRuleTags","renderCustomLabelTags","renderDropdownOptions","option","Icon","title","renderPanelFooter","PrimaryButton","DefaultButton","renderValidationErrors","onValidate","result","messages","newInput","Panel","headerText","closeButtonAriaLabel","onDismiss","onRenderFooterContent","isFooterAtBottom","PanelType","medium","ValidationGroup","schema","Dropdown","onRenderOption","selectedKey","event","selected","allowDisabledFocus","disabled","getAutoGeneratedAssetsStyles","root","position","OptionContainer","assetsOption","paddingLeft","boxSizing","cursor","opacity","top","AutoGeneratedAssetsImpl","textAssetChecked","autoGeneratedTextOptOut","imageAssetChecked","autoGeneratedImageOptOut","finalUrlChecked","finalUrlExpansionOptOut","styles","toggleFinalURLsEditor","onOpenFinalUrlEditor","renderAlert","renderFinalUrlExpansionPreview","classNames","Checkbox","size","checked","ValidatedAutoGeneratedAssets","activity","ActivityContext","_validationProps$data","newData","signal","JSON","stringify","getCPSStyles","cpsOptions","ValidatedCostPerSale","costPerSaleOptOut","_ev","isChecked","onRenderLabel","withVerticalAlignCenterSpan","HelpPopup","topic","LearnMoreLink","dangerouslySetInnerHTML","__html","linkText","href","linkType","AppealBase","_createClass","_classCallCheck","this","AppealByIDsForParentEntity","_AppealBase","parentId","ids","_this","_callSuper","Error","isArray","_inherits","AppealAllForParentEntity","_AppealBase2","_this2","resolveAppealParams","appealParams","getEditorialReasons","appealParamsPromise","_appealParams$options","getEditorialReasonsByIDsForParentEntity","getAllEntitiesForParentEntity","then","createAppealParamsWithIDs","bind","Promise","getAppealRejections","_appealParams$options2","permissions","controller","odataResponse","Errors","utilities","processRejectReasonsFromOdata","editorialAppealAggregator","obj","toString","call","substring","assertInputs","requestAppeal","appealData","appealIds","requestAppealFunc","_appealParams$options3","requestAppealAllForParentEntity","requestAppealByIDsForParentEntity","getRequestFormStyle","requestFormContainer","border","lineHeight","listStyle","paddingRight","textAlign","LegacyEditorialAppealRequestForm","React","container","appealTitle","infoMsg","view","viewListener","clone","Backbone","EditorView","hideAppealCheckBox","isForVNext","withRealTimeUpdates","listenTo","render","$el","appendTo","toBulk","stopListening","remove","undefined","LegacyInlineErrorView","InlineErrorView","rowId","useKwCss","panelStylesProp","footer","_objectSpread","fabricPanelFixStyle","commands","zIndex","getStyles","components","theme","arguments","uiBlockerAdapter","mergeStyles","reactUIBlockerStyle","overflowY","EditorialAppealRequestPanel","onCancel","appealDataPromise","setAppealData","setAppealIds","isBusy","setIsBusy","hasError","setHasError","handleAppealData","aggregatedRejectReasons","first","handleAppealDataError","catch","finally","_useState9","_useState10","editorialAppealFormData","setEditorialAppealFormData","_useState11","_useState12","isEditorialAppealFormDataValid","setIsEditorialAppealFormDataValid","onEditorialAppealChange","isValid","onSaveClick","onCancelClick","Stack","horizontal","tokens","childrenGap","Item","custom","customWidth","UiBlocker","blocking","loadingText","LegacyFinalUrlExpansionUnStyled","_React$Component","isFinalUrlExpansionEnabled","state","operatorMap","Equals","Contains","operandMap","Url","setViewAndUpdateViewModel","isEqual","AutoTargetView","finalUrlExpansionsBulkUpsert","isNegativeAutoTarget","isShowUrlOnly","selectedItem","hideViewSelection","hideWebsiteLabel","isExclude","setFinalUrlExpansionsView","toAddToViewModel","updateViewModels","cloneDeep","isExactMatch","results","DisplayOperator","DisplayOperand","ko","shouldCheckArgumentOperandFormat","selectedTargetsView","viewmodel","addBatch","_this3","finalUrlContainer","Toggle","onText","offText","setState","clear","role","Text","i8n","LegacyFinalUrlExpansion","Object","assign","creationCommonStyle","dsaCampaignStyles","campaignSettingsStyles","adgroupsKeywordsStyles","ValidatedLegacyFinalUrlExpansion","restProps","_objectWithoutProperties","_excluded","LISTING_GROUP_TREE_ROUTING","LISTING_GROUP_LIST_ROUTING","GridType","GRID_NAME","columnChooserId","ScopeLevel","nameColumnOdataPath","treeViewButtonId","listViewButtonId","paginatorStyleClassName","Paginator","currentPage","onPageIndexChange","onPageSizeChange","pageSize","totalCount","pageSizeLabel","pageSizeOptions","assert","pageCount","Math","ceil","pageSizeSelectorId","useId","pageSizeSelectorOptions","selectedPageSize","buildPageSizeOptions","pageIndexSelectorOptions","selectedPageIndex","pageIndexOptions","Array","from","i","pageIndex","PREVIOUS_BUTTON","NEXT_BUTTON","pageIndexChangeHandler","newPageIndex","htmlFor","newPageSize","newMaxPageNum","bulkAddEditorStyleClassName","BulkAddEditor","onSubmit","setValue","multiline","rows","newValue","finalValues","values","split","str","trim","unqiue","Set","res","v","has","toLowerCase","add","formatRawString","panelStyles","main","footerInner","borderTop","overlayProps","panelSelectorStyleClassName","flex","minHeight","onRenderSquareCheckbox","addIcon","PanelSelector","enableShimmer","columns","items","dimensions","onSelectedDimensionChange","initialSelectedItems","keyOfItem","isBulkAddEnabledForDimension","getErrors","preItems","usePrevious","preColumns","preDimensions","preInitialSelectedItems","finalItems","setFinalItemsImpl","setFinalItems","param","finalValue","pre","defaultSelectedDimension","getDefaultSelectedDimension","selectedDimension","isSelectedDimensionChanged","previousSelectedDimension","isCurrentAllSelected","selection","isAllSelected","isNextAllSelect","isEventSupressed","setChangeEvents","setItems","setSelectedItemKeys","selectedItemKeys","setKeySelected","finalColumns","setFinalColumns","Selection","onSelectionChanged","newSelectedItemKeysCandidate","getSelection","getKey","dimension","setSelectedDimension","c","finalColumn","onColumnClick","column","isSortedDescending","isSorted","columnKey","slice","sort","a","b","aValue","bValue","copyAndSort","fieldName","preColumn","dimensionSelectorId","currentPageSize","setCurrentPageSize","currentPageIndex","setCurrentPageIndex","groups","fill","startIndex","count","isCollapsed","selectedItems","item","isLoading","isBulkAddEditorOpened","setIsBulkAddEditorOpened","errors","customCounter","onClickBulkAddValues","onBulkAddEditorCancel","onBulkAddEditorCommit","newValues","newItems","s","__bulk","newSelectedItemKeys","find","isVisible","CommandBarButton","MessageBar","dismissButtonAriaLabel","selectionClearedOnSurfaceClick","ShimmeredDetailsList","setKey","onRenderCheckbox","checkboxVisibility","always","groupProps","onRenderHeader","collapseAllVisibility","hidden","disableSelectionZone","error","ListingGroupColumn","AssetGroupNameColumn","ListingColumn","IncludeExcludeColumn","getColumnChooserCategories","parameters","gridType","scopeLevel","cpsColumnsEnabled","dynamic","SupportCPSForPmax","getAttributeColumnKeys","o","buildCategoryOptionFromColumnRawData","getPerfColumnKeys","getConvColumnKeys","selectOption","lockColumns","locked","optional","isNotNullOrUndefined","Campaign","colmuns","legacyI18nOfListingGroup","Schema_PerformanceMetrics_Property_Impressions","Schema_PerformanceMetrics_Property_Clicks","Schema_PerformanceMetrics_Property_CTR","Schema_PerformanceMetrics_Property_Spend","Schema_PerformanceMetrics_Property_AverageCPC","Schema_PerformanceMetrics_Property_AverageCPM","Schema_PerformanceMetrics_Property_Conversions","Schema_PerformanceMetrics_Property_ConversionRate","Schema_PerformanceMetrics_Property_RevenueOnAdSpend","Schema_PerformanceMetrics_Property_AdvertiserReportedRevenue","Schema_PerformanceMetrics_Property_CPA","Schema_PerformanceMetrics_Property_AllConversions","Schema_PerformanceMetrics_Property_AllConversionRate","Schema_PerformanceMetrics_Property_AllConversionRevenueOnAdSpend","Schema_PerformanceMetrics_Property_AllConversionAdvertiserReportedRevenue","Schema_PerformanceMetrics_Property_AllConversionCPA","Schema_PerformanceMetrics_Property_AverageCPS","Schema_PerformanceMetrics_Property_SalesCount","Schema_PerformanceMetrics_Property_ViewThroughConversions","Schema_PerformanceMetrics_Property_ViewThroughConversionsRevenue","Schema_PerformanceMetrics_Property_ViewThroughConversionsCPA","Schema_PerformanceMetrics_Property_ViewThroughConversionsReturnOnAdSpend","Schema_PerformanceMetrics_Property_ViewThroughConversionsRate","ProductsGrid_Column_All","ProductsGrid_Column_Brand","ProductsGrid_Column_Category1","ProductsGrid_Column_Category2","ProductsGrid_Column_Category3","ProductsGrid_Column_Category4","ProductsGrid_Column_Category5","ProductsGrid_Column_CategoryL1","ProductsGrid_Column_CategoryL2","ProductsGrid_Column_CategoryL3","ProductsGrid_Column_CategoryL4","ProductsGrid_Column_CategoryL5","ProductsGrid_Column_Channel","ProductsGrid_Column_ChannelExclusivity","ProductsGrid_Column_Condition","ProductsGrid_Column_CountryOfSale","ProductsGrid_Column_CustomLabel0","ProductsGrid_Column_CustomLabel1","ProductsGrid_Column_CustomLabel2","ProductsGrid_Column_CustomLabel3","ProductsGrid_Column_CustomLabel4","ProductsGrid_Column_GTIN","ProductsGrid_Column_Id","ProductsGrid_Column_Language","ProductsGrid_Column_MerchantId","ProductsGrid_Column_MPN","ProductsGrid_Column_Price","ProductsGrid_Column_ProductBought","ProductsGrid_Column_ProductType1","ProductsGrid_Column_ProductType2","ProductsGrid_Column_ProductType3","ProductsGrid_Column_ProductType4","ProductsGrid_Column_ProductType5","ProductsGrid_Column_Title","getFullUrlOfAdsOdata","baseUrl","path","adsOdataParams","queryOptions","entityPath","customerId","accountId","campaignId","assetGroupId","scopeLevelPath","queryString","entries","reduce","cur","set","URLSearchParams","NonSplittableConditions","filterOutUsedDimensions","listingConditions","pathsToParent","every","p","filterReachableDimensions","reservedIds","currentOperand","currentId","Id","ParentId","getValidListingConditions","response","isFromEverythingElse","Condition","Attribute","ParentConditions","parentConditionOperands","allItemOperands","filterNonSplittableDimensions","async","updateListingTree","payload","ListingGroupsToAdd","ListingGroupsToDelete","AssetGroupId","itemsToAdd","itemsToDelete","Status","e","createRootListingTree","IsLeaf","IsExcluded","useAPIsOfListingGroup","fetch","fetchImpl","listingGroupGridData","params","responsePromise","json","listingGroupGridDataResponseHandler","method","headers","body","listingGroupGridDataRequest","productAttributeStatistics","p$response","productAttrubuteStatisticsResponseHandler","productListingGroupId","productAttrubuteStatisticsRequest","getListingGroupConditions","getListingGroupConditionsResponseHandler","getListingGroupConditionsRequest","getProductOffers","productOfferResponseHandler","productOfferRequest","mergeStyleSets","errorColor","core","helpButtonStyle","convertToLocalStyle","helpbuttonStyle","merge","statusStyle","themePrimary","white","transitionDuration","themeDark","getGridToolbarConfig","onBidChangeClick","serverContext","toolbarUnselectedConfig","candidates","AssetGroup","iconLeftGlyphName","ariaLabel","attrs","Map","toolbarItem","toolbarItemsWithoutSelection","toolbarSelectedConfig","toolbarItemsWithSelection","columnKeyRawDataMap","cpsColumnKeys","odataPathOfCommonColumnsIterable","odataPathOfListingGroupColumnIterable","odataMapOfListingGroupResponse","anchorHrefPlaceholder","IsCurrentAccountInactive","CurrentAccountInActive","IsReadOnlyMode","ReadOnlyMode","getPropertyFromItem","itemData","odataPathOfProperty","getPropertyByPath","getPropertyFromItemByColumnKey","propertyPath","callout","partitionTrail","currentAttribute","productSampleDescription","productSampleId","link","ProductOffersCallout","fullPath","scope","commonEntityPath","aid","cid","currentCondition","trail","offerCount","setOfferCount","sampleOffers","setSampleOffers","setIsLoading","showOfferLimitExceededError","setShowOfferLimitExceededError","$top","offerLimitExceededContent","offerLimitExceededWarning","Callout","gapSpace","setInitialFocus","block","ReactTemplate","model","offerCountModel","template","sampleOffer","Title","Link","save","messageBarType","warning","ConditionTemplate","total","depth","hasChildren","showSelectorIcon","attributeText","isExpanded","onToggleCollapse","onAddOrEditTrigger","partitionFullPath","updatedScope","attributeRef","showCallout","setShowCallout","hideCalloutTimer","textPadding","toggleIconMargin","fontFamily","onCollpaseToggleKeyDown","stopPropagation","onCollapseClick","Fragment","style","onKeyDown","tabIndex","onMouseEnter","clearTimeout","onMouseLeave","window","setTimeout","onMouseOver","onFocus","closeTooltip","onBlur","FlattenConditionTemplate","NameTemplate","append","fromViewModelToBulkModel","bold","includeExcludeStatusContainer","includeExcludeCallout","neutralLight","IncludeExcludeTemplate","styleClassNames","setTarget","statusIcon","FontIcon","dismiss","show","cellEl","closest","getBoundingClientRect","isInclude","itemToAdd","itemToDelete","refreshGridData","onInclude","onExclude","coverTarget","directionalHint","isBeakVisible","isEverythingElse","isAllProduct","getDisplayName","parentConditions","parentCondition","getNearestParentCondition","replace","getFullPath","getAttributeTextOfConditionTemplate","treeViewInfo","parentItem","parent","parentAttribute","onListingGroupColumnListViewRender","attribute","getPath","onListingGroupColumnTreeViewRender","enable","shouldEnableEdit","eventHandlers","onTreeViewColumnAddOrEdit","onTreeViewColumnToggleCollapse","columnRenderMap","AssetGroupName","currentCampaign","CurrentCampaign","cmpid","CampaignId","assetGroupName","defaultRender","format","getFormatOfColumn","formatter","tryGetFormatString","isColumnSortEnabledMap","listingGroupActivityName","scenario","useLogger","instrumentation","InstrumentationContext","addScenario","ListingGroup","create","getActivity","logger","getLogger","getKeyOfHotelListingGroupItem","getAttributeValueOfPanelSelectorItem","getKeyOfPanelSelectorItem","diemnsionKey","getAddAndDeleteItem","treeItem","childrenOfEidtItem","currentOperandOfChildren","operand","dummyEveryThingElse","finalSelectedItems","oldItemKeys","child","newItemKeys","deleteItemIds","addedItems","productsFiledName","dataColumnWidth","buildTreeViewSelectorItems","selectedDimensionGridData","childrenOfNode","selectedDimensionGridDataMap","AttributeName","domainDataItems","DomainData","curItemDataitem","Value","PerformanceMetrics","Clicks","Conversions","Impressions","ProductCount","apiDataItems","OfferCount","candidateItems","hasDomainData","overrideMergeByValue","x","arr","newItem","fillDataFromAPI","mergeTreeViewSelectorItems","buildTreeViewSelectorItemsByChildrenOfNode","HasDomainData","buildTreeViewSelectorItemsWithoutStatistics","valuePicker","callback","appendNewItems","comparator","findIndex","y","overrideMergeByComparator","xValue","yValue","isString","oldItems","additionalItems","fillDataToBulkAddedItem","primaryColumnRender","Number","isInteger","defaultValue","buildTreeViewSelectorColumns","primaryColumnId","primaryColumnName","includeDataColumns","primaryColumn","isRowHeader","onRender","filedName","useTreeViewPanelSelector","allRowRawData","setAllRowRawData","getArguemntsOfUpdateGridDataByCurrentState","dataRange","expandedItemIds","setExpandedItemIds","isTreeViewSelectorOpen","setIsTreeViewSelectorOpen","treeViewSelectorDimensions","setTreeViewSelectorDimensions","treeViewSelectorHeaderText","setTreeViewSelectorHeaderText","treeViewSelectorInitialSelectedItems","setTreeViewSelectorInitialSelectedItems","treeViewSelectorItems","setTreeViewSelectorItems","treeViewSelectorColumns","setTreeViewSelectorColumns","isTreeViewShimmerEnabled","setIsTreeViewShimmerEnabled","getAccount","ccJsData","useJsDataContext","Account","useAccountData","onGenericError","showError","offerLimitExceededWarningForListingGroup","showWarning","currentSelectedDimensionGridDataTask","updateTreeViewGridByEditTreeItemAndSelectedDimension","task","gridDataParameters","DateRange","StartDate","EndDate","productAttributeStatisticsHelper","productAttrubuteStatisticsResponse","updateTreeViewGridByEditTreeItemAndSelectedDimensionWithoutStatistics","currentValidListingConditions","currentEditTreeItem","getSupportedCountries","isOdataGetProductScopeEnabled","callStartTime","Date","now","pData","dataName","bypassCache","cacheResponse","getSalesCountryCollection","noBMCAccounts","getProductScopeData","getProductDataWithCache","getProductScopeFromOData","uid","queryify","Product","adapter","getProductData","mergeData","SalesCountryCollection","toUpperCase","getCountryCode","shoppingSettings","countryCode","SalesCountry","account","CountryCode","accountCountry","supportedCountries","onTreeViewCancel","onTreeViewSave","callbackWhenSkipUpdate","callbackWhenUpdate","prevOperandOfChildren","negativeId","editItemId","wasEditingNodeLeaf","isEditingNodeLeaf","inheritNode","parentIdOfChildren","listingGroupsToAdd","buildListingGroupToAdd","isLeaf","isDeleteAll","listingGroupsToDelete","metaInfo","treeViewSaveWorker","onTreeViewSelectedDimensionChange","onTreeViewSelectedDimensionChangeWithoutStatistics","getErrorsForTreeViewSelector","totalItemsCount","number","CampaignSettings","setting","getListingGroupConditionsResponseBody","validListingConditions","dimensionsOfItem","DimensionProperties","selectedDimensionName","operands","diemnsion","findResult","getInitialSelectedDimension","currentDimension","currentAttributeId","domainData","isBulkAddEnabled","console","onFilterProduct","getValidListingConditionsForWithoutPreselectedTreeNode","isEveryThingElseRow","ToolbarShownItem","InitializationState","metaColumnOdataPaths","buildColumns","selectedColumnKeys","sortOrder","bindSortFunction","ListingGroupsAllColumnsSortSupport","sortable","contains","columnRawData","isResizable","getColumnRenderByColumnKey","StyledListingGroupsPage","compose","withI18nConsumer","WrappedComponent","preferenceService","perfMarker","listingGroupPerfMarker","marker","createChild","willInit","defaultColumns","i18nWithTL","buildLegacyI18n","toolbarShownItem","setToolbarShownItem","Toolbar","latestGridDataRequestId","toolbarEditor","toolbarConfig","updateToolbar","overrideWith","filterConfig","featureName","entitySchema","ProductListingGroup","legacyGlobalI18n","globalLegacyI18n","schemaI18nCampaign","preferenceStoreFactory","filterPreferences","getCommonFilterConfig","updatePilot","sessionStore","globalConfig","appConfig","cacheService","dataContextManager","jsdata","jsData","editor","enableCampaignWaterfall","enableAdGroupWaterfall","searchbox","searchProperty","searchOperator","getFilterConfig","filterService","FilterService","setPageIndex","setPageSize","sortColumnOdataPath","setSortColumnOdataPath","setSortOrder","pageItemsTotal","setPageItemsTotal","pager","pageNumber","availablePageSizes","onPageChange","getOdataSkipAndTop","changeToListView","changeActiveViewButton","List","changeToTreeView","Tree","update","registerEventHandlersForTreeView","delete","isOrderByEnabled","isSelectEnabled","isFilterEnabled","dataRangeCacheKey","getOdataOrderby","$orderby","$skip","$select","selectedColumnKey","columnOdataPath","getOdataSelect","trickySelectedColumnKeys","$filter","$filterContainer","currentGridType","initializationState","Done","requestId","willFetchData","$count","gridData","willRender","document","getElementsByClassName","gridIndex","parentElement","setAttribute","forceUpdate","useForceUpdate","NotStart","onFilterStateChanged","isRefreshReady","setIsRefreshReady","off","filterString","filterEntity","FilterEntity","toOdata","query","odataOptions","convertFilterEntity2$filter","getEditableFilter","Running","initialColumns","initial","on","ColumnChooserTrivia","ColumnChooser","gridName","toolbarOptions","openColumnChooser","toolbar","categories","legacyI18n","onApply","newColumnKeys","forceHideToolbar","showToolbarSelected","showToolbarUnselected","k","listingGroupColumnIndex","splice","filteredRowData","sortedItems","valueA","valueB","v1","v2","reverse","rawData","raw","listingGroupGridItemsData","getParentKeyOfItem","getPrimaryKeyOfItem","buildItemData","creatingRootNode","setCreatingRootNode","createFirstListingGroupLink","d","CampaignShimmeredDetailsList","onSort","newSortOrder","newSortColumnOdataPath","sortedColumn","sortColumn","getSortedColumn","selectionMode","SelectionMode","multiple","freezingColumnCount","didUpdate","prev","done","onRenderRow","detailsRowProps","focusZoneProps","preventFocusRestoration","timezone","CurrentAccount","TimeZone","ListingGroupsRouterShell","changeLayout","tab","disableCompare","Switch","Route","exact","_createElement","Redirect","to","ListingGroupsShell","withInstrumentation","withCurrentExpandedScope","createOrUpdateCampaign","campaignResource","edmCampaign","types","resolve","ResourceIdentifier","bulkUpdate","bulkCreate","deleteCampaign","bulkDestroy","deleteCall","readCampaign","Customers","$withKey","Accounts","Campaigns","select","toPromise","readCampaigns","where","readCampaignCriterions","CampaignCriterions","$cast","readLocationCriterions","readDayTimeCriterions","createOrUpdateAssetGroup","assetGroupResource","createOrUpdateListingGroup","listingGroupResource","readAssetGroup","isSearchThemeEnabled","isUrlRulesEnabled","toSelect","AssetGroups","readCampaignNegativeWebpages","CampaignNegativeWebpages","skip","readConversionGoalDetails","$makeCall","readExtensionAssociations","AdExtensionAssociations","readNewCustomerAcquisitionGoals","NewCustomerAcquisitionGoals","STEP_PATHS","CAMPAIGN_SETTINGS","ASSET_GROUP","ScenarioName","PerformanceMaxCampaignCreation","PerformanceMaxAssetGroupCreation","PerformanceMaxCampaignSettings","PerformanceMaxAssetGroupSettings","initialCampaignData","Name","Budget","Amount","Languages","BiddingScheme","TargetCpa","TargetRoas","CampaignType","FinalUrlSuffix","TrackingUrlTemplate","UrlCustomParameters","locationTargets","bidMode","currentLevelSettings","initLocations","peopleInLocation","peopleSearchingForLocation","targetOption","parentLevelSettings","useParentLevel","adSchedules","adScheduleUseSearcherTimeZone","dayTimeRanges","timeZone","conversionGoals","originalConversionGoals","goalSelection","goalScopeSelection","Scopes","ACCOUNT","ProviderId","IsFeedFiltered","FeedLabel","LocalInventoryAdsEnabled","initialBrandExclusionsData","addedBrandListIds","deletedBrandListIds","savedAddedBrandListIds","savedDeletedBrandListIds","minuteMap","initialAssetGroupData","campaignLanguageStrings","Albanian","Arabic","Bosnian","Bulgarian","Croatian","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Hungarian","Icelandic","Italian","Japanese","Latvian","Lithuanian","Macedonian","Maltese","Norwegian","Polish","Portuguese","Romanian","Russian","Serbian","SimplifiedChinese","Slovak","Slovenian","Spanish","Swedish","TraditionalChinese","Turkish","Hebrew","Hindi","Malay","Thai","Indonesian","Tagalog","Vietnamese","CampaignNegativeReferenceId","AssetGroupNegativeReferenceId","SupportedExtensionPreviewTypes","Sitelink","StructuredSnippet","Promotion","Price","isBulkWrappedResponse","bulkResult","getBulkUploadErrorType","getBulkUploadEntityType","modelToViewModelForBulkErrors","bulkUpsertEntityErrorMap","activityLogger","errorProcessor","identity","getBulkApiErrors","errorType","mappedErrorType","mapBulkUpsertErrors","removeErrors","bulkErrors","negate","isAudienceAssociationDoesntExistError","ReferencedEntityInvalidIdErrors","isReferencedEntityInvalidIdError","_ref2","removeReferencedEntityInvalidIdErrors","hasBulkErrorsForEntityType","entityType","constant","chain","some","_ref3","unexpectedBulkErrorToString","bulkOrSystemError","stack","status","statusText","ERROR_ENTITY","CampaignLocation","CampaignRadius","CampaignNegativeLocation","CampaignLocationIntent","CampaignDayTimeCriterion","CampaignNegativeWebpage","AudienceGroupAssetGroupAssociation","BrandListAssociation","apiErrorMapper","campaignApiError","isHtmlMessage","DangerousHtmlMessage","code","genericApiError","CampaignApiError","bulkUpsertAssetGroupSettingsEntityErrorMap","_defineProperty","initialAssetGroupViewModel","isDirty","whitelistedSchemaPropertyKeysForBulkModel","whitelistedSchemaPropertyKeysForModel","whitelistedSchemaPropertyKeys","modelToViewModelForTextAssets","assetGroupModel","propertyName","propertyPrefix","assetsArray","viewModelOverride","assetObject","asset","assetText","assetsArrayToObject","viewModelToBulkModelForUrlRules","assetGroupViewModel","originalAssetGroupViewModel","_serverContext$Dynami","isAssetGroupUrlRulesV2Enabled","DynamicPermissions","AssetGroupUrlRulesV2","newAssetGroupUrlTargets","AssetGroupUrlTargets","_assetGroupViewModel$2","UrlRulesOption","URL_RULES_OPTIONS","All","AssetGroupUrlTargetId","newTargetIds","pluck","deletedTargets","originalAssetGroupUrlTargets","originalTargetIds","difference","findWhere","newTargets","bulkModel","Condition1","TargetCondition1","Operator1","TargetConditionOperator1","Value1","TargetValue1","extend","mapTargetFields","parseLoadDate","dateString","parseDate","modelToViewModelForDateSetting","modelToViewModelForAssetGroup","isUrlRulesV2Enabled","pick","Images","ImageAssets","prepareViewModelForImageFetch","assetGroupUrlTargets","getUrlRulesOption","modelToViewModelForURLRules","formatDateToAPIFormat","date","formatDate","parseDateFromAPIFormat","textAssetPropertyNameRegEx","parseAssetPropertyName","matches","match","parseInt","NaN","assetToModel","_ref9","Asset","viewModelToBulkModelForTextAssets","vmPropertyPrefix","assetsObject","pairs","_ref5","_ref6","_ref7","_ref8$","isNumber","isAudienceSignalAssetGroupAssociationCreateOrUpdateScenario","AudienceGroup","isAudienceSignalAssetGroupAssociationDeleteScenario","viewModelToBulkModelForAssetGroup","originalAssetGroup","campaign","_originalAssetGroup$d","_originalAssetGroup$d2","_originalAssetGroup$d3","listingGroups","hasProductFilters","finalListingGroups","listingGroup","viewModelToBulkModelForListingGroup","ProductListingGroups","createBulkModelForListingGroup","viewModelToBulkModelForDateSetting","_assetGroupViewModel$4","AudienceGroupAssetGroupAssociations","AudienceGroupId","OriginalAudienceGroup","viewModelToBulkModelForAudienceGroup","isEmptyUrl","FinalUrls","viewModelToBulkModelForFinalUrls","isCreation","MobileFinalUrls","viewModelToBulkModelForMobileFinalUrls","AssetGroupSearchThemes","_assetGroupViewModel$","searchThemesresult","SearchTheme","AssetGroupSearchThemeId","viewModelToBulkModelForSearchThemes","videos","video","idString","subType","Videos","_assetGroupViewModel$3","ImageList","ImageSPOTLIGHT","apply","ImagePRONG","TransparentLogo","processImageListViewModelToModel","viewModelToBulkModelForImages","imagesModel","viewModelToModelForAssetGroup","modelToViewModelForWindowsAssetGroup","imageProngModel","AssociationType","imageSpotLightModel","transparentLogoModel","imageProngVMPromise","getImagesFromMTAssetsAsync","odata","imageSpotLightVMPromise","transparentLogoVMPromise","imageProngVM","imageSpotLightVM","transparentLogoVM","prepareViewModelForWindowsImageFetch","image","loadAssetGroup","loadAssetGroupForWindowsStore","loadAssetGroupWithVideos","videoRepository","assetGroup","getVideo","videoObjects","videoMT","newVideoFromMTObject","associationType","ThumbnailUrl","thumbnailUrl","bulkModelToViewModelForAssetGroup","_ref13","newOriginalAssetGroupViewModel","_ref13$errors","hasAssetGroupErrors","hasAudienceSignalAssetGroupAssociationErrors","bulkModelToViewModelForDateSetting","associatedIds","association","audienceGroup","associatedAudienceGroup","modelToViewModelForAudienceGroup","searchThemes","newResult","element","modelToViewModelForSearchThemes","_serverContext$Dynami2","assetGroupBulkModel","urlTargets","bulkResponse","targetItem","Condition2","TargetCondition2","Condition3","TargetCondition3","Value2","TargetValue2","Value3","TargetValue3","bulkModelToViewModelForUrlRulesV2","resultsWithIds","bulkModelToViewModelForUrlRules","newAssetGroupViewModel","filteredErrors","isUndefined","serverErrors","saveAssetGroupAndLinkedData","_ref14","_ref15","modelToSave","_bulkModelToViewModel","systemErrors","entity","_bulkModelToViewModel2","warn","initialCampaignCriterionsViewModel","keys","CampaignCriterion","viewModelToModelForCampaignCriterions","campaignCriterionsViewModel","modelToViewModelForCampaignCriterions","campaignCriterionsModel","viewModelToBulkModelForCampaignCriterions","campaignModel","campaignCriterionModel","modelToViewModelForLocationTargets","bundleCountries","_parseLocationTargets","parseLocationTargets","locations","intentId","intentOption","locationTargetsOptionKeys","specific","everywhere","shouldSelectBundleOption","bundleOrDefaultMarket","currentLocations","modelToViewModelForDayTimeTargets","modelToViewModelDayTimeTargets","bulkModelToViewModelForDayTimeTargets","criterions","schedulingRows","criterion","CriterionType","Day","DayTimeCriterion","StartHour","FromHour","StartMinute","FromMinute","EndHour","ToHour","EndMinute","ToMinute","modelToViewModelForCampaignNegativeWebpages","_ref4","campaignNegativeWebpage","bulkModelToViewModelForCampaignNegativeWebpages","bulkModelToViewModelForLocationTargets","locationTargetsModel","intent","getLocationIntent","LocationIntentCriterion","IntentOption","viewModelToBulkModelForLocationTargets","campaignViewModel","bundleLocationCriterions","convertLocationStateToLocationSchemaCampaign","bidStrategy","viewModelToBulkModelForAdSchedules","adSchedulesBulkUpsert","CampaignName","viewModelToBulkModelFoFinalUrlExpansions","autoTargets","viewModelToBulkModelForFinalUrlExpansions","originalCampaignViewModel","originalFinalUrlExpansions","transformObject","baseObject","newIds","originalIds","addedTargets","loadBundleCountries","lcid","CurrentUser","LocaleID","market","Market","getBundleCountriesAndBundleLocationCriterions","initialCampaignViewModel","initialBrandExclusionsViewModel","modelToViewModelForConversionGoals","hasCampaignLevelGoals","CampaignConversionGoal","Goals","CAMPAIGN","modelToViewModelForNewCustomerAcquisitionGoals","accountSettings","campaignSettings","campaignSettingsModel","goalId","bidOnlyMode","additionalConversionValue","campaignGoal","NewCustomerAcquisitionGoalId","NewCustomerAcquisitionBidOnlyMode","AdditionalConversionValue","newCustomerAcquisitionOptOut","newCustomerAcquisition","AdditionalValue","audiences","Audiences","modelToViewModelForCampaign","locationCriterionsModel","dayTimeCriterionsModel","campaignNegativeWebpagesModel","newCustomerAcquisitionGoalsModel","perfMaxCampaignSetting","FinalUrlExpansionOptOut","AutoGeneratedTextOptOut","AutoGeneratedImageOptOut","CostPerSaleOptOut","perfMaxSelectCampaignSetting","IsBSREnabled","BSRAdDistribution","bulkModelToViewModelForConversionGoals","_ref3$errors","conversionGoalsBulkModel","CampaignConversionGoalAssociations","errorKey","originalGoalSelection","goal","Action","GoalId","and","predicate1","predicate2","not","predicate","errorIs","errorCode","bulkModelToViewModelForBrandExclusions","_ref4$errors","_campaignModel$BrandL","BrandListsAssociations","_extractAndRestoreFai","_reduce","acc","brandListAssociation","clientId","brandListAssociationClientId","brandListAssociationErrors","SharedEntityId","campaignServiceSharedEntityAssociationDoesNotExistError","extractAndRestoreFailedBrandListAssociations","brandExclusions","bulkModelToViewModelForCampaign","bulkModelToViewModelForNewCustomerAcquisitionGoals","pageFeeds","viewModelToBulkModelForNewCustomerAcquisitionGoals","_campaignViewModel$da","viewModelToBulkModelForCampaign","brandExclusionsViewModel","Key","Priority","PageFeedIds","pageFeed","brandListId","EntityId","viewModelToModelForCampaign","viewModelToBulkModelForConversionGoals","convertToMTFormat","loadCampaign","loadCampaignAsViewModel","promotionFormatter","promotion","promotionTypeI18nKey","promotionTypeI18nData","_getPromotionDataForm","getPromotionDataFormatConfig","OccasionI18nKeys","ItemPreviewI18nKeys","getPromotionTypeForModel","getPromotionDetailTypeForModel","Occasion","PromotionItem","monetaryDiscount","formatCurrency","MoneyAmountOff","CurrencyCode","percentDiscount","formatPercent","PercentOff","promotionDetailI18nData","promotionTypeFormatted","promotionDetail","promotionDetailI18nKey","promotionDetailFormatted","hasPromotionDetail","amount","OrdersOverAmount","promotionCode","PromotionCode","dateRangeI18nData","dateRangeI18nKey","startDateFormatted","endDateFormatted","formatISODateString","isoDatetimeString","dateToUse","skeleton","dateRangeFormatted","hasDateRange","PromotionStartDate","PromotionEndDate","startDate","endDate","PromotionType","PromotionDetail","hasOccasion","getExtensionFormatters","EAdExtensionType","price","Currency","convertCurrencyCode","priceExtensionFormatter","getExtensionsFromResponse","AdExtension","loadAdExtensionData","all","adExtensionTypes","sitelinkExtensions","calloutExtensions","promotionExtensions","structuredSnippetExtensions","priceExtensions","SiteLink","hasCampaignData","context","Boolean","needsLoading","clearErrors","needsSaving","hasServerErrors","patchStepsData","stepsData","serverErrorsCompare","curr","ServerValidatedRemainingCharsValidatedTextField","RemainingCharsValidatedTextField","hideStepHeaderSelector","stepInfo","hideStepHeader","scenarioNameSelector","scenarioName","permissionsSelector","doesNeedSavingSelector","isStateMachineCanceling","currentLocaleSelector","CurrentLocale","campaignObjectiveSelector","campaignObjective","campaignIdSelector","campaignNameSelector","campaignTimeZoneSelector","campaignSettingsSelector","assetGroupSelector","headlinesSelector","Headlines","longHeadlinesSelector","LongHeadlines","descriptionsSelector","Descriptions","path1Selector","Path1","path2Selector","Path2","finalMobileUrlsSelector","imagesSelector","businessNameSelector","BusinessName","finalUrlsSelector","finalUrlForRecommendationSelector","FinalUrlForRecommendation","adExtensionsDynamicFeaturesSelector","adExtensionsDynamicFeatures","adExtensionsAssociationsFactorySelector","adExtensionsAssociationsFactory","extensionsAssociationsSelector","extensionsAssociations","assetGroupURLRulesSelector","assetGroupURLRulesOptionSelector","audienceGroupSelector","originalAudienceGroupSelector","listingGroupSelector","productFilterSelector","productFilter","searchThemesSelector","aidSelector","cidSelector","serverErrorsSelector","systemErrorsSelector","invalidSaveAttemptSelector","invalidSaveAttempt","isEditingSelector","isEditing","isSavingSelector","isStateMachineSaving","isCancelingSelector","assetGroupControlsContainer","getAssetGroupStepStyles","collapsiblePanel","themeDarker","textDecoration","transform","h3LabelOptional","audienceSignalDescription","gridTemplateColumns","columnGap","gridRow","assetGroupSettingsContentContainer","audienceWizard","textAssetFields","entityIsAssetGroup","entityIs","assetGroupNameProp","andComp","propertyIs","assetGroupBusinessNameProp","assetGroupFinalUrlsProp","assetGroupPath1AndPath2Props","orComp","assetGroupMobileFinalUrlsProp","assetGroupSearchThemesProp","assetGroupImageAssetsProp","ValidatedFinalUrlWithStoreURL","withError","withFinalUrlRecommendationUpdate","withStoreFromProviderId","withStoreUrl","ValidatedFinalUrlWithRecommendations","ServerValidatedFinalUrl","withControlErrorHandling","withUnvalidatedControlErrors","ServerValidatedUrlPath","ValidatedUrlPath","ServerValidatedMobileUrl","ValidatedMobileUrl","ServerValidatedSearchThemeSelector","withContainerErrors","SearchThemeSelector","Adapter","StandardControlAdapter","FocusableActuator","ServerValidatedImageListPortalContainer","ImageListPortalContainerWithControlErrorHandling","UnmappedFormErrors","OriginalUnmappedFormErrors","StepAssetGroupShell","withStepLoadingShell","withServerContext","withScope","stepService","wizardPerfMarker","_useStepAssetGroupSta","isMounted","useIsMounted","ValidationStringMap","useSelector","locale","finalUrls","finalUrlForRecommendation","headlines","longHeadlines","descriptions","campaignName","campaignTimeZone","urlPath1","urlPath2","finalMobileUrls","urlRules","urlRulesOption","images","businessName","originalAudienceGroup","isSaving","isCanceling","doesNeedSaving","getObjectiveExtensions","campaignType","_useMemo$suggestedObj","suggestedObjectiveExtensions","_useMemo$otherObjecti","otherObjectiveExtensions","_useExitWithoutSaving","useExitWithoutSavingConfirmation","navigationConfirmationPrompt","onAssetGroupValidation","newAssetGroupData","restResults","dataPatch","send","StepEvents","UPDATE_VALIDATION","onUpdateExtensionsAssociations","extensionType","associations","onUpdateRecommendationsContext","recommendationContext","_useContext","RecommendationContext","onUpdateFinalUrls","newFinalUrls","onUpdateSearchThemes","newSearchThemes","onUpdateImageList","imageList","onClearAssets","Headline0","Headline1","Headline2","LongHeadline0","Description0","Description1","_usePrevProp","usePrevProp","hasInvalidSaveAttemptChanged","_usePrevProp3","hasServerErrorsChanged","areBeaconsActive","useImpulse","showAllValidationErrors","setShowAllValidationErrors","useStepAssetGroupState","_useStepAssetGroupSta2","stepState","stepApi","_stepState$adExtensio","_permissions$dynamic","UAPLPMaxLogoPreviewEnabled","CopilotCTALogoGeneration","PmaxExtensionPreview","isAssetGroupUrlRulesEnabled","AssetGroupUrlRules","IsPerformanceMaxInCnMarketEnabled","PerformanceMaxInCnMarket","isPMaxNewAspectRatiosEnabled","PMaxNewAspectRatios","isPMaxNewAspectRatiosExcluded","PMaxExcludeNewAspectRatios","isPMaxAspectRatiosV2Enabled","isFeatureBlockedForCnMarket","IsDomesticSimplifiedChineseEnabled","sendCopilotBannerNotification","useBannerService","finalUrlForCopilotRecommendations","setFinalUrlForCopilotRecommendations","_useRecommendations","useRecommendations","finalUrl","handleCopilotBannerFetch","handleCopilotBannerFetchSucceeded","handleCopilotBannerFetchFailed","suggestionPoller","_useContext2","setRecommendationContext","themes","imageAssets","copilotTracking","_recommendationContex","postAssetEventLog","noop","logo","cta","isCustomerIdInExclusionList","finalUrlRecommendations","_useEventLog","useEventLog","logEnterFlow","logFinalUrlRecommendations","logBannerRefresh","logBannerRefreshCompleted","logFetch","logFetchSucceeded","logFetchAssetsSucceeded","logApplyThemes","logSuggestionsViewed","logPrefillAssets","logRemoveAssets","_useCopilotRecommenda","useCopilotRecommendationSurvey","AssetEventFeature","PMAX","triggerSurveyOnSubmit","triggerSurveyOnCancel","trace","setClarityTag","PMaxCampaignsCopilotRecommendations","trackReturnedFinalUrlAssets","_getCopilotRecommenda","getCopilotRecommendationIdsFromThemes","descriptionRecommendationIds","headlineRecommendationIds","longHeadlineRecommendationIds","displayedDescriptions","MAX_INLINE_RECOMMENDATIONS_PER_PAGE","displayedHeadlines","displayedLongHeadlines","viewedTextSuggestionIds","getUntrackedViewedSuggestionIds","flatten","displayedImages","SuggestionViewImageCount","viewedImageSuggestionIds","trackViewedSuggestionIds","_useCollapseState","useCollapseState","_useCollapseState2","allAssetsSections","assetsExpandedSections","setAssetsExpandedSections","providerId","finalUrlExpansion","finalUrlValidationProps","initialValue","debounce","allAssetsExpand","collapseExpander","setActiveKeys","onRenderAdGroupNameLabel","TextTitle","titleKey","topicKey","onRenderDescription","variant","showCopilotDialog","setShowCopilotDialog","imageExperiencePortalContainerState","setImageExperiencePortalContainerState","imageExperienceAddNewImageCallback","setImageExperienceAddNewImageCallback","addNewDescriptionCallback","setAddNewDescriptionCallback","addNewShortHeadlinesCallback","setAddNewShortHeadlinesCallback","_useState13","_useState14","addNewLongHeadlinesCallback","setAddNewLongHeadlinesCallback","_useState15","_useState16","newCTACallback","setNewCTACallback","handleRefresh","handleReset","removeAllInitialSuggestions","handleCopilotDialogClose","maxUploadNum","imageListLength","PMaxImageExperienceMaxImageCount","_useState17","_useState18","shouldPrefill","setShouldPrefill","j","hasAssetsInAssetGroup","newHeadlines","getUniqueAssetsFromThemes","trackInitialSuggestions","AssetPropertyName","HEADLINE","newLongHeadlines","LONG_HEADLINE","newDescriptions","DESCRIPTION","newImages","ImageassetsConstants","imageOptionKeys","Image","processedImages","newImagesAssets","IMAGE","errorMessage","CallToAction","suggestionId","Logo","onApplyCopilotRecommendation","selectedThemes","selectedThemesAndAssets","formattedThemesAndAssets","getFormattedThemeForApplying","uniqAssetRecommendationsInThemes","availableNewImages","suggestionIds","logCopilotViewedImageSuggestions","trackSelectedImageAssets","imageId","onFinalURLFocusOut","onFinalUrlEnter","finalUrlAdditionalProps","onKeyUp","handleFetchThemes","handleFetchThemesSucceeded","themesList","handleFetchAssetsSucceeded","assetsRecommendationData","trackReturnedTextAssets","RecommendedAssets","_useState19","_useState20","isRegionRestricted","setIsRegionRestricted","isCopilotRegionRestricted","feature","validateSpecialCharacters","PerformanceMaxCampaignsFinalURLValidation","PMaxAndDSAFinalURLValidation","assetGroupNameSection","Collapse","allPanelItems","checkItems","skipItemsTypeCheck","activeKeys","ValidatedFixedPanel","GroupInfoImg","attentionBeaconProps","getExtraProps","getPanelErrorProps","formErrorProps","validateOnRender","additionalProperties","enableSpecialCharactersValidation","FluentProvider","webLightTheme","CopilotRecommendationBanner","isToastEnabled","onRefresh","onReset","toastOffset","vertical","onBannerRefreshCompleted","shouldFetchRecommendations","onFetch","onFetchFailed","onFetchSucceeded","CopilotThemesRecommendationDialog","open","onClosed","onFetchAssetsSucceeded","_useCollapseState3","_useCollapseState4","allListingGroupsSections","listingGroupsExpandedSections","setListingGroupsExpandedSections","listingGroupExpand","mergedI18n","mergeI18n","listingGroupDetails","getListingGroupDetails","listingGroupsSection","ValidatedPanel","details","ListingGroupImg","actuationProps","expand","expandKey","ValidatedListingGroups","imagesContainerRef","logosContainerRef","collectionsSummary","collection","displayText","textCardSummaryDetails","getTextCardSummaryDetails","headlinesCardSummaryDetails","getHeadlinesCardSummaryDetails","longHeadlinesCardSummaryDetails","getLongHeadlinesCardSummaryDetails","descriptionsCardSummaryDetails","getDescriptionsCardSummaryDetails","textAndImageAssetsOptional","hasImages","hasTextAssets","assetsSection","ImageAssetsImg","iconAltText","ImageListSummaryCardDetails","isLogos","containerRef","containerState","PerfMaxImageSuggestionCarousel","addImageCallback","LogoAssetsImg","LogoListPortalContainerWithControlErrorHandling","TextAssetsImg","HeadlineAssetCollection","isOptional","showDeleteButton","LongHeadlineAssetCollection","DescriptionAssetCollection","BusinessNameImg","ValidatedStoreBackedBusinessName","CallToActionImg","noOverflowHidden","relativePosition","ValidatedLegacyCallToAction","isPmaxAd","IsPerformanceMaxAutomatedCTAEnabled","getAdExtensionsSections","extensionTypes","extensionsAssociationsFactory","AssociationPanel","sectionKey","panel","panels","sectionsInfo","allSections","suggestedAdExtensionsSections","otherAdExtensionsSections","_useCollapseState5","_useCollapseState6","allEnhanceYourAdsSections","enhanceYourAdsExpandedSections","setEnhanceYourAdsExpandedSections","enhanceYourAdsSection","_useCollapseState7","_useCollapseState8","allMoreAssetsSections","moreAssetsExpandedSections","setMoreAssetsExpandedSections","moreAssetsSection","ValidatedBootstrapPanel","defaultExpanded","BootstrapPanel","Heading","toggle","Body","_useCollapseState9","_useCollapseState10","allMoreOptionsSections","moreOptionsExpandedSections","setMoreOptionsExpandedSections","moreOptionsExpand","_useState21","_useState22","moreOptionsSectionExpanded","setNameAndTitleExpanded","onMoreOptionsSectionToggle","expanded","moreOptionsSection","onToggle","AttentionBeaconGroup","UrlOptionsDetailsWithRulesV2","path1","path2","mobileFinalUrls","UrlOptionsDetailsWithRules","getAdvancedUrlOptionsCardSummaryDetails","Separator","ValidatedUrlRules","ValidatedUrlRulesV2","isReadOnlyUser","IsReadOnlyUser","audienceSignalSection","SparkleImg","AudienceWizard","_useCollapseState11","SearchThemes","_useCollapseState12","allMoreSettingsSections","moreSettingsExpandedSections","setMoreSettingsExpandedSections","moreSettingsExpand","searchThemesSection","getSearchThemeDetails","SearchThemesImg","moreSettingsSection","getDateSettingDetails","StartEndDateImg","ValidatedLegacyDateSetting","isCreate","_useState23","previewImageId","previewLogoId","cropImageObj","editingPlacementType","_useState24","previewImagesSharedState","setPreviewImagesSharedState","imageExperienceComponents","ValidatedImageExperienceWrapper","imagesContaineRef","logosContaineRef","imageAssetsOptional","updateFinalUrlCallback","updatePortalContainerState","UAPLPMaxIntegration","showCopilotOptionForImage","IsBackgroundSceneEnabled","displayUrl","getFinalUrlWithPath","adPreview","previewProps","updateImageList","shortHeadline","longHeadline","description","callToAction","PerfMaxAdPreviewUAPL","logoPreviewEnabled","extensionFormatters","isAdExtensionPreviewEnabled","ActuationGroup","isActive","FormErrorGroup","CopilotRepositoryProvider","getLocale","recommendationType","enableLogoAndCTA","ErrorMessages","stepAssetGroupWizardConfig","StepMachine","stepStateMachine","StepMachineOptions","initialStepsData","machineId","initialContext","actions","guards","StepComponent","withBannerService","withRecommendationContext","canNavigateBackWithoutSaving","stepRepositoryConfig","saveData","assetGroupChanges","saveContext","createActivity","_permissions$dynamic2","_context$stepsData2","_context$data","logRecommendations","logCopilotRecommendations","logRecommendationsFromContext","errorData","loadData","_context$stepsData","getCampaignId","getAssetGroupId","isLoadExtensionFromAPI","log","loadPromises","bulkUpsertCampaignSettingsEntityErrorMap","getErrorsPlaceholders","saveCampaignAndLinkedData","originalCampaign","_ref$viewModelToBulkM","viewModelToBulkModelForDisclaimerAssociation","adSchedulesModel","finalUrlExpansionsModel","conversionGoalsAssociations","newCustomerAcquisitionGoal","adExtensionAssociations","reject","modelToViewModelForConversionGoalDetails","loadConversionGoalDetails","hasIncomingSystemError","serverContextSelector","campaignSelector","locationTargetsSelector","adSchedulesSelector","adSchedulesBulkUpsertModelSelector","finalUrlExpansionsSelector","finalUrlExpansionOptOutSelector","finalUrlExpansionsBulkUpsertModelSelector","bundleCountriesSelector","bundleLocationCriterionsSelector","urlCustomParametersSelector","trackingUrlTemplateSelector","finalUrlSuffixSelector","conversionGoalsSelector","advertiserCustomerIdSelector","AdvertiserCustomerID","conversionGoalsDetailsSelector","conversionGoalDetails","autoGeneratedTextOptOutSelector","autoGeneratedImageOptOutSelector","savedAddedBrandListIdsSelector","savedDeletedBrandListIdsSelector","costPerSaleOptOutSelector","currencySelector","newCustomerAcquisitionSelector","newCustomerAcquisitionOptOutSelector","getStepCampaignSettingsStyles","urlOptionsContainer","moreBasicCampaignSection","outline","advancedBidStrategyContent","visibility","header","entityIsCampaign","campaignNameProp","campaignBudgetProp","campaignBiddingSchemeProp","campaignLanguagesProp","feedAssociationsProp","campaignCPSOptOutProp","campaignLocationCriterions","anyComp","campaignDayTimeCriterions","campaignNegativeWebPages","campaignUrlOptionsProperties","brandListAssociationEntity","notCampaignUrlOptionsProperties","notComp","ServerValidatedLegacyBudget","ValidatedLegacyBudget","ServerValidatedLegacyBidStrategy","ValidatedLegacyBidStrategy","ServerValidatedLanguageTarget","ValidatedLanguageTarget","ServerValidatedLocationTargetSetting","ValidatedLocationTargetSetting","ServerValidatedLegacyAdSchedule","ValidatedLegacyAdSchedule","ServerValidatedLegacyFinalUrlExpansion","ServerValidatedPageFeedSelectorSection","PageFeedSelectorSection","FormErrorBeaconAdapter","ServerValidatedBrandListsPicker","BrandListsPicker","ServerValidatedAutoGeneratedAssets","ServerValidatedCostPerSale","ServerValidatedNewCustomerAcquisition","ValidatedNewCustomerAcquisition","newCustomerAcquisitionServerErrorFilter","StepCampaignSettingsShell","_useStepCampaignSetti","urlCustomParameters","trackingUrlTemplate","finalUrlSuffix","conversionGoalsState","conversionGoalsDetails","advertiserCustomerId","currency","conversionGoalsTitleDetails","getConversionGoalTitleDetails","urlOptions","urlOptionsDetails","getUrlOptionsDetails","biddingScheme","bidBudgetTitleDetails","getBidBudgetTitleDetails","storeContainerData","stores","countries","storesData","setStoresData","onStoreDataLoaded","_ref$stores","_ref$countries","storeTitleDetails","getStoreTitleDetails","onCampaignValidation","newCampaignData","onPageFeedsChange","selectedPageFeeds","reportedSelectedPageFeeds","setReportedSelectedPageFeeds","onSelectedPageFeedsUpdate","pageFeedsDetails","onBrandListsChange","selectedBrandLists","reportedSelectedBrandLists","setReportedSelectedBrandLists","onSelectedBrandListsUpdate","brandListsDetails","autoGenAssetsSummary","autoGenAssetsData","useStepCampaignSettingsState","_useStepCampaignSetti2","adScheduleView","setAdScheduleView","setAdScheduleViewCallback","finalUrlExpansionsView","setFinalUrlExpansionsViewCallback","IsPerformanceMaxCampaignsPageFeedsEnabled","PerformanceMaxCampaignsPageFeeds","IsPerformanceMaxCampaignsAutoGenAssetControlEnabled","PerformanceMaxCampaignsAutoGenAssetControl","IsBrandExclusionEnabled","BrandExclusion","IsSupportCPSForPmaxEnabled","showBudgetSuggestion","EnableBudgetSuggestion","IsNewCustomerAcquisitionEnabled","NewCustomerAcquisition","IsConversionAssociationWarningEnabled","ConversionAssociationWarning","effectiveCampaignId","allCampaignSettingsSections","campaignSettingsExpandedSections","setCampaignSettingsExpandedSections","flipCampaignSettingsExpandAllState","basicSettingsExpand","flipMoreSettingsExpandAllState","moreBasicSettingsExpand","basicSettingsSection","campaignPanel","bidBudgetPanel","BudgetBidImg","isCampaignSetting","ConversionBasedBiddingBanner","isCampaignCreation","newCustomerAcquisitionPanel","ValidatedNewCustomerAcquisitionHeader","optOut","advancedBidStrategy","CostPerSaleImg","locationPanel","LocationImg","getLocationTargetTitleDetails","bidStrategyType","DisplayBiddingStrategyType","languagePanel","lang","LanguageImg","validator","LanguageTargetValidatorFactory","conversionPanel","ConversionsImg","ValidatedConversionGoals","showTrackingStatusIcon","shoppingAdsPanel","ShoppingImg","StoreSelectContainer","generalSettings","sellFromCatalogSettings","without","horizontalAlign","moreBasicSettingsSection","getAdScheduleDetails","AdScheduleImg","getFinalUrlExpansionTitleDetails","FinalUrlExpansionsImg","PageFeedsImg","onSelectedOptionsUpdate","AutoGenAssetsImg","BrandExclusionsImg","isConfirmDialogOn","savedAddedSelectedOptionsKeys","savedDeletedSelectedOptionsKeys","descriptionTextTemplate","UrlOptionsImg","ValidatedUrlOptionsParameter","errorMapper","stepCampaignSettingsWizardConfig","campaignCriterions","_context$data$activit2","BudgetBidCampaignImportNotificationActivity","createScenarioAndActivity","activityName","initialCampaign","newCampaign","showBudgetBidCampaignNotifications","campaignItemList","oldBudget","newBudget","oldBidStrategy","newBidStrategy","_context$data$activit","Permissions","isNewCustomerAcquisitionEnabled","bundleCountriesAndLocationCriterions","newCustomerAcquisitionGoals","locationCriterions","dayTimeCriterions","campaignNegativeWebpages","campaignData","STEP_INFOS","applyCommonSettingsPageSettings","PERF_MAX_CAMPAIGN_CRUD_SCENARIOS","PERF_MAX_CAMPAIGN_CREATION","stepList","PERF_MAX_ASSET_GROUP_CREATION","isCenteredLayout","PERF_MAX_CAMPAIGN_SETTINGS","PERF_MAX_ASSET_GROUP_SETTINGS","PerfMaxAssetGroupCreationPage","StepWizard","wizardScenario","routeToNavigateToWhenDone","PerfMaxAssetGroupSettingsPage","PerformanceMarkerProvider","immediateDone","scopeToRemoveWhenDone","StepWizardWithDynamicOptions","dynamicOptions","extraStepsData","PerfMaxCampaignCreationPage","withSiteMap","withCreationHeader","withTheme","config","localStorage","supportsStorage","getCampaignObjective","getRoutePathById","siteMap","adExtensionsDynamicFeaturesLoader","dynamicOptionsLoader","default","withProps","LazyView","invalidate","fallback","ProgressiveLoadingBlock","PerfMaxCampaignSettingsPage","PMAX_WIZARD_ID_NAME","PMAX_NORTH_STAR_SETTING_WIZARD","PMAX_NORTH_STAR_WIZARD","PRODUCTS","ASSETS","TARGETING","CAMPAIGNDETAILS","BUDGET","SUMMARY","CAMPAIGNSETTING","ASSETGROUPSETTING","FLOWS","PERFMAX_WIZARD","RETAIL_PERF_MAX","FLOWS_TO_FIRST_STEP","AssetGroupNameSection","showFinalUrlExpansion","useStyles","makeStyles","socialRecommendationContainer","paddingTop","paddingBottom","SocialSiteRecommendationSection","isSocialSitesLoading","socialSites","onSocialSiteCheckboxChange","prefillAssetRecommendation","onCheckboxChange","onGenerateButtonClick","recommendation","_evt","primary","AssetGroupNameSectionWithSocialSiteRecommendation","_scope$values","ScopeContext","setSocialSites","setIsSocialSitesLoading","GetSocialSitesRecommendationRequest","FinalURL","readSocialSiteRecommendation","Data","SocialSites","socialSitesRecommendations","additionalSocialSites","socialSite","getAssetsStyles","borderColor","AssetsSection","setSelectedVideoId","selectedVideoId","allPanels","PMaxVideo","PmaxNorthStarAssetGroupSetting","getAssetsPanels","useVideoAdsCopilot","copilotFetchTaskManager","TaskManager","VideoCopilotGeneration","VideoPanel","urlOptionStyles","urlContainer","MoreOptionsSection","urlClasses","_ref$adExtensionsDyna","EnhanceYourAdsSection","MoreAssetsSection","MoreSettingsSection","_assetGroup$data5","_assetGroup$data6","_assetGroup$data","_assetGroup$data2","_assetGroup$data3","_assetGroup$data4","wrapperClass","selectors","radiusShimmerElement","ShimmerElementType","line","SectionShimmer","Shimmer","shimmerElements","shimmerWithElementFirstRow","shimmerWithElementSecondRow","circle","singleLineShimmer","SingleLineShimmer","AdScheduleShimmer","RadioShimmer","StoreSelectorShimmer","SignalSection","PerformanceMarkerContext","audienceSignalSections","audienceSignalExpandedSections","setaudienceSignalSettingsExpandedSections","searchThemeSection","ValidationSearchThemeSelector","AudienceSignalSection","AudienceSignalPanel","PANEL_KEYS","AUDIENCE_SIGNAL","getAssetsStepStyles","imageExperience","formContainer","right","previewerContainer","formHeader","AssetsStepFormInternal","onDataChangeProp","onDataChange","useResponsiveStyles","_ref2$serverErrors","_ref2$systemErrors","ServerContext","useWizardService","wizardData","mergedTempI18n","flow","saveFailed","useFormService","matchStepState","STEP_STATES","SAVING","CANCELING","_ref4$videos","_ref4$Headlines","_ref4$LongHeadlines","_ref4$Descriptions","_ref4$extensionsAssoc","isAdPreviewRefreshEnabled","AdPreviewRefresh","prevData","_useCopilot","useCopilot","currentCTA","enableCopilotRecommendations","assetScenario","AssetScenario","CREATE_WORK_FLOW","copilotBanner","SocialSitesRecommendation","updateExtensionsAssociations","newImageList","PerfMaxResponsiveAdPreviewUAPL","isSettingPage","signalSection","onAssetGroupValidate","AssetsStepForm","AssetsStepShell","AdAssetsFormShimmer","AdAssetsPreviewerShimmer","getODataConfig","odataPath","hostname","location","isLocal","odataToken","Token","oDataToken","ServicesEndpoints","CampaignAPI","oDataPath","getDefaultCampaignData","salesCountry","localInventory","isFeedFiltered","feedLabel","cnMarketAccount","generateNameSuggestionSuffix","floor","random","timeZoneMapper","getAccountTimeZone","getBudgetRange","Daily","Default","getDefaultLanguagesViewModel","MAX_CONVERSIONS_VALUE","getDefaultLocationTargetsViewModel","getDefaultAssetGroup","_ref2$storeFinalUrl","storeFinalUrl","IsOptional","createDefaultCampaign","scenarioContext","_ref$providerId","_ref$salesCountry","_ref$localInventory","_ref$isFeedFiltered","_ref$feedLabel","handleDefaultCampaignCreationError","_ref3$serverErrors","errorMessages","notificationApi","campaignsPagePath","allSiteMap","searchParams","history","pathname","search","BudgetStepSection","AllBudgetStepSections","useLocalizeBudget","localizeBudget","budget","withSymbol","maximumFractionDigits","getBudgetFormStyles","budgetPerformanceTile","budgetTitle","BudgetRange","BingAdsWebUIStaticLegacyPageContext","budgetProp","bidStrategyProp","ServerValidatedBudgetComponent","BudgetComponent","ServerValidatedBidStrategyComponent","BidStrategyComponent","BID_STRATEGY_OPTIONS","MAX_CONVERSIONS","BudgetStepShell","budgetInfo","budgetAmount","cpa","roas","isInitialAdditionalDetailsChecked","budgetSuggestionData","fetchCustomBudgetPerformanceData","budgetTier","loadBudgetPartial","FORM_STATES","LOADING","isDataLoading","bidRange","KeywordBidRange","_ref5$CurrentAccount","wizardState","getFlowFactors","shouldShowBudgetSuggestion","expandedSections","setExpandedSections","expandSections","_useBudgetSuggestionD","isBudgetSuggestionLoading","setIsBudgetSuggestionLoading","setBudgetSuggestionData","customPerformanceData","setCustomPerformanceData","budgetSuggestions","useBudgetSuggestionData","updatedBudgetSuggestionData","DailyRange","budgetSuggestion","GlobalMaximumBudget","DailyBudget","CeilingValue","GlobalMinimumBudget","FloorValue","budgetTitleDetails","bidStrategyTitleDetails","targetValue","TargetCpaWarningBanner","onFieldChange","updatedData","onBidStrategyChange","onBudgetChange","budgetAmountValue","onBudgetValidate","_ref8","isBudgetValid","budgetErrors","onBudgetSuggestionValidate","_ref9$data","onMarketingMetricChange","_ref10","newMarketingMetric","isMarketingMetricValid","marketingMetricErrors","BudgetIcon","as","headingClassName","BudgetSuggestionContainer","mode","MODE","CREATION","CampaignTypes","PerformanceMax","defaultBudget","bidType","minBudget","maxBudget","showDropdown","onNotifyValidation","withSlider","BidStrategyIcon","selectedBidStrategy","defaultChecked","marketingMetricsValue","inputUnit","hideMessage","roasMtToUI","roasUiToMt","toFixed","getTargetingStyles","getLocationTargetingStyles","TargetingStepShell","_ref$data","targetingInfo","_ref3$campaign","_ref3$assetGroup","allAssetGroupSections","assetGroupExpandedSections","setAssetGroupExpandedSections","campaignSettingsExpand","LocationTargeting","onAssetGroupSettingsValidate","onCampaignSettingsValidate","getProductStepStyles","getProductSettingStyles","ProductsStepShellInternal","_useWizardService","_ref4$campaign","_ref4$assetGroup","allProductsSections","productsSectionsExpandedSections","setProdutsSectionExpandedSections","allListingGroupSections","lisitngGroupSectionsExpandedSections","setListingGroupExpandedSections","apiError","_ref6$stores","_ref6$countries","WIZARD_EVENTS","UPDATE_WIZARD_DATA","loadedStoresData","onRenderCustomLoadingComponent","onNavigateToListingGroups","queryParam","QueryParam","onClickNavigateToListingGroups","stopPropogation","ProductsStepShell","getCampaignStylesNorthStar","CampaignDetailsStepShell","campaignInfo","campaignClasses","getCampaignStyles","DisclaimerStringMap","ConversionWarningImprovementEnabled","ConversionWarningImprovement","PMaxDisclaimers","IsMSANDisclaimerEnabled","isPMaxDisclaimersEnabled","disclaimerLoadPerfMarker","disclaimerSavePerfMarker","DisclaimerAdsEnabled","disclaimerRepositoryRef","Repository","DisclaimerAdExtension","skipExtensionCache","associatedDisclaimer","setAssociatedDisclaimer","getAssociatedDisclaimer","disclaimer","disclaimersDetails","getDisclaimerTitleDetails","selectedDisclaimer","isCampaignShoppingType","ValidatedConversionGoalsScopeSelector","isCreationWorkflow","PMaxBrandShowroom","advancedPanels","AD_SCHEDULE","CAMPAIGN_URL_OPTIONS","FINAL_URL_EXPANSION","AUTO_GEN_ASSETS","PAGE_FEEDS","BRAND_EXCLUSIONS","DISCLAIMERS","BRAND_SHOWROOM","getCampaignDetailsPanels","BrandShowroomPanel","switchValidationProps","radioValidationProps","isEnabled","bidAdjustmentIcon","ValidatedDisclaimerExtension","disclaimerContainerWrapper","repository","AllowDisclaimerEnabled","showOnlyPopupLayout","usePanel","useSummarySchemaData","timeDisplayType","setTimeDisplayType","_state$context$wizard","savedProductFilter","savedListingGroup","preferencesService","_preferencesService","initialize","isTwelveHourDisplay","findByName","loc","SelectionStatus","IsSearchThemesEnabled","autoGeneratedAssets","isRendered","currencyCode","bidTarget","costPerSale","locationTargeting","languages","audienceSignal","shouldFetchFromMT","logos","isLogo","getActionText","Language","ActionType","adScheduleCampaign","useSearcherTimeZone","AdScheduleUseSearcherTimeZone","productsPanel","storeInfo","buildSchemaData","PANEL_CONFIGS","rowCount","getPanel","ShimmerElementsGroup","isLastRow","getSummaryImageRowElement","customElementsGroup","SummaryShimmer","_ref2$currentSteps","currentSteps","_ref2$panelConfigs","panelConfigs","step","panelConfig","Areas","ActionTypes","AuditPoints","getDefaultConversionsWarning","locator","DiagnosticsTypes","Issue","stepId","getNoConversionGoalsWarning","ConversionMapping","NotSetUpGoal","HasNoValidCampaignLevelGoal","HasNoValidAccountLevelGoal","NoConversionGoal","HasNoValidGoalAtCampaignOrAccountLevel","HasNoValidGoalAtCampaignOrAccountLevel_NoAccountGoal","HasNoValidGoalAtCampaignOrAccountLevel_ChangeToMainGoal","NoRecentConversion","TrackingStatusNoConversions_NotUploadOfflineConversion","TrackingStatusNoConversions_EventGoalInvalidParameter","TrackingStatusNoConversions_UrlGoalInvalidParameter","TrackingStatusNoConversions_UETMismatch","TrackingStatusNoConversions_UETActiveMissingConversionEvent","TrackingStatusNoConversions_ChangeToMainGoal","TrackingStatusNoConversions","Unverified","TrackingStatusUnverified_UETMismatch","TrackingStatusUnverified_ChangeToMainGoal","TrackingStatusUnverified","TagInactive","TrackingStatusTagInactive_UETMismatch","TrackingStatusTagInactive_ChangeToMainGoal","TrackingStatusTagInactive","InactiveDueToTagUnavailable","TrackingStatusInactiveDueToTagUnavailable_UETMismatch","TrackingStatusInactiveDueToTagUnavailable_ChangeToMainGoal","TrackingStatusInactiveDueToTagUnavailable","MissGoalWithRevenueValue","ScenarioMap","LowerThanSuggestion","EstimatedIncreaseInBudget","InvalidCpa","TargetCpaHigherThanBudget","NoAutoGeneratedAssets","EnableAutoGeneratedAssets","Recommendation","newObj","SummaryStepShell","dataArray","issueList","recommendList","auditPoint","auditDetails","extractAuditPoints","onActionClick","action","NAVIGATE_TO","useActionCallback","schemaData","currentFlow","getCurrentFlow","isPMaxCreationDiagnosticEnabled","PMaxCreationDiagnostic","onAssetsHeaderActionClick","onTargetingHeaderActionClick","onCampaignSettingsHeaderActionClick","onBudgetSettingsHeaderActionClick","onProductsHeaderActionClick","separatorStyles","products","actionButton","dynamicProps","hd1","assets","buildDefaultDataProperty","hd3","hd2","hd4","hd5","targeting","buildSchema","SummaryDiagnostic","issues","recommendations","GeneratedUI","customComponentTypes","summaryPageComponentTypes","updateAssetGroupAndCampaignStatus","assetGroupData","useDiagnosticsData","_ref$areas","areas","timeZoneId","oDataConfig","AdInsightAPI","oDataOptions","contentType","fetchDiagnosticData","Diagnostic","CampaignDiagnosticDetail","areasStr","area","baseURL","patchDiagnosticsData","diagnosticsData","patchedDiagnosticsData","_ref4$Budget","_ref4$Budget2","BudgetAmount","BudgetType","BudgetStatus","_ref4$BiddingScheme","_ref4$BiddingScheme2","BiddingSchemeType","currentDailyBudget","suggestedDailyBudget","StepConfig","Activity","ScenarioContext","PermissionsContext","versionForLog","getLogVersion","getLoggerWithoutPageInfo","isPMaxNewAspectRatios","createVideoRepository","folderRepository","createFolderRepository","imageRepository","createImageRepository","uploadVideoIfNeeded","videoPromises","uploadVideoMetadata","videoMetadata","newVideo","err","load","savedAssetGroup","savedCampaign","saveCampaignsPromise","savedAssetGroupPromise","initialData","assetGroupToSave","initialAssetGroup","storeQueries","getStoreQueriesWithLocalMock","getStoreInfoPromise","getStore","promises","DestinationUrl","campaignToSave","saveCampaignPromise","saveAssetGroupPromise","campaignResults","assetGroupResults","savePromises","savedBrandExclusions","BrandExclusionsViewModel","brandExclusionsToSave","savedLocationTargets","_usePreference","usePreference","preferenceNames","SelectedCurrency","currencyPreference","diagnostics","_useBudgetSuggestionR","useBudgetSuggestionRepository","loadBudget","saveBudget","modelToViewModel","parseFloat","language","updatedCampaign","parseDecimal","_campaign$data","_campaign$data$Budget","_campaign$data2","budgetSuggestionResults","LogTargetCpaCheckOnSave","isBudgetSuggestionEnabled","disclaimerPerfMarker","savedDiagnostics","isPublishing","_useDiagnosticsData","isPMaxDiagnostic","msg","auditCheckList","convertDiagnosticsDataToTrackingLog","StepList","currentStepId","getCurrentStepId","displayMode","useResponsiveSize","Constants","ResponsiveSizeBreakpoints","stepListConfig","unshift","getStepListConfig","getDefaultOnItemClickFn","toStep","steps","firstSubStep","isBehind","ResponsiveStepList","getOnItemClickFn","SaveAndPublish","saveButtonText","isBlocking","FETCHING","onNextClicked","SAVE_AND_EXIT","buttonText","currentStep","SaveAsDraft","_useWizardService2","NextButton","_useWizardService3","MULTI_AD_MANAGER","AD_GROUP","SAVE_AND_NEXT","BackButton","_useWizardService4","onBackClicked","MULTI_AUDIENCE_CAMPAIGNS","BACK","PerfMaxStepFooter","nextButtonText","nextDisabled","backButtonText","cancelButtonText","hideBackButton","isFirstStep","getIsFirstStep","isLastStep","getIsLastStep","CancelButton","PerfMaxSettingStepFooter","STATES_TO_LOG","ACTIVE","GOING_NEXT","GOING_BACK","DONE","WizardLogger","stepTime","loadStart","loadEnd","saveStart","saveEnd","wizardTime","start","end","toStrings","logStepStates","PerfMaxNorthStarWizardImpl","getLocalStorage","AppsAdsPerfMaxFluentV2","wizardFlow","initialStep","wizardConfig","initialFlowFactors","initialWizardData","getFlow","onDone","onExited","attachStepActivities","PerfMaxNorthStarWizard","FluentSwitcherContext","Provider","Scenario","Wizard","WizardPerfMarker","wizardName","wizardMarker","LayoutContainer","DefaultTemplate","Layout","component","StepContainer","SaveBlocker","CancelWizardDialog","withPermissions","rest","CampaignSettingStepShell","getWizardData","IsConversionAssociationWarningP2Enabled","ConversionAssociationWarningP2","URL_OPTIONS","basicPanels","BID_STRATEGY","LOCATIONS","LANGUAGE_TARGET","SHOPPING","CONVERSIONS","NEW_CUSTOMER_ACQUISITION","getCampaignSettingsPanels","CampaignNamePanel","CAMPAIGN_NAME","AdSchedulePanel","UrlOptionsPanel","patchedData","getMessageType","customConfirmMessages","allExpandedSections","_ref11","_ref12","_ref13$stores","_ref13$countries","BudgetPanel","BidStrategyPanel","bidStrategyComponentOptions","bidStrategyOptions","biddingBannerOptions","LocationTargetingSettingPanel","LanguageTargetPanel","IsPmaxNorthStarSettingFailure","getStepConfig","machineOptions","needsConfirming","getNeedConfirming","PerfMaxNorthStarSettingWizard","ConfirmWizardDialog","useConfirmDialogConfigWithLogger","_props$data","_props$data$campaign","stepName","IsPmaxNorthStarAssetGroupSettingFailure","IsPmaxNorthStarAssetGroupCreationFailure","cacheManager","getAssetStepConfig","PerfMaxNorthStarAssetGroupSettingWizard","DuplicateWordAlert","MaxSelectionAlert","selectedOptionsLimit","useSearchThemeSelectorStyles","shorthands","spacingVerticalS","tagsList","spacingVerticalXS","gridGap","spacingHorizontalXS","searchBox","spacingHorizontalM","alertMes","SearchThemeSelectorImpl","onChangeFromProp","selectedOptions","setSelectedOptions","isLimitReached","setIsLimitReached","isDuplicate","seIsDuplicate","onDeleteItem","newSelectedOptions","indexSelected","searchValue","updateSearchValue","mergeClasses","SelectedItem","itemText","itemIndex","onDelete","SearchBox","onSearch","newVal","draftSelectedOptions","onClear","ValidationSearchThemeSelectorInternal","newsearchThemes","activate","setIsActive","isRestarting","setIsRestarting","isMountedRef","budgetContainer","neutralPrimary","LegacyBudget","validationDailyMinBudget","hideBudgetMinRecommendation","BudgetView","hideDailyBudgetOptions","showBudgetMinRecommend","PageContext","BCCBudgetImprovementEnabled","currencySymbol","getCurrencySymbol","AccountCurrencyCode","minimumBudget","_bingads_webui_static_legacy_page_context","LegacyBudgetWithCustomValidation","isPremiumStreaming","newIsValid","EDITING","datas","BudgetSuggestionDialog","getConversionGoalStyles","ConversionGoalSelectorContainer","paginationStyle","ConversionGoalsWithCustomValidation","conversionGoalsData","_conversionGoalsData$","ConversionGoalKeyToStringMapping","$dataRange","useP$DaterangeDefault","changedData","campaignConversionGoal","ConversionGoalSelector","isSelectorEnabled","isMultiMode","isHideSaveBar","GoalSelector","productOptions","buttonContainer","merchantCenterAccountContainer","productFilterEditContainer","stackContainerToken","ListingGroupsWithCustomValidation","storeDetails","_useTreeViewPanelSele","selectedProducts","setSelectedProducts","selectedOperand","setSelectedOperand","setProductFilter","onOpenPanel","onDeleteProduct","navigateToListingGroupPage","onChangeOptions","hasSelectedProducts","hasSelectedOperand","updatedListingGroup","useDateRange","ChoiceGroup","filterProductsPreview","wrap","disableShrink","Glyphicon","glyph","withCampaignSiteMap","LocationTargetSettingWithCustomValidation","skipValidation","allowBidAdjustment","dealInfo","isLocationValid","LocationTargetSetting","setData","AudienceWizardWithShimmer","withShimmer","AudienceSignalShimmer","AudienceImg","showShimmer","campaignTrackingUrlTemplate","campaignFinalUrlSuffix","campaignUrlCustomParameters","trackingUrlTemplateControlsWrapper","partial","finalUrlSuffixControlsWrapper","urlCustomParametersControlsWrapper","functionsToInject","ValidatedUrlOptionsParameters","_ref$setSelectedVideo","isVideoRequired","skipQualityValidation","loadClipchampPlayer","videoTypesWithOrder","videosContainer","videoAd","ValidatedVideoExperience","multiVideoMode","allowedVideoSizes","disableRemoveAll","hideRatioLabel","videoExperienceCircleUploadType","disableUploadTextField","videoPickerContainerHeight","setSelectedVideoIdx","selectedVideoIdx","copilotEnabled","isVideos","VIDEOS","limit","useClasses","switch","CustomAdapter","AdapterFactory","valueToInject","convertEventToValue","CustomRadioGroupAdapter","ValidatedSwitch","onChangeInternal","ValidatedRadioGroup","RadioGroup","cardProps","ValidatedCollapseCard","FormCardHeader","Spacer","FormCardError","AccordionButton","FormCardBody","Field","Radio","WizardEvents","STEP_LOADING","STEP_SAVING","STEP_DONE_LOADING","STEP_DONE_SAVING","STEP_DONE_CANCELING","STEP_FAILED_LOADING","STEP_ABORTED_SAVING","STEP_ABORTED_CANCELING","STEP_STOPPED","NAVIGATE_BACK","NAVIGATE_NEXT","CANCEL","EXIT","SAVE","DONE_SAVING","FAILED_SAVING","DONE_LOADING","FAILED_LOADING","ACTIVATE","DEACTIVATE","STOP","DONE_STOPPING","OVERRIDE_ACTIONS","OVERRIDE_GUARDS","logF","argsSerializer","_console","_len3","args","_key3","_len2","_key2","logAction","_len","_key","_len5","_key5","stateLoggingListener","machine","WizardStates","stepIndexSelector","stepIndex","stepServicesCacheSelector","stepServicesCache","isBusySelector","wasSavingSelector","wasWaitingForConfirmationSelector","wasStoppingSelector","getStepInfo","getStepServiceRef","defaultActions","acquireStepService","stepServiceNeedsActivation","extendedStepMachine","spawn","stopStep","activateStep","deactivateStep","notifyStepToSave","notifyStepToCancel","setNavigatingForward","navigatingTo","setNavigatingBack","setExiting","isExiting","applyNavigation","resetNavigation","notifyDone","isFunction","defaultServices","defaultGuards","isNotNavigating","doesServiceNeedActivation","getStartingState","wizardOptions","_wizardOptions$onDone","wizardStateMachine","_ref$machineId","_ref$actions","_ref$services","services","_ref$guards","createMachine","preserveActionOrder","predictableActionArguments","strict","states","entry","cond","StepStates","isStopping","isFin","isFailedInit","contextSelector","defaultInitialContext","actionsOverride","guardsOverride","replaceData","replaceStepsData","patchData","onInvalidSaveAttempt","overrideActions","overrideGuards","notifyLoading","sendParent","notifyDoneLoading","notifyFailedLoading","notifySaving","notifyDoneSaving","notifyDoneCanceling","notifyAbortedSaving","notifyAbortedCanceling","notifyStopped","requestConfirmation","delay","aborted","confirmCancel","needsStopping","_states","_ref$initialContext","invoke","onError","xstateStateMachine","PropTypes","isRequired","formStyle","getWizardStyles","spinnerKeyframe","wizardContainer","glyphIconStyle","wizardListContainer","borderRight","neutralQuaternaryAlt","borderLeft","blue","borderLeftColor","wizardMainContainer","neutralLighterAlt","wizardStepContainer","wizardSingleStepLayoutStepScrollingContainer","wizardSingleStepLayoutCenteredStepContainer","wizardSingleStepLayoutStepContainer","wizardStep","flexBasis","wizardFooter","mobileNavContainer","StepRepository","isLoadingSelector","contextRef","asyncTokenRef","cancel","createAsyncToken","onSuccess","arg0","propTypes","subscribe","getStepRepository","getStepProgressItemGlyphicon","isSelected","containsSelected","footerStyleOverrides","skippingLink","cancelButton","StepsContextProvider","VerticalSeparatedLayout","StepProgressList","MultiStepLayout","_ref$wizardState","stepListWithServiceInfo","_ref$wizardActions","wizardActions","saveAndNavigateNext","saveAndNavigateBack","cancelAndExit","saveAndExit","stepFooter","beforeLastStepNextButtonText","saveAndExitButtonText","previousButtonText","StepFooter","styleOverrides","onNextClick","isNextClickDisabled","onSkippingLinkClick","skippingLinkTitle","previousButtonAfterNext","onPreviousClick","isPreviousClickDisabled","last","isReadOnly","currentPath","getItemGlyphicon","SingleStepLayout","Step","StepWizardImpl","_useWizardState","_props$extraStepsData","_props$wizardScenario","withContentFooter","_props$machineId","StepWizardScenario","scopeRef","wizardMachine","useRefInit","service","useInterpret","stepInfo2","wasSaving","wasWaitingForConfirmation","wasStopping","addEventListener","removeEventListener","useWizardState","_useWizardState2","_wizardState$withCont","enabled","enableRenderingLog","initialized","stepPerfMarkerName","ContentFooter","useNavigationConfirmationPrompt","needsConfirmation","confirmationMessage","onUserNavigation","Prompt","beforeUnloadListener","preventDefault","returnValue","capture","exitConfirmationMessage","confirm","StepLoadingStatus","StepLoadingShell","isStoppingSelector","loadingStatusSelector","stepComponent","Fallback","subscription","unsubscribe","perfmarker","autoEnd","useUpdateChildPerfMarker","isFailedInitSelector","sharedIsStoppingSelector","isFinSelector","staticLoadingStatusSelector","staticIsStoppingSelector","staticFallback","HOC","_excluded2","displayName","hoistNonReactStatics","getBlockerStyle","ComponentSettings","inlineChartContainerStyle","fallbacks","alignSelf","backgroundRepeat","backgroundImage","CircleSolid","CircleDotted","DiamondSolid","DiamondDotted","maxHeight","verticalAlign","fontStyle","speak","fontVariant","textTransform","WebkitFontSmoothing","MozOsxFontSmoothing","left","Waterdrop","backgroundPositionX","backgroundPositionY","backdropFilter","backgroundSize","EntityName","EdmEntityName","PersistentEntity","InlineChartRequest","getParentLevels","pageContext","currentAdGroup","CurrentAdGroup","parentLevels","getDefaultEntityBaseOnParentLevels","isPerfMaxCampaign","isAppCampaign","constructor","isFilterActive","odataV4","ignoreCase","getCurrentEntity","formatDateString","dateStr","leftPadding","dt","parse","year","getFullYear","month","getMonth","day","getDate","getEntityCollectionName","nameMapping","Keyword","NegativeKeyword","NegativeKeywordList","AdGroup","Ad","AdGroupCriterion","AudienceCriterionWithBI","DsaTarget","PortfolioBidStrategy","generateRequest","metric","request","currentEntity","accountModes","CurrentTabId","CurrentGridName","currentCustomerId","CurrentCustomer","edmEntity","period","compareStartDate","compared","compareEndDate","granularity","metrics","filters","movingAverage","isMovingAverageOn","getQuery","edm","InlineChartService","findAll","filterObj","PerformanceTimeSeries","entitySet","getScope","toJSON","navigation","getNavigation","nav","navLocal","entitySetArgs","comparisonStartDate","comparisonEndDate","isHierarchical","$call","currentCustomer","currentAccount","InlineChartWrapper","_React$PureComponent","dataSource","getDataSource","chartOptions","getChartOptions","_this$props","_this$props2","addDateChangeListener","imagePath","isFluctuationsEnabled","IsFluctuationExperimentEnabled","pathConfig","resizeChartListener","resizeEventHandler","store","token","seriesColors","gridCriterionType","hideChartPanel","defaultPrimaryMetric","preferences","InlineChartPreferences","isFluctuationsExperiementEnabled","fluctuationService","FluctuationService","preference","pageState","_this$props3","isShowChart","dateRange","gridDataSource","InlineChart","InlineChartView","_Backbone$View","filterUpdated","handler","resizeListener","resizeChart","ReactDOM","el","_superPropGet","PagePadding","smallMainSectionLeftPadding","pagePaddingStyle"],"sourceRoot":""}