{"version":3,"file":"static/js/application.async.non-landing~e2ae3a23.dd3c531e.chunk.js","mappings":"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","sources":["../../../../linkedin-campaign/packages/linkedin-utils/src/campaign-goal.js","../../../../linkedin-campaign/packages/linkedin-utils/src/permission-status.js","../../../../linkedin-campaign/packages/linkedin-utils/src/wizard-utils.js","../../../../linkedin-campaign/packages/linkedin-utils/src/audience.js","../../../../linkedin-campaign/packages/linkedin-data/src/edm-crud/campaign-crud.js","../../../../linkedin-campaign/packages/linkedin-data/src/edm-crud/ad-group-crud.js","../../../../linkedin-campaign/packages/linkedin-data/src/edm-crud/ad-crud.js","../../../../linkedin-campaign/packages/linkedin-data/src/edm-crud/location.js","../../../../linkedin-campaign/packages/linkedin-data/src/edm-crud/audience.js","../../../../linkedin-campaign/packages/linkedin-data/src/edm-crud/company-page-linking.js","../../../../linkedin-campaign/packages/linkedin-data/src/model/campaign.js","../../../../linkedin-campaign/packages/linkedin-data/src/model/ad.js","../../../../linkedin-campaign/packages/linkedin-data/src/model/budget.js","../../../../linkedin-campaign/packages/linkedin-data/src/model/criterion.js","../../../../linkedin-campaign/packages/linkedin-data/src/error-handling/bulk-upsert-errors.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/use-initialize-wizard.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/use-initialize-company-page.js","../../../../linkedin-campaign/packages/linkedin-instrumentation/src/use-intrument-logger.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/reducer.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-linkedin-linking.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-load-compony-pages.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-save-company-page.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-error.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-refresh-member-token.js","../../../../linkedin-campaign/packages/linkedin-shared-components/src/step-header.js","../../../../linkedin-campaign/packages/linkedin-shared-components/src/linkedin-logo.js","../../../../linkedin-campaign/packages/linkedin-shared-components/src/common-skeletons.js","../../../../linkedin-campaign/packages/linkedin-shared-components/src/member-token-warning.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/styles/authentication-stage-styles.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/stages/authentication-stage.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/shared-components/compony-page-item.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/styles/company-page-selection-stage-styles.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/shared-components/term-and-conditions.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/stages/company-page-selection-stage.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/styles/request-access-stage-styles.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/stages/request-access-stage.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/styles/permission-check-stage-V2-styles.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/stages/permission-check-stage-V2.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-load-permission-status.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/hooks/use-resend-permission-request.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/stages/member-token-refresh-stage.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/constants.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/campaign-panel.js","../../../../linkedin-campaign/packages/linkedin-ad/src/styles/company-page-style.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/company-page-card.js","../../../../linkedin-campaign/packages/linkedin-ad/src/styles/linkedIn-ad-styles.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/collapsible-final-url.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/call-to-action.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/collapsible-call-to-action.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/collapsible-introductory-text.js","../../../../linkedin-campaign/packages/linkedin-ad/src/hooks/use-disabled-keynav-region.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/collapsible-headline.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/collapsible-images.js","../../../../linkedin-campaign/packages/linkedin-ad/src/consts.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/media-editor-controls.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/linkedin-ad-settings.js","../../../../linkedin-campaign/packages/linkedin-ad/src/styles/ad-previewer-styles.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/ad-previewer.js","../../../../linkedin-campaign/packages/linkedin-ad/src/use-ad-preview-state.js","../../../../linkedin-campaign/packages/linkedin-ad/src/use-ad-preview-data.js","../../../../linkedin-campaign/packages/linkedin-ad/src/components/linkedin-ad-footer.js","../../../../linkedin-campaign/packages/linkedin-ad/src/linkedIn-ad-step.js","../../../../linkedin-campaign/packages/linkedin-ad/src/linkedIn-ad-repository.js","../../../../linkedin-campaign/packages/linkedin-ad/src/use-ad-editor-repository.js","../../../../linkedin-campaign/packages/linkedin-ads-manager/src/styles/ad-preview-styles.js","../../../../linkedin-campaign/packages/linkedin-ads-manager/src/components/ad-preview.js","../../../../linkedin-campaign/packages/linkedin-ads-manager/src/styles/ads-manager-step-styles.js","../../../../linkedin-campaign/packages/linkedin-ads-manager/src/linkedin-ads-manager-step.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/skeletons.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/utils.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/cards/collapsible-locations.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/targeting-locations.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/language-info-banner.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/consts.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/targeting-language.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/cards/collapsible-language.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/styles/company-name-option-styles.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/styles/targeting-audiences-styles.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/targeting-audiences.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/company-name-option.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/cards/collapsible-audiences.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/targeting-gender.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/cards/collapsible-gender.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/targeting-age.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/cards/collapsible-age.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/warning-message.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/cards/collapsible-conversion-goals.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/components/conversion-goals.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/styles/targeting-step-styles.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/targeting-step.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/use-targeting-locations-adapter.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/use-targeting-audiences-adapter.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/use-targeting-age-adapter.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/use-targeting-gender-adapter.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/use-campaign-conversion-goals-adapter.js","../../../../linkedin-campaign/packages/linkedin-targeting/src/use-targeting-step-repository.js","../../../../linkedin-campaign/packages/linkedin-budget/src/components/skeletons.js","../../../../linkedin-campaign/packages/linkedin-budget/src/cards/budget-card.js","../../../../linkedin-campaign/packages/linkedin-budget/src/cards/bid-strategy-card.js","../../../../linkedin-campaign/packages/linkedin-budget/src/cards/date-setting-card.js","../../../../linkedin-campaign/packages/linkedin-budget/src/styles/budget-form-styles.js","../../../../linkedin-campaign/packages/linkedin-budget/src/components/budget-form.js","../../../../linkedin-campaign/packages/linkedin-budget/src/styles/budget-step-styles.js","../../../../linkedin-campaign/packages/linkedin-budget/src/use-budget-repository.js","../../../../linkedin-campaign/packages/linkedin-summary/src/use-summary-schema.js","../../../../linkedin-campaign/packages/linkedin-summary/src/use-summary-schema-data.js","../../../../linkedin-campaign/packages/linkedin-summary/src/components/audience-targeting.js","../../../../linkedin-campaign/packages/linkedin-summary/src/components/company-page.js","../../../../linkedin-campaign/packages/linkedin-summary/src/components/ads-review-info-banner.js","../../../../linkedin-campaign/packages/linkedin-summary/src/components/goal-details.js","../../../../linkedin-campaign/packages/linkedin-summary/src/styles/summary-step-styles.js","../../../../linkedin-campaign/packages/linkedin-summary/src/summary-step.js","../../../../linkedin-campaign/packages/linkedin-summary/src/components/ad-count.js","../../../../linkedin-campaign/packages/linkedin-summary/src/components/goal-count.js","../../../../linkedin-campaign/packages/linkedin-summary/src/use-summary-repository.js","../../../../linkedin-campaign/packages/linkedin-adgroup-settings/src/styles/linkedin-adgroup-settings-styles.js","../../../../linkedin-campaign/packages/linkedin-adgroup-settings/src/components/skeletons.js","../../../../linkedin-campaign/packages/linkedin-adgroup-settings/src/cards/adgroup-name-card.js","../../../../linkedin-campaign/packages/linkedin-adgroup-settings/src/linkedin-adgroup-settings.js","../../../../linkedin-campaign/packages/linkedin-adgroup-settings/src/use-linkedin-adgroup-settings-repository.js","../../../../linkedin-campaign/packages/linkedin-campaign-settings/src/styles/linkedin-campaign-settings-styles.js","../../../../linkedin-campaign/packages/linkedin-campaign-settings/src/linkedin-campaign-settings.js","../../../../linkedin-campaign/packages/linkedin-campaign-settings/src/use-campaign-settings-repository.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/steps/step-config.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/company-page-linking-step.js","../../../../linkedin-campaign/packages/linkedin-company-page-linking/src/utils.js","../../../../linkedin-campaign/packages/linkedin-ads-manager/src/use-linkedin-ads-manager-repository.js","../../../../linkedin-campaign/packages/linkedin-budget/src/budget-step.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/mmp-provider.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/layout-config.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/processing-blocker.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/terms-and-conditions.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/styles/wizard-styles.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/step-footer.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/styles/summary-panel-styles.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/summary-panel-view.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/summary-panel-config.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/custom-layout-container.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/steps/step-list-config.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/campaign-creation-wizard.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/wizard-components/single-step-layout-container.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/base-single-step-wizard.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/campaign-settings-wizard.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/adgroup-settings-wizard.js","../../../../linkedin-campaign/packages/linkedin-campaign-wizard/src/ad-editor-wizard.js","../../../../ms-ads-sdk/packages/sdk-post-signup-context/src/image-experience-legacy-strings.js","../../../../ms-ads-sdk/packages/sdk-post-signup-context/src/overreact-fetcher.js","../../../../ms-ads-sdk/packages/sdk-post-signup-context/src/sdk-post-signup-context.js","../../../../ms-ads-sdk/packages/sdk-settings-page-common/src/use-back-to-overview.js","../../../../ms-ads-sdk/packages/sdk-settings-page-common/src/navigation-header.tsx","../../../../ms-ads-sdk/packages/sdk-settings-page-common/src/action-bar.tsx","../../../../ms-ads-sdk/packages/sdk-settings-page-common/src/sdk-settings-form.js","../../../../ms-ads-sdk/packages/sdk-settings-page-common/src/use-settings-form-actions.js","../../../../ms-ads-sdk/packages/sdk-settings-page-common/src/sdk-settings-page.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/sdk-wizard-template.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/sdk-wizard-step-progress.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/sdk-wizard-step-list.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/use-pmax-campaign-api.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/custom-layout-container.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/animation-blocker/normal-blocker.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/animation-blocker/no-final-url-blocker.tsx","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/animation-blocker/index.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/use-preferences-from-url.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/country-strings.js","../../../../ms-ads-sdk/packages/sdk-wizard-components/src/sdk-support-menu.js","../../lift-measurement-pages/src/common/styles.js","../../lift-measurement-pages/src/common/paginator.js","../../lift-measurement-pages/src/landing-page/landing-page-footer.js","../../lift-measurement-pages/src/common/countries.js","../../lift-measurement-pages/src/landing-page/statuses.js","../../lift-measurement-pages/src/landing-page/status-badge.js","../../lift-measurement-pages/src/landing-page/lift-studies-grid/delete-study-dialog.js","../../lift-measurement-pages/src/landing-page/lift-studies-grid/config.js","../../lift-measurement-pages/src/fetch/campaigns.js","../../lift-measurement-pages/src/common/constants/experiment-errors.js","../../lift-measurement-pages/src/fetch/experiment.js","../../lift-measurement-pages/src/landing-page/lift-studies-grid/grid.js","../../lift-measurement-pages/src/common/utils.js","../../lift-measurement-pages/src/common/constants/maximums.js","../../lift-measurement-pages/src/common/components/country/country-selector.js","../../lift-measurement-pages/src/landing-page/status-selector.js","../../lift-measurement-pages/src/landing-page/toolbar.js","../../lift-measurement-pages/src/lift-measurement.js","../../lift-measurement-pages/src/common/constants/intents.js","../../lift-measurement-pages/src/wizard/footer/buttons.js","../../lift-measurement-pages/src/wizard/footer/footer.js","../../lift-measurement-pages/src/common/errors.js","../../lift-measurement-pages/src/common/page-layout.js","../../lift-measurement-pages/src/common/validate.js","../../lift-measurement-pages/src/common/components/validated/required-dropdown.js","../../lift-measurement-pages/src/common/components/country/country-card.js","../../lift-measurement-pages/src/common/date.js","../../lift-measurement-pages/src/common/components/date/start-date-card.js","../../lift-measurement-pages/src/common/components/date/date-picker-strings.js","../../lift-measurement-pages/src/common/components/keyword/keyword-methods.js","../../lift-measurement-pages/src/common/components/keyword/keyword-input.js","../../lift-measurement-pages/src/common/components/keyword/keyword-tag.js","../../lift-measurement-pages/src/common/components/keyword/keyword-display.js","../../lift-measurement-pages/src/common/components/keyword/keyword-selector.js","../../lift-measurement-pages/src/common/components/keyword/keyword-textarea.js","../../lift-measurement-pages/src/common/components/keyword/keyword-textarea-validation.js","../../lift-measurement-pages/src/common/components/measurement-type-card.js","../../lift-measurement-pages/src/common/components/search-lift/search-customer-id.js","../../lift-measurement-pages/src/common/components/skeleton/card-content-skeleton.js","../../lift-measurement-pages/src/common/components/search-lift/search-lift-loading.js","../../lift-measurement-pages/src/common/components/search-lift/search-lift.js","../../lift-measurement-pages/src/common/components/api-save-error-notification.js","../../lift-measurement-pages/src/common/components/uet-tag/uet-tag-selector-utils.js","../../lift-measurement-pages/src/common/components/uet-tag/uet-tag-selector.js","../../lift-measurement-pages/src/common/components/visit-conversion-lift/visit-conversion-methods.js","../../lift-measurement-pages/src/common/components/visit-conversion-lift/visit-conversion-input.js","../../lift-measurement-pages/src/common/components/visit-conversion-lift/visit-conversion-lift-loading.js","../../lift-measurement-pages/src/common/components/visit-conversion-lift/visit-conversion-lift-not-allowed.js","../../lift-measurement-pages/src/common/components/visit-conversion-lift/visit-conversion-lift.js","../../lift-measurement-pages/src/common/components/experiment-name-card.js","../../lift-measurement-pages/src/common/components/impression-threshold-message.js","../../lift-measurement-pages/src/common/components/selected-campaigns-card.js","../../lift-measurement-pages/src/common/components/configure-study-step.js","../../lift-measurement-pages/src/fetch/conversion.js","../../lift-measurement-pages/src/fetch/uet.js","../../lift-measurement-pages/src/common/components/configure-study-step-repository.js","../../lift-measurement-pages/src/common/constants/campaign.js","../../lift-measurement-pages/src/common/constants/selected-campaigns-grid-columns.js","../../lift-measurement-pages/src/common/constants/budget-format-options.js","../../lift-measurement-pages/src/common/components/select-campaigns-grid/select-campaigns-grid.js","../../lift-measurement-pages/src/common/components/select-campaigns-grid/select-campaigns-toolbar.js","../../lift-measurement-pages/src/common/components/summary/campaign-name-tag.js","../../lift-measurement-pages/src/common/components/summary/selected-campaigns-accordion.js","../../lift-measurement-pages/src/common/components/summary/study-summary-drawer.js","../../lift-measurement-pages/src/common/components/select-campaigns-grid/select-campaigns-footer.js","../../lift-measurement-pages/src/common/components/select-campaigns-grid/select-campaigns-grid-data-source.js","../../lift-measurement-pages/src/fetch/lift-experiment-campaigns.js","../../lift-measurement-pages/src/common/components/select-campaigns-step.js","../../lift-measurement-pages/src/wizard/config.js","../../lift-measurement-pages/src/common/components/select-campaigns-step-repository.js","../../lift-measurement-pages/src/fetch/keywords.js","../../lift-measurement-pages/src/wizard/templates.js","../../lift-measurement-pages/src/wizard/wizard.js","../../lift-measurement-pages/src/lift-measurement-form.js","../../lift-measurement-pages/src/lift-measurement-create.js","../../lift-measurement-pages/src/lift-measurement-edit.js","../../lift-measurement-pages/src/fetch/result.js","../../lift-measurement-pages/src/results/confidence-levels.js","../../lift-measurement-pages/src/results/overview-table.js","../../lift-measurement-pages/src/results/positive-performing-audiences-card.js","../../lift-measurement-pages/src/results/audience-overview-section.js","../../lift-measurement-pages/src/results/campaign-overview-section.js","../../lift-measurement-pages/src/results/performance-card/styles.js","../../lift-measurement-pages/src/results/performance-card/lift.js","../../lift-measurement-pages/src/results/performance-card/confidence-level.js","../../lift-measurement-pages/src/results/performance-card/treatment-control.js","../../lift-measurement-pages/src/results/performance-card/performance-card.js","../../lift-measurement-pages/src/results/experiment-overview-section.js","../../lift-measurement-pages/src/results/page-header.js","../../lift-measurement-pages/src/results/study-summary-card.js","../../lift-measurement-pages/src/utils/download.js","../../lift-measurement-pages/src/lift-measurement-results.js","../../../../ms-ads-sdk/packages/sdk-utils/src/sdk-events.ts","../../../../ms-ads-sdk/packages/sdk-utils/src/use-has-conversion-setup.ts"],"sourcesContent":["import { getLocalStorage } from '@bingads-webui/storage';\r\n\r\nexport const LINKEDIN_CAMPAIGN_OBJECTIVES = {\r\n  Consideration: 'Consideration',\r\n  Awareness: 'Awareness',\r\n};\r\n\r\nexport const LINKEDIN_CAMPAIGN_GOALS = {\r\n  MoreWebsiteActions: 'MoreWebsiteActions',\r\n  MoreBrandAwareness: 'MoreBrandAwareness',\r\n};\r\n\r\nexport const getCampaignObjective = () => {\r\n  const localStorage = getLocalStorage();\r\n  let campaignObjective = LINKEDIN_CAMPAIGN_OBJECTIVES.Consideration;\r\n\r\n  if (localStorage.supportsStorage()) {\r\n    campaignObjective = localStorage.get('CampaignObjective');\r\n  }\r\n\r\n  return campaignObjective;\r\n};\r\n\r\nexport const getLinkedInCampaignGoal = () => {\r\n  const objective = getCampaignObjective();\r\n  switch (objective) {\r\n    case LINKEDIN_CAMPAIGN_OBJECTIVES.Consideration:\r\n      return LINKEDIN_CAMPAIGN_GOALS.MoreWebsiteActions;\r\n    case LINKEDIN_CAMPAIGN_OBJECTIVES.Awareness:\r\n      return LINKEDIN_CAMPAIGN_GOALS.MoreBrandAwareness;\r\n    default:\r\n      return LINKEDIN_CAMPAIGN_GOALS.MoreWebsiteActions;\r\n  }\r\n};\r\n\r\nexport const getLinkedInBidStrategyOptions = (campaignGoal) => {\r\n  if (campaignGoal === LINKEDIN_CAMPAIGN_GOALS.MoreBrandAwareness) {\r\n    return [{\r\n      key: 'MaxReach',\r\n      text: _TL_('Maximize reach'),\r\n    }, {\r\n      key: 'MaxImpressions',\r\n      text: _TL_('Maximize impressions'),\r\n    }];\r\n  }\r\n\r\n  return [{\r\n    key: 'MaxClicks',\r\n    text: _TL_('Maximize clicks'),\r\n  }];\r\n};\r\n","export const PERMISSION_STATUS = {\r\n  NOT_FOUND: 'NotFound',\r\n  APPROVED: 'Approved',\r\n  REJECTED: 'Rejected',\r\n  REQUESTED: 'Requested', // Pending\r\n  REVOKED: 'Revoked',\r\n};\r\n","export const LINKEDIN_WIZARDS = {\r\n  CAMPAIGN_CREATION: 'CAMPAIGN_CREATION',\r\n  CAMPAIGN_SETTINGS: 'CAMPAIGN_SETTINGS',\r\n  AD_GROUP_SETTINGS: 'AD_GROUP_SETTINGS',\r\n  AD_EDITOR: 'AD_EDITOR',\r\n};\r\n\r\nexport const LINKEDIN_WIZARD_STEP_PATHS = {\r\n  LI_COMPANY_PAGE_LINKING: 'LI_COMPANY_PAGE_LINKING',\r\n  BUILD_ADS: 'BUILD_ADS', // Parent step\r\n  LINKEDIN_AD: 'LINKEDIN_AD',\r\n  MULTI_AD_MANAGER: 'MULTI_AD_MANAGER',\r\n  TARGETING: 'TARGETING',\r\n  BUDGET: 'BUDGET',\r\n  SUMMARY: 'SUMMARY',\r\n};\r\n\r\nexport const getFlow = ({\r\n  isCompanyPageReady,\r\n  isMultiAdModel,\r\n  isAdStepActive,\r\n}) => {\r\n  const multiAdSteps = isAdStepActive ? [\r\n    LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER,\r\n    LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD,\r\n  ] : [\r\n    LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER,\r\n  ];\r\n\r\n  const steps = [\r\n    ...(isCompanyPageReady ? [] : [LINKEDIN_WIZARD_STEP_PATHS.LI_COMPANY_PAGE_LINKING]),\r\n\r\n    ...(isMultiAdModel ? multiAdSteps : [LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD]),\r\n\r\n    LINKEDIN_WIZARD_STEP_PATHS.TARGETING,\r\n    LINKEDIN_WIZARD_STEP_PATHS.BUDGET,\r\n    LINKEDIN_WIZARD_STEP_PATHS.SUMMARY,\r\n  ];\r\n\r\n  return steps;\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const isAudienceTooNarrow = audienceSize => !_.isUndefined(audienceSize) && audienceSize < 300;\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst campaignEDM = edmCampaign.types.resolve('Model.Campaign');\r\nconst campaignResource = new campaignEDM.ResourceIdentifier();\r\n\r\nexport const createOrUpdateCampaign = (data) => {\r\n  const createOrUpdateCall = data && data.Id ?\r\n    campaignResource.bulkUpdate.bind(campaignResource) :\r\n    campaignResource.bulkCreate.bind(campaignResource);\r\n  return createOrUpdateCall(data);\r\n};\r\n\r\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: ['CampaignConversionGoal/Goals', 'Budget'],\r\n    })\r\n    .toPromise();\r\n\r\nexport const readCampaignCriterions = (cid, aid, campaignId) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .Campaigns.$withKey(campaignId)\r\n    .CampaignCriterions\r\n    .$cast('Model.CampaignCriterion')\r\n    .get({\r\n      top: 50,\r\n      filter: {\r\n        where:\r\n          [\r\n            \"isof(Criterion,'Model.LocationCriterion')\",\r\n            \"isof(Criterion,'Model.RadiusCriterion')\",\r\n            \"isof(Criterion,'Model.LocationIntentCriterion')\",\r\n            \"isof(Criterion,'Model.CompanyNameCriterion')\",\r\n            \"isof(Criterion,'Model.IndustryCriterion')\",\r\n            \"isof(Criterion,'Model.JobFunctionCriterion')\",\r\n            \"isof(Criterion,'Model.JobTitleCriterion')\",\r\n            \"isof(Criterion,'Model.JobSeniorityCriterion')\",\r\n            \"isof(Criterion,'Model.AgeCriterion')\",\r\n            \"isof(Criterion,'Model.GenderCriterion')\",\r\n          ].join(' or '),\r\n      },\r\n    })\r\n    .toPromise();\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst adGroupEDM = edmCampaign.types.resolve('Model.AdGroup');\r\nconst adGroupResource = new adGroupEDM.ResourceIdentifier();\r\n\r\nexport const createOrUpdateAdGroup = (data) => {\r\n  const createOrUpdateCall = data && data.Id ?\r\n    adGroupResource.bulkUpdate.bind(adGroupResource) :\r\n    adGroupResource.bulkCreate.bind(adGroupResource);\r\n  return createOrUpdateCall(data);\r\n};\r\n\r\nexport const readAdGroup = (cid, aid, campaignId, adGroupId) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .Campaigns.$withKey(campaignId)\r\n    .AdGroups.$withKey(adGroupId)\r\n    .get()\r\n    .toPromise();\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst adEDM = edmCampaign.types.resolve('Model.ResponsiveAd');\r\nconst adResource = new adEDM.ResourceIdentifier();\r\n\r\nexport const createOrUpdateAd = (data, skipApiCall = false) => {\r\n  if (skipApiCall) {\r\n    return Promise.resolve({ Id: -1 });\r\n  }\r\n\r\n  const createOrUpdateCall = data && data.Id ?\r\n    adResource.bulkUpdate.bind(adResource) :\r\n    adResource.bulkCreate.bind(adResource);\r\n\r\n  return createOrUpdateCall(data);\r\n};\r\n\r\nexport const readAd = (cid, aid, campaignId, adGroupId, adId) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .Campaigns.$withKey(campaignId)\r\n  .AdGroups.$withKey(adGroupId)\r\n  .Ads.$withKey(adId)\r\n  .get({\r\n    select: [\r\n      'Id',\r\n      'FinalUrls',\r\n      'Headline',\r\n      'Text',\r\n      'Model.ResponsiveAd/Images',\r\n      'CallToAction',\r\n    ],\r\n  }).toPromise();\r\n","import _ from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getBundleCountriesAndBundleLocationCriterions } from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nexport const getLocations = (cid, aid, search) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .Locations.get({\r\n      servingChannel: 'LinkedIn',\r\n      select: ['ParentLocations'],\r\n      search,\r\n    }).toPromise();\r\n\r\nexport const getDefaultLocation = (cid, aid, lcid = '1033') =>\r\n  getBundleCountriesAndBundleLocationCriterions(cid, aid, lcid).then(({ bundleLocationCriterions }) => {\r\n    const locationCriterion = _.chain(bundleLocationCriterions)\r\n      .first()\r\n      .get('Criterion.LocationCriterion')\r\n      .value();\r\n\r\n    return {\r\n      Id: locationCriterion.LocationId,\r\n      CountryCode: locationCriterion.CountryCode,\r\n      Name: locationCriterion.Name,\r\n      GeoPoint: {\r\n        Latitude: locationCriterion.Latitude,\r\n        Longitude: locationCriterion.Longitude,\r\n      },\r\n      Type: locationCriterion.Type,\r\n    };\r\n  });\r\n\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const readAudienceDataFactory = ({ model, filterOnServer }) => (\r\n  (cid, aid, search) =>\r\n    edmCampaign\r\n      .Customers.$withKey(cid)\r\n      .Accounts.$withKey(aid)\r\n      .Demographics.$cast(model)\r\n      .get({\r\n        // Currently, there's an issue in MT side with JobFunction because it reuses the existing api.\r\n        // It'll error if servingChannel is passed, so we need to remove it for this case.\r\n        ...(model !== 'Model.JobFunction' ? { servingChannel: 'LinkedIn' } : {}),\r\n        ...(filterOnServer ? { search, top: 10 } : {}),\r\n      })\r\n      .toPromise()\r\n);\r\n\r\nexport const readCompanyNames = readAudienceDataFactory({ model: 'Model.Company', filterOnServer: true });\r\nexport const readCompanyIndustries = readAudienceDataFactory({ model: 'Model.Industry', filterOnServer: false });\r\nexport const readJobSeniorities = readAudienceDataFactory({ model: 'Model.JobSeniority', filterOnServer: false });\r\nexport const readJobFunctions = readAudienceDataFactory({ model: 'Model.JobFunction', filterOnServer: false });\r\nexport const readJobTitles = readAudienceDataFactory({ model: 'Model.JobTitle', filterOnServer: true });\r\n\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst 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\nexport const loadLinkedInCompanyPages = (cid, aid, payload) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .LinkedInCompanyPages['Default.LoadLinkedInCompanyPages']\r\n    .$makeCall({\r\n      payload,\r\n      bypassCache: true,\r\n    })\r\n    .toPromise();\r\n\r\nexport const getConnectedLinkedInCompanyPage = (cid, aid) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .LinkedInCompanyPages['Default.GetConnectedLinkedInCompanyPage']\r\n    .$makeCall({\r\n      bypassCache: true,\r\n    })\r\n    .toPromise()\r\n    .catch((err) => {\r\n      if (isLocal()) {\r\n        // Ignore error in local/CI environment to unblock E2E tests\r\n        return Promise.resolve({});\r\n      }\r\n\r\n      throw err;\r\n    });\r\n\r\nexport const getCompanyPagePermissionStatus = (cid, aid) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .LinkedInCompanyPages['Default.GetCompanyPagePermissionStatus']\r\n    .$makeCall({\r\n      bypassCache: true,\r\n    })\r\n    .toPromise();\r\n\r\nexport const connectToLinkedInCompanyPage = (cid, aid, payload) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .LinkedInCompanyPages['Default.ConnectToLinkedInCompanyPage']\r\n    .$makeCall({\r\n      payload,\r\n      bypassCache: true,\r\n    })\r\n    .toPromise();\r\n\r\nexport const typeaheadCompanyPageSearch = (cid, aid, query) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LinkedInCompanyPages['Default.TypeaheadCompanyPageSearch']\r\n  .$makeCall({\r\n    payload: { query },\r\n  })\r\n  .toPromise();\r\n\r\nexport const reauthLinkedInMember = (cid, aid, payload) =>\r\n  edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .LinkedInCompanyPages['Default.ReauthLinkedInMember']\r\n    .$makeCall({\r\n      payload,\r\n      bypassCache: true,\r\n    })\r\n    .toPromise();\r\n\r\n","import { LINKEDIN_CAMPAIGN_GOALS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nexport const generateDefaultCampaignName = (i18n) => {\r\n  let name = '';\r\n\r\n  const today = new Date();\r\n\r\n  const addz = function (n) {\r\n    if (n < 10) {\r\n      return `0${n}`;\r\n    }\r\n    return `${n}`;\r\n  };\r\n\r\n  const time = `${addz(today.getHours())}${addz(today.getMinutes())}${addz(today.getSeconds())}`;\r\n  const date = `${addz(today.getMonth() + 1)}${addz(today.getDate())}${today.getFullYear().toString().slice(2)}`;\r\n\r\n  const prefix = i18n.getString(_TL_('LinkedIn Campaign'));\r\n  name = `${prefix}_${date}_${time}`;\r\n\r\n  return name;\r\n};\r\n\r\nexport const getDefaultCampaign = ({\r\n  campaignGoal,\r\n  i18n,\r\n}) => {\r\n  const bidStrategyType = campaignGoal === LINKEDIN_CAMPAIGN_GOALS.MoreBrandAwareness ? 'MaxReach' : 'MaxClicks';\r\n\r\n  return {\r\n    Status: 'Paused',\r\n    Name: generateDefaultCampaignName(i18n),\r\n    Budget: {\r\n      Amount: 25, // TODO: This should be configurable based on currency\r\n      Type: 'DailyStandard',\r\n    },\r\n    BiddingScheme: {\r\n      Type: bidStrategyType,\r\n    },\r\n    Languages: ['English'],\r\n    CampaignType: 'LinkedIn',\r\n    CampaignGoal: campaignGoal,\r\n  };\r\n};\r\n\r\nexport const mapCampaignToBudgetViewModel = (campaign) => {\r\n  const {\r\n    Budget: { Amount },\r\n    BiddingScheme: { Type },\r\n    CampaignSettings = [],\r\n  } = campaign;\r\n\r\n  return {\r\n    budgetAmount: Amount,\r\n    bidStrategy: Type,\r\n    campaignGoal: CampaignSettings[0].Goal,\r\n  };\r\n};\r\n\r\nexport const mapBudgetToCampaignBulkModel = (budget) => {\r\n  const {\r\n    budgetAmount,\r\n    bidStrategy,\r\n  } = budget;\r\n\r\n  return {\r\n    Budget: { Amount: budgetAmount },\r\n    BiddingScheme: { Type: bidStrategy },\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\n\r\nexport const LinkedInImageType = {\r\n  Landscape: 'Image191x100',\r\n  Square: 'Image1x1',\r\n  Vertical: 'Image4x5',\r\n};\r\n\r\nexport const LinkedInImageTypeAspectRatio = {\r\n  [LinkedInImageType.Landscape]: 1.91,\r\n  [LinkedInImageType.Square]: 1,\r\n  [LinkedInImageType.Vertical]: 0.8,\r\n};\r\n\r\nexport const CallToActionOptions = [\r\n  { key: 'Apply', text: _TL_('Apply') },\r\n  { key: 'Download', text: _TL_('Download') },\r\n  { key: 'ViewQuote', text: _TL_('View Quote') },\r\n  { key: 'LearnMore', text: _TL_('Learn More') },\r\n  { key: 'SignUp', text: _TL_('Sign Up') },\r\n  { key: 'Subscribe', text: _TL_('Subscribe') },\r\n  { key: 'Register', text: _TL_('Register') },\r\n  { key: 'Join', text: _TL_('Join') },\r\n  { key: 'Attend', text: _TL_('Attend') },\r\n  { key: 'RequestDemo', text: _TL_('Request Demo') },\r\n];\r\n\r\nexport const getDefaultAd = ({\r\n  connectedCompanyPage,\r\n}) => {\r\n  let finalUrl;\r\n  if (connectedCompanyPage && connectedCompanyPage.Website) {\r\n    if (!connectedCompanyPage.Website.startsWith('https://') && !connectedCompanyPage.Website.startsWith('http://')) {\r\n      finalUrl = `https://${connectedCompanyPage.Website}`;\r\n    } else {\r\n      finalUrl = connectedCompanyPage.Website;\r\n    }\r\n  }\r\n\r\n  return (\r\n    {\r\n      FinalUrls: finalUrl ? [finalUrl] : [],\r\n      FinalUrlForRecommendation: finalUrl,\r\n      SelectedImageType: 'Image191x100',\r\n    });\r\n};\r\n\r\nexport const getSelectedImageTypeFromModel = (model) => {\r\n  const imageAsset = model.Images[0].Asset;\r\n  const imageAssetAspectRatio = imageAsset.CropWidth / imageAsset.CropHeight;\r\n\r\n  const selectedImageType = _.min(_.values(LinkedInImageType), imageType => (Math.abs(LinkedInImageTypeAspectRatio[imageType] - imageAssetAspectRatio)));\r\n  return selectedImageType;\r\n};\r\n\r\nexport const getCTAFromModel = (model) => {\r\n  const cta = model.CallToAction;\r\n\r\n  if (!cta) { return undefined; }\r\n\r\n  const ctaOption = CallToActionOptions.find(option => option.key === cta);\r\n\r\n  if (!ctaOption) { return undefined; }\r\n\r\n  return {\r\n    optionValue: ctaOption.key,\r\n    optionText: ctaOption.text,\r\n    selectedOptions: [ctaOption.key],\r\n  };\r\n};\r\n\r\nexport const useLinkedInAdAdapter = () => {\r\n  const mapToViewModel = useCallback(model => ({\r\n    Id: model.Id,\r\n    FinalUrls: model.FinalUrls,\r\n    Images: { ImageAssets: model.Images },\r\n    Headlines: { Headline0: model.Headline },\r\n    Descriptions: { Description0: model.Text },\r\n    CallToAction: getCTAFromModel(model),\r\n    SelectedImageType: getSelectedImageTypeFromModel(model),\r\n  }), []);\r\n\r\n  const mapToBulkModel = useCallback((campaign, adGroup, adData, isDeleted = false) => {\r\n    const imageList = _.map(adData.Images.ImageList, imageArray =>\r\n      _.find(imageArray, imageObj => imageObj.type === adData.SelectedImageType));\r\n    const flattenImageList = _.flatten(imageList, 1);\r\n\r\n    const images = _.map(flattenImageList, image => ({\r\n      id: image.idString || String(image.id),\r\n      idString: image.idString || String(image.id),\r\n      subType: image.associationType,\r\n      cropX: image.cropSettings.SourceX,\r\n      cropY: image.cropSettings.SourceY,\r\n      cropWidth: image.cropSettings.SourceWidth,\r\n      cropHeight: image.cropSettings.SourceHeight,\r\n    }));\r\n\r\n    const fields = {\r\n      AdType: 'LinkedIn',\r\n      Id: adData && adData.Id ? adData.Id : -1,\r\n      FinalUrls: adData.FinalUrls,\r\n      Images: JSON.stringify(images),\r\n      Headline: adData.Headlines && adData.Headlines.Headline0 ? adData.Headlines.Headline0 : undefined,\r\n      Text: adData.Descriptions && adData.Descriptions.Description0 ? adData.Descriptions.Description0 : undefined, // Introductory text\r\n      Campaign: { Id: campaign.Id },\r\n      AdGroup: { Id: adGroup.Id },\r\n      CallToAction: adData.CallToAction ? adData.CallToAction.optionValue : undefined,\r\n      CallToActionLanguage: 'None',\r\n    };\r\n\r\n    if (isDeleted) {\r\n      fields.Status = 'Deleted';\r\n    }\r\n\r\n    return fields;\r\n  }, []);\r\n\r\n  return {\r\n    mapToViewModel,\r\n    mapToBulkModel,\r\n  };\r\n};\r\n","export const parseDateFromAPIFormat = (i18n, date) => {\r\n  if (date == null) {\r\n    return null;\r\n  }\r\n  if (typeof date === 'string') {\r\n    const dateFromMdyyyyFormat = i18n.parseDate(date.substring(0, 10), { raw: 'M/d/yyyy' });\r\n    const dateFromyyyyMdFormat = i18n.parseDate(date.substring(0, 10), { raw: 'yyyy-M-d' });\r\n    return dateFromMdyyyyFormat || dateFromyyyyMdFormat;\r\n  }\r\n  return date;\r\n};\r\n\r\nexport const formatDateToAPIFormat = (i18n, date) => {\r\n  if (date == null) {\r\n    return '';\r\n  }\r\n\r\n  if (typeof date === 'string') {\r\n    return date;\r\n  }\r\n  return i18n.formatDate(date, {\r\n    raw: 'M/d/yyyy',\r\n  });\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const LocationCriterionTypes = ['Location', 'Radius', 'LocationIntent'];\r\nexport const AudienceCriterionTypes = ['CompanyName', 'Industry', 'JobFunction', 'JobTitle', 'JobSeniority'];\r\nexport const AgeCriterionTypes = ['Age'];\r\nexport const GenderCriterionTypes = ['Gender'];\r\n\r\nexport const filterCriterionsByType = (criterions, types) => _.filter(criterions, c => types.includes(c.Criterion.Type));\r\n","import { identity, result } from 'underscore';\r\nimport { getBulkApiErrors, CampaignApiError } from '@bingads-webui-campaign/api-errors';\r\n\r\nexport const ERROR_ENTITY = {\r\n  Campaign: 'campaign',\r\n  AdGroup: 'adGroup',\r\n  Ad: 'ad',\r\n  LocationTargeting: 'locationTargeting',\r\n  AudienceTargeting: 'audienceTargeting',\r\n};\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nexport const genericApiError = new CampaignApiError(GENERIC_ERROR_MESSAGE_KEY);\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\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","import { getLinkedInCampaignGoal, LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { useInitializeCompanyPage } from './use-initialize-company-page';\r\n\r\nexport const useInitializeWizard = () => {\r\n  const campaignGoal = getLinkedInCampaignGoal();\r\n\r\n  const urlParams = new URLSearchParams(window.location.search);\r\n  const isReAuthOnly = urlParams.has('isReAuth') === true;\r\n\r\n  // const isCompanyPageReady = false;\r\n  const isMultiAdModel = false;\r\n  const isAdStepActive = false;\r\n  const {\r\n    isCompanyPageInitialized,\r\n    isCompanyPageReady,\r\n    isFirstRun,\r\n    isMemberTokenActive,\r\n    permissionStatus,\r\n    connectedCompanyPage,\r\n  } = useInitializeCompanyPage();\r\n\r\n  const initialStep = (isCompanyPageReady && isMemberTokenActive) ? LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD : LINKEDIN_WIZARD_STEP_PATHS.LI_COMPANY_PAGE_LINKING;\r\n\r\n  const initialFlowFactors = {\r\n    isCompanyPageReady,\r\n    isMultiAdModel,\r\n    isAdStepActive,\r\n  };\r\n\r\n  const initialWizardData = {\r\n    campaignGoal,\r\n    permissionStatus,\r\n    connectedCompanyPage,\r\n    isFirstRun,\r\n    isMemberTokenActive,\r\n    isReAuthOnly,\r\n  };\r\n\r\n  return {\r\n    isInitialized: isCompanyPageInitialized,\r\n    initialStep,\r\n    initialFlowFactors,\r\n    initialWizardData,\r\n  };\r\n};\r\n","import { useEffect, useContext, useState } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { PERMISSION_STATUS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport {\r\n  getCompanyPagePermissionStatus,\r\n  getConnectedLinkedInCompanyPage,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nexport const useInitializeCompanyPage = () => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInWizardInitialization',\r\n    activityName: 'InitializeCompanyPage',\r\n  });\r\n\r\n  const [isCompanyPageInitialized, setIsCompanyPageInitialized] = useState(false);\r\n  const [isFirstRun, setIsFirstRun] = useState(true);\r\n  const [isMemberTokenActive, setIsMemberTokenActive] = useState(true);\r\n  const [permissionStatus, setPermissionStatus] = useState(null);\r\n  const [connectedCompanyPage, setConnectedCompanyPage] = useState(null);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [loadError, setLoadError] = useState(null);\r\n\r\n  const isCompanyPageReady = isMemberTokenActive && connectedCompanyPage && permissionStatus === PERMISSION_STATUS.APPROVED;\r\n\r\n  useEffect(() => {\r\n    if (loadError) {\r\n      // Throw error here because error boundaries don't catch errors thrown on async code https://reactjs.org/docs/error-boundaries.html\r\n      // Need to show lady page because it is a blocking error\r\n      throw new Error(loadError);\r\n    }\r\n  }, [loadError]);\r\n\r\n  useEffect(() => {\r\n    if (!isCompanyPageInitialized && !isLoading && !loadError) {\r\n      setIsLoading(true);\r\n      getConnectedLinkedInCompanyPage(cid, aid)\r\n        .then((res) => {\r\n          if (res && res.Id) {\r\n            setConnectedCompanyPage(res);\r\n            setIsFirstRun(false);\r\n            if (res.IsMemberTokenActive === false) {\r\n              setIsMemberTokenActive(false);\r\n            }\r\n            return getCompanyPagePermissionStatus(cid, aid);\r\n          }\r\n          return Promise.resolve();\r\n        })\r\n        .then((res) => {\r\n          if (res && res.value) {\r\n            setPermissionStatus(res.value);\r\n          }\r\n          setIsCompanyPageInitialized(true);\r\n        })\r\n        .catch((err) => {\r\n          logger.trace(`Failed to initialize company page: ${JSON.stringify(err)}`);\r\n          setLoadError(err);\r\n        })\r\n        .finally(() => {\r\n          setIsLoading(false);\r\n        });\r\n    }\r\n  }, [aid, cid, isCompanyPageInitialized, isLoading, loadError, logger]);\r\n\r\n  return {\r\n    isCompanyPageInitialized,\r\n    isCompanyPageReady,\r\n    isFirstRun,\r\n    isMemberTokenActive,\r\n    permissionStatus,\r\n    connectedCompanyPage,\r\n  };\r\n};\r\n","import { useInstrumentLogger as useBaseInstrumerLogger, } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { useCallback } from 'react';\r\n\r\nconst decorateMessage = (scenarioName, message) => `[LinkedInCampaigns][${scenarioName}] ${message}`;\r\n\r\nexport const useInstrumentLogger = ({ scenarioName, activityName }) => {\r\n  const { trace, error } = useBaseInstrumerLogger({ scenarioName, activityName });\r\n\r\n  const decoratedTrace = useCallback(message => trace(decorateMessage(scenarioName, message)), [trace, scenarioName]);\r\n  const decoratedError = useCallback(message => error(decorateMessage(scenarioName, message)), [error, scenarioName]);\r\n\r\n  return {\r\n    trace: decoratedTrace,\r\n    error: decoratedError,\r\n  };\r\n};\r\n","import { PERMISSION_STATUS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nexport const COMPANY_PAGE_LINKING_ACTIONS = {\r\n  START_AUTHENTICATION: 'START_AUTHENTICATION',\r\n  COMPANY_PAGES_FETCHED: 'COMPANY_PAGES_FETCHED',\r\n  AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\r\n  UPDATE_SELECTED_COMPANY_PAGE: 'UPDATE_SELECTED_COMPANY_PAGE',\r\n  CONFIRM_LINK_COMPANY_PAGE: 'CONFIRM_LINK_COMPANY_PAGE',\r\n  START_SAVING_COMPANY_PAGE: 'START_SAVING_COMPANY_PAGE',\r\n  COMPANY_PAGE_SAVED: 'COMPANY_PAGE_SAVED',\r\n  COMPANY_PAGE_SAVE_FAILED: 'COMPANY_PAGE_SAVE_FAILED',\r\n  LOAD_PERMISSION_STATUS: 'LOAD_PERMISSION_STATUS',\r\n  PERMISSION_STATUS_LOADED: 'PERMISSION_STATUS_LOADED',\r\n  PERMISSION_STATUS_LOAD_FAILED: 'PERMISSION_STATUS_LOAD_FAILED',\r\n  GO_BACK_AND_RESET_COMPANY_PAGE: 'GO_BACK_AND_RESET_COMPANY_PAGE',\r\n  RESEND_PERMISSION_REQUEST: 'RESEND_PERMISSION_REQUEST',\r\n  PERMISSION_REQUEST_RESENT: 'PERMISSION_REQUEST_RESENT',\r\n  PERMISSION_REQUEST_RESEND_FAILED: 'PERMISSION_REQUEST_RESEND_FAILED',\r\n  CLEAN_ERRORS: 'CLEAN_ERRORS',\r\n  START_REFRESH_MEMBER_TOKEN: 'START_REFRESH_MEMBER_TOKEN',\r\n  MEMBER_TOKEN_REFRESHED: 'MEMBER_TOKEN_REFRESHED',\r\n  MEMBER_TOKEN_REFRESH_FAILED: 'MEMBER_TOKEN_REFRESH_FAILED',\r\n};\r\n\r\nexport const getInitialState = (permissionStatus, connectedCompanyPage, isMemberTokenActive, isReAuthOnly) => ({\r\n  permissionStatus, // REQUESTED, APPROVED, REJECTED\r\n  checkDateTime: null, // The time when the permission status was checked\r\n  companyPages: null, // List of linkedin company pages\r\n  selectedCompanyPage: connectedCompanyPage, // Selected company page object\r\n  connectedCompanyPage, // Connected company page object\r\n  authorizationData: null, // Authorization data for linkedin\r\n  isAuthenticating: false,\r\n  authenticationError: null,\r\n  isReadyToLink: false,\r\n  isSavingCompanyPage: false,\r\n  saveCompanyPageError: null,\r\n  isLoadingPermissionStatus: false,\r\n  loadPermissionStatusError: null,\r\n  isResendingPermissionRequest: false,\r\n  resendPermissionRequestError: null,\r\n  isReAuthOnly,\r\n  isMemberTokenActive,\r\n  needRefreshMemberToken: isMemberTokenActive === false,\r\n  isRefreshingToken: false,\r\n  refreshTokenError: null,\r\n});\r\n\r\nexport function companyPageLinkingReducer(state, action) {\r\n  switch (action.type) {\r\n    case COMPANY_PAGE_LINKING_ACTIONS.START_AUTHENTICATION: {\r\n      return {\r\n        ...state,\r\n        isAuthenticating: true,\r\n        authenticationError: null,\r\n      };\r\n    }\r\n    case COMPANY_PAGE_LINKING_ACTIONS.COMPANY_PAGES_FETCHED: {\r\n      const { companyPages, authorizationData } = action;\r\n      const selectedCompanyPage = null;\r\n      return {\r\n        ...state,\r\n        authorizationData,\r\n        companyPages,\r\n        selectedCompanyPage,\r\n        isAuthenticating: false,\r\n        isAuthorized: true,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.AUTHENTICATION_FAILED: {\r\n      const { authenticationError } = action;\r\n      return {\r\n        ...state,\r\n        authenticationError,\r\n        isAuthenticating: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.UPDATE_SELECTED_COMPANY_PAGE: {\r\n      const { selectedCompanyPage } = action;\r\n      return {\r\n        ...state,\r\n        selectedCompanyPage,\r\n        saveCompanyPageError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.CONFIRM_LINK_COMPANY_PAGE: {\r\n      return {\r\n        ...state,\r\n        isReadyToLink: true,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.START_SAVING_COMPANY_PAGE: {\r\n      return {\r\n        ...state,\r\n        isSavingCompanyPage: true,\r\n        saveCompanyPageError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.COMPANY_PAGE_SAVED: {\r\n      const { connectedCompanyPage, permissionStatus } = action;\r\n      return {\r\n        ...state,\r\n        connectedCompanyPage,\r\n        permissionStatus: permissionStatus || PERMISSION_STATUS.REQUESTED, // The default status should be PENDING after saving a company page\r\n        saveCompanyPageError: null,\r\n        isSavingCompanyPage: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.COMPANY_PAGE_SAVE_FAILED: {\r\n      const { saveCompanyPageError } = action;\r\n      return {\r\n        ...state,\r\n        saveCompanyPageError,\r\n        isSavingCompanyPage: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.LOAD_PERMISSION_STATUS: {\r\n      return {\r\n        ...state,\r\n        isLoadingPermissionStatus: true,\r\n        loadPermissionStatusError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_STATUS_LOADED: {\r\n      const { permissionStatus } = action;\r\n      return {\r\n        ...state,\r\n        permissionStatus,\r\n        checkDateTime: new Date(),\r\n        loadPermissionStatusError: null,\r\n        isLoadingPermissionStatus: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_STATUS_LOAD_FAILED: {\r\n      const { loadPermissionStatusError } = action;\r\n      return {\r\n        ...state,\r\n        loadPermissionStatusError,\r\n        isLoadingPermissionStatus: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.GO_BACK_AND_RESET_COMPANY_PAGE: {\r\n      return {\r\n        ...state,\r\n        isReadyToLink: false,\r\n        selectedCompanyPage: null,\r\n        permissionStatus: PERMISSION_STATUS.NOT_FOUND,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.RESEND_PERMISSION_REQUEST: {\r\n      return {\r\n        ...state,\r\n        isResendingPermissionRequest: true,\r\n        resendPermissionRequestError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_REQUEST_RESENT: {\r\n      return {\r\n        ...state,\r\n        permissionStatus: PERMISSION_STATUS.REQUESTED, // The default status should be PENDING after resending a permission request\r\n        resendPermissionRequestError: null,\r\n        isResendingPermissionRequest: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_REQUEST_RESEND_FAILED: {\r\n      const { resendPermissionRequestError } = action;\r\n      return {\r\n        ...state,\r\n        resendPermissionRequestError,\r\n        isResendingPermissionRequest: false,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.CLEAN_ERRORS: {\r\n      return {\r\n        ...state,\r\n        authenticationError: null,\r\n        saveCompanyPageError: null,\r\n        loadPermissionStatusError: null,\r\n        resendPermissionRequestError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.START_REFRESH_MEMBER_TOKEN: {\r\n      return {\r\n        ...state,\r\n        isRefreshingToken: true,\r\n        refreshTokenError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.MEMBER_TOKEN_REFRESHED: {\r\n      return {\r\n        ...state,\r\n        isMemberTokenActive: true,\r\n        refreshTokenError: null,\r\n      };\r\n    }\r\n\r\n    case COMPANY_PAGE_LINKING_ACTIONS.MEMBER_TOKEN_REFRESH_FAILED: {\r\n      const { refreshTokenError } = action;\r\n      return {\r\n        ...state,\r\n        isMemberTokenActive: false,\r\n        refreshTokenError,\r\n        isRefreshingToken: false,\r\n      };\r\n    }\r\n\r\n    default: throw new Error(`Invalid company page linking action: ${action.type}`);\r\n  }\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { isProdEnvironment } from '@bingads-webui-campaign/campaign-ui-common';\r\nimport { useOpenPopupAndWaitForAuth } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nconst LinkedInConfig = {\r\n  clientId: {\r\n    Prod: '86blf1re65drv3',\r\n    Test: '86y8qo6y8w9zty',\r\n  },\r\n  scope: [\r\n    'rw_ads',\r\n    'r_basicprofile',\r\n    'w_organization_social',\r\n    'w_member_social',\r\n    'rw_organization_admin',\r\n    'r_ads_reporting',\r\n    'rw_conversions',\r\n  ],\r\n  url: 'https://www.linkedin.com/oauth/v2/authorization',\r\n};\r\n\r\nconst defaultActivityLogger = {\r\n  trace: _.noop,\r\n  error: _.noop,\r\n};\r\n\r\nexport function useLinkedInLinking({\r\n  config = LinkedInConfig,\r\n  windowObject,\r\n}) {\r\n  const { scope: { values: { cid, aid } } } = useContext(ScopeContext);\r\n  const isProd = isProdEnvironment(windowObject.location.host);\r\n  const openPopupAndWaitForAuth = useOpenPopupAndWaitForAuth(windowObject);\r\n\r\n  const login = useCallback((activity = defaultActivityLogger) => {\r\n    const contextValue = `LinkedIn-${Date.now()}-${Math.random().toString(36).substr(2, 8)}`;\r\n    const baseCallbackUrl = `${windowObject.location.origin}/campaign/vnext/createcampaign/linkedin`;\r\n    const cbUrlSearchParams = new URLSearchParams();\r\n\r\n    // add the cid/aid variables to callback URL, so we don't need to rely on CCUI redirect\r\n    // this is required in the multi-user scenario\r\n    cbUrlSearchParams.append('cid', cid);\r\n    cbUrlSearchParams.append('aid', aid);\r\n    const callbackUrl = `${baseCallbackUrl}?${cbUrlSearchParams}`;\r\n\r\n    const targetUrl = new URL(config.url);\r\n    const authSearchParams = {\r\n      response_type: 'code',\r\n      client_id: isProd ? config.clientId.Prod : config.clientId.Test,\r\n      redirect_uri: callbackUrl,\r\n      state: contextValue,\r\n      scope: config.scope.join(' '),\r\n    };\r\n\r\n    _.each(authSearchParams, (value, key) => {\r\n      targetUrl.searchParams.set(key, value);\r\n    });\r\n\r\n    activity.trace(`LinkedIn auth started: state=${contextValue}, callbackUrl=${callbackUrl}`);\r\n    return openPopupAndWaitForAuth({\r\n      url: targetUrl,\r\n      matcher: { state: contextValue },\r\n    }).then((result) => {\r\n      const AuthorizationCode = result.code;\r\n      if (!AuthorizationCode) {\r\n        throw new Error('no_auth_code_returned');\r\n      }\r\n      activity.trace(`LinkedIn auth completed, code.length=${AuthorizationCode.length}`);\r\n\r\n      // return AuthorizationData object\r\n      return {\r\n        AuthorizationCode,\r\n        RedirectUrl: authSearchParams.redirect_uri,\r\n      };\r\n    });\r\n  }, [aid, cid, config, isProd, openPopupAndWaitForAuth, windowObject]);\r\n\r\n  return login;\r\n}\r\n","import { useEffect, useContext, useState } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { loadLinkedInCompanyPages } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\nimport { useLinkedInLinking } from './use-linkedin-linking';\r\n\r\nexport const useLoadCompanyPages = (state, dispatch, logger) => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const [isProcessing, setIsProcessing] = useState(false);\r\n\r\n  const { isAuthenticating } = state;\r\n  const login = useLinkedInLinking({ windowObject: window });\r\n\r\n  useEffect(() => {\r\n    if (isAuthenticating && !isProcessing) {\r\n      setIsProcessing(true);\r\n      login(logger).then(authorizationData => loadLinkedInCompanyPages(cid, aid, {\r\n        authorizationData,\r\n      }).then((companyPagesRes) => {\r\n        logger.trace(`Company pages fetched: ${JSON.stringify(companyPagesRes)}`);\r\n        dispatch({\r\n          type: COMPANY_PAGE_LINKING_ACTIONS.COMPANY_PAGES_FETCHED,\r\n          companyPages: companyPagesRes.CompanyPages,\r\n          userProfileImageSrc: companyPagesRes.UserProfilePictureDownloadUri,\r\n          authorizationData,\r\n        });\r\n      })).catch((err) => {\r\n        logger.trace(`Failed to load company pages: ${JSON.stringify(err)}`);\r\n        dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.AUTHENTICATION_FAILED, authenticationError: err });\r\n      }).finally(() => {\r\n        setIsProcessing(false);\r\n      });\r\n    }\r\n  }, [aid, cid, dispatch, isAuthenticating, isProcessing, logger, login]);\r\n};\r\n","import { useEffect, useContext, useState } from 'react';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { PERMISSION_STATUS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { connectToLinkedInCompanyPage, getCompanyPagePermissionStatus } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\n\r\nexport const useSaveCompanyPage = (state, dispatch, onContinue, logger) => {\r\n  const { send } = useWizardService();\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const [isProcessing, setIsProcessing] = useState(false);\r\n\r\n  const { isSavingCompanyPage, authorizationData, selectedCompanyPage } = state;\r\n\r\n  useEffect(() => {\r\n    if (isSavingCompanyPage && !isProcessing) {\r\n      setIsProcessing(true);\r\n      connectToLinkedInCompanyPage(cid, aid, {\r\n        authorizationData,\r\n        companyPageID: selectedCompanyPage.Id,\r\n        LinkedInTnCAccepted: true,\r\n      })\r\n        .then(() => getCompanyPagePermissionStatus(cid, aid))\r\n        .then((res) => {\r\n          logger.trace(`Company page ${selectedCompanyPage.Id} saved: ${JSON.stringify(res)}`);\r\n          send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n            connectedCompanyPage: selectedCompanyPage,\r\n          });\r\n          dispatch({\r\n            type: COMPANY_PAGE_LINKING_ACTIONS.COMPANY_PAGE_SAVED,\r\n            connectedCompanyPage: selectedCompanyPage,\r\n            permissionStatus: res.value,\r\n          });\r\n          if (res.value === PERMISSION_STATUS.APPROVED) {\r\n            // Go to ads step\r\n            onContinue();\r\n          } else if (res.value === PERMISSION_STATUS.NOT_FOUND) {\r\n            throw new Error('permission_status_not_found');\r\n          }\r\n        })\r\n        .catch((err) => {\r\n          logger.trace(`Failed to save company page: ${JSON.stringify(err)}`);\r\n          dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.COMPANY_PAGE_SAVE_FAILED, saveCompanyPageError: err });\r\n        })\r\n        .finally(() => {\r\n          setIsProcessing(false);\r\n        });\r\n    }\r\n  }, [aid, authorizationData, cid, dispatch, isProcessing, isSavingCompanyPage, logger, onContinue, selectedCompanyPage, send]);\r\n};\r\n","import React, { useContext, useEffect, useMemo, useCallback } from 'react';\r\nimport { HelpLink } from '@bingads-webui-react/help-link';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { mergeClasses, makeStyles, tokens } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody, MessageBarTitle } from '@fluentui/react-message-bar';\r\nimport { useConfirmDialog } from '@bingads-webui-campaign-react/confirmation-dialog-v2';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\n\r\nexport const ERROR_MODES = {\r\n  dialog: 'dialog',\r\n  messageBar: 'messageBar',\r\n};\r\n\r\nconst useErrorStyles = makeStyles({\r\n  helpLink: {\r\n    marginLeft: '4px',\r\n  },\r\n});\r\n\r\nconst useErrorMessages = ({ state }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useErrorStyles();\r\n\r\n  const {\r\n    authenticationError,\r\n    saveCompanyPageError,\r\n    loadPermissionStatusError,\r\n    resendPermissionRequestError,\r\n    refreshTokenError,\r\n  } = state;\r\n\r\n  const error = useMemo(() => {\r\n    if (!authenticationError && !saveCompanyPageError && !loadPermissionStatusError && !resendPermissionRequestError && !refreshTokenError) {\r\n      return {};\r\n    }\r\n\r\n    if (authenticationError) {\r\n      const { message } = authenticationError;\r\n      if (message === 'no_auth_code_returned') {\r\n        return {\r\n          mode: ERROR_MODES.dialog,\r\n          title: i18n.getString(_TL_('You don\\'t have the required permissions')),\r\n          content: (\r\n            <span>\r\n              <span>\r\n                {i18n.getString(_TL_('The administrator of the company\\'s LinkedIn page needs to grant you permission to serve ads.'))}\r\n              </span>\r\n              <HelpLink query=\"help:app54861\" className={classes.helpLink}>{i18n.getString(_TL_('Learn more'))}</HelpLink>\r\n            </span>\r\n          ),\r\n        };\r\n      }\r\n    }\r\n\r\n    if (saveCompanyPageError) {\r\n      const { errors } = saveCompanyPageError;\r\n      if (errors && errors[0].Code === 'OrganizationAlreadyLinkedWithAdAccount') {\r\n        // TODO: add detailed error message\r\n        console.log('Already linked'); // eslint-disable-line no-console\r\n      }\r\n    }\r\n\r\n    if (refreshTokenError) {\r\n      const { errors } = refreshTokenError;\r\n      if (errors && errors[0].Code === 'LinkedInUserIdMismatch') {\r\n        return {\r\n          mode: ERROR_MODES.messageBar,\r\n          title: i18n.getString(_TL_('The LinkedIn account is not the same as the one who connected the company page.')),\r\n          content: (\r\n            <span>\r\n              {i18n.getString(_TL_(' Please re-login to the correct account.'))}\r\n            </span>\r\n          ),\r\n        };\r\n      }\r\n    }\r\n\r\n    return {\r\n      mode: ERROR_MODES.messageBar,\r\n      content: i18n.getString(_TL_('We’ve encountered an error. Please try again.')),\r\n    };\r\n  }, [authenticationError, classes.helpLink, i18n, loadPermissionStatusError, resendPermissionRequestError, saveCompanyPageError, refreshTokenError]);\r\n\r\n  return error;\r\n};\r\n\r\nexport const useErrorDialog = ({ state, dispatch }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const { title, content, mode } = useErrorMessages({ state });\r\n\r\n  const onConfirm = useCallback(() => {\r\n    dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.CLEAN_ERRORS });\r\n  }, [dispatch]);\r\n\r\n  const [errorDialog, showErrorDialog, isErrorDialogVisible] = useConfirmDialog({\r\n    className: 'company-page-linking-error-dialog',\r\n    title,\r\n    content,\r\n    confirmText: i18n.getString(_TL_('OK')),\r\n    onConfirm,\r\n    hideCancel: true,\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (title && mode === ERROR_MODES.dialog) {\r\n      showErrorDialog();\r\n    }\r\n  }, [mode, showErrorDialog, title]);\r\n\r\n  return isErrorDialogVisible ? errorDialog : null;\r\n};\r\n\r\nexport const useMessageBarStyles = makeStyles({\r\n  messageBar: {\r\n    marginTop: '8px',\r\n    maxWidth: '500px',\r\n    whiteSpace: 'normal',\r\n    alignItems: 'flex-start',\r\n    paddingTop: tokens.spacingVerticalM,\r\n    paddingBottom: tokens.spacingVerticalM,\r\n  },\r\n});\r\n\r\nexport const useErrorMessageBar = ({ state }) => {\r\n  const classes = useMessageBarStyles();\r\n  const { title, content, mode } = useErrorMessages({ state });\r\n\r\n  const errorMessageBar = useMemo(() => {\r\n    if (mode !== ERROR_MODES.messageBar) {\r\n      return null;\r\n    }\r\n    return (\r\n      <MessageBar\r\n        className={mergeClasses(classes.messageBar, 'server-error-message-bar')}\r\n        intent=\"error\"\r\n        layout=\"singleline\"\r\n      >\r\n        <MessageBarBody>\r\n          {title && <MessageBarTitle>{title}</MessageBarTitle>}\r\n          {content}\r\n        </MessageBarBody>\r\n      </MessageBar>\r\n    );\r\n  }, [classes.messageBar, content, mode, title]);\r\n\r\n  return errorMessageBar;\r\n};\r\n","import { useEffect, useContext, useState } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { reauthLinkedInMember } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\nimport { useLinkedInLinking } from './use-linkedin-linking';\r\n\r\nexport const useRefreshMemberToken = (state, dispatch, logger) => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const [isProcessing, setIsProcessing] = useState(false);\r\n\r\n  const { isRefreshingToken, isMemberTokenActive } = state;\r\n  const login = useLinkedInLinking({ windowObject: window });\r\n\r\n  useEffect(() => {\r\n    if (isRefreshingToken && !isProcessing && !isMemberTokenActive) {\r\n      setIsProcessing(true);\r\n      login(logger).then(authorizationData => reauthLinkedInMember(cid, aid, { // Replace with real API for refresh token here\r\n        authorizationData,\r\n      }).then((Res) => {\r\n        logger.trace(`Member token refreshed: ${JSON.stringify(Res)}`);\r\n        dispatch({\r\n          type: COMPANY_PAGE_LINKING_ACTIONS.MEMBER_TOKEN_REFRESHED,\r\n        });\r\n      })).catch((err) => {\r\n        logger.trace(`Failed to refresh member token: ${JSON.stringify(err)}`);\r\n        dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.MEMBER_TOKEN_REFRESH_FAILED, refreshTokenError: err });\r\n      }).finally(() => {\r\n        setIsProcessing(false);\r\n      });\r\n    }\r\n  }, [aid, cid, dispatch, isRefreshingToken, isProcessing, logger, login, isMemberTokenActive]);\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { makeStyles, mergeClasses, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n  title: {\r\n    fontWeight: 'bold',\r\n    fontSize: 26,\r\n    lineHeight: '36px',\r\n    ...shorthands.margin('0px'),\r\n  },\r\n  description: {\r\n    lineHeight: '20px',\r\n    maxWidth: 560,\r\n    ...shorthands.margin('8px', '0px', '24px', '0px'),\r\n  },\r\n});\r\n\r\nexport const StepHeader = ({\r\n  title,\r\n  description,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <h1 className={mergeClasses('step-title', classes.title)}>\r\n        {i18n.getString(title)}\r\n      </h1>\r\n      <p className={mergeClasses('step-description', classes.description)}>\r\n        {i18n.getString(description)}\r\n      </p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nStepHeader.propTypes = {\r\n  title: PropTypes.string.isRequired,\r\n  description: PropTypes.string.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const LinkedInLogo = React.memo(({ width, height }) => (\r\n  <svg width={width} height={height} viewBox=\"0 0 101 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <g clipPath=\"url(#clip0_1944_9987)\">\r\n      <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.8181 99.9922H89.5959C95.7324 99.9922 100.707 95.0176 100.707 88.8811V11.1033C100.707 4.9668 95.7324 -0.0078125 89.5959 -0.0078125H11.8181C5.68164 -0.0078125 0.707031 4.9668 0.707031 11.1033V88.8811C0.707031 95.0176 5.68164 99.9922 11.8181 99.9922Z\" fill=\"#007EBB\" />\r\n      <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M86.8199 86.105H71.9805V60.8302C71.9805 53.9005 69.3474 50.028 63.8625 50.028C57.8957 50.028 54.7783 54.058 54.7783 60.8302V86.105H40.4773V37.9569H54.7783V44.4424C54.7783 44.4424 59.0783 36.4859 69.2956 36.4859C79.5083 36.4859 86.8199 42.7224 86.8199 55.6206V86.105ZM23.4162 31.6523C18.545 31.6523 14.5977 27.674 14.5977 22.7675C14.5977 17.8611 18.545 13.8828 23.4162 13.8828C28.2874 13.8828 32.2324 17.8611 32.2324 22.7675C32.2324 27.674 28.2874 31.6523 23.4162 31.6523ZM16.0318 86.105H30.944V37.9569H16.0318V86.105Z\" fill=\"white\" />\r\n    </g>\r\n    <defs>\r\n      <clipPath id=\"clip0_1944_9987\">\r\n        <rect width=\"100\" height=\"100\" fill=\"white\" transform=\"translate(0.707031)\" />\r\n      </clipPath>\r\n    </defs>\r\n  </svg>\r\n));\r\n\r\nLinkedInLogo.propTypes = {\r\n  width: PropTypes.number,\r\n  height: PropTypes.number,\r\n};\r\nLinkedInLogo.defaultProps = {\r\n  width: 101,\r\n  height: 100,\r\n};\r\n\r\nexport const LinkedInLogo24 = React.memo(() => <LinkedInLogo width={24} height={24} />);\r\nexport const LinkedInLogo40 = React.memo(() => <LinkedInLogo width={40} height={40} />);\r\nexport const LinkedInLogo120 = React.memo(() => <LinkedInLogo width={120} height={120} />);\r\n\r\nexport const LinkedInIconWhite = React.memo(({ width, height }) => (\r\n  <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <g clipPath=\"url(#clip0_1944_10020)\">\r\n      <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M2.48481 16H14.9293C15.9111 16 16.707 15.2041 16.707 14.2222V1.77778C16.707 0.795938 15.9111 0 14.9293 0H2.48481C1.50297 0 0.707031 0.795938 0.707031 1.77778V14.2222C0.707031 15.2041 1.50297 16 2.48481 16Z\" fill=\"white\" />\r\n      <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.4852 13.7782H12.1109V9.73424C12.1109 8.62549 11.6896 8.00589 10.8121 8.00589C9.85738 8.00589 9.35859 8.65068 9.35859 9.73424V13.7782H7.07043V6.07451H9.35859V7.1122C9.35859 7.1122 10.0466 5.83915 11.6814 5.83915C13.3154 5.83915 14.4852 6.83698 14.4852 8.9007V13.7782ZM4.34065 5.06577C3.56126 5.06577 2.92969 4.42925 2.92969 3.64421C2.92969 2.85918 3.56126 2.22266 4.34065 2.22266C5.12005 2.22266 5.75124 2.85918 5.75124 3.64421C5.75124 4.42925 5.12005 5.06577 4.34065 5.06577ZM3.15914 13.7782H5.54511V6.07451H3.15914V13.7782Z\" fill=\"#0078D4\" />\r\n    </g>\r\n    <defs>\r\n      <clipPath id=\"clip0_1944_10020\">\r\n        <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.707031)\" />\r\n      </clipPath>\r\n    </defs>\r\n  </svg>\r\n));\r\n\r\nLinkedInIconWhite.propTypes = {\r\n  width: PropTypes.number,\r\n  height: PropTypes.number,\r\n};\r\nLinkedInIconWhite.defaultProps = {\r\n  width: 17,\r\n  height: 16,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { makeStyles, shorthands, SkeletonItem } from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  row: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    marginBottom: '12px',\r\n    ...shorthands.gap('8px'),\r\n  },\r\n});\r\n\r\nexport const LabelSkeletonItem = ({ width }) => {\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <div className={classes.row} style={{ width }}>\r\n      <SkeletonItem size={16} />\r\n    </div>\r\n  );\r\n};\r\n\r\nLabelSkeletonItem.propTypes = {\r\n  width: PropTypes.number,\r\n};\r\n\r\nLabelSkeletonItem.defaultProps = {\r\n  width: 250,\r\n};\r\n\r\nexport const RadioSkeletonItem = ({ width }) => {\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <div className={classes.row}>\r\n      <SkeletonItem size={24} shape=\"circle\" />\r\n      <div style={{ width }} >\r\n        <SkeletonItem size={16} />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nRadioSkeletonItem.propTypes = {\r\n  width: PropTypes.number,\r\n};\r\n\r\nRadioSkeletonItem.defaultProps = {\r\n  width: 250,\r\n};\r\n\r\nexport const DropdownSkeletonItem = ({ width }) => {\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <div className={classes.row} style={{ width }}>\r\n      <SkeletonItem size={32} />\r\n    </div>\r\n  );\r\n};\r\n\r\nDropdownSkeletonItem.propTypes = {\r\n  width: PropTypes.number,\r\n};\r\n\r\nDropdownSkeletonItem.defaultProps = {\r\n  width: 250,\r\n};\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody, MessageBarTitle, MessageBarActions } from '@fluentui/react-message-bar';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const MemberTokenWarning = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const navigateToReAuthFlow = useCallback(() => {\r\n    scope.append({ isReAuth: true });\r\n    scope.remove(['campaignId', 'adGroupId', 'adId']);\r\n    scope.save('/campaign/vnext/createcampaign/linkedin');\r\n  }, [scope]);\r\n\r\n  const memberTokenWarning = useMemo(\r\n    () => (\r\n      <MessageBar intent=\"warning\">\r\n        <MessageBarBody>\r\n          <MessageBarTitle>{_TL_('Your LinkedIn authentication has been revoked.')}</MessageBarTitle>\r\n          {_TL_('Please re-authenticate to continue using LinkedIn features.')}\r\n        </MessageBarBody>\r\n        <MessageBarActions>\r\n          <Button appearance=\"primary\" size=\"small\" onClick={navigateToReAuthFlow} aria-label={i18n.getString(_TL_('Re-authenticate'))}>\r\n            {_TL_('Click here')}\r\n          </Button>\r\n        </MessageBarActions>\r\n      </MessageBar>\r\n    ),\r\n    [i18n, navigateToReAuthFlow]\r\n  );\r\n\r\n  return memberTokenWarning;\r\n};\r\n\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useAuthenticationStageStyles = makeStyles({\r\n  container: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n  },\r\n  contentContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n  },\r\n  logo: {\r\n    height: '100px',\r\n  },\r\n  title: {\r\n    marginTop: '32px',\r\n    fontSize: '24px',\r\n    fontWeight: 'bold',\r\n    lineHeight: '32px',\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  description: {\r\n    maxWidth: '420px',\r\n    fontSize: tokens.fontSizeBase400,\r\n    lineHeight: '21px',\r\n    color: tokens.colorNeutralForeground2,\r\n  },\r\n  helpLink: {\r\n    marginLeft: '4px',\r\n  },\r\n  itemsContainer: {\r\n    maxWidth: '408px',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignSelf: 'flex-start',\r\n    marginTop: '32px',\r\n    ...shorthands.gap(tokens.spacingVerticalL),\r\n  },\r\n  item: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  checkmark: {\r\n    color: tokens.colorPaletteSeafoamForeground2,\r\n    fontSize: tokens.fontSizeBase600,\r\n    marginRight: '8px',\r\n  },\r\n  itemText: {\r\n    fontSize: tokens.fontSizeBase400,\r\n    color: tokens.colorNeutralForeground2,\r\n  },\r\n  actionsContainer: {\r\n    marginTop: '32px',\r\n    display: 'flex',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpLink } from '@bingads-webui-react/help-link';\r\nimport { Text, Button, mergeClasses } from '@fluentui/react-components';\r\nimport { CheckmarkCircleFilled } from '@fluentui/react-icons';\r\nimport { LinkedInIconWhite, LinkedInLogo } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\nimport { useLoadCompanyPages } from '../hooks';\r\nimport { useAuthenticationStageStyles } from '../styles/authentication-stage-styles';\r\n\r\nconst FEATURES = [{\r\n  key: 'ads',\r\n  text: _TL_('Create ads to reach your LinkedIn audience'),\r\n}, {\r\n  key: 'monitor',\r\n  text: _TL_('Monitor campaigns with data visualization'),\r\n}, {\r\n  key: 'access',\r\n  text: _TL_('Access performance metrics'),\r\n}];\r\n\r\nexport const AuthenticationStage = (props) => {\r\n  const {\r\n    state, dispatch, onCancel, serverError, logger,\r\n  } = props;\r\n\r\n  const classes = useAuthenticationStageStyles();\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const onLinkClicked = useCallback(() => {\r\n    logger.trace('Start LinkedIn authentication');\r\n    dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.START_AUTHENTICATION });\r\n  }, [dispatch, logger]);\r\n\r\n  useLoadCompanyPages(state, dispatch, logger);\r\n\r\n  return (\r\n    <div className={mergeClasses('authentication-stage', classes.container)}>\r\n      <div className={classes.contentContainer}>\r\n        <div className={classes.logo}>\r\n          <LinkedInLogo />\r\n        </div>\r\n        <Text as=\"h1\" className={classes.title}>\r\n          {i18n.getString(_TL_('Connect to your company\\'s LinkedIn page'))}\r\n        </Text>\r\n        <span className={classes.description}>\r\n          <span>\r\n            {i18n.getString(_TL_('You must have permission to be a paid media admin for your company’s page to create a campaign. '))}\r\n          </span>\r\n          <HelpLink query=\"help:app54861\" className={classes.helpLink}>{i18n.getString(_TL_('Learn more'))}</HelpLink>\r\n        </span>\r\n        <div className={mergeClasses('feature-items', classes.itemsContainer)}>\r\n          {FEATURES.map(feature => (\r\n            <div key={feature.key} className={classes.item}>\r\n              <CheckmarkCircleFilled className={classes.checkmark} />\r\n              <Text className={classes.itemText}>{i18n.getString(feature.text)}</Text>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      </div>\r\n      {serverError}\r\n      <div className={classes.actionsContainer}>\r\n        <Button className=\"step-cancel-button\" onClick={onCancel}>\r\n          {i18n.getString(_TL_('Cancel'))}\r\n        </Button>\r\n        <Button\r\n          appearance=\"primary\"\r\n          className=\"connect-button\"\r\n          onClick={onLinkClicked}\r\n          icon={<LinkedInIconWhite />}\r\n        >\r\n          {i18n.getString(_TL_('Connect'))}\r\n        </Button>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nAuthenticationStage.propTypes = {\r\n  state: PropTypes.shape({}).isRequired,\r\n  dispatch: PropTypes.func.isRequired,\r\n  onCancel: PropTypes.func.isRequired,\r\n  serverError: PropTypes.node,\r\n  logger: PropTypes.shape({\r\n    trace: PropTypes.func,\r\n    error: PropTypes.func,\r\n  }),\r\n};\r\n\r\nAuthenticationStage.defaultProps = {\r\n  serverError: null,\r\n  logger: {\r\n    trace: _.noop,\r\n    error: _.noop,\r\n  },\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  Text,\r\n  Image,\r\n  mergeClasses,\r\n  makeStyles,\r\n  tokens,\r\n  shorthands,\r\n} from '@fluentui/react-components';\r\n\r\nimport DefaultCompanyPageLogo from '../../media/default-company-page-logo.png';\r\n\r\nconst useComponyPageItemStyles = makeStyles({\r\n  companyPageItem: {\r\n    display: 'flex',\r\n  },\r\n  image: {\r\n    width: '48px',\r\n    height: '48px',\r\n    ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n  },\r\n  details: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'flex-start',\r\n    justifyContent: 'center',\r\n    marginLeft: '8px',\r\n  },\r\n  name: {\r\n    fontWeight: 'bold',\r\n    lineHeight: '20px',\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  industry: {\r\n    lineHeight: '20px',\r\n    fontSize: tokens.fontSizeBase200,\r\n  },\r\n});\r\n\r\nexport const ComponyPageItem = (props) => {\r\n  const {\r\n    companyPageName,\r\n    companyPageLogoSrc,\r\n    industryLocation,\r\n    industryType,\r\n  } = props;\r\n\r\n  const classes = useComponyPageItemStyles();\r\n  const industry = industryType && industryLocation ? `${industryType} · ${industryLocation}` : (industryType || industryLocation);\r\n\r\n  return (\r\n    <div className={mergeClasses('company-page-item', classes.companyPageItem)}>\r\n      <Image src={companyPageLogoSrc || DefaultCompanyPageLogo} alt={companyPageName} className={classes.image} />\r\n      <div className={classes.details}>\r\n        <Text className={mergeClasses('company-page-name', classes.name)}>\r\n          {companyPageName}\r\n        </Text>\r\n        { industry && <Text className={mergeClasses('company-page-industry', classes.industry)}>{industry}</Text>}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nComponyPageItem.propTypes = {\r\n  companyPageName: PropTypes.string.isRequired,\r\n  companyPageLogoSrc: PropTypes.string,\r\n  industryLocation: PropTypes.string,\r\n  industryType: PropTypes.string,\r\n};\r\n\r\nComponyPageItem.defaultProps = {\r\n  companyPageLogoSrc: '',\r\n  industryLocation: '',\r\n  industryType: '',\r\n};\r\n","import { makeStyles, tokens, shorthands, typographyStyles } from '@fluentui/react-components';\r\n\r\nexport const useCompanyPageSelectionStageStyles = makeStyles({\r\n  container: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    ...shorthands.gap(tokens.spacingVerticalXXXL),\r\n  },\r\n  contentContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    ...shorthands.gap(tokens.spacingVerticalXXXL),\r\n  },\r\n  descriptionContainer: {\r\n    alignSelf: 'flex-start',\r\n    width: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  title: {\r\n    fontSize: '24px',\r\n    fontWeight: 'bold',\r\n    lineHeight: '32px',\r\n    color: tokens.colorNeutralForeground1,\r\n    textAlign: 'center',\r\n    marginBottom: '4px',\r\n    marginTop: '0px',\r\n  },\r\n  itemText: {\r\n    fontSize: tokens.fontSizeBase400,\r\n    color: tokens.colorNeutralForeground2,\r\n    textAlign: 'center',\r\n  },\r\n  companyPageContainer: {\r\n    width: '100%',\r\n  },\r\n  selectedCompanyPageContainer: {\r\n    display: 'flex',\r\n    width: '100%',\r\n    ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n    ...shorthands.border('1px', 'solid', tokens.colorNeutralStroke1),\r\n  },\r\n  companyPageInfo: {\r\n    flexGrow: 1,\r\n    flexShrink: 1,\r\n    flexBasis: 'auto',\r\n    marginLeft: '12px',\r\n    marginRight: '12px',\r\n    marginTop: '8px',\r\n    marginBottom: '8px',\r\n  },\r\n  companyPageActions: {\r\n    display: 'flex',\r\n    '& .choose-again-button': {\r\n      color: tokens.colorNeutralForeground3BrandHover,\r\n    },\r\n  },\r\n  selectionContainer: {\r\n    alignSelf: 'flex-start',\r\n    width: '100%',\r\n  },\r\n  selector: {\r\n    width: '100%',\r\n  },\r\n  info: {\r\n    display: 'flex',\r\n    maxWidth: '460px',\r\n    marginTop: '8px',\r\n    marginBottom: '24px',\r\n    fontSize: tokens.fontSizeBase200,\r\n  },\r\n  infoIcon: {\r\n    marginRight: '4px',\r\n  },\r\n  helpLink: {\r\n    marginLeft: '4px',\r\n  },\r\n  actionsContainer: {\r\n    display: 'flex',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n  termsAndConditions: {\r\n    maxWidth: '460px',\r\n\r\n    '& label.fui-Label': {\r\n      ...typographyStyles.caption1,\r\n      ...shorthands.padding(0),\r\n    },\r\n  },\r\n});\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox, Link } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nimport { useCompanyPageSelectionStageStyles } from '../styles/company-page-selection-stage-styles';\r\n\r\nexport const TermsAndConditions = ({ checked, onChange }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useCompanyPageSelectionStageStyles();\r\n\r\n  const label = useMemo(() => {\r\n    const template = i18n.getString(_TL_('By connecting to your company’s page, you agree that the {{link}}LinkedIn Ads Agreement{{/link}} will govern your LinkedIn campaigns.'));\r\n\r\n    return (\r\n      <ReactTemplate\r\n        template={template}\r\n        model={{\r\n          link: text => (\r\n            <Link\r\n              aria-label={i18n.getString(_TL_('LinkedIn Ads Agreement'))}\r\n              href=\"https://www.linkedin.com/legal/sas-terms\"\r\n              target=\"_blank\"\r\n              rel=\"noopener noreferrer\"\r\n              inline\r\n            >\r\n              {text}\r\n            </Link>\r\n          ),\r\n        }}\r\n      />\r\n    );\r\n  }, [i18n]);\r\n\r\n  const handleChange = useCallback(() =>\r\n    onChange(!checked), [checked, onChange]);\r\n\r\n  return (\r\n    <Checkbox\r\n      label={label}\r\n      checked={checked}\r\n      onChange={handleChange}\r\n      className={classes.termsAndConditions}\r\n    />\r\n  );\r\n};\r\n\r\nTermsAndConditions.propTypes = {\r\n  checked: PropTypes.bool.isRequired,\r\n  onChange: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n  Text,\r\n  Button,\r\n  mergeClasses,\r\n  Dialog,\r\n  DialogTrigger,\r\n  DialogSurface,\r\n  DialogTitle,\r\n  DialogBody,\r\n  DialogActions,\r\n  DialogContent,\r\n  Label,\r\n} from '@fluentui/react-components';\r\nimport { SearchableSelectorWithDefaultList } from '@bingads-webui-campaign-react/searchable-selector-with-default-list';\r\nimport { typeaheadCompanyPageSearch } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { LinkedInLogo } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nimport { ComponyPageItem, TermsAndConditions } from '../shared-components';\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\nimport { useSaveCompanyPage } from '../hooks';\r\nimport { useCompanyPageSelectionStageStyles } from '../styles/company-page-selection-stage-styles';\r\n\r\nexport const CompanyPageSelectionStage = (props) => {\r\n  const {\r\n    state, dispatch, onCancel, onContinue, serverError, logger,\r\n  } = props;\r\n\r\n  const classes = useCompanyPageSelectionStageStyles();\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const serverContext = useContext(ServerContext);\r\n  const aid = useMemo(() => serverContext.CurrentAccount.Id, [serverContext]);\r\n  const cid = useMemo(() => serverContext.CurrentCustomer.Id, [serverContext]);\r\n\r\n  useSaveCompanyPage(state, dispatch, onContinue, logger);\r\n\r\n  const [termsAndConditionsAccepted, setTermsAndConditionsAccepted] = useState(false);\r\n\r\n  const { companyPages, selectedCompanyPage = {} } = state;\r\n  const {\r\n    Id: selectedCompanyPageId = null,\r\n    // Name: selectedCompanyPageName,\r\n  } = selectedCompanyPage || {};\r\n\r\n  const selectedOptions = useMemo(() => (selectedCompanyPageId ? [selectedCompanyPageId] : []), [selectedCompanyPageId]);\r\n\r\n  const disableAllowButton = !selectedCompanyPageId || !termsAndConditionsAccepted;\r\n\r\n  const onChangePageSelection = useCallback((newSelectedCompanyPage) => {\r\n    logger.trace(`Selected company page: ${JSON.stringify(newSelectedCompanyPage)}`);\r\n    if (newSelectedCompanyPage) {\r\n      const isAdminOf = companyPages.some(({ Id }) => Id === newSelectedCompanyPage.Id);\r\n      dispatch({\r\n        type: COMPANY_PAGE_LINKING_ACTIONS.UPDATE_SELECTED_COMPANY_PAGE,\r\n        selectedCompanyPage: { ...newSelectedCompanyPage, isAdminOf },\r\n      });\r\n    } else {\r\n      dispatch({\r\n        type: COMPANY_PAGE_LINKING_ACTIONS.UPDATE_SELECTED_COMPANY_PAGE,\r\n        selectedCompanyPage: null,\r\n      });\r\n    }\r\n  }, [dispatch, logger, companyPages]);\r\n\r\n  const onContinueClicked = useCallback(() => {\r\n    if (selectedCompanyPage.isAdminOf) {\r\n      dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.START_SAVING_COMPANY_PAGE });\r\n    } else {\r\n      dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.CONFIRM_LINK_COMPANY_PAGE });\r\n    }\r\n  }, [dispatch, selectedCompanyPage]);\r\n\r\n  const fetchCompanies = useCallback(\r\n    (query) => {\r\n      if (!query) return Promise.resolve([]);\r\n\r\n      return typeaheadCompanyPageSearch(cid, aid, query).then(({ CompanyPages }) => CompanyPages);\r\n    }\r\n    , [cid, aid]\r\n  );\r\n\r\n  const customRender = useCallback(({\r\n    Name, LogoDownloadUrl, Location, IndustryType,\r\n  }) => (\r\n    <ComponyPageItem\r\n      companyPageName={Name}\r\n      companyPageLogoSrc={LogoDownloadUrl}\r\n      industryLocation={Location}\r\n      industryType={IndustryType}\r\n    />\r\n  ), []);\r\n\r\n  return (\r\n    <div className={mergeClasses('company-page-selection-stage', classes.container)}>\r\n      <div className={classes.contentContainer}>\r\n        <LinkedInLogo />\r\n        <div className={mergeClasses('connect-company-page-description', classes.descriptionContainer)}>\r\n          <Text as=\"h1\" className={classes.title}>\r\n            {i18n.getString(_TL_('Connect to your company’s LinkedIn page'))}\r\n          </Text>\r\n          <Text className={classes.itemText}>{i18n.getString(_TL_('Connect to your company to advertise on LinkedIn.'))}</Text>\r\n        </div>\r\n        <div className={mergeClasses('connect-to-company-page', classes.companyPageContainer)}>\r\n          {selectedCompanyPageId ? (\r\n            <div>\r\n              <Label>{i18n.getString(_TL_('Connect'))}</Label>\r\n              <div className={mergeClasses('selected-company-page', classes.selectedCompanyPageContainer)}>\r\n                <div className={mergeClasses('company-page-info', classes.companyPageInfo)}>\r\n                  <ComponyPageItem\r\n                    companyPageName={selectedCompanyPage.Name}\r\n                    companyPageLogoSrc={selectedCompanyPage.LogoDownloadUrl}\r\n                    industryLocation={selectedCompanyPage.Location}\r\n                    industryType={selectedCompanyPage.IndustryType}\r\n                  />\r\n                </div>\r\n                <div className={classes.companyPageActions}>\r\n                  <Button\r\n                    className=\"choose-again-button\"\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onChangePageSelection(null)}\r\n                  >\r\n                    {i18n.getString(_TL_('Update'))}\r\n                  </Button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n      ) : (\r\n        <SearchableSelectorWithDefaultList\r\n          className={mergeClasses('company-page-selector', classes.selector)}\r\n          label={i18n.getString(_TL_('Connect to your company’s page'))}\r\n          loadingText={i18n.getString(_TL_('Loading companies...'))}\r\n          placeholderText={i18n.getString(_TL_('Select your company page'))}\r\n          noResultsText={i18n.getString(_TL_('No companies found'))}\r\n          fetchFn={fetchCompanies}\r\n          onRenderOption={customRender}\r\n          value={selectedOptions}\r\n          onSelectOption={onChangePageSelection}\r\n          defaultGroupName={i18n.getString(_TL_('Pages that you are admin of'))}\r\n          defaultResults={companyPages}\r\n          searchResultGroupName={i18n.getString(_TL_('Company page'))}\r\n        />\r\n      )}\r\n        </div>\r\n        <div className=\"terms-and-conditions\">\r\n          <TermsAndConditions\r\n            checked={termsAndConditionsAccepted}\r\n            onChange={setTermsAndConditionsAccepted}\r\n          />\r\n        </div>\r\n      </div>\r\n      {serverError}\r\n      <div className={classes.actionsContainer}>\r\n        <Button className=\"step-cancel-button\" onClick={onCancel}>\r\n          {i18n.getString(_TL_('Cancel'))}\r\n        </Button>\r\n\r\n        <Dialog modalType=\"non-modal\">\r\n          <DialogTrigger disableButtonEnhancement>\r\n            <Button\r\n              appearance=\"primary\"\r\n              className=\"allow-button\"\r\n              disabled={disableAllowButton}\r\n            >\r\n              {i18n.getString(_TL_('Next'))}\r\n            </Button>\r\n          </DialogTrigger>\r\n          <DialogSurface>\r\n            <DialogBody className=\"confirm-dialog\">\r\n              <DialogTitle>{i18n.getString(_TL_('You cannot change your company page once you’ve connected'))}</DialogTitle>\r\n              <DialogContent>{i18n.getString(_TL_('After connecting this account to this LinkedIn Company Page, you will not be able to change the connection for this account.'))}\r\n              </DialogContent>\r\n              <DialogActions>\r\n                <DialogTrigger disableButtonEnhancement>\r\n                  <Button\r\n                    appearance=\"primary\"\r\n                    className=\"continue-button\"\r\n                    onClick={onContinueClicked}\r\n                  >{i18n.getString(_TL_('Continue'))}\r\n                  </Button>\r\n                </DialogTrigger>\r\n              </DialogActions>\r\n            </DialogBody>\r\n          </DialogSurface>\r\n        </Dialog>\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nCompanyPageSelectionStage.propTypes = {\r\n  state: PropTypes.shape({\r\n    companyPages: PropTypes.arrayOf(PropTypes.shape({})),\r\n    selectedCompanyPage: PropTypes.shape({\r\n      Id: PropTypes.string,\r\n      Name: PropTypes.string,\r\n    }),\r\n  }).isRequired,\r\n  dispatch: PropTypes.func.isRequired,\r\n  onCancel: PropTypes.func.isRequired,\r\n  onContinue: PropTypes.func.isRequired,\r\n  serverError: PropTypes.node,\r\n  logger: PropTypes.shape({\r\n    trace: PropTypes.func,\r\n    error: PropTypes.func,\r\n  }),\r\n};\r\n\r\nCompanyPageSelectionStage.defaultProps = {\r\n  serverError: null,\r\n  logger: {\r\n    trace: _.noop,\r\n    error: _.noop,\r\n  },\r\n};\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useRequestAccessStageStyles = makeStyles({\r\n  container: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    maxWidth: '497px',\r\n    ...shorthands.gap(tokens.spacingVerticalXXXL),\r\n  },\r\n  contentContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    ...shorthands.gap(tokens.spacingVerticalXXXL),\r\n  },\r\n  infoSection: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  logo: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    width: '192px',\r\n    height: '192px',\r\n    alignSelf: 'center',\r\n  },\r\n  title: {\r\n    textAlign: 'center',\r\n    marginBottom: '8px',\r\n    marginTop: '0px',\r\n    fontSize: '24px',\r\n    fontWeight: 'bold',\r\n    lineHeight: '32px',\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  description: {\r\n    fontSize: tokens.fontSizeBase400,\r\n    color: tokens.colorNeutralForeground2,\r\n  },\r\n  companyPageContainer: {\r\n    alignSelf: 'flex-start',\r\n    width: '100%',\r\n    backgroundColor: tokens.colorNeutralBackground1Pressed,\r\n    ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n    '& .company-page-item': {\r\n      marginLeft: '16px',\r\n      marginTop: '8px',\r\n      marginBottom: '8px',\r\n    },\r\n  },\r\n  actionsContainer: {\r\n    display: 'flex',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Text,\r\n  Button,\r\n  mergeClasses,\r\n  Image,\r\n} from '@fluentui/react-components';\r\n\r\nimport { ComponyPageItem } from '../shared-components';\r\nimport { useRequestAccessStageStyles } from '../styles/request-access-stage-styles';\r\nimport PERMISSION_REQUIRED_LOGO_SRC from '../../media/permission-required-logo.svg';\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\nimport { useSaveCompanyPage } from '../hooks';\r\n\r\nexport const RequestAccessStage = (props) => {\r\n  const {\r\n    state,\r\n    dispatch,\r\n    onContinue,\r\n    serverError,\r\n    logger,\r\n  } = props;\r\n\r\n  const classes = useRequestAccessStageStyles();\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { selectedCompanyPage } = state;\r\n  const {\r\n    Name: companyPageName,\r\n    LogoDownloadUrl: companyPageLogoSrc,\r\n    Location: industryLocation,\r\n    IndustryType: industryType,\r\n  } = selectedCompanyPage;\r\n\r\n  const onClickRequestAccess = useCallback(() => {\r\n    logger.trace('Start Connect company page');\r\n    dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.START_SAVING_COMPANY_PAGE });\r\n  }, [dispatch, logger]);\r\n\r\n  useSaveCompanyPage(state, dispatch, onContinue, logger);\r\n\r\n  return (\r\n    <div className={mergeClasses('request-access-stage', classes.container)}>\r\n      <div className={classes.contentContainer}>\r\n        <div className={mergeClasses('info-session', classes.infoSection)}>\r\n          <Image src={PERMISSION_REQUIRED_LOGO_SRC} className={classes.logo} />\r\n          <Text as=\"h1\" className={mergeClasses('permission-status-title', classes.title)}>\r\n            {i18n.getString(_TL_('Permission required'))}\r\n          </Text>\r\n          <Text className={classes.description}>\r\n            {i18n.getString(_TL_('Creating or modifying ads requires permissions granted by the company’s page administrator. You must have permission to be a paid media admin.'))}\r\n          </Text>\r\n        </div>\r\n        <div className={classes.companyPageContainer}>\r\n          <ComponyPageItem\r\n            companyPageName={companyPageName}\r\n            companyPageLogoSrc={companyPageLogoSrc}\r\n            industryLocation={industryLocation}\r\n            industryType={industryType}\r\n          />\r\n        </div>\r\n      </div>\r\n      {serverError}\r\n      <div className={classes.actionsContainer}>\r\n        <Button\r\n          appearance=\"primary\"\r\n          className=\"request-access-button\"\r\n          onClick={onClickRequestAccess}\r\n          aria-label={i18n.getString(_TL_('Permission required, click here to request permission.'))}\r\n        >\r\n          {i18n.getString(_TL_('Request permission'))}\r\n        </Button>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nRequestAccessStage.propTypes = {\r\n  state: PropTypes.shape({\r\n    permissionStatus: PropTypes.string,\r\n    selectedCompanyPage: PropTypes.shape({\r\n      Id: PropTypes.string,\r\n      Name: PropTypes.string,\r\n      LogoDownloadUrl: PropTypes.string,\r\n      Location: PropTypes.string,\r\n      IndustryType: PropTypes.string,\r\n    }),\r\n  }).isRequired,\r\n  dispatch: PropTypes.func.isRequired,\r\n  onContinue: PropTypes.func.isRequired,\r\n  serverError: PropTypes.node,\r\n  logger: PropTypes.shape({\r\n    trace: PropTypes.func,\r\n    error: PropTypes.func,\r\n  }),\r\n};\r\n\r\nRequestAccessStage.defaultProps = {\r\n  serverError: null,\r\n  logger: {\r\n    trace: _.noop,\r\n    error: _.noop,\r\n  },\r\n};\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const usePermissionCheckStageV2Styles = makeStyles({\r\n  container: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    maxWidth: '497px',\r\n    ...shorthands.gap(tokens.spacingVerticalXXXL),\r\n  },\r\n  contentContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    ...shorthands.gap(tokens.spacingVerticalXXXL),\r\n  },\r\n  statusContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  statusLogo: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    width: '192px',\r\n    height: '192px',\r\n    alignSelf: 'center',\r\n  },\r\n  title: {\r\n    textAlign: 'center',\r\n    marginBottom: '8px',\r\n    marginTop: '0px',\r\n    fontSize: '24px',\r\n    fontWeight: 'bold',\r\n    lineHeight: '32px',\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  description: {\r\n    fontSize: tokens.fontSizeBase400,\r\n    color: tokens.colorNeutralForeground2,\r\n  },\r\n  companyPageContainer: {\r\n    alignSelf: 'flex-start',\r\n    width: '100%',\r\n    backgroundColor: tokens.colorNeutralBackground1Pressed,\r\n    ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n    '& .company-page-item': {\r\n      marginLeft: '16px',\r\n      marginTop: '8px',\r\n      marginBottom: '8px',\r\n    },\r\n  },\r\n  actionsContainer: {\r\n    display: 'flex',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useContext, useEffect, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Text,\r\n  Button,\r\n  mergeClasses,\r\n  Image,\r\n} from '@fluentui/react-components';\r\nimport { PERMISSION_STATUS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nimport { ComponyPageItem } from '../shared-components';\r\nimport { useLoadPermissionStatus, useResendPermissionRequest } from '../hooks';\r\nimport { usePermissionCheckStageV2Styles } from '../styles/permission-check-stage-V2-styles';\r\nimport PERMISSION_REJECTED_LOGO_SRC from '../../media/permission-rejected-logo.svg';\r\nimport PERMISSION_PENDING_LOGO_SRC from '../../media/permission-pending-logo.svg';\r\nimport PERMISSION_APPROVED_LOGO_SRC from '../../media/permission-approved-logo.svg';\r\nimport DIRECTING_ICON from '../../media/directing-icon.png';\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\n\r\nexport const PermissionCheckStageV2 = (props) => {\r\n  const {\r\n    state,\r\n    dispatch,\r\n    onContinue,\r\n    serverError,\r\n    logger,\r\n  } = props;\r\n\r\n  const classes = usePermissionCheckStageV2Styles();\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { permissionStatus, connectedCompanyPage, isResendingPermissionRequest } = state;\r\n  const {\r\n    Name: companyPageName,\r\n    LogoDownloadUrl: companyPageLogoSrc,\r\n    Location: industryLocation,\r\n    IndustryType: industryType,\r\n    IsOrgUpdateAllowed: isOrgUpdateAllowed,\r\n  } = connectedCompanyPage;\r\n\r\n  useLoadPermissionStatus(state, dispatch, logger);\r\n  useResendPermissionRequest(state, dispatch, logger);\r\n\r\n  const onCheckStatus = useCallback(() => {\r\n    dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.LOAD_PERMISSION_STATUS });\r\n  }, [dispatch]);\r\n\r\n  const onGoback = useCallback(() => {\r\n    dispatch({\r\n      type: COMPANY_PAGE_LINKING_ACTIONS.GO_BACK_AND_RESET_COMPANY_PAGE,\r\n    });\r\n  }, [dispatch]);\r\n\r\n  const onResend = useCallback(() => {\r\n    dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.RESEND_PERMISSION_REQUEST });\r\n  }, [dispatch]);\r\n\r\n  useEffect(() => {\r\n    if (permissionStatus === PERMISSION_STATUS.APPROVED) {\r\n      const timer = setTimeout(() => {\r\n        onContinue();\r\n      }, 2000);\r\n\r\n      return () => clearTimeout(timer);\r\n    }\r\n    return undefined;\r\n  }, [permissionStatus, onContinue]);\r\n\r\n  const renderPermissionStatusSession = useMemo(() => {\r\n    let logoSrc;\r\n    let title;\r\n    let description;\r\n\r\n    // eslint-disable-next-line default-case\r\n    switch (state.permissionStatus) {\r\n      case PERMISSION_STATUS.REJECTED:\r\n        logoSrc = PERMISSION_REJECTED_LOGO_SRC;\r\n        title = _TL_('Permission denied');\r\n        description = _TL_('The company’s page administrator denied your request. You cannot proceed without permission.');\r\n        break;\r\n      case PERMISSION_STATUS.REQUESTED:\r\n        logoSrc = PERMISSION_PENDING_LOGO_SRC;\r\n        title = _TL_('Request pending approval');\r\n        description = _TL_('The company’s page administrator hasn’t approved your request yet.');\r\n        break;\r\n      case PERMISSION_STATUS.APPROVED:\r\n        logoSrc = PERMISSION_APPROVED_LOGO_SRC;\r\n        title = _TL_('Permission approved');\r\n        description = _TL_('Your request has been approved. Now you can create your campaign.');\r\n    }\r\n\r\n    return (\r\n      <div className={mergeClasses('permission-status-session', classes.statusContainer)}>\r\n        <Image src={logoSrc} className={classes.statusLogo} />\r\n        <Text as=\"h1\" className={mergeClasses('permission-status-title', classes.title)}>\r\n          {i18n.getString(title)}\r\n        </Text>\r\n        <Text className={classes.description}>\r\n          {i18n.getString(description)}\r\n        </Text>\r\n      </div>\r\n    );\r\n  }, [state, classes, i18n]);\r\n\r\n  const renderActionButtons = useMemo(() => (\r\n    <div className={classes.actionsContainer}>\r\n      {permissionStatus === PERMISSION_STATUS.REQUESTED && (\r\n      <Button\r\n        appearance=\"primary\"\r\n        className=\"check-status-button\"\r\n        onClick={onCheckStatus}\r\n        aria-label={i18n.getString(_TL_('Request pending approval, click here to check status.'))}\r\n      >\r\n        {i18n.getString(_TL_('Check status'))}\r\n      </Button>\r\n        )}\r\n      {permissionStatus === PERMISSION_STATUS.REJECTED && isOrgUpdateAllowed && (\r\n        <Button\r\n          appearance=\"primary\"\r\n          className=\"go-back-button\"\r\n          onClick={onGoback}\r\n          aria-label={i18n.getString(_TL_('Permission denied, click here to go back.'))}\r\n        >\r\n          {i18n.getString(_TL_('Go back'))}\r\n        </Button>\r\n        )}\r\n      {permissionStatus === PERMISSION_STATUS.REJECTED && (\r\n        <Button\r\n          className=\"resend-button\"\r\n          onClick={onResend}\r\n          disabled={isResendingPermissionRequest}\r\n          aria-label={i18n.getString(_TL_('Permission denied, click here to resend request.'))}\r\n        >\r\n          {i18n.getString(_TL_('Resend request'))}\r\n        </Button>\r\n        )}\r\n      {permissionStatus === PERMISSION_STATUS.APPROVED && (\r\n        <Button\r\n          icon={<Image src={DIRECTING_ICON} />}\r\n          appearance=\"primary\"\r\n          className=\"step-next-button\"\r\n          aria-label={i18n.getString(_TL_('Your request has been approved.'))}\r\n          disabled\r\n        >\r\n          {i18n.getString(_TL_('Loading'))}\r\n        </Button>\r\n        )}\r\n    </div>\r\n  ), [classes.actionsContainer, permissionStatus, onCheckStatus, i18n, isOrgUpdateAllowed, onGoback, onResend, isResendingPermissionRequest]);\r\n\r\n  return (\r\n    <div className={mergeClasses('permission-check-stage', classes.container)}>\r\n      <div className={classes.contentContainer}>\r\n        {renderPermissionStatusSession}\r\n        <div className={classes.companyPageContainer}>\r\n          <ComponyPageItem\r\n            companyPageName={companyPageName}\r\n            companyPageLogoSrc={companyPageLogoSrc}\r\n            industryLocation={industryLocation}\r\n            industryType={industryType}\r\n          />\r\n        </div>\r\n      </div>\r\n      {serverError}\r\n      {renderActionButtons}\r\n    </div>\r\n  );\r\n};\r\n\r\nPermissionCheckStageV2.propTypes = {\r\n  state: PropTypes.shape({\r\n    permissionStatus: PropTypes.string,\r\n    isResendingPermissionRequest: PropTypes.bool,\r\n    connectedCompanyPage: PropTypes.shape({\r\n      Id: PropTypes.string,\r\n      Name: PropTypes.string,\r\n      LogoDownloadUrl: PropTypes.string,\r\n      Location: PropTypes.string,\r\n      IndustryType: PropTypes.string,\r\n      IsOrgUpdateAllowed: PropTypes.bool,\r\n    }),\r\n  }).isRequired,\r\n  dispatch: PropTypes.func.isRequired,\r\n  onContinue: PropTypes.func.isRequired,\r\n  serverError: PropTypes.node,\r\n  logger: PropTypes.shape({\r\n    trace: PropTypes.func,\r\n    error: PropTypes.func,\r\n  }),\r\n};\r\n\r\nPermissionCheckStageV2.defaultProps = {\r\n  serverError: null,\r\n  logger: {\r\n    trace: _.noop,\r\n    error: _.noop,\r\n  },\r\n};\r\n","import { useEffect, useContext, useState } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getCompanyPagePermissionStatus } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\n\r\nexport const useLoadPermissionStatus = (state, dispatch, logger) => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const [isProcessing, setIsProcessing] = useState(false);\r\n\r\n  const { isLoadingPermissionStatus, authorizationData } = state;\r\n\r\n  useEffect(() => {\r\n    if (isLoadingPermissionStatus && !isProcessing) {\r\n      setIsProcessing(true);\r\n      getCompanyPagePermissionStatus(cid, aid).then((res) => {\r\n        logger.trace(`Permission status loaded: ${JSON.stringify(res)}`);\r\n        dispatch({\r\n          type: COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_STATUS_LOADED,\r\n          permissionStatus: res.value,\r\n        });\r\n      }).catch((err) => {\r\n        logger.trace(`Failed to load permission status: ${JSON.stringify(err)}`);\r\n        dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_STATUS_LOAD_FAILED, loadPermissionStatusError: err });\r\n      }).finally(() => {\r\n        setIsProcessing(false);\r\n      });\r\n    }\r\n  }, [aid, authorizationData, cid, dispatch, isLoadingPermissionStatus, isProcessing, logger]);\r\n};\r\n\r\n","import { useEffect, useContext, useState } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { connectToLinkedInCompanyPage } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\n\r\nexport const useResendPermissionRequest = (state, dispatch, logger) => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const [isProcessing, setIsProcessing] = useState(false);\r\n\r\n  const { isResendingPermissionRequest, authorizationData, connectedCompanyPage } = state;\r\n\r\n  useEffect(() => {\r\n    if (isResendingPermissionRequest && !isProcessing) {\r\n      setIsProcessing(true);\r\n      connectToLinkedInCompanyPage(cid, aid, {\r\n        authorizationData,\r\n        companyPageID: connectedCompanyPage.Id,\r\n      }).then(() => {\r\n        logger.trace(`Permission request resent for company page ${connectedCompanyPage.Id}`);\r\n        dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_REQUEST_RESENT });\r\n      }).catch((err) => {\r\n        logger.trace(`Failed to resend permission request: ${JSON.stringify(err)}`);\r\n        dispatch({ type: COMPANY_PAGE_LINKING_ACTIONS.PERMISSION_REQUEST_RESEND_FAILED, resendPermissionRequestError: err });\r\n      }).finally(() => {\r\n        setIsProcessing(false);\r\n      });\r\n    }\r\n  }, [aid, authorizationData, cid, connectedCompanyPage, dispatch, isProcessing, isResendingPermissionRequest, logger]);\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpLink } from '@bingads-webui-react/help-link';\r\nimport { Text, Button, mergeClasses } from '@fluentui/react-components';\r\nimport { CheckmarkCircleFilled } from '@fluentui/react-icons';\r\nimport { LinkedInIconWhite, LinkedInLogo } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\n\r\nimport { COMPANY_PAGE_LINKING_ACTIONS } from '../reducer';\r\nimport { useRefreshMemberToken } from '../hooks';\r\nimport { useAuthenticationStageStyles } from '../styles/authentication-stage-styles';\r\n\r\nconst FEATURES = [{\r\n  key: 'ads',\r\n  text: _TL_('Create ads to reach your LinkedIn audience'),\r\n}, {\r\n  key: 'monitor',\r\n  text: _TL_('Monitor campaigns with data visualization'),\r\n}, {\r\n  key: 'access',\r\n  text: _TL_('Access performance metrics'),\r\n}];\r\n\r\nexport const MemberTokenRefreshStage = (props) => {\r\n  const {\r\n    state, dispatch, onCancel, onContinue, serverError, logger,\r\n  } = props;\r\n\r\n  const classes = useAuthenticationStageStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const { isMemberTokenActive, isReAuthOnly } = state;\r\n\r\n  useEffect(() => {\r\n    if (isMemberTokenActive) {\r\n      if (isReAuthOnly) {\r\n        // exit the wizard after token get refreshed\r\n        if (scope.values.isReAuth) {\r\n          scope.remove('isReAuth');\r\n          scope.save();\r\n        }\r\n        onCancel();\r\n      } else {\r\n        onContinue();\r\n      }\r\n    }\r\n    return undefined;\r\n  }, [isMemberTokenActive, isReAuthOnly, onContinue, onCancel, scope]);\r\n\r\n  const onLoginClicked = useCallback(() => {\r\n    logger.trace('Start Re-login LinkedIn');\r\n    dispatch({\r\n      type: COMPANY_PAGE_LINKING_ACTIONS.START_REFRESH_MEMBER_TOKEN,\r\n\r\n    });\r\n  }, [dispatch, logger]);\r\n\r\n  useRefreshMemberToken(state, dispatch, logger);\r\n\r\n  return (\r\n    <div className={mergeClasses('member-token-refresh-stage', classes.container)}>\r\n      <div className={classes.contentContainer}>\r\n        <div className={classes.logo}>\r\n          <LinkedInLogo />\r\n        </div>\r\n        <Text as=\"h1\" className={classes.title}>\r\n          {i18n.getString(_TL_('Refresh linkedin authentication'))}\r\n        </Text>\r\n        <span className={classes.description}>\r\n          <span>\r\n            {i18n.getString(_TL_('Please re-login to your LinkedIn account to continue. This is required to maintain your permissions as a paid media admin for your company’s page.'))}\r\n          </span>\r\n          <HelpLink query=\"\" className={classes.helpLink}>{i18n.getString(_TL_('Learn more'))}</HelpLink>\r\n        </span>\r\n        <div className={mergeClasses('feature-items', classes.itemsContainer)}>\r\n          {FEATURES.map(feature => (\r\n            <div key={feature.key} className={classes.item}>\r\n              <CheckmarkCircleFilled className={classes.checkmark} />\r\n              <Text className={classes.itemText}>{i18n.getString(feature.text)}</Text>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      </div>\r\n      {serverError}\r\n      <div className={classes.actionsContainer}>\r\n        <Button className=\"step-cancel-button\" onClick={onCancel}>\r\n          {i18n.getString(_TL_('Cancel'))}\r\n        </Button>\r\n        <Button\r\n          appearance=\"primary\"\r\n          className=\"login-button\"\r\n          onClick={onLoginClicked}\r\n          icon={<LinkedInIconWhite />}\r\n        >\r\n          {i18n.getString(_TL_('Login'))}\r\n        </Button>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nMemberTokenRefreshStage.propTypes = {\r\n  state: PropTypes.shape({\r\n    isRefreshingToken: PropTypes.bool.isRequired,\r\n    isMemberTokenActive: PropTypes.bool.isRequired,\r\n    isReAuthOnly: PropTypes.bool.isRequired,\r\n  }).isRequired,\r\n  dispatch: PropTypes.func.isRequired,\r\n  onContinue: PropTypes.func.isRequired,\r\n  onCancel: PropTypes.func.isRequired,\r\n  serverError: PropTypes.node,\r\n  logger: PropTypes.shape({\r\n    trace: PropTypes.func,\r\n    error: PropTypes.func,\r\n  }),\r\n};\r\n\r\nMemberTokenRefreshStage.defaultProps = {\r\n  serverError: null,\r\n  logger: {\r\n    trace: _.noop,\r\n    error: _.noop,\r\n  },\r\n};\r\n","export const LINKING_STAGES = {\r\n  MEMBER_TOKEN_REFRESH: 'MEMBER_TOKEN_REFRESH',\r\n  LINKEDIN_AUTHENTICATION: 'LINKEDIN_AUTHENTICATION',\r\n  COMPANY_PAGE_SELECTION: 'COMPANY_PAGE_SELECTION',\r\n  REQUEST_ACCESS: 'REQUEST_ACCESS',\r\n  PERMISSION_CHECK: 'PERMISSION_CHECK',\r\n};\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image } from '@fluentui/react-components';\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n  getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { andComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ValidatedFormCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport CampaignNameImg from '../media/campaign-name-icon.svg';\r\n\r\nexport const CampaignPanel = ({ campaign, onDataChange }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const [\r\n    campaignSection,\r\n    campaignExpandedSection,\r\n    setcampaignExpandedSection,\r\n  ] = useCollapseState(['campaign'], ['campaign']);\r\n\r\n  const campaignNameProp = andComp(entityIs(ERROR_ENTITY.Campaign), propertyIs('Name'));\r\n\r\n  const onCampaignDataChange = useCallback((results) => {\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  }, [onDataChange]);\r\n\r\n  return (\r\n    <div className=\"campaign-section\">\r\n      <ValidationGroup\r\n        validationProps={{\r\n          schema: Campaign,\r\n          onValidate: onCampaignDataChange,\r\n          data: campaign,\r\n          i18n,\r\n          stopPropagation: true,\r\n        }}\r\n      >\r\n        <Collapse\r\n          allPanelItems={campaignSection}\r\n          checkItems\r\n          skipItemsTypeCheck\r\n          activeKeys={campaignExpandedSection}\r\n          setActiveKeys={setcampaignExpandedSection}\r\n        >\r\n          <ValidatedFormCard\r\n            key=\"campaign\"\r\n            className=\"campaign-card\"\r\n            attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n          >\r\n            <FormCardBasicHeader\r\n              title={i18n.getString(_TL_('Campaign name'))}\r\n              helpLabel={i18n.getString(_TL_('Click to learn more about campaign name'))}\r\n              helpTopic=\"pop_BA_CampaignCreate_Settings_CampaignName\"\r\n              contentBefore={<Image src={CampaignNameImg} aria-hidden />}\r\n\r\n            />\r\n            <FormCardBody>\r\n              <RemainingCharsValidatedTextField\r\n                placeholder={i18n.getString(_TL_('Enter a name for your campaign'))}\r\n                className=\"input-campaign-name\"\r\n                validationProps={{\r\n                  field: 'Name',\r\n                  schema: Campaign,\r\n                }}\r\n                i18n={i18n}\r\n                formErrorProps={{ filter: campaignNameProp }}\r\n              />\r\n            </FormCardBody>\r\n          </ValidatedFormCard>\r\n        </Collapse>\r\n      </ValidationGroup>\r\n    </div>\r\n  );\r\n};\r\n\r\nCampaignPanel.propTypes = {\r\n  campaign: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","export const getCompanyPageStyle = () => ({\r\n  companyPageInfo: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    padding: '8px 16px',\r\n    gap: '8px',\r\n    width: '100%',\r\n    height: '76px',\r\n    backgroundColor: '#F0F0F0',\r\n    flex: 'none',\r\n    order: 1,\r\n    alignSelf: 'stretch',\r\n    flexGrow: 0,\r\n  },\r\n  imageContainer: {\r\n    width: '60px',\r\n    height: '60px',\r\n    overflow: 'hidden', // Ensures content does not overflow the container\r\n    flexShrink: 0,\r\n    display: 'flex',\r\n  },\r\n  profileImage: {\r\n    width: '100%',\r\n    height: '100%',\r\n    objectFit: 'contain',\r\n  },\r\n  frame: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    alignItems: 'flex-start',\r\n    padding: '0px',\r\n    width: '442px',\r\n    height: '60px',\r\n\r\n    '& .company-page-info-title': {\r\n      fontFamily: 'Segoe UI',\r\n      fontSize: 14,\r\n      fontWeight: 600,\r\n      textAlign: 'center',\r\n\r\n      color: '#323130',\r\n    },\r\n\r\n    '& .company-page-info-text': {\r\n      fontFamily: 'Segoe UI',\r\n      fontSize: 12,\r\n      fontWeight: 400,\r\n      textAlign: 'center',\r\n\r\n      color: '#323130',\r\n    },\r\n  },\r\n});\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image, Text } from '@fluentui/react-components';\r\n\r\nimport classNames from 'classnames';\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { LinkedInLogo24 } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nimport { FormCard, FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\n\r\nimport { getCompanyPageStyle } from '../styles/company-page-style';\r\nimport DEFAULT_PROFILE_IMAGE from '../media/default-profile-image.svg';\r\n\r\nexport const CompanyPageCard = ({ companyInfo }) => {\r\n  const {\r\n    LogoDownloadUrl: userProfileImageSrc,\r\n    Name: companyPageName,\r\n    IndustryType: industryType,\r\n    Location: industryLocation,\r\n  } = companyInfo || {};\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useDefaultStyles(getCompanyPageStyle);\r\n\r\n  const [\r\n    companyPageSection,\r\n    companyPageExpandedSection,\r\n    setcompanyPageExpandedSection,\r\n  ] = useCollapseState(['company-page'], ['company-page']);\r\n\r\n  const descriptionText = i18n.getString(_TL_('You have chosen to advertise with this company. Since you connected your Microsoft Advertising account to this company’s LinkedIn page, you won’t be able to connect your account to a different company. If at some point you want to serve ads for a different company, you’ll need to create a new Microsoft Advertising account.'));\r\n\r\n  const industryText = [industryType, industryLocation].filter(Boolean).join(' . ');\r\n\r\n  return (\r\n    <div className=\"company-page-card\">\r\n      <Collapse\r\n        allPanelItems={companyPageSection}\r\n        checkItems\r\n        skipItemsTypeCheck\r\n        activeKeys={companyPageExpandedSection}\r\n        setActiveKeys={setcompanyPageExpandedSection}\r\n      >\r\n        <FormCard\r\n          className=\"company-page-card\"\r\n          key=\"company-page\"\r\n        >\r\n          <FormCardBasicHeader\r\n            title={i18n.getString(_TL_('Company'))}\r\n            contentBefore={<LinkedInLogo24 />}\r\n          />\r\n          <FormCardBody>\r\n            {/* TODO: add Learn more link */}\r\n            <p className=\"company-page-description\">{descriptionText}</p>\r\n            <div className={classNames('company-page-info', classes.companyPageInfo)}>\r\n              <div className={classes.imageContainer}>\r\n                <Image\r\n                  src={userProfileImageSrc || DEFAULT_PROFILE_IMAGE}\r\n                  alt={i18n.getString(_TL_('User profile image'))}\r\n                  className={classes.profileImage}\r\n                />\r\n              </div>\r\n              <div className={classes.frame}>\r\n                <Text className=\"company-page-info-title\">{companyPageName}</Text>\r\n                <Text className=\"company-page-info-text\">{industryText}</Text>\r\n              </div>\r\n            </div>\r\n          </FormCardBody>\r\n\r\n        </FormCard>\r\n      </Collapse>\r\n    </div>\r\n  );\r\n};\r\n\r\nCompanyPageCard.propTypes = {\r\n  companyInfo: PropTypes.shape({\r\n    userProfileImageSrc: PropTypes.string,\r\n    companyPageName: PropTypes.string,\r\n    industryType: PropTypes.string,\r\n    industryLocation: PropTypes.string,\r\n  }),\r\n};\r\n\r\nCompanyPageCard.defaultProps = {\r\n  companyInfo: {\r\n    userProfileImageSrc: '',\r\n    companyPageName: '',\r\n    industryType: '',\r\n    industryLocation: '',\r\n  },\r\n};\r\n","import { shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const getAdStepStyle = () => ({\r\n  container: {\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    width: '574px',\r\n    '& .text-input-container': {\r\n      width: '100% !important',\r\n    },\r\n\r\n    '& .call-to-action-dropdown': {\r\n      width: '100%',\r\n    },\r\n    '& .text-assets-collection-container': {\r\n      width: '100%',\r\n    },\r\n    '& .linkedin-ad-section .fui-FluentProvider:empty': {\r\n      display: 'none', // Hide when empty to avoid unreasonable gap\r\n    },\r\n    '& .linkedin-ad-section .banner-container': {\r\n      margin: '0px', // Remove margin to avoid unreasonable gap\r\n    },\r\n    '& .introductory-text-section': {\r\n      '& .ms-TextField-fieldGroup': {\r\n        minHeight: '70px',\r\n      },\r\n    },\r\n  },\r\n\r\n  content: {\r\n    display: 'flex',\r\n    gap: '32px',\r\n    alignItems: 'start',\r\n  },\r\n\r\n  rightStyles: {\r\n    position: 'sticky',\r\n    top: '-16px',\r\n    width: '542px',\r\n  },\r\n\r\n  formContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    width: '574px',\r\n\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n    '& .panel-title > a:focus': {\r\n      outline: 'thin dotted',\r\n    },\r\n  },\r\n});\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n  getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { ValidatedFinalUrl as InternalValidatedFinalUrl } from '@bingads-webui-campaign-react/validated-url-input-fluent-v2';\r\nimport { ValidatedFormCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport FinalUrlImg from '../media/final-url-icon.svg';\r\n\r\nconst ValidatedFinalUrl = withError(withCustomValidation(InternalValidatedFinalUrl));\r\n\r\nexport const CollapsibleFinalUrl = ({\r\n  finalUrlsObj,\r\n  additionalProperties,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const [\r\n    finalUrlSection,\r\n    finalUrlExpandedSection,\r\n    setFinalUrlExpandedSection,\r\n  ] = useCollapseState(['final-url'], ['final-url']);\r\n\r\n  return (\r\n    <Collapse\r\n      allPanelItems={finalUrlSection}\r\n      checkItems\r\n      skipItemsTypeCheck\r\n      activeKeys={finalUrlExpandedSection}\r\n      setActiveKeys={setFinalUrlExpandedSection}\r\n    >\r\n      <ValidatedFormCard\r\n        key=\"final-url\"\r\n        className=\"final-url-card\"\r\n        attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n      >\r\n        <FormCardBasicHeader\r\n          title={i18n.getString(_TL_('Final URL'))}\r\n          helpTopic=\"pop_BA_LinkedIn_FinalURL\"\r\n          helpLabel={i18n.getString(_TL_('Click to learn more about final URL'))}\r\n          contentBefore={<Image src={FinalUrlImg} aria-hidden />}\r\n        />\r\n        <FormCardBody>\r\n          <ValidatedFinalUrl\r\n            containerClassName=\"final-url-container\"\r\n            hideLabel\r\n            i18n={i18n}\r\n            validationProps={{\r\n              data: finalUrlsObj,\r\n              initialValue: finalUrlsObj,\r\n            }}\r\n            validateOnRender\r\n            additionalProperties={additionalProperties}\r\n          />\r\n        </FormCardBody>\r\n      </ValidatedFormCard>\r\n    </Collapse>\r\n  );\r\n};\r\n\r\nCollapsibleFinalUrl.propTypes = {\r\n  finalUrlsObj: PropTypes.shape({}).isRequired,\r\n  additionalProperties: PropTypes.shape({}).isRequired,\r\n};\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { Dropdown, Option } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { CallToActionOptions } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const CallToAction = ({ selectedOption, onDataChange, setNewCTACallback }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { optionValue, optionText, selectedOptions } = selectedOption || {};\r\n\r\n  useEffect(() => {\r\n    if (setNewCTACallback) {\r\n      setNewCTACallback(() => ({ CallToAction: cta }) => {\r\n        const ctaOption = CallToActionOptions.find(option => option.key === cta);\r\n        if (ctaOption) {\r\n          const newCTA = {\r\n            optionText: ctaOption.text,\r\n            optionValue: ctaOption.key,\r\n            selectedOptions: [ctaOption.key],\r\n          };\r\n          onDataChange({\r\n            data: prevData => ({\r\n              ...prevData,\r\n              adData: {\r\n                ...prevData.adData,\r\n                CallToAction: newCTA,\r\n              },\r\n            }),\r\n          });\r\n        }\r\n      });\r\n    }\r\n  }, [setNewCTACallback, onDataChange, i18n]);\r\n\r\n  const onSelectedCallToActionChange = (event, data) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        adData: {\r\n          ...prevData.adData,\r\n          CallToAction: data,\r\n        },\r\n      }),\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className=\"call-to-action\">\r\n      <Dropdown\r\n        className=\"call-to-action-dropdown\"\r\n        id={`select-call-to-action-${optionValue}`}\r\n        placeholder={i18n.getString(_TL_('Select option'))}\r\n        aria-label={i18n.getString(_TL_('Select option'))}\r\n        onOptionSelect={onSelectedCallToActionChange}\r\n        selectedOptions={selectedOptions}\r\n        value={optionText ? i18n.getString(optionText) : ''}\r\n        key={optionValue}\r\n      >\r\n        {CallToActionOptions.map(option => (\r\n          <Option key={option.key} value={option.key} id={`option-${option.key}`}>\r\n            {i18n.getString(option.text)}\r\n          </Option>\r\n      ))}\r\n      </Dropdown>\r\n    </div>\r\n  );\r\n};\r\n\r\nCallToAction.propTypes = {\r\n  selectedOption: PropTypes.string.isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n  setNewCTACallback: PropTypes.func,\r\n};\r\n\r\nCallToAction.defaultProps = { setNewCTACallback: null };\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n  getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedFormCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport { CallToAction } from './call-to-action';\r\nimport CallToActionImg from '../media/call-to-action-icon.svg';\r\n\r\nexport const CollapsibleCallToAction = ({ selectedOption, onDataChange, setNewCTACallback }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const [\r\n    callToActionSection,\r\n    callToActionExpandedSection,\r\n    setCallToActionExpandedSection,\r\n  ] = useCollapseState(['call-to-action'], ['call-to-action']);\r\n\r\n  return (\r\n    <Collapse\r\n      allPanelItems={callToActionSection}\r\n      checkItems\r\n      skipItemsTypeCheck\r\n      activeKeys={callToActionExpandedSection}\r\n      setActiveKeys={setCallToActionExpandedSection}\r\n    >\r\n      <ValidatedFormCard\r\n        key=\"call-to-action\"\r\n        className=\"call-to-action-card\"\r\n        attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n      >\r\n        <FormCardBasicHeader\r\n          title={i18n.getString(_TL_('Call to action'))}\r\n          helpTopic=\"pop_BA_PMAX_CallToAction\"\r\n          helpLabel={i18n.getString(_TL_('Click to learn more about call to action'))}\r\n          contentBefore={<Image src={CallToActionImg} aria-hidden />}\r\n        />\r\n        <FormCardBody>\r\n          <CallToAction\r\n            selectedOption={selectedOption}\r\n            onDataChange={onDataChange}\r\n            setNewCTACallback={setNewCTACallback}\r\n          />\r\n        </FormCardBody>\r\n      </ValidatedFormCard>\r\n    </Collapse>\r\n  );\r\n};\r\n\r\nCollapsibleCallToAction.propTypes = {\r\n  selectedOption: PropTypes.string.isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n  setNewCTACallback: PropTypes.func,\r\n};\r\n\r\nCollapsibleCallToAction.defaultProps = { setNewCTACallback: null };\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image } from '@fluentui/react-components';\r\n\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n  getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { andComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { ValidatedFormCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\n\r\nimport TextAssetsImg from '../media/text-icon.svg';\r\n\r\nconst entityIsAd = entityIs(ERROR_ENTITY.Ad);\r\nconst DescriptionProp = andComp(entityIsAd, propertyIs('ResponsiveAdDescriptions'));\r\nconst ServerValidatedTextField = withControlErrorHandling(withUnvalidatedControlErrors(RemainingCharsValidatedTextField, { filter: DescriptionProp }));\r\n\r\nexport const CollapsibleIntroductoryText = ({\r\n  schema,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n  const [\r\n    allSections,\r\n    expandedSections,\r\n    setExpandedSections,\r\n  ] = useCollapseState(['introductory-text'], ['introductory-text']);\r\n\r\n  return (\r\n    <div className=\"introductory-text-section\">\r\n      <Collapse\r\n        allPanelItems={allSections}\r\n        checkItems\r\n        skipItemsTypeCheck\r\n        activeKeys={expandedSections}\r\n        setActiveKeys={setExpandedSections}\r\n      >\r\n        <ValidatedFormCard\r\n          key=\"introductory-text\"\r\n          className=\"introductory-text-card\"\r\n          attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n        >\r\n          <FormCardBasicHeader\r\n            title={i18n.getString(_TL_('Introductory text'))}\r\n            helpTopic=\"pop_BA_LinkedIn_IntroductoryText\"\r\n            helpLabel={i18n.getString(_TL_('Click to learn more about introductory text'))}\r\n            contentBefore={<Image src={TextAssetsImg} aria-hidden />}\r\n          />\r\n          <FormCardBody>\r\n            <ServerValidatedTextField\r\n              multiline\r\n              placeholder={i18n.getString(_TL_('Enter your introductory text'))}\r\n              id=\"input-introductory-text\"\r\n              validationProps={{\r\n                field: 'Descriptions/Description0',\r\n                schema,\r\n                i18n: legacyI18n,\r\n              }}\r\n              i18n={i18n}\r\n            />\r\n          </FormCardBody>\r\n        </ValidatedFormCard>\r\n      </Collapse>\r\n    </div>\r\n  );\r\n};\r\n\r\nCollapsibleIntroductoryText.propTypes = {\r\n  schema: PropTypes.shape({}).isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { useEffect } from 'react';\r\n\r\nexport const useDisabledKeynavRegion = ({ ref, disabled }) => {\r\n  useEffect(() => {\r\n    if (!ref || !ref.current || !disabled) {\r\n      return _.noop;\r\n    }\r\n    const disableInternalElements = () => {\r\n      const children = ref.current.querySelectorAll('button,input,a,select,textarea');\r\n\r\n      children.forEach((child) => {\r\n        child.setAttribute('tabindex', '-1');\r\n        child.setAttribute('disabled', true);\r\n      });\r\n    };\r\n\r\n    const observer = new MutationObserver(disableInternalElements);\r\n\r\n    observer.observe(ref.current, {\r\n      childList: true,\r\n      subtree: true,\r\n      attributes: false,\r\n      characterData: false,\r\n    });\r\n\r\n    return () => {\r\n      observer.disconnect();\r\n    };\r\n  }, [ref, disabled]);\r\n};\r\n","import React, { useContext, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image, makeStyles } from '@fluentui/react-components';\r\n\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n  getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n  HeadlineAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport TextAssetsImg from '../media/text-icon.svg';\r\nimport { useDisabledKeynavRegion } from '../hooks/use-disabled-keynav-region';\r\n\r\nconst useStyles = makeStyles({\r\n  disabled: {\r\n    opacity: 0.5,\r\n    pointerEvents: 'none',\r\n  },\r\n});\r\n\r\nexport const CollapsibleHeadline = ({\r\n  setAddNewShortHeadlinesCallback,\r\n  disabled,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const styles = useStyles();\r\n\r\n  const ref = useRef(null);\r\n\r\n  useDisabledKeynavRegion({ ref, disabled });\r\n\r\n  const [\r\n    allSections,\r\n    expandedSections,\r\n    setExpandedSections,\r\n  ] = useCollapseState(['headline'], ['headline']);\r\n\r\n  return (\r\n    <Collapse\r\n      allPanelItems={allSections}\r\n      checkItems\r\n      skipItemsTypeCheck\r\n      activeKeys={expandedSections}\r\n      setActiveKeys={setExpandedSections}\r\n    >\r\n      <ValidatedCollapseCard\r\n        key=\"headline\"\r\n        className=\"headline-card\"\r\n        attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n      >\r\n        <FormCardBasicHeader\r\n          title={i18n.getString(_TL_('Headline'))}\r\n          helpTopic=\"pop_BA_LinkedIn_Headline\"\r\n          helpLabel={i18n.getString(_TL_('Click to learn more about headline'))}\r\n          contentBefore={<Image src={TextAssetsImg} aria-hidden />}\r\n        />\r\n        <FormCardBody>\r\n          <div\r\n            ref={ref}\r\n            className={disabled ? styles.disabled : ''}\r\n          >\r\n            <HeadlineAssetCollection\r\n              featureName=\"linkedin\"\r\n              isOptional={false}\r\n              showDeleteButton={false}\r\n              renderInlineCopilot\r\n              setAddNewShortHeadlinesCallback={setAddNewShortHeadlinesCallback}\r\n            />\r\n          </div>\r\n        </FormCardBody>\r\n      </ValidatedCollapseCard>\r\n    </Collapse>\r\n  );\r\n};\r\n\r\nCollapsibleHeadline.propTypes = {\r\n  setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n  disabled: PropTypes.bool,\r\n};\r\n\r\nCollapsibleHeadline.defaultProps = {\r\n  disabled: false,\r\n};\r\n","import React, { useContext, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image, makeStyles } from '@fluentui/react-components';\r\n\r\nimport {\r\n  Collapse,\r\n  useCollapseState,\r\n  getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  ImageListPortalContainerWithControlErrorHandling,\r\n  ImageListSummaryCardDetails,\r\n  PerfMaxImageSuggestionCarousel\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody, FormCardSummary } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport ImageAssetsImg from '../media/image-icon.svg';\r\nimport { useDisabledKeynavRegion } from '../hooks/use-disabled-keynav-region';\r\n\r\nconst useStyles = makeStyles({\r\n  disabled: {\r\n    opacity: 0.5,\r\n    pointerEvents: 'none',\r\n  },\r\n});\r\n\r\nexport const CollapsibleImages = ({\r\n  images,\r\n  imagesContainerRef,\r\n  imageExperiencePortalContainerState,\r\n  imageExperienceAddNewImageCallback,\r\n  maxUploadNum,\r\n  disabled,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const MessageBarText = i18n.getString(_TL_('Select the add image icon above to find relevant images or generate custom AI images for your ads.'));\r\n\r\n  const ref = useRef(null);\r\n\r\n  const [\r\n    allSections,\r\n    expandedSections,\r\n    setExpandedSections,\r\n  ] = useCollapseState(['images'], ['images']);\r\n\r\n  const styles = useStyles();\r\n\r\n  useDisabledKeynavRegion({ ref, disabled });\r\n\r\n  return (\r\n    <Collapse\r\n      allPanelItems={allSections}\r\n      checkItems\r\n      skipItemsTypeCheck\r\n      activeKeys={expandedSections}\r\n      setActiveKeys={setExpandedSections}\r\n    >\r\n      <ValidatedCollapseCard\r\n        key=\"images\"\r\n        className=\"images-card\"\r\n        attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n      >\r\n        <FormCardBasicHeader\r\n          title={i18n.getString(_TL_('Images'))}\r\n          helpTopic=\"pop_BA_LinkedIn_Images\"\r\n          helpLabel={i18n.getString(_TL_('Click to learn more about images'))}\r\n          contentBefore={<Image src={ImageAssetsImg} aria-hidden />}\r\n        />\r\n        <FormCardBody>\r\n          <span>{i18n.getString(_TL_('Add one image per ad.'))}</span>\r\n          <div\r\n            ref={ref}\r\n            className={disabled ? styles.disabled : ''}\r\n          >\r\n            <ImageListPortalContainerWithControlErrorHandling\r\n              i18n={i18n}\r\n              containerRef={imagesContainerRef}\r\n              containerState={imageExperiencePortalContainerState}\r\n              isLogos={false}\r\n            />\r\n            <PerfMaxImageSuggestionCarousel i18n={i18n} addImageCallback={imageExperienceAddNewImageCallback} maxUploadNum={maxUploadNum} customMessageBarText={MessageBarText} />\r\n          </div>\r\n        </FormCardBody>\r\n        <FormCardSummary>\r\n          <ImageListSummaryCardDetails i18n={i18n} images={images} isLogos={false} />\r\n        </FormCardSummary>\r\n      </ValidatedCollapseCard>\r\n    </Collapse>\r\n  );\r\n};\r\n\r\nCollapsibleImages.propTypes = {\r\n  images: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n  imagesContainerRef: PropTypes.shape({}).isRequired,\r\n  imageExperiencePortalContainerState: PropTypes.shape({}).isRequired,\r\n  imageExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n  maxUploadNum: PropTypes.number.isRequired,\r\n  disabled: PropTypes.bool,\r\n};\r\n\r\nCollapsibleImages.defaultProps = {\r\n  disabled: false,\r\n};\r\n","import { UAPPlacementTypeAlias as PT } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\n// LinkedIn only supports one image\r\nexport const PREVIEW_IMAGE_INDEX = 0;\r\n\r\nexport const LinkedInImageType = {\r\n  Landscape: 'Image191x100',\r\n  Square: 'Image1x1',\r\n  Vertical: 'Image4x5',\r\n};\r\n\r\nexport const LinkedInImageTypeAspectRatio = {\r\n  [LinkedInImageType.Landscape]: 1.91,\r\n  [LinkedInImageType.Square]: 1,\r\n  [LinkedInImageType.Vertical]: 0.8,\r\n};\r\n\r\nexport const LinkedInImageTypeMinSize = {\r\n  [LinkedInImageType.Landscape]: [690, 360],\r\n  [LinkedInImageType.Square]: [360, 360],\r\n  [LinkedInImageType.Vertical]: [512, 640],\r\n};\r\n\r\nexport const AdPreviewConfig = [\r\n  {\r\n    placementSetName: LinkedInImageType.Landscape,\r\n    placementTypes: [\r\n      PT.LinkedIn.Landscape.SingleImageDesktop,\r\n      PT.LinkedIn.Landscape.SingleImageMobile,\r\n    ],\r\n  },\r\n  {\r\n    placementSetName: LinkedInImageType.Square,\r\n    placementTypes: [\r\n      PT.LinkedIn.Square.SingleImageDesktop,\r\n      PT.LinkedIn.Square.SingleImageMobile,\r\n    ],\r\n  },\r\n  {\r\n    placementSetName: LinkedInImageType.Vertical,\r\n    placementTypes: [\r\n      PT.LinkedIn.Vertical.SingleImageMobile,\r\n    ],\r\n  }];\r\n\r\nexport const AdPreviewExtraPlacementInfo = {\r\n  [PT.LinkedIn.Landscape.SingleImageDesktop]: {\r\n    previewTitle: _TL_('Desktop feed'),\r\n  },\r\n  [PT.LinkedIn.Landscape.SingleImageMobile]: {\r\n    previewTitle: _TL_('Mobile feed'),\r\n  },\r\n\r\n  [PT.LinkedIn.Square.SingleImageDesktop]: {\r\n    previewTitle: _TL_('Desktop feed'),\r\n  },\r\n  [PT.LinkedIn.Square.SingleImageMobile]: {\r\n    previewTitle: _TL_('Mobile feed'),\r\n  },\r\n\r\n  [PT.LinkedIn.Vertical.SingleImageMobile]: {\r\n    previewTitle: _TL_('Mobile feed'),\r\n  },\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, Dialog, DialogActions, DialogBody, DialogContent, DialogSurface, DialogTitle, DialogTrigger, FluentProvider, Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger, webLightTheme } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody, MessageBarTitle } from '@fluentui/react-message-bar';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LinkedInImageType, LinkedInImageTypeMinSize } from '../consts';\r\n\r\nconst MediaEditorConfirmationDialog = ({ open, onConfirm, onCancel }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <Dialog open={open}>\r\n      <DialogSurface>\r\n        <DialogBody>\r\n          <DialogTitle>\r\n            {i18n.getString(_TL_('Are you sure you want to change your aspect ratio for cropping images?'))}\r\n          </DialogTitle>\r\n          <DialogContent>\r\n            {i18n.getString(_TL_('Please note that the aspect ratio you choose for cropping will impact all placements where your ad serves.'))}\r\n          </DialogContent>\r\n          <DialogActions>\r\n            <DialogTrigger>\r\n              <Button appearance=\"primary\" onClick={onConfirm}>\r\n                {i18n.getString(_TL_('Yes'))}\r\n              </Button>\r\n            </DialogTrigger>\r\n            <DialogTrigger>\r\n              <Button appearance=\"secondary\" onClick={onCancel}>\r\n                {i18n.getString(_TL_('No'))}\r\n              </Button>\r\n            </DialogTrigger>\r\n          </DialogActions>\r\n        </DialogBody>\r\n      </DialogSurface>\r\n    </Dialog>\r\n  );\r\n};\r\n\r\nMediaEditorConfirmationDialog.propTypes = {\r\n  open: PropTypes.bool.isRequired,\r\n  onConfirm: PropTypes.func.isRequired,\r\n  onCancel: PropTypes.func.isRequired,\r\n};\r\n\r\nconst useAvailableAspectRatioItems = (adData) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const baseImage = useMemo(() => _.get(adData, ['Images', 'ImageList', 0, 0, 'baseImage'], {}), [adData]);\r\n\r\n  const allItems = useMemo(() => [\r\n    { type: LinkedInImageType.Landscape, label: i18n.getString(_TL_('Horizontal (1.91:1 — 1200 x 628 pixels)')) },\r\n    { type: LinkedInImageType.Vertical, label: i18n.getString(_TL_('Vertical (1.1.91 — 628 x 900 pixels)')) },\r\n    { type: LinkedInImageType.Square, label: i18n.getString(_TL_('Square (1:1 — 1200 x 12000 pixels)')) },\r\n  ], [i18n]);\r\n\r\n  return allItems.filter(({ type }) => {\r\n    const { width, height } = baseImage;\r\n    const [minWidth, minHeight] = LinkedInImageTypeMinSize[type];\r\n\r\n    return (width >= minWidth && height >= minHeight);\r\n  });\r\n};\r\n\r\nexport const MediaEditorControls = ({\r\n  adData,\r\n  imageType,\r\n  onSelectedAspectRatioChange,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const [currentImageType, setCurrentImageType] = useState();\r\n  const [newCurrentImageType, setNewCurrentImageType] = useState();\r\n\r\n  const items = useAvailableAspectRatioItems(adData);\r\n  const showConfirmationDialog = useCallback((newImageType) => {\r\n    if (newImageType === currentImageType) { return; }\r\n\r\n    setNewCurrentImageType(newImageType);\r\n  }, [currentImageType]);\r\n\r\n  const cancelNewImageTypeSelection = useCallback(() => {\r\n    setNewCurrentImageType(undefined);\r\n  }, []);\r\n\r\n  const confirmNewImageTypeSelection = useCallback(() => {\r\n    onSelectedAspectRatioChange(newCurrentImageType);\r\n    setCurrentImageType(newCurrentImageType);\r\n\r\n    setNewCurrentImageType(undefined);\r\n  }, [newCurrentImageType, onSelectedAspectRatioChange]);\r\n\r\n  useEffect(() => {\r\n    if (!imageType || currentImageType) { return; }\r\n\r\n    onSelectedAspectRatioChange(imageType);\r\n    setCurrentImageType(imageType);\r\n  }, [currentImageType, imageType, onSelectedAspectRatioChange]);\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <Menu>\r\n        <MenuTrigger>\r\n          <MenuButton appearance=\"primary\">{i18n.getString(_TL_('Crop'))}</MenuButton>\r\n        </MenuTrigger>\r\n        <MenuPopover>\r\n          <MenuList>\r\n            {items.map(({ type, label }) => (\r\n              <MenuItem key={type} onClick={() => showConfirmationDialog(type)}>\r\n                {label}\r\n              </MenuItem>\r\n            ))}\r\n          </MenuList>\r\n        </MenuPopover>\r\n      </Menu>\r\n      <MessageBar style={{ position: 'relative', width: 'max-content', margin: '8px 0 32px' }}>\r\n        <MessageBarBody>\r\n          <MessageBarTitle>\r\n            {i18n.getString(_TL_('Note'))}\r\n          </MessageBarTitle>\r\n          {i18n.getString(_TL_('Cropping is limited for LinkedIn campaigns. Please note that the aspect ratio you choose for cropping will impact all placements where your ad serves.'))}\r\n        </MessageBarBody>\r\n      </MessageBar>\r\n      <MediaEditorConfirmationDialog\r\n        open={!!newCurrentImageType}\r\n        onConfirm={confirmNewImageTypeSelection}\r\n        onCancel={cancelNewImageTypeSelection}\r\n      />\r\n    </FluentProvider>\r\n  );\r\n};\r\n\r\nMediaEditorControls.propTypes = {\r\n  adData: PropTypes.shape({}).isRequired,\r\n  imageType: PropTypes.string.isRequired,\r\n  onSelectedAspectRatioChange: PropTypes.func.isRequired,\r\n};\r\n","import React, { useCallback, useContext, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _, { noop, isArray } from 'underscore';\r\nimport classNames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidatedImageExperienceWrapper } from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport {\r\n  CopilotRepositoryProvider,\r\n  withBannerService,\r\n} from '@bingads-webui/inline-copilot';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { useCopilot } from '@bingads-webui-campaign-react/copilot-experience';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nimport { getAdStepStyle } from '../styles/linkedIn-ad-styles';\r\nimport { CollapsibleFinalUrl } from './collapsible-final-url';\r\nimport { CollapsibleCallToAction } from './collapsible-call-to-action';\r\nimport { CollapsibleIntroductoryText } from './collapsible-introductory-text';\r\nimport { CollapsibleHeadline } from './collapsible-headline';\r\nimport { CollapsibleImages } from './collapsible-images';\r\n\r\nimport { AdPreviewConfig, LinkedInImageTypeAspectRatio, PREVIEW_IMAGE_INDEX } from '../consts';\r\nimport { MediaEditorControls } from './media-editor-controls';\r\n\r\nconst MAX_IMAGE_COUNT = 1;\r\nconst HEADLINE_MAX_LENGTH = 200;\r\nconst INTRODUCTORY_TEXT_MAX_LENGTH = 600;\r\nconst REPLACE_EXISTING_ASSETS = true;\r\n\r\nfunction getLinkedInAdSchema() {\r\n  const schema = cloneDeep(AssetGroup);\r\n  schema.properties.Headlines.schema.properties.Headline0.maxLength = HEADLINE_MAX_LENGTH;\r\n\r\n  schema.properties.Descriptions.schema.properties.Description0.maxLength = INTRODUCTORY_TEXT_MAX_LENGTH;\r\n\r\n  return schema;\r\n}\r\n\r\nexport const LinkedInAdSettings = (props) => {\r\n  const {\r\n    adData,\r\n    adPreviewData,\r\n    adPreviewState,\r\n    onDataChange,\r\n    isAdEditor,\r\n  } = props;\r\n\r\n  const classes = useDefaultStyles(getAdStepStyle);\r\n  const i18n = useContext(I18nContext);\r\n  const serverContext = useContext(ServerContext);\r\n  const perfMarker = useContext(PerformanceMarkerContext);\r\n  const schema = useMemo(() => getLinkedInAdSchema(), []);\r\n\r\n  const { scope } = useContext(ScopeContext);\r\n  const instrumentation = useContext(InstrumentationContext);\r\n\r\n  const { cid, aid } = scope.values || {};\r\n  const { permissions } = serverContext || {};\r\n\r\n  const {\r\n    previewImagesSharedState,\r\n    setPreviewImagesSharedState,\r\n    openEditor,\r\n    saveChanges,\r\n  } = adPreviewState;\r\n\r\n  const finalurls = adData && adData.FinalUrls;\r\n  const FinalUrlForRecommendation = adData && adData.FinalUrlForRecommendation;\r\n  const finalUrlsObj = { FinalUrls: finalurls };\r\n  const callToAction = adData && adData.CallToAction;\r\n  const images = adData && adData.Images;\r\n  const selectedImageType = adData && adData.SelectedImageType;\r\n\r\n  const maxUploadNum = useMemo(() => {\r\n    const imageListLength = images && images.ImageList && isArray(images.ImageList) ? images.ImageList.length : 0;\r\n    return MAX_IMAGE_COUNT - imageListLength;\r\n  }, [images]);\r\n\r\n  const adPreviewConfig = useMemo(() => ({\r\n    adType: 'LinkedIn',\r\n    placementConfig: AdPreviewConfig,\r\n  }), []);\r\n\r\n  const [imageExperiencePortalContainerState, setImageExperiencePortalContainerState] = useState({});\r\n  const [imageExperienceAddNewImageCallback, setImageExperienceAddNewImageCallback] = useState(noop);\r\n  const [addNewShortHeadlinesCallback, setAddNewShortHeadlinesCallback] = useState(noop);\r\n  const [newCTACallback, setNewCTACallback] = useState(noop);\r\n\r\n  const imagesContainerRef = useRef(null);\r\n\r\n  const addNewIntroductoryTextCallBack = useCallback((newTextAssets) => {\r\n    const newIntroductoryText = newTextAssets && newTextAssets.length > 0 ? newTextAssets[0] : '';\r\n\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        adData: {\r\n          ...prevData.adData,\r\n          Descriptions: { Description0: newIntroductoryText },\r\n        },\r\n      }),\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const onAdDataChange = useCallback((results) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        adData: {\r\n          ...prevData.adData,\r\n          ...results.data,\r\n        },\r\n      }),\r\n      isValid: results.isValid,\r\n      isDirty: results.isDirty,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const updateFinalUrlForRecommendation = useCallback(() => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        adData: {\r\n          ...prevData.adData,\r\n          FinalUrlForRecommendation: prevData.adData.FinalUrls[0],\r\n        },\r\n      }),\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const handleReset = useCallback(() => {\r\n    const dataPatch = {\r\n      data: {\r\n        Images: {\r\n          ...adData.Images,\r\n          ImageList: [],\r\n          ImageAssets: null,\r\n        },\r\n        Headlines: {\r\n          Headline0: '',\r\n        },\r\n        Descriptions: {\r\n          Description0: '',\r\n        },\r\n        CallToAction: undefined,\r\n      },\r\n      isValid: false,\r\n    };\r\n\r\n    onAdDataChange(dataPatch);\r\n  }, [adData, onAdDataChange]);\r\n\r\n  const onUpdateFinalUrls = useCallback((newFinalUrls) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        adData: {\r\n          ...prevData.adData,\r\n          FinalUrls: newFinalUrls,\r\n        },\r\n      }),\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const onRenderAllowedAspectRatioControl = useCallback(({ onAllowedAspectRatioChange }) => {\r\n    const onSelectedAspectRatioChange = (imageType) => {\r\n      const { cropSettings } = _.findWhere(images.ImageList[PREVIEW_IMAGE_INDEX], { type: imageType });\r\n\r\n      onAllowedAspectRatioChange({\r\n        cropSettings,\r\n        imageType,\r\n        allowedAspectRatio: LinkedInImageTypeAspectRatio[imageType],\r\n      });\r\n    };\r\n\r\n    return (\r\n      <MediaEditorControls\r\n        adData={adData}\r\n        imageType={selectedImageType}\r\n        onSelectedAspectRatioChange={onSelectedAspectRatioChange}\r\n      />\r\n    );\r\n  }, [adData, images, selectedImageType]);\r\n\r\n  const handleFinalUrlKeyUpEvent = useCallback((e) => {\r\n    const { key } = e;\r\n    if (key === 'Enter') {\r\n      updateFinalUrlForRecommendation();\r\n    }\r\n  }, [updateFinalUrlForRecommendation]);\r\n\r\n  const finalUrlAdditionalProps = useMemo(() => ({\r\n    placeholder: i18n.getString(_TL_('Enter your Final URL')),\r\n    onBlur: updateFinalUrlForRecommendation,\r\n    onKeyUp: handleFinalUrlKeyUpEvent,\r\n  }), [i18n, updateFinalUrlForRecommendation, handleFinalUrlKeyUpEvent]);\r\n\r\n  const customCopilotBannerStrings = {\r\n    ApplyingSucceeded: {\r\n      description: i18n.getString(_TL_('Select Refine to get updated recommendations by providing new descriptions or select Remove assets to remove all assets from the current ad.')),\r\n    },\r\n  };\r\n  const {\r\n    copilotBanner,\r\n    suggestionPoller,\r\n  } = useCopilot({\r\n    maxUploadNum: MAX_IMAGE_COUNT,\r\n    addNewShortHeadlinesCallback: recommendations => addNewShortHeadlinesCallback(recommendations, REPLACE_EXISTING_ASSETS),\r\n    addNewLongHeadlinesCallback: _.noop(), // No need for LinkedIn Ad\r\n    addNewDescriptionCallback: recommendations => addNewIntroductoryTextCallBack(recommendations, REPLACE_EXISTING_ASSETS), // Use this field as Introductory Text\r\n    imageExperienceAddNewImageCallback: (recommendations, imageType) => imageExperienceAddNewImageCallback(recommendations, imageType, REPLACE_EXISTING_ASSETS),\r\n    newCTACallback,\r\n    onReset: handleReset,\r\n    cid,\r\n    aid,\r\n    serverContext,\r\n    instrumentation,\r\n    data: adData,\r\n    isSaving: false,\r\n    isCanceling: false,\r\n    enableCopilotRecommendations: true,\r\n    feature: 'LinkedIn',\r\n    customBannerStrings: customCopilotBannerStrings,\r\n  });\r\n\r\n  // Issue: after introduce this part, live-demo becomes very slow and seems have memory issue\r\n  // Will need build up a mock data solution to fixing this issue, will have this work in E2E test\r\n  const imageExperienceComponents = useMemo(() => (\r\n    <div>\r\n      <ValidatedImageExperienceWrapper\r\n        i18n={i18n}\r\n        permissions={permissions}\r\n        customMaxImageCount={MAX_IMAGE_COUNT}\r\n        imagesContaineRef={imagesContainerRef}\r\n        updateFinalUrlCallback={onUpdateFinalUrls}\r\n        previewImagesSharedState={previewImagesSharedState}\r\n        setPreviewImagesSharedState={setPreviewImagesSharedState}\r\n        updatePortalContainerState={setImageExperiencePortalContainerState}\r\n        setImageExperienceAddNewImageCallback={setImageExperienceAddNewImageCallback}\r\n        validationProps={{ data: adData, initialValue: adData }}\r\n        suggestionPoller={suggestionPoller}\r\n        wizardPerfMarker={perfMarker}\r\n        isStockImageEnabled={false}\r\n        isLogoEnabled={false}\r\n        UAPLPMaxIntegration\r\n        isCombinedMsanAndMmaAspectRatios={false}\r\n        isLinkedInAd\r\n        adPreviewConfig={adPreviewConfig}\r\n        customPreviewTexts={adPreviewData}\r\n        customOnEditImage={openEditor}\r\n        customOnSaveEditImage={saveChanges}\r\n        onRenderAllowedAspectRatioControl={onRenderAllowedAspectRatioControl}\r\n      />\r\n    </div>), [i18n, permissions, onUpdateFinalUrls, previewImagesSharedState, setPreviewImagesSharedState, adData, suggestionPoller, perfMarker, adPreviewConfig, adPreviewData, openEditor, saveChanges, onRenderAllowedAspectRatioControl]);\r\n\r\n  return (\r\n    <div className=\"linkedin-ad-section\">\r\n      <ValidationGroup\r\n        validationProps={{\r\n          onValidate: onAdDataChange,\r\n          schema,\r\n          data: adData,\r\n          i18n,\r\n          stopPropagation: true,\r\n        }}\r\n      >\r\n        <CopilotRepositoryProvider\r\n          campaignId=\"-1\"\r\n          finalUrl={FinalUrlForRecommendation}\r\n          locale={i18n.getLocale()}\r\n          perfMarker={perfMarker}\r\n          recommendationType=\"LinkedIn\"\r\n          serverContext={serverContext}\r\n        >\r\n          <div className=\"linkedin-ad-controls-with-preview-container\">\r\n            <div className={classNames('controls-affecting-preview-container', classes.formContainer)}>\r\n              <CollapsibleFinalUrl\r\n                finalUrlsObj={finalUrlsObj}\r\n                additionalProperties={finalUrlAdditionalProps}\r\n              />\r\n              {copilotBanner}\r\n              <CollapsibleIntroductoryText\r\n                schema={schema}\r\n              />\r\n              <CollapsibleImages\r\n                images={images}\r\n                imagesContainerRef={imagesContainerRef}\r\n                imageExperiencePortalContainerState={imageExperiencePortalContainerState}\r\n                imageExperienceAddNewImageCallback={imageExperienceAddNewImageCallback}\r\n                maxUploadNum={maxUploadNum}\r\n                disabled={isAdEditor}\r\n              />\r\n              <CollapsibleHeadline\r\n                setAddNewShortHeadlinesCallback={setAddNewShortHeadlinesCallback}\r\n                disabled={isAdEditor}\r\n              />\r\n              <CollapsibleCallToAction\r\n                selectedOption={callToAction}\r\n                onDataChange={onDataChange}\r\n                setNewCTACallback={setNewCTACallback}\r\n              />\r\n            </div>\r\n          </div>\r\n          <div>\r\n            {imageExperienceComponents}\r\n          </div>\r\n        </CopilotRepositoryProvider>\r\n      </ValidationGroup>\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInAdSettings.propTypes = {\r\n  companyInfo: PropTypes.shape({}).isRequired,\r\n  adData: PropTypes.shape({\r\n    Id: PropTypes.string,\r\n    destinationUrl: PropTypes.string,\r\n    FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n    FinalUrlForRecommendation: PropTypes.string,\r\n    IntroductoryText: PropTypes.string,\r\n    CallToAction: PropTypes.string,\r\n    Images: PropTypes.arrayOf(PropTypes.string),\r\n    SelectedImageType: PropTypes.string,\r\n    isEditing: PropTypes.bool,\r\n  }).isRequired,\r\n  adPreviewData: PropTypes.shape({}).isRequired,\r\n  isAdEditor: PropTypes.bool.isRequired,\r\n  adPreviewState: PropTypes.shape({\r\n    previewImagesSharedState: PropTypes.shape({}),\r\n    setPreviewImagesSharedState: PropTypes.func,\r\n    openEditor: PropTypes.func,\r\n    saveChanges: PropTypes.func,\r\n  }).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const LinkedInAdSettingsShell = withRecommendationContext(withBannerService(LinkedInAdSettings));\r\n","import { makeStyles, shorthands, tokens, typographyStyles } from '@fluentui/react-components';\r\n\r\nexport const useAdPreviwerStyles = makeStyles({\r\n  root: {\r\n    width: '542px',\r\n    height: '600px',\r\n  },\r\n  header: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    height: '65px',\r\n    ...shorthands.padding(tokens.spacingVerticalL, '0'),\r\n  },\r\n  carouselWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    height: '500px',\r\n\r\n    '& .carousel-inner': {\r\n      height: '100%',\r\n      paddingBottom: '0',\r\n\r\n      '& .item': { height: '100%' },\r\n    },\r\n\r\n    '& .ad-placement-preview': {\r\n      flexGrow: 1,\r\n    },\r\n\r\n    '& .custom-carousel-controls-and-indicators': {\r\n      position: 'initial',\r\n    },\r\n  },\r\n  placementAndCaptionContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    height: '100%',\r\n    ...shorthands.gap(tokens.spacingVerticalL),\r\n  },\r\n  placementContainer: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    flexGrow: '1',\r\n    backgroundColor: tokens.colorNeutralBackground2,\r\n  },\r\n  caption: {\r\n    color: tokens.colorNeutralForeground3,\r\n    ...typographyStyles.caption1,\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, mergeClasses, Text } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { FormCard, FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport {\r\n  AdPreviewCarouselLayoutEx,\r\n  useImageExperienceAdPreviewModel,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\nimport DefaultImage from '../media/default-image.png';\r\nimport { useAdPreviwerStyles } from '../styles/ad-previewer-styles';\r\nimport { AdPreviewConfig, AdPreviewExtraPlacementInfo, LinkedInImageType, PREVIEW_IMAGE_INDEX } from '../consts';\r\n\r\nconst isPlaceholderPlacement = placement =>\r\n  _.get(placement, ['imageMeta', 'url']) === DefaultImage;\r\n\r\nconst getPlacementList = (placementSets, imageType = LinkedInImageType.Landscape) =>\r\n  _.chain(placementSets).findWhere({ placementSetName: imageType }).get('placementList').value();\r\n\r\nexport const AdPreviewer = ({\r\n  adData,\r\n  adPreviewData,\r\n  adPreviewState: { openEditor },\r\n  isAdEditor,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useAdPreviwerStyles();\r\n\r\n  const imageList = useMemo(() => _.get(adData, ['Images', 'ImageList']), [adData]);\r\n  const selectedImageType = useMemo(() => _.get(adData, 'SelectedImageType', LinkedInImageType.Landscape), [adData]);\r\n\r\n  const {\r\n    onUpdateImageExperienceImageList,\r\n    imageExperiencePlacementSets,\r\n  } = useImageExperienceAdPreviewModel(AdPreviewConfig, DefaultImage);\r\n\r\n  const placementList = useMemo(() =>\r\n    getPlacementList(imageExperiencePlacementSets, selectedImageType), [imageExperiencePlacementSets, selectedImageType]);\r\n\r\n  useEffect(() => {\r\n    onUpdateImageExperienceImageList(imageList, PREVIEW_IMAGE_INDEX);\r\n  }, [imageList, onUpdateImageExperienceImageList]);\r\n\r\n  const onRenderHeader = useCallback((placement) => {\r\n    const { placementMeta } = placement || {};\r\n    const { placementType } = placementMeta || {};\r\n    const { previewTitle } = AdPreviewExtraPlacementInfo[placementType] || {};\r\n\r\n    const showEditButton = !isPlaceholderPlacement(placement) && !isAdEditor;\r\n\r\n    return (\r\n      <div className={classes.header}>\r\n        <Text>{i18n.getString(previewTitle)}</Text>\r\n        {showEditButton && (\r\n          <Button onClick={openEditor}>\r\n            {i18n.getString(_TL_('Edit aspect ratio'))}\r\n          </Button>\r\n        )}\r\n      </div>\r\n    );\r\n  }, [classes.header, i18n, isAdEditor, openEditor]);\r\n\r\n  const onRenderPlacement = useCallback((placement, AdPlacementComponent) => (\r\n    <div className={classes.placementAndCaptionContainer}>\r\n      <div className={classes.placementContainer}>\r\n        <AdPlacementComponent\r\n          i18n={i18n}\r\n          isEnabled={!isPlaceholderPlacement(placement)}\r\n          placementData={placement}\r\n          {...adPreviewData}\r\n        />\r\n      </div>\r\n      <Text className={classes.caption}>\r\n        {i18n.getString(_TL_('These are examples of how your ads could appear. Depending on placement, the actual ad shown may appear differently.'))}\r\n      </Text>\r\n    </div>\r\n  ), [i18n, adPreviewData, classes.placementAndCaptionContainer, classes.placementContainer, classes.caption]);\r\n\r\n  return (\r\n    <FormCard className={mergeClasses('ad-preview-card', classes.root)}>\r\n      <FormCardBody>\r\n        <AdPreviewCarouselLayoutEx\r\n          key={selectedImageType}\r\n          i18n={i18n}\r\n          placementList={placementList}\r\n          useCustomCarousel\r\n          enableAutoPlay={false}\r\n          customCarouselWrapperClassName={classes.carouselWrapper}\r\n          onRenderHeader={onRenderHeader}\r\n          onRenderPlacement={onRenderPlacement}\r\n        />\r\n      </FormCardBody>\r\n    </FormCard>\r\n  );\r\n};\r\n\r\nAdPreviewer.propTypes = {\r\n  adData: PropTypes.shape({}).isRequired,\r\n  adPreviewData: PropTypes.shape({}).isRequired,\r\n  adPreviewState: PropTypes.shape({\r\n    openEditor: PropTypes.func,\r\n  }).isRequired,\r\n  isAdEditor: PropTypes.bool,\r\n};\r\n\r\nAdPreviewer.defaultProps = {\r\n  isAdEditor: false,\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useMemo, useState } from 'react';\r\n\r\nimport { PREVIEW_IMAGE_INDEX } from './consts';\r\n\r\nconst DEFAULT_AD_PREVIEW_STATE = {\r\n  previewImageId: null,\r\n  cropImageObj: null,\r\n  editingPlacementType: '',\r\n};\r\n\r\nexport const useAdPreviewState = (adData, onDataChange) => {\r\n  const imageList = useMemo(() => _.get(adData, ['Images', 'ImageList']), [adData]);\r\n  const selectedImageType = useMemo(() => _.get(adData, 'SelectedImageType'), [adData]);\r\n  const [previewImagesSharedState, setPreviewImagesSharedState] = useState(DEFAULT_AD_PREVIEW_STATE);\r\n\r\n  const openEditor = useCallback(() => {\r\n    const matchingImage = _.findWhere(imageList[PREVIEW_IMAGE_INDEX], { type: selectedImageType });\r\n\r\n    const imageObj = matchingImage.baseImage.clone();\r\n    imageObj.setCropSettings(matchingImage.cropSettings);\r\n\r\n    setPreviewImagesSharedState({ ...previewImagesSharedState, cropImageObj: imageObj });\r\n  }, [imageList, previewImagesSharedState, selectedImageType]);\r\n\r\n  const saveChanges = useCallback(({ cropSettings, selectedImageType: newSelectedImageType }) => {\r\n    const updatedImageList = imageList[PREVIEW_IMAGE_INDEX].map((image) => {\r\n      const updatedImage = image.clone();\r\n\r\n      updatedImage.setIncluded(updatedImage.type === newSelectedImageType);\r\n\r\n      if (updatedImage.type === newSelectedImageType) {\r\n        updatedImage.setCropSettings(cropSettings);\r\n      }\r\n\r\n      return updatedImage;\r\n    });\r\n\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        adData: {\r\n          ...prevData.adData,\r\n          SelectedImageType: newSelectedImageType,\r\n          Images: {\r\n            ...prevData.adData.Images,\r\n            ImageList: [updatedImageList],\r\n          },\r\n        },\r\n      }),\r\n    });\r\n\r\n    setPreviewImagesSharedState(DEFAULT_AD_PREVIEW_STATE);\r\n  }, [imageList, onDataChange]);\r\n\r\n  return {\r\n    previewImagesSharedState,\r\n    setPreviewImagesSharedState,\r\n    openEditor,\r\n    saveChanges,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useMemo, useState } from 'react';\r\n\r\nimport DEFAULT_PROFILE_IMAGE from './media/default-profile-image.svg';\r\n\r\nconst DEBOUNCE_DELAY = 100;\r\nconst PREVIEW_PROPS = ['companyPageName', 'userProfileImageSrc', 'finalUrl', 'introductoryText', 'headline', 'callToAction'];\r\n\r\nconst getDefaultData = i18n => ({\r\n  companyPageName: i18n.getString(_TL_('Company page')),\r\n  userProfileImageSrc: DEFAULT_PROFILE_IMAGE,\r\n  finalUrl: 'www.example.com',\r\n  introductoryText: i18n.getString(_TL_('[Your Introductory Text Here]')),\r\n  headline: i18n.getString(_TL_('[Your Headline Here]')),\r\n  callToAction: '',\r\n});\r\n\r\nconst getCurrentData = (adData, companyInfo) => ({\r\n  companyPageName: _.get(companyInfo, ['Name']),\r\n  userProfileImageSrc: _.get(companyInfo, ['LogoDownloadUrl']),\r\n  finalUrl: _.get(adData, ['FinalUrls', 0]),\r\n  introductoryText: _.get(adData, ['Descriptions', 'Description0']),\r\n  imageList: _.get(adData, ['Images', 'ImageList']),\r\n  headline: _.get(adData, ['Headlines', 'Headline0']),\r\n  callToAction: _.get(adData, ['CallToAction', 'optionText']),\r\n});\r\n\r\nconst getDataWithDefaults = (data, defaultData) =>\r\n  PREVIEW_PROPS.reduce((acc, prop) => ({ ...acc, [prop]: data[prop] || defaultData[prop] }), {});\r\n\r\nconst hasAdPreviewDataChanged =\r\n  (newAdData, adData) => (newAdData.length !== adData.length || !_.isMatch(newAdData, adData));\r\n\r\n// As the ad previewer has lots of internal components, rerendering each time the ad data changes can be expensive.\r\n// To avoid this, we debounce the ad data update to only update the ad previewer when the ad data has stopped changing.\r\nexport const useAdPreviewData = (i18n, adData, companyInfo) => {\r\n  const defaultData = useMemo(() => getDefaultData(i18n), [i18n]);\r\n  const currentData = useMemo(() => getCurrentData(adData, companyInfo), [adData, companyInfo]);\r\n\r\n  const [data, setData] = useState(currentData);\r\n  const debouncedSetData = useMemo(() => _.debounce(setData, DEBOUNCE_DELAY), []);\r\n\r\n  if (hasAdPreviewDataChanged(currentData, data)) {\r\n    debouncedSetData.cancel();\r\n    debouncedSetData(currentData);\r\n  }\r\n\r\n  const dataWithDefaults = useMemo(() => getDataWithDefaults(data, defaultData), [data, defaultData]);\r\n\r\n  return dataWithDefaults;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nconst getStyles = () => ({\r\n  footerContainer: {\r\n    display: 'flex',\r\n    columnGap: '10px',\r\n    marginTop: '20px',\r\n  },\r\n});\r\n\r\nexport const LinkedInAdFooter = () => {\r\n  const classes = useDefaultStyles(getStyles);\r\n  const i18n = useContext(I18nContext);\r\n  const { send } = useWizardService();\r\n\r\n  const onSaveAndCreateAnotherAd = () => {\r\n    send({\r\n      type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n      flowFactors: { isMultiAdModel: true },\r\n      stepId: LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER,\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className={classNames([classes.footerContainer, 'linkedin-ads-footer'])}>\r\n      <Button\r\n        appearance=\"secondary\"\r\n        onClick={onSaveAndCreateAnotherAd}\r\n        className=\"save-and-create-another-ad-button\"\r\n      >\r\n        {i18n.getString(_TL_('Save & create another ad'))}\r\n      </Button>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { StepHeader, MemberTokenWarning } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nimport { CampaignPanel } from './components/campaign-panel';\r\nimport { CompanyPageCard } from './components/company-page-card';\r\nimport { LinkedInAdSettingsShell } from './components/linkedin-ad-settings';\r\nimport { AdPreviewer } from './components/ad-previewer';\r\nimport { useAdPreviewState } from './use-ad-preview-state';\r\nimport { getAdStepStyle } from './styles/linkedIn-ad-styles';\r\nimport { useAdPreviewData } from './use-ad-preview-data';\r\nimport { LinkedInAdFooter } from './components/linkedin-ad-footer';\r\n\r\nconst EnableMultiAd = true;\r\n\r\nconst getTitleAndDescription = (isAdEditor, isEditing) => {\r\n  if (!isAdEditor) {\r\n    return ({\r\n      title: _TL_('Create ads'),\r\n      description: _TL_('Provide the information and assets you want to include in your ads.'),\r\n    });\r\n  }\r\n\r\n  return ({\r\n    title: isEditing ? _TL_('Edit ad') : _TL_('Create ad'),\r\n    description: _TL_('Provide the information and assets you want to include in your ad.'),\r\n  });\r\n};\r\n\r\nexport const LinkedInAdStep = (props) => {\r\n  const {\r\n    isAdEditor,\r\n    data,\r\n    onDataChange,\r\n    error,\r\n  } = props;\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useDefaultStyles(getAdStepStyle);\r\n\r\n  const {\r\n    companyInfo,\r\n    campaign = {},\r\n    adData = {},\r\n    isMemberTokenRevoked,\r\n  } = data || {};\r\n\r\n  const {\r\n    serverErrors = [],\r\n  } = error || {};\r\n\r\n  const { state } = useFormService();\r\n  const { context: { saveFailed } } = state;\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(serverErrors) || saveFailed;\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\n  const adPreviewState = useAdPreviewState(adData, onDataChange);\r\n  const adPreviewData = useAdPreviewData(i18n, adData, companyInfo);\r\n\r\n  const {\r\n    title: stepTitle,\r\n    description: stepDescription,\r\n  } = useMemo(() => getTitleAndDescription(isAdEditor, !!adData.Id), [isAdEditor, adData.Id]);\r\n\r\n  if (_.isEmpty(data)) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className={classNames('linkedin-ad-step', classes.container)}>\r\n      <div>\r\n        <StepHeader\r\n          title={stepTitle}\r\n          description={stepDescription}\r\n        />\r\n      </div>\r\n      {isAdEditor && isMemberTokenRevoked && <MemberTokenWarning /> }\r\n      <div className={classNames(classes.content)}>\r\n        <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n          <AttentionBeaconGroup>\r\n            <FormErrorGroup formErrorProps={{ errors: serverErrors, showAllValidationErrors }}>\r\n              <div className={classNames('linkedin-ad-left-section', classes.leftStyles)}>\r\n                <div className={classes.formContainer}>\r\n                  <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n                  {!isAdEditor && (\r\n                    <CampaignPanel\r\n                      campaign={campaign}\r\n                      onDataChange={onDataChange}\r\n                    />\r\n                  )}\r\n                  {!isAdEditor && (\r\n                    <CompanyPageCard\r\n                      companyInfo={companyInfo}\r\n                    />\r\n                  )}\r\n                  <LinkedInAdSettingsShell\r\n                    adData={adData}\r\n                    adPreviewData={adPreviewData}\r\n                    adPreviewState={adPreviewState}\r\n                    onDataChange={onDataChange}\r\n                    isAdEditor={isAdEditor && !!adData.Id}\r\n                  />\r\n                </div>\r\n              </div>\r\n              <div className={classNames('linkedin-ad-right-section', classes.rightStyles)}>\r\n                <AdPreviewer\r\n                  adData={adData}\r\n                  adPreviewData={adPreviewData}\r\n                  adPreviewState={adPreviewState}\r\n                  isAdEditor={isAdEditor && !!adData.Id}\r\n                />\r\n              </div>\r\n            </FormErrorGroup>\r\n          </AttentionBeaconGroup>\r\n        </ActuationGroup>\r\n      </div>\r\n      {(EnableMultiAd && !isAdEditor) && <LinkedInAdFooter />}\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInAdStep.propTypes = {\r\n  data: PropTypes.shape({\r\n    campaign: PropTypes.shape({}).isRequired,\r\n  }).isRequired,\r\n  isAdEditor: PropTypes.bool,\r\n  error: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n\r\nLinkedInAdStep.defaultProps = {\r\n  isAdEditor: false,\r\n};\r\n","import { useCallback, useContext } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport { useWizardService, WIZARD_EVENTS, getWizardData } from '@bingads-webui-fluent-component/wizard';\r\nimport {\r\n  readCampaign,\r\n  createOrUpdateCampaign,\r\n  readAdGroup,\r\n  getDefaultCampaign,\r\n  createOrUpdateAd,\r\n  getDefaultAd,\r\n  genericApiError,\r\n  mapBulkUpsertErrors,\r\n  getBulkUploadErrorType,\r\n  ERROR_ENTITY,\r\n  useLinkedInAdAdapter,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { Campaign, AdGroup, ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n  [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n  [getBulkUploadErrorType(ResponsiveAd)]: ERROR_ENTITY.Ad,\r\n};\r\n\r\nexport const useLinkedInAdRepository = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const { state, send } = useWizardService();\r\n  const {\r\n    campaignId,\r\n    adGroupId,\r\n    campaignGoal,\r\n    connectedCompanyPage,\r\n    editingAdId,\r\n    ads,\r\n  } = getWizardData(state);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInAdStep',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const { mapToBulkModel: mapLinkedInAdToBulkModel } = useLinkedInAdAdapter();\r\n\r\n  const loadCampaign = useCallback(() => {\r\n    if (!campaignId) {\r\n      return Promise.resolve(getDefaultCampaign({ campaignGoal, i18n }));\r\n    }\r\n    return readCampaign(cid, aid, campaignId);\r\n  }, [aid, campaignGoal, campaignId, cid, i18n]);\r\n\r\n  const loadAdGroup = useCallback(() => {\r\n    if (!campaignId || !adGroupId) {\r\n      return Promise.resolve({});\r\n    }\r\n    return readAdGroup(cid, aid, campaignId, adGroupId);\r\n  }, [adGroupId, aid, campaignId, cid]);\r\n\r\n  const loadAd = useCallback(() => {\r\n    if (!editingAdId) {\r\n      // new ad\r\n      return Promise.resolve(getDefaultAd({ connectedCompanyPage }));\r\n    }\r\n\r\n    return Promise.resolve(ads[editingAdId] || getDefaultAd({ connectedCompanyPage }));\r\n  }, [editingAdId, ads, connectedCompanyPage]);\r\n\r\n  const load = useCallback(() => {\r\n    const initialRequests = [\r\n      loadCampaign(),\r\n      loadAdGroup(),\r\n      loadAd(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests)\r\n      .then(([\r\n        campaign,\r\n        adGroup,\r\n        adData,\r\n      ]) => ({\r\n        campaign,\r\n        adGroup,\r\n        adData,\r\n        companyInfo: connectedCompanyPage,\r\n      })).catch((error) => {\r\n        logger.trace(`Failed to load ad data: ${JSON.stringify(error)}`);\r\n        throw error;\r\n      });\r\n  }, [loadAdGroup, loadCampaign, loadAd, connectedCompanyPage, logger]);\r\n\r\n  const saveCampaign = useCallback((campaign) => {\r\n    const campaignToUpdate = {\r\n      Id: campaign.Id,\r\n      Name: campaign.Name,\r\n    };\r\n\r\n    const campaignToCreate = {\r\n      ...campaign,\r\n      Id: -1,\r\n      AdGroups: [{\r\n        Name: 'Ad Group 1',\r\n        Campaign: { Id: -1 },\r\n      }],\r\n    };\r\n\r\n    const campaignToSave = campaign.Id ? campaignToUpdate : campaignToCreate;\r\n\r\n    return createOrUpdateCampaign(campaignToSave);\r\n  }, []);\r\n\r\n  const saveAds = useCallback((campaign, adGroup, adData) => {\r\n    const modelToSave = mapLinkedInAdToBulkModel(campaign, adGroup, adData);\r\n\r\n    return createOrUpdateAd(modelToSave);\r\n  }, [mapLinkedInAdToBulkModel]);\r\n\r\n  const save = useCallback(({ data }) => {\r\n    const { campaign, adGroup, adData } = data;\r\n\r\n    const saveCampaignPromise = saveCampaign(campaign, adGroup);\r\n\r\n    return saveCampaignPromise\r\n      .then((campaignRes) => {\r\n        logger.trace(`Campaign updated successfully: ${JSON.stringify(campaignRes)}`);\r\n        const { Id, AdGroups = [] } = campaignRes;\r\n        const adGroupRes = adGroup && adGroup.Id ? adGroup : AdGroups[0];\r\n\r\n        campaign.Id = Id;\r\n        adGroup.Id = adGroupRes.Id;\r\n\r\n        send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n          campaignId: Number(Id),\r\n          adGroupId: Number(adGroupRes.Id),\r\n        });\r\n\r\n        return saveAds(campaign, adGroupRes, adData);\r\n      })\r\n      .then((adRes) => {\r\n        logger.trace(`Ad updated successfully: ${JSON.stringify(adRes)}`);\r\n        adData.Id = adRes.Id;\r\n\r\n        send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n          editingAdId: adRes.Id,\r\n          ads: {\r\n            ...ads,\r\n            [adRes.Id]: adData,\r\n          },\r\n        });\r\n\r\n        return data;\r\n      })\r\n      .catch((error) => {\r\n        logger.error(`Failed to save ad data: ${JSON.stringify(error)}`);\r\n        const { errors } = error || {};\r\n        if (!_.isEmpty(errors)) {\r\n          const serverErrors\r\n          = mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n);\r\n\r\n          // eslint-disable-next-line prefer-promise-reject-errors\r\n          return Promise.reject({ error: { serverErrors } });\r\n        }\r\n        // eslint-disable-next-line prefer-promise-reject-errors\r\n        return Promise.reject({ error: { serverErrors: [genericApiError] } });\r\n      });\r\n  }, [saveCampaign, send, saveAds, i18n, logger, ads]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","/* eslint-disable prefer-promise-reject-errors */\r\nimport { useCallback, useContext } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport {\r\n  readCampaign,\r\n  readAdGroup,\r\n  createOrUpdateAd,\r\n  readAd,\r\n  getConnectedLinkedInCompanyPage,\r\n  getDefaultAd,\r\n  genericApiError,\r\n  mapBulkUpsertErrors,\r\n  getBulkUploadErrorType,\r\n  ERROR_ENTITY,\r\n  useLinkedInAdAdapter\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { Campaign, AdGroup, ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n  [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n  [getBulkUploadErrorType(ResponsiveAd)]: ERROR_ENTITY.Ad,\r\n};\r\n\r\nexport const useAdEditorRepository = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const { send } = useWizardService();\r\n  const {\r\n    scope: {\r\n      values: {\r\n        cid,\r\n        aid,\r\n        campaignId,\r\n        adGroupId,\r\n        adId,\r\n      },\r\n    },\r\n  } = useContext(ScopeContext);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInAdEditor',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const {\r\n    mapToViewModel: mapLinkedInAdToViewModel,\r\n    mapToBulkModel: mapLinkedInAdToBulkModel,\r\n  } = useLinkedInAdAdapter();\r\n\r\n  const loadCompanyPage = useCallback(() =>\r\n    getConnectedLinkedInCompanyPage(cid, aid), [cid, aid]);\r\n\r\n  const loadCampaign = useCallback(() =>\r\n    readCampaign(cid, aid, campaignId), [cid, aid, campaignId]);\r\n\r\n  const loadAdGroup = useCallback(() =>\r\n    readAdGroup(cid, aid, campaignId, adGroupId), [cid, aid, campaignId, adGroupId]);\r\n\r\n  const loadAd = useCallback(() => {\r\n    if (!adId) {\r\n      return Promise.resolve({});\r\n    }\r\n\r\n    return readAd(cid, aid, campaignId, adGroupId, adId).then(res => mapLinkedInAdToViewModel(res));\r\n  }, [adId, aid, campaignId, cid, adGroupId, mapLinkedInAdToViewModel]);\r\n\r\n  const load = useCallback(() => {\r\n    const initialRequests = [\r\n      loadCompanyPage(),\r\n      loadCampaign(),\r\n      loadAdGroup(),\r\n      loadAd(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests)\r\n      .then(([companyInfo, campaign, adGroup, adData]) => {\r\n        const isMemberTokenRevoked = companyInfo && companyInfo.IsMemberTokenActive === false;\r\n        const finalAdDate = adData && adData.Id ? adData : getDefaultAd({ connectedCompanyPage: companyInfo });\r\n\r\n        const data = {\r\n          companyInfo,\r\n          campaign,\r\n          adGroup,\r\n          adData: finalAdDate,\r\n          isMemberTokenRevoked,\r\n        };\r\n\r\n        send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isMemberTokenRevoked });\r\n\r\n        return data;\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to load initial ad data: ${JSON.stringify(err)}`);\r\n        throw err;\r\n      });\r\n  }, [logger, loadAdGroup, loadCampaign, loadAd, loadCompanyPage, send]);\r\n\r\n  const save = useCallback(({ data }) => {\r\n    const { campaign, adGroup, adData } = data;\r\n\r\n    const modelToSave = mapLinkedInAdToBulkModel(campaign, adGroup, adData);\r\n\r\n    return createOrUpdateAd(modelToSave)\r\n      .then(() => {\r\n        logger.trace('Ad saved successfully');\r\n        return data;\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to save ad:${JSON.stringify(err)}`);\r\n\r\n        const errors = _.get(err, 'errors');\r\n        const serverErrors = errors\r\n          ? mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n)\r\n          : [genericApiError];\r\n\r\n        return Promise.reject({ error: { serverErrors } });\r\n      });\r\n  }, [i18n, logger, mapLinkedInAdToBulkModel]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","export const getAdPreviewStyles = () => ({\r\n  placementContainer: {\r\n    width: '212px',\r\n    height: '236px',\r\n  },\r\n  placementCardHeader: {\r\n    paddingLeft: '8px',\r\n    paddingRight: '8px',\r\n    paddingTop: '12px',\r\n    flexDirection: 'column', // Stack company name and promote text vertically\r\n    alignItems: 'center', // Align to the start of the flex container\r\n    '--fui-CardHeader--gap': '8px  !important',\r\n  },\r\n  placementLogo: {\r\n    width: '24px',\r\n    height: '24px',\r\n  },\r\n  placementCompanyName: {\r\n    color: '#323130',\r\n    fontFamily: 'Segoe UI',\r\n    fontSize: 12,\r\n    fontWeight: 600,\r\n    lineHeight: '16px',\r\n  },\r\n  placementPromoteText: {\r\n    fontSize: '10px !important',\r\n    color: '#323130',\r\n    lineHeight: '12px !important',\r\n  },\r\n\r\n  placementIntroductory: {\r\n    width: '100%',\r\n    height: 38,\r\n    padding: '8px',\r\n  },\r\n  placementIntroductoryText: {\r\n    padding: '0px',\r\n    margin: '0px',\r\n    fontSize: '10px !important',\r\n    lineHeight: '12px !important',\r\n    display: '-webkit-box !important',\r\n  },\r\n\r\n  placementCardPreview: {\r\n    width: '212px',\r\n    height: '120px',\r\n  },\r\n\r\n  placementCardFooter: {\r\n    height: 38,\r\n    display: 'flex',\r\n    borderWidth: '1px',\r\n    justifyContent: 'space-between',\r\n    background: '#ECF1F6',\r\n  },\r\n  placementFooterText: {\r\n    paddingLeft: '8px',\r\n    paddingRight: '8px',\r\n    paddingTop: '6px',\r\n  },\r\n  placementHeadline: {\r\n    overflow: 'hidden !important',\r\n    display: '-webkit-box !important',\r\n    WebkitBoxOrient: 'vertical !important',\r\n    WebkitLineClamp: '2 !important',\r\n    fontSize: '10px !important',\r\n    fontWeight: '600 !important',\r\n    color: '#323130 !important',\r\n    lineHeight: '12px !important',\r\n    height: '14px',\r\n  },\r\n  placementFinalUrl: {\r\n    border: '0px',\r\n    display: 'block !important',\r\n    fontSize: '10px !important',\r\n    color: '#323130',\r\n    lineHeight: '12px !important',\r\n  },\r\n});\r\n","import React, { useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  Text,\r\n  CardPreview,\r\n  CardHeader,\r\n  CardFooter,\r\n  Image,\r\n} from '@fluentui/react-components';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { getAdPreviewStyles } from '../styles/ad-preview-styles';\r\nimport DEFAULT_PROFILE_IMAGE from '../media/default-profile-image.svg';\r\n\r\nconst MAX_TEXT_LENGTH = 50;\r\n\r\nexport const AdPreview = ({ adData, extraData }) => {\r\n  const classes = useDefaultStyles(getAdPreviewStyles);\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const companyPageName = _.get(extraData, 'Name');\r\n  const userProfileImageSrc = _.get(extraData, 'LogoDownloadUrl') || DEFAULT_PROFILE_IMAGE;\r\n  const finalUrl = _.get(adData, ['FinalUrls', '0']);\r\n  const headline = _.get(adData, ['Headlines', 'Headline0']);\r\n  let introductoryText = _.get(adData, ['Descriptions', 'Description0']);\r\n  const imageList = _.get(adData, ['Images', 'ImageList'], []);\r\n  const adImageUrl = imageList[0][0].src;\r\n\r\n  if (introductoryText.length > MAX_TEXT_LENGTH) {\r\n    introductoryText = `${introductoryText.substring(0, MAX_TEXT_LENGTH)}...`;\r\n  }\r\n\r\n  return (\r\n    <div className={classes.placementContainer}>\r\n      <CardHeader\r\n        className={classes.placementCardHeader}\r\n        image={<Image className={classes.placementLogo} src={userProfileImageSrc} alt={i18n.getString(_TL_('User profile image'))} />}\r\n        header={<div className={classes.placementCompanyName}><b>{companyPageName}</b></div>}\r\n        description={<Text className={classes.placementPromoteText}>{i18n.getString(_TL_('Promoted'))}</Text>}\r\n      />\r\n\r\n      <div className={classes.placementIntroductory}>\r\n        <Text className={classes.placementIntroductoryText}>{introductoryText}</Text>\r\n      </div>\r\n\r\n      <CardPreview className={classes.placementCardPreview}>\r\n        <Image src={adImageUrl} alt=\"ad image\" />\r\n      </CardPreview>\r\n\r\n      <CardFooter className={classes.placementCardFooter}>\r\n        <div className={classes.placementFooterText}>\r\n          <Text className={classes.placementHeadline}>{headline}</Text>\r\n          <Text className={classes.placementFinalUrl}>{finalUrl}</Text>\r\n        </div>\r\n      </CardFooter>\r\n    </div>\r\n  );\r\n};\r\n\r\nAdPreview.propTypes = {\r\n  adData: PropTypes.shape({\r\n    FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n    Headlines: PropTypes.shape({\r\n      Headline0: PropTypes.string,\r\n    }),\r\n    Descriptions: PropTypes.shape({\r\n      Description0: PropTypes.string,\r\n    }),\r\n    Images: PropTypes.shape({\r\n      ImageList: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({\r\n        src: PropTypes.string,\r\n      }))),\r\n    }),\r\n  }).isRequired,\r\n  extraData: PropTypes.shape({\r\n    Name: PropTypes.string,\r\n    LogoDownloadUrl: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n","export const getAdsManagerStepStyle = () => ({\r\n  container: {\r\n    '& .ad-thumbnail': {\r\n      padding: '0px',\r\n    },\r\n  },\r\n});\r\n\r\n","import React, { useState, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { StepHeader } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\nimport { LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport {\r\n  useLinkedInAdAdapter,\r\n  createOrUpdateAd,\r\n  genericApiError,\r\n  mapBulkUpsertErrors,\r\n  getBulkUploadErrorType,\r\n  ERROR_ENTITY,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { MultiAdsManager } from '@bingads-webui-campaign-react/multi-ads-manager';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\n\r\nimport { AdPreview } from './components/ad-preview';\r\nimport { getAdsManagerStepStyle } from './styles/ads-manager-step-styles';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(ResponsiveAd)]: ERROR_ENTITY.Ad,\r\n};\r\n\r\nexport const LinkedInAdsManagerStep = ({\r\n  data,\r\n  onDataChange,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const { send } = useWizardService();\r\n  const { mapToBulkModel: mapLinkedInAdToBulkModel } = useLinkedInAdAdapter();\r\n  const classes = useDefaultStyles(getAdsManagerStepStyle);\r\n\r\n  const {\r\n    campaignId,\r\n    adGroupId,\r\n    ads,\r\n    connectedCompanyPage,\r\n  } = data || {};\r\n\r\n  const { state } = useFormService();\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n  const [deleteErrors, setDeleteErrors] = useState(null);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(deleteErrors);\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\n  const onClickCreateNewAd = () => {\r\n    send({\r\n      type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n      flowFactors: { isAdStepActive: true },\r\n      stepId: LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD,\r\n      wizardData: {\r\n        editingAdId: null,\r\n      },\r\n    });\r\n  };\r\n\r\n  const onDeleteAd = (adId) => {\r\n    const adToDelete = mapLinkedInAdToBulkModel(\r\n      { Id: campaignId },\r\n      { Id: adGroupId },\r\n      ads[adId],\r\n      true\r\n    );\r\n\r\n    createOrUpdateAd(adToDelete).then(() => {\r\n      const adsWithoutDeletedAd = _.omit(ads, adId);\r\n\r\n      if (_.isEmpty(adsWithoutDeletedAd)) {\r\n        send({\r\n          type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n          flowFactors: { isMultiAdModel: false },\r\n          stepId: LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD,\r\n          wizardData: {\r\n            ads: adsWithoutDeletedAd,\r\n            editingAdId: null,\r\n          },\r\n        });\r\n      } else {\r\n        send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n          ads: adsWithoutDeletedAd,\r\n        });\r\n\r\n        onDataChange({\r\n          data: {\r\n            ...data,\r\n            ads: adsWithoutDeletedAd,\r\n          },\r\n        });\r\n      }\r\n    }).catch((error) => {\r\n      const { errors } = error || {};\r\n      if (!_.isEmpty(errors)) {\r\n        const serverErrors\r\n          = mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n);\r\n\r\n        setDeleteErrors([serverErrors]);\r\n      }\r\n\r\n      setDeleteErrors([genericApiError]);\r\n    });\r\n  };\r\n\r\n  const onEditAd = (adId) => {\r\n    send({\r\n      type: WIZARD_EVENTS.SAVE_AND_GOTO,\r\n      flowFactors: { isAdStepActive: true },\r\n      stepId: LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD,\r\n      wizardData: {\r\n        editingAdId: adId,\r\n      },\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className={classNames('linkedin-ad-manager-step', classes.container)}>\r\n      <div>\r\n        <StepHeader\r\n          title={_TL_('Ads')}\r\n          description={_TL_('Create more LinkedIn ads for this campaign.')}\r\n        />\r\n      </div>\r\n      <div>\r\n        <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n          <AttentionBeaconGroup>\r\n            <FormErrorGroup formErrorProps={{ errors: deleteErrors, showAllValidationErrors }}>\r\n              <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n              <MultiAdsManager\r\n                ads={ads || {}}\r\n                onCreateAd={onClickCreateNewAd}\r\n                onDeleteAd={onDeleteAd}\r\n                onEditAd={onEditAd}\r\n                AdPreview={AdPreview}\r\n                extraData={connectedCompanyPage}\r\n              />\r\n            </FormErrorGroup>\r\n          </AttentionBeaconGroup>\r\n        </ActuationGroup>\r\n      </div>\r\n\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInAdsManagerStep.propTypes = {\r\n  data: PropTypes.shape({\r\n    ads: PropTypes.shape({}).isRequired,\r\n  }).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\n\r\nimport { Skeleton } from '@fluentui/react-components';\r\nimport { DropdownSkeletonItem, LabelSkeletonItem, RadioSkeletonItem } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nexport const LocationsSkeleton = () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem />\r\n    <RadioSkeletonItem width={110} />\r\n    <RadioSkeletonItem width={330} />\r\n  </Skeleton>\r\n);\r\n\r\nexport const LanguageSkeleton = () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem width={270} />\r\n    <DropdownSkeletonItem />\r\n  </Skeleton>\r\n);\r\n\r\nexport const AudiencesSkeleton = () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem width={90} />\r\n    <DropdownSkeletonItem width={320} />\r\n    <LabelSkeletonItem width={130} />\r\n    <DropdownSkeletonItem width={320} />\r\n  </Skeleton>\r\n);\r\n\r\nexport const ConversionSkeleton = () => () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem width={270} />\r\n    <DropdownSkeletonItem />\r\n  </Skeleton>\r\n);\r\n\r\n","import _ from 'underscore';\r\nimport { AdapterFactory, withValidation } from '@bingads-webui-react/validation';\r\n\r\nconst ValidationAdapter = AdapterFactory({\r\n  defaultValue: {},\r\n  valueToInject: 'data',\r\n  functionToInject: 'onDataChange',\r\n});\r\n\r\nexport const withValidationWrapper = _.partial(withValidation, _, ValidationAdapter);\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Location24Regular } from '@fluentui/react-icons';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nimport { isLocationDataValid, TargetingLocations } from '../components/targeting-locations';\r\nimport { LocationsSkeleton } from '../components/skeletons';\r\nimport { withValidationWrapper } from '../utils';\r\n\r\nconst withUnvalidatedControlErrorsWrapper = _.partial(withUnvalidatedControlErrors, _, { filter: entityIs(ERROR_ENTITY.LocationTargeting) });\r\n\r\nconst ServerValidatedTargetingLocations = _.compose(\r\n  withControlErrorHandling,\r\n  withUnvalidatedControlErrorsWrapper,\r\n  withValidationWrapper\r\n)(TargetingLocations);\r\n\r\nexport const CollapsibleLocations = ({ defaultLocation, isLoading, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { state } = useFormService();\r\n  const isSavingFailed = state.matches(FORM_STATES.SAVING_FAILED);\r\n\r\n  const validator = useCallback(newData => ((isSavingFailed && !isLocationDataValid(newData))\r\n    ? [i18n.getString(_TL_('There are no location targets defined.'))]\r\n    : []\r\n  ), [i18n, isSavingFailed]);\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Location'))}\r\n        helpTopic=\"pop_BA_LinkedIn_Location\"\r\n        helpLabel={i18n.getString(_TL_('Click to learn more about location'))}\r\n        contentBefore={<Location24Regular />}\r\n      />\r\n      <FormCardBody>\r\n        {!isLoading ? (\r\n          <ServerValidatedTargetingLocations\r\n            defaultLocation={defaultLocation}\r\n            validationProps={{ field: 'locations', validator }}\r\n          />\r\n        ) : <LocationsSkeleton />}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nCollapsibleLocations.propTypes = {\r\n  defaultLocation: PropTypes.shape({}).isRequired,\r\n  isLoading: PropTypes.bool.isRequired,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n  isLegacyLocationAndRadiusEqual,\r\n  BingMapsContextProvider,\r\n  SEARCH_TYPE,\r\n} from '@bingads-webui-react/bing-maps';\r\nimport { LocationTargeting, targetOptions } from '@bingads-webui-campaign-react/location-targeting';\r\nimport { getLocations } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nconst BING_MAPS_API_KEY = 'AgRuCtepgsuuCYV9J6S6w1j8ay2JJwnu8f5EPgv4kkoJoIuka8yui-NzKrvlESTQ';\r\n\r\nexport const isLocationDataValid = ({ selectedLocationOption: selectedOption, positiveLocationTargets: targets }) =>\r\n  selectedOption === targetOptions.quick || (selectedOption === targetOptions.specific && targets.length > 0);\r\n\r\nexport const getLocationTargetsEditorStrings = i18n => ({\r\n  description: i18n.getString(_TL_('For example, coordinates, or state/province.')),\r\n  label: i18n.getString(_TL_('Search for location')),\r\n  choiceGroupLabel: i18n.getString(_TL_('I want to target:')),\r\n});\r\n\r\nexport const TargetingLocations = ({ defaultLocation, data, onDataChange }) => {\r\n  const mapRef = useRef();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const serverContext = useContext(ServerContext);\r\n  const aid = useMemo(() => serverContext.CurrentAccount.Id, [serverContext]);\r\n  const cid = useMemo(() => serverContext.CurrentCustomer.Id, [serverContext]);\r\n\r\n  const strings = useMemo(() => (getLocationTargetsEditorStrings(i18n)), [i18n]);\r\n\r\n  const optionConfigs = useMemo(() => ([\r\n    { key: targetOptions.quick, text: _.get(defaultLocation, 'Name') },\r\n    { key: targetOptions.specific, text: i18n.getString(_TL_('Let me choose specific locations')) },\r\n  ]), [i18n, defaultLocation]);\r\n\r\n  const { selectedLocationOption, positiveLocationTargets = [] } = data || {};\r\n\r\n  const searchOptions = useMemo(() => ({\r\n    getLocations: query => getLocations(cid, aid, query),\r\n  }), [aid, cid]);\r\n\r\n  const onSelectedLocationOptionChange = useCallback((newOption) => {\r\n    onDataChange({\r\n      ...data,\r\n      selectedLocationOption: newOption,\r\n    });\r\n  }, [data, onDataChange]);\r\n\r\n  const onPositiveLocationTargetsChange = useCallback((newTargets) => {\r\n    onDataChange({\r\n      ...data,\r\n      positiveLocationTargets: newTargets,\r\n    });\r\n  }, [data, onDataChange]);\r\n\r\n  const onValidationComplete = useCallback((errorMessage) => {\r\n    onDataChange({\r\n      locationsErrorString: errorMessage,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  return (\r\n    <BingMapsContextProvider\r\n      campaingApiToken={serverContext.Token}\r\n      bingMapsApiKey={BING_MAPS_API_KEY}\r\n      searchOptions={searchOptions}\r\n    >\r\n      <LocationTargeting\r\n        // Config props\r\n        mapRef={mapRef}\r\n        strings={strings}\r\n        optionsConfig={optionConfigs}\r\n        allowNegativeLocationTargeting={false}\r\n        isRadiusExcludeEnabled={false}\r\n        showSearchTypeOptions={false}\r\n        maxLocationTargets={1000}\r\n        customizedLocationEqual={isLegacyLocationAndRadiusEqual}\r\n        defaultSelectedSearchType={SEARCH_TYPE.Boundary}\r\n        useInternalValidation={false}\r\n\r\n        // Data props\r\n        selectedLocationOption={selectedLocationOption}\r\n        locationTargets={positiveLocationTargets}\r\n\r\n        // Event props\r\n        onChangeLocationOption={onSelectedLocationOptionChange}\r\n        onLocationTargetsChange={onPositiveLocationTargetsChange}\r\n        onNotifyValidationResult={onValidationComplete}\r\n      />\r\n    </BingMapsContextProvider>\r\n  );\r\n};\r\n\r\nTargetingLocations.propTypes = {\r\n  defaultLocation: PropTypes.shape({\r\n    Name: PropTypes.string,\r\n  }).isRequired,\r\n  data: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport { Caption1 } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nexport const LanguageInfoBanner = () => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const bannerMessage = useMemo(() => {\r\n    const template = i18n.getString(_TL_('If you choose English, your campaign will target all LinkedIn member accounts in your selected {{bold}}Location{{/bold}}, regardless of their profile language settings.'));\r\n\r\n    return (\r\n      <ReactTemplate\r\n        template={template}\r\n        model={{ bold: text => <b>{text}</b> }}\r\n      />\r\n    );\r\n  }, [i18n]);\r\n\r\n  return (\r\n    <MessageBar className=\"language-info-banner\">\r\n      <MessageBarBody>\r\n        <Caption1>\r\n          {bannerMessage}\r\n        </Caption1>\r\n      </MessageBarBody>\r\n    </MessageBar>\r\n  );\r\n};\r\n","export const LINKEDIN_SUPPORTED_TARGETING_LANGUAGES = [\r\n  'Arabic',\r\n  'Czech',\r\n  'Danish',\r\n  'Dutch',\r\n  'English',\r\n  'French',\r\n  'German',\r\n  'Hindi',\r\n  'Indonesian',\r\n  'Italian',\r\n  'Japanese',\r\n  'Korean',\r\n  'Malay',\r\n  'Norwegian',\r\n  'Polish',\r\n  'Portuguese',\r\n  'Romanian',\r\n  'Russian',\r\n  'Spanish',\r\n  'Swedish',\r\n  'Turkish',\r\n];\r\n\r\nexport const LinkedInAudienceType = {\r\n  COMPANY_NAMES: 'companyNames',\r\n  COMPANY_INDUSTRIES: 'companyIndustries',\r\n  JOB_SENIORITIES: 'jobSeniorities',\r\n  JOB_FUNCTIONS: 'jobFunctions',\r\n  JOB_TITLES: 'jobTitles',\r\n};\r\n\r\nexport const LinkedInAudienceTypesInOrder = [\r\n  LinkedInAudienceType.COMPANY_NAMES,\r\n  LinkedInAudienceType.COMPANY_INDUSTRIES,\r\n  LinkedInAudienceType.JOB_SENIORITIES,\r\n  LinkedInAudienceType.JOB_FUNCTIONS,\r\n  LinkedInAudienceType.JOB_TITLES,\r\n];\r\n\r\nexport const LinkedInAudienceConfig = {\r\n  [LinkedInAudienceType.COMPANY_NAMES]: {\r\n    label: _TL_('Company'),\r\n    helpTopic: 'pop_BA_LinkedIn_Company',\r\n    helpLabel: _TL_('Click here to learn more about company'),\r\n    placeholder: _TL_('Enter company name to search'),\r\n    mutuallyExclusiveDisclaimer: _TL_('Company Names may not be ’AND’ed with Company Industries'),\r\n    mutuallyExclusiveTypes: [\r\n      LinkedInAudienceType.COMPANY_INDUSTRIES,\r\n    ],\r\n  },\r\n  [LinkedInAudienceType.COMPANY_INDUSTRIES]: {\r\n    label: _TL_('Industry'),\r\n    helpTopic: 'pop_BA_LinkedIn_Industry',\r\n    helpLabel: _TL_('Click here to learn more about industry'),\r\n    placeholder: _TL_('Enter industry to search'),\r\n    mutuallyExclusiveDisclaimer: _TL_('Company Industries may not be ’AND’ed with Company Names'),\r\n    mutuallyExclusiveTypes: [\r\n      LinkedInAudienceType.COMPANY_NAMES,\r\n    ],\r\n  },\r\n  [LinkedInAudienceType.JOB_SENIORITIES]: {\r\n    label: _TL_('Job seniority'),\r\n    helpTopic: 'pop_BA_LinkedIn_JobSeniority',\r\n    helpLabel: _TL_('Click here to learn more about job seniority'),\r\n    placeholder: _TL_('Enter job seniority to search'),\r\n    mutuallyExclusiveDisclaimer: _TL_('Job Seniorities may not be ’AND’ed with Job Titles'),\r\n    mutuallyExclusiveTypes: [\r\n      LinkedInAudienceType.JOB_TITLES,\r\n    ],\r\n  },\r\n  [LinkedInAudienceType.JOB_FUNCTIONS]: {\r\n    label: _TL_('Job function'),\r\n    helpTopic: 'pop_BA_LinkedIn_JobFunction',\r\n    helpLabel: _TL_('Click here to learn more about job function'),\r\n    placeholder: _TL_('Enter job function to search'),\r\n    mutuallyExclusiveDisclaimer: _TL_('Job Functions may not be ’AND’ed with Job Titles'),\r\n    mutuallyExclusiveTypes: [\r\n      LinkedInAudienceType.JOB_TITLES,\r\n    ],\r\n  },\r\n  [LinkedInAudienceType.JOB_TITLES]: {\r\n    label: _TL_('Job title'),\r\n    helpTopic: 'pop_BA_LinkedIn_JobTitle',\r\n    helpLabel: _TL_('Click here to learn more about job title'),\r\n    placeholder: _TL_('Enter job title to search'),\r\n    mutuallyExclusiveDisclaimer: _TL_('Job Titles may not be ’AND’ed with Job Seniorities or Job Functions'),\r\n    mutuallyExclusiveTypes: [\r\n      LinkedInAudienceType.JOB_SENIORITIES,\r\n      LinkedInAudienceType.JOB_FUNCTIONS,\r\n    ],\r\n  },\r\n};\r\n\r\nexport const LinkedInAudienceTypeCriterion = {\r\n  [LinkedInAudienceType.COMPANY_NAMES]: 'CompanyName',\r\n  [LinkedInAudienceType.COMPANY_INDUSTRIES]: 'Industry',\r\n  [LinkedInAudienceType.JOB_FUNCTIONS]: 'JobFunction',\r\n  [LinkedInAudienceType.JOB_TITLES]: 'JobTitle',\r\n  [LinkedInAudienceType.JOB_SENIORITIES]: 'JobSeniority',\r\n};\r\n\r\nexport const LinkedInAudienceStatus = {\r\n  Active: 'Active',\r\n  Deleted: 'Deleted',\r\n};\r\n\r\nexport const LinkedInAudienceCompanySizeMap = {\r\n  One: '1',\r\n  TwotoTen: '2 - 10',\r\n  EleventoFifty: '11 - 50',\r\n  FiftyOnetoTwoHundred: '51 - 200',\r\n  TwoHundredOnetoFiveHundred: '201 - 500',\r\n  FiveHundredOnetoOneThousand: '501 - 1,000',\r\n  OneThousandOnetoFiveThousand: '1,001 - 5,000',\r\n  FiveThousandOnetoTenThousand: '5,001 - 10,000',\r\n  OverTenThousand: '> 10,000',\r\n};\r\n\r\nexport const AgeRanges = {\r\n  EighteenToTwentyFive: _TL_('18 to 24'),\r\n  TwentyFiveToThirtyFive: _TL_('25 to 34'),\r\n  ThirtyFiveToFiftyFive: _TL_('35 to 54'),\r\n  FiftyFiveAndAbove: _TL_('55+'),\r\n};\r\n\r\nexport const Genders = {\r\n  Female: _TL_('Female'),\r\n  Male: _TL_('Male'),\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\n\r\nimport { ValidatedSingleLanguageInput } from '@bingads-webui-campaign-react/single-language-input';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { LanguageInfoBanner } from './language-info-banner';\r\nimport { LINKEDIN_SUPPORTED_TARGETING_LANGUAGES } from '../consts';\r\n\r\nexport const TargetingLanguage = ({ isDisabled }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const [isEnglishSelected, setIsEnglishSelected] = useState(false);\r\n\r\n  const onValidate = useCallback(({ data }) => {\r\n    const { language } = data;\r\n    setIsEnglishSelected(language === 'English');\r\n  }, []);\r\n\r\n  return (\r\n    <div className=\"language-targeting\">\r\n      <ValidatedSingleLanguageInput\r\n        i18n={i18n}\r\n        label={i18n.getString(_TL_('What language do your potential customers speak?'))}\r\n        languages={LINKEDIN_SUPPORTED_TARGETING_LANGUAGES}\r\n        validationProps={{ field: 'language', onValidate }}\r\n        disabled={isDisabled}\r\n      />\r\n      {isEnglishSelected && <LanguageInfoBanner />}\r\n    </div>\r\n  );\r\n};\r\n\r\nTargetingLanguage.propTypes = {\r\n  isDisabled: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { LocalLanguage24Regular } from '@fluentui/react-icons';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport { TargetingLanguage } from '../components/targeting-language';\r\nimport { LanguageSkeleton } from '../components/skeletons';\r\n\r\nexport const CollapsibleLanguage = ({ isLoading, isDisabled, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Language'))}\r\n        helpTopic=\"pop_BA_LinkedIn_Language\"\r\n        helpLabel={i18n.getString(_TL_('Click to learn more about language'))}\r\n        contentBefore={<LocalLanguage24Regular />}\r\n      />\r\n      <FormCardBody>\r\n        {!isLoading ? <TargetingLanguage isDisabled={isDisabled} /> : <LanguageSkeleton />}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nCollapsibleLanguage.propTypes = {\r\n  isLoading: PropTypes.bool.isRequired,\r\n  isDisabled: PropTypes.bool,\r\n};\r\n\r\nCollapsibleLanguage.defaultProps = {\r\n  isDisabled: false,\r\n};\r\n\r\n","import { makeStyles, tokens, typographyStyles } from '@fluentui/react-components';\r\n\r\nexport const getCompanyNameOptionStyles = makeStyles({\r\n  nameContainer: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  logo: {\r\n    width: '16px',\r\n    height: '16px',\r\n    marginRight: tokens.spacingXS,\r\n  },\r\n  name: {\r\n    ...typographyStyles.body1Strong,\r\n  },\r\n  industryAndSize: {\r\n    ...typographyStyles.body1,\r\n    color: tokens.colorNeutralForeground4,\r\n  },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTargetingAudiencesStyles = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginBottom: tokens.spacingVerticalS,\r\n    ...shorthands.gap(tokens.spacingVerticalL),\r\n  },\r\n});\r\n\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Text } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n  readCompanyNames,\r\n  readCompanyIndustries,\r\n  readJobFunctions,\r\n  readJobTitles,\r\n  readJobSeniorities,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { SearchableMultiSelectorInput, useFilterOnClient } from '@bingads-webui-campaign-react/searchable-multi-selector-input';\r\n\r\nimport { LinkedInAudienceConfig, LinkedInAudienceType, LinkedInAudienceTypesInOrder } from '../consts';\r\nimport { CompanyNameOption } from './company-name-option';\r\nimport { useTargetingAudiencesStyles } from '../styles/targeting-audiences-styles';\r\n\r\nconst LinkedInAudienceCustomOptionRender = {\r\n  [LinkedInAudienceType.COMPANY_NAMES]: CompanyNameOption,\r\n};\r\n\r\nconst areTypesPresent = (typesToCheck, typesWithData) => _.any(typesToCheck, type => typesWithData.includes(type));\r\n\r\nconst mapCompanyNameResultsToViewModel = ({ value }) => value.map(({\r\n  Id, Name, Industry, Size, LogoUrl,\r\n}) => ({\r\n  id: String(Id), name: Name, industry: Industry, size: Size, logo: LogoUrl,\r\n}));\r\n\r\nconst mapResultsToViewModel = ({ value }) => value.map(({ Id, Name }) => ({ id: String(Id), name: Name }));\r\n\r\nconst useAudienceFetchFunctions = (cid, aid) => {\r\n  const fetchCompanyNames = useCallback(query => readCompanyNames(cid, aid, query).then(mapCompanyNameResultsToViewModel), [cid, aid]);\r\n  const fetchCompanyIndustries = useCallback(() => readCompanyIndustries(cid, aid).then(mapResultsToViewModel), [cid, aid]);\r\n  const fetchJobFunctions = useCallback(() => readJobFunctions(cid, aid).then(mapResultsToViewModel), [cid, aid]);\r\n  const fetchJobTitles = useCallback(query => readJobTitles(cid, aid, query).then(mapResultsToViewModel), [cid, aid]);\r\n  const fetchJobSeniorities = useCallback(() => readJobSeniorities(cid, aid).then(mapResultsToViewModel), [cid, aid]);\r\n\r\n  const cachedFetchCompanyIndustries = useFilterOnClient(fetchCompanyIndustries);\r\n  const cachedFetchJobFunctions = useFilterOnClient(fetchJobFunctions);\r\n  const cachedFetchJobSeniorities = useFilterOnClient(fetchJobSeniorities);\r\n\r\n  return {\r\n    [LinkedInAudienceType.COMPANY_NAMES]: fetchCompanyNames,\r\n    [LinkedInAudienceType.COMPANY_INDUSTRIES]: cachedFetchCompanyIndustries,\r\n    [LinkedInAudienceType.JOB_SENIORITIES]: cachedFetchJobSeniorities,\r\n    [LinkedInAudienceType.JOB_FUNCTIONS]: cachedFetchJobFunctions,\r\n    [LinkedInAudienceType.JOB_TITLES]: fetchJobTitles,\r\n  };\r\n};\r\n\r\nexport const TargetingAudiences = ({ data, onDataChange }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useTargetingAudiencesStyles();\r\n\r\n  const serverContext = useContext(ServerContext);\r\n  const aid = useMemo(() => serverContext.CurrentAccount.Id, [serverContext]);\r\n  const cid = useMemo(() => serverContext.CurrentCustomer.Id, [serverContext]);\r\n\r\n  const fetchFunctions = useAudienceFetchFunctions(cid, aid);\r\n\r\n  const typesWithData = useMemo(() =>\r\n    _.filter(LinkedInAudienceTypesInOrder, type => !_.isEmpty(data[type])), [data]);\r\n\r\n  const onAudienceDataChange = useCallback((type, value) =>\r\n    onDataChange({ ...data, [type]: value }), [data, onDataChange]);\r\n\r\n  return (\r\n    <div className={mergeClasses('audiences-targeting', classes.root)}>\r\n      <Text block>\r\n        {i18n.getString(_TL_('How do you want to target your audience? Choose from the targeting options below.'))}\r\n      </Text>\r\n      {LinkedInAudienceTypesInOrder.map((type) => {\r\n        const {\r\n          label,\r\n          helpTopic,\r\n          helpLabel,\r\n          placeholder,\r\n          mutuallyExclusiveDisclaimer,\r\n          mutuallyExclusiveTypes,\r\n        } = LinkedInAudienceConfig[type];\r\n\r\n        const disabled = areTypesPresent(mutuallyExclusiveTypes, typesWithData);\r\n\r\n        return (\r\n          <SearchableMultiSelectorInput\r\n            className={`${type}-audience-targeting`}\r\n            key={type}\r\n            label={i18n.getString(label)}\r\n            helpTopic={helpTopic}\r\n            helpLabel={i18n.getString(helpLabel)}\r\n            placeholderText={i18n.getString(placeholder)}\r\n            disabled={disabled}\r\n            tooltipText={disabled ? i18n.getString(mutuallyExclusiveDisclaimer) : undefined}\r\n            fetchFn={fetchFunctions[type]}\r\n            value={_.get(data, type, [])}\r\n            onRenderOption={LinkedInAudienceCustomOptionRender[type]}\r\n            onChange={_.partial(onAudienceDataChange, type)}\r\n          />\r\n        );\r\n      })}\r\n    </div>\r\n  );\r\n};\r\n\r\nTargetingAudiences.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image, mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { LinkedInAudienceCompanySizeMap } from '../consts';\r\nimport { getCompanyNameOptionStyles } from '../styles/company-name-option-styles';\r\n\r\nexport const CompanyNameOption = ({\r\n  name, logo, industry, size,\r\n}) => {\r\n  const classes = getCompanyNameOptionStyles();\r\n\r\n  return (\r\n    <div className=\"company-name-option\">\r\n      <div className={classes.nameContainer}>\r\n        {logo && <Image className={classes.logo} src={logo} aria-hidden />}\r\n        <div className={mergeClasses('company-name', classes.name)}>\r\n          {name}\r\n        </div>\r\n      </div>\r\n      <div className={mergeClasses('industry-and-size', classes.industryAndSize)}>\r\n        {industry}; {LinkedInAudienceCompanySizeMap[size]}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nCompanyNameOption.propTypes = {\r\n  name: PropTypes.string.isRequired,\r\n  logo: PropTypes.string.isRequired,\r\n  industry: PropTypes.string.isRequired,\r\n  size: PropTypes.string.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { LinkedInLogo24 } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\nimport { entityIs } from '@bingads-webui-campaign-react/form-error';\r\n\r\nimport { TargetingAudiences } from '../components/targeting-audiences';\r\nimport { AudiencesSkeleton } from '../components/skeletons';\r\nimport { withValidationWrapper } from '../utils';\r\n\r\nconst withUnvalidatedControlErrorsWrapper = _.partial(withUnvalidatedControlErrors, _, { filter: entityIs(ERROR_ENTITY.AudienceTargeting) });\r\n\r\nconst ServerValidatedTargetingAudiences = _.compose(\r\n  withControlErrorHandling,\r\n  withUnvalidatedControlErrorsWrapper,\r\n  withValidationWrapper\r\n)(TargetingAudiences);\r\n\r\nexport const CollapsibleAudiences = ({ isLoading, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('LinkedIn audience'))}\r\n        contentBefore={<LinkedInLogo24 />}\r\n      />\r\n      <FormCardBody>\r\n        {!isLoading ? (\r\n          <ServerValidatedTargetingAudiences\r\n            validationProps={{ field: 'audiences' }}\r\n          />\r\n        ) : <AudiencesSkeleton />}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nCollapsibleAudiences.propTypes = {\r\n  isLoading: PropTypes.bool.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Target } from '@bingads-webui-react/dimensions-target';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { Genders } from '../consts';\r\n\r\nconst sortGenders = genders => _.sortBy(genders, gender => Genders[gender]);\r\n\r\nexport const formatGender = (gender, i18n) => (Genders[gender] ? i18n.getString(Genders[gender]) : gender);\r\n\r\nexport const formatGenders = (genders, i18n) => {\r\n  const gendersListString = _.size(genders) === _.size(Genders)\r\n    ? i18n.getString(_TL_('All genders'))\r\n    : _.chain(sortGenders(genders))\r\n      .map(gender => formatGender(gender, i18n))\r\n      .join(i18n.getString(_TL_(', ')))\r\n      .value();\r\n\r\n  return i18n.getString(_TL_('Targeting: {{targets}}'), { targets: gendersListString });\r\n};\r\n\r\nexport const TargetingGender = ({ genders }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <div className=\"gender-targeting\">\r\n      <Target\r\n        i18n={i18n}\r\n        ariaLabel={i18n.getString(_TL_('Gender groups'))}\r\n        description={i18n.getString(_TL_('Show your ads to people in these gender groups (select all that apply)'))}\r\n        formatter={formatGender}\r\n        availableDimensions={Genders}\r\n        dimensions={genders}\r\n        validationProps={{ field: 'genders' }}\r\n        hideDeselectAll\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nTargetingGender.propTypes = {\r\n  genders: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Person24Regular } from '@fluentui/react-icons';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody, FormCardSummary } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport { AudiencesSkeleton } from '../components/skeletons';\r\nimport { formatGenders, TargetingGender } from '../components/targeting-gender';\r\n\r\nexport const CollapsibleGender = ({ genders, isLoading, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Gender'))}\r\n        // TODO: Gender help topic is pending\r\n        // helpTopic=\"pop_BA_Settings_LocationTargeting\"\r\n        contentBefore={<Person24Regular />}\r\n      />\r\n      <FormCardBody>\r\n        {!isLoading\r\n          ? <TargetingGender genders={genders} />\r\n          : <AudiencesSkeleton />}\r\n      </FormCardBody>\r\n      <FormCardSummary>\r\n        {!isLoading\r\n          ? formatGenders(genders, i18n)\r\n          : <AudiencesSkeleton />}\r\n      </FormCardSummary>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nCollapsibleGender.propTypes = {\r\n  genders: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n  isLoading: PropTypes.bool.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Target } from '@bingads-webui-react/dimensions-target';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { AgeRanges } from '../consts';\r\n\r\nconst sortAgeRanges = ranges => _.sortBy(ranges, range => AgeRanges[range]);\r\n\r\nexport const formatAgeRange = (ageRange, i18n) => (AgeRanges[ageRange] ? i18n.getString(AgeRanges[ageRange]) : ageRange);\r\n\r\nexport const formatAgeRanges = (ageRanges, i18n) => {\r\n  const ageRangesListString = _.size(ageRanges) === _.size(AgeRanges)\r\n    ? i18n.getString(_TL_('All ages'))\r\n    : _.chain(sortAgeRanges(ageRanges))\r\n      .map(ageRange => formatAgeRange(ageRange, i18n))\r\n      .join(i18n.getString(_TL_(', ')))\r\n      .value();\r\n\r\n  return i18n.getString(_TL_('Targeting: {{targets}}'), { targets: ageRangesListString });\r\n};\r\n\r\nexport const TargetingAge = ({ ageRanges }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <div className=\"age-targeting\">\r\n      <Target\r\n        i18n={i18n}\r\n        ariaLabel={i18n.getString(_TL_('Age range groups'))}\r\n        description={i18n.getString(_TL_('Show your ads to people in these age groups (select all that apply)'))}\r\n        formatter={formatAgeRange}\r\n        availableDimensions={AgeRanges}\r\n        dimensions={ageRanges}\r\n        validationProps={{ field: 'ageRanges' }}\r\n        hideDeselectAll\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nTargetingAge.propTypes = {\r\n  ageRanges: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FoodCake24Regular } from '@fluentui/react-icons';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody, FormCardSummary } from '@bingads-webui-fluent-component/form-cards';\r\n\r\nimport { formatAgeRanges, TargetingAge } from '../components/targeting-age';\r\nimport { AudiencesSkeleton } from '../components/skeletons';\r\n\r\nexport const CollapsibleAge = ({ ageRanges, isLoading, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Age'))}\r\n        // TODO: Age help topic is pending\r\n        // helpTopic=\"pop_BA_Settings_LocationTargeting\"\r\n        contentBefore={<FoodCake24Regular />}\r\n      />\r\n      <FormCardBody>\r\n        {!isLoading\r\n          ? <TargetingAge ageRanges={ageRanges} />\r\n          : <AudiencesSkeleton />}\r\n      </FormCardBody>\r\n      <FormCardSummary>\r\n        {!isLoading\r\n          ? formatAgeRanges(ageRanges, i18n)\r\n          : <AudiencesSkeleton />}\r\n      </FormCardSummary>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nCollapsibleAge.propTypes = {\r\n  ageRanges: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n  isLoading: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Link } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody, MessageBarTitle } from '@fluentui/react-message-bar';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nexport const NoCompatibleGoalsWarningMessage = ({ isEditMode, onNavigateToConversionGoalsClicked }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const template = isEditMode\r\n    ? i18n.getString(_TL_('To add a conversion goal to this campaign, go to your conversion goals and create a new one that’s compatible with LinkedIn. {{link}}Go to your conversion goals{{/link}}'))\r\n    : i18n.getString(_TL_('To add a conversion goal to this campaign, go to your conversion goals and create a new one that’s compatible with LinkedIn. Once your campaign is created, you can  go to your campaign settings and select the appropriate conversion goal below {{bold}}Conversions{{/bold}}. {{link}}Go to your conversion goals{{/link}}'));\r\n\r\n  const noGoalsAvailableWarningMessage = useMemo(() => (\r\n    <ReactTemplate\r\n      template={template}\r\n      model={{\r\n        bold: text => <b>{text}</b>,\r\n        link: text => (\r\n          // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n          <Link as=\"a\" onClick={onNavigateToConversionGoalsClicked}>\r\n            {text}\r\n          </Link>\r\n        ),\r\n      }}\r\n    />\r\n  ), [template, onNavigateToConversionGoalsClicked]);\r\n\r\n  return (\r\n    <MessageBar intent=\"info\">\r\n      <MessageBarBody>\r\n        <MessageBarTitle>{i18n.getString(_TL_('You haven’t yet created any conversion goals that are compatible with LinkedIn.'))}</MessageBarTitle>\r\n        {noGoalsAvailableWarningMessage}\r\n      </MessageBarBody>\r\n    </MessageBar>\r\n  );\r\n};\r\n\r\nNoCompatibleGoalsWarningMessage.propTypes = {\r\n  isEditMode: PropTypes.bool,\r\n  onNavigateToConversionGoalsClicked: PropTypes.func.isRequired,\r\n};\r\n\r\nNoCompatibleGoalsWarningMessage.defaultProps = {\r\n  isEditMode: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { ArrowSwap24Regular } from '@fluentui/react-icons';\r\n\r\nimport { ConversionSkeleton } from '../components/skeletons';\r\nimport { ConversionGoals } from '../components/conversion-goals';\r\nimport { NoCompatibleGoalsWarningMessage } from '../components/warning-message';\r\nimport { withValidationWrapper } from '../utils';\r\n\r\nconst ServerValidatedConversionGoals = _.compose(\r\n  withControlErrorHandling,\r\n  withValidationWrapper\r\n)(ConversionGoals);\r\n\r\nexport const CollapsibleConversionGoals = ({\r\n  isEditMode,\r\n  isLoading,\r\n  hasLinkedInCompatibleGoals,\r\n  onNavigateToConversionGoalsClicked,\r\n  ...cardProps\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Conversions'))}\r\n        contentBefore={<ArrowSwap24Regular />}\r\n        helpLabel={i18n.getString(_TL_('Click to learn more about conversions'))}\r\n        helpTopic=\"pop_BA_LinkedIn_Conversions\"\r\n      />\r\n      <FormCardBody>\r\n        {!isLoading && hasLinkedInCompatibleGoals && (\r\n          <ServerValidatedConversionGoals\r\n            validationProps={{ field: 'conversionGoals' }}\r\n          />\r\n        )}\r\n        {!isLoading && !hasLinkedInCompatibleGoals && (\r\n          <NoCompatibleGoalsWarningMessage\r\n            isEditMode={isEditMode}\r\n            onNavigateToConversionGoalsClicked={onNavigateToConversionGoalsClicked}\r\n          />\r\n        )}\r\n        {isLoading && <ConversionSkeleton />}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nCollapsibleConversionGoals.propTypes = {\r\n  isEditMode: PropTypes.bool,\r\n  isLoading: PropTypes.bool.isRequired,\r\n  hasLinkedInCompatibleGoals: PropTypes.bool.isRequired,\r\n  onNavigateToConversionGoalsClicked: PropTypes.func.isRequired,\r\n};\r\n\r\nCollapsibleConversionGoals.defaultProps = {\r\n  isEditMode: false,\r\n};\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { GoalSelector } from '@bingads-webui-campaign-react/goal-selector-v2';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { useP$DaterangeDefault, ConversionGoalKeyToStringMapping } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nexport const ConversionGoals = ({ data, onDataChange }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const legacyI18n = useMemo(() => buildLegacyI18n(\r\n    i18n,\r\n    [ConversionGoalKeyToStringMapping]\r\n  ), [i18n]);\r\n\r\n  const mergedI18n = useMemo(() => mergeI18n(legacyI18n, i18n), [i18n, legacyI18n]);\r\n\r\n  const $dateRange = useP$DaterangeDefault();\r\n\r\n  const serverContext = useContext(ServerContext);\r\n  const aid = useMemo(() => serverContext.CurrentAccount.Id, [serverContext]);\r\n  const cid = useMemo(() => serverContext.CurrentAccount.AdvertiserCustomerID, [serverContext]);\r\n\r\n  const onRenderLabel = useCallback(() => (\r\n    <div className=\"custom-label-view\">\r\n      {i18n.getString(_TL_('Measure the actions that people  take on your website after clicking or viewing your ad on LinkedIn.'))}\r\n    </div>\r\n  ), [i18n]);\r\n\r\n  return (\r\n    <GoalSelector\r\n      className=\"goal-selector\"\r\n      i18n={mergedI18n}\r\n      selectedGoals={Array.isArray(data) ? data : []}\r\n      pageSize={60}\r\n      $dateRange={$dateRange}\r\n      cid={cid}\r\n      aid={aid}\r\n      resultsTitle={i18n.getString(_TL_('LinkedIn compatible conversion goals'))}\r\n      onChange={onDataChange}\r\n      isLinkedInCompatibleGoals\r\n      showTrackingStatusIcon\r\n      onRenderLabel={onRenderLabel}\r\n    />\r\n  );\r\n};\r\n\r\nConversionGoals.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTargetingStepStyles = makeStyles({\r\n  root: {\r\n    '& .unmapped-server-errors': {\r\n      marginTop: '16px',\r\n      marginBottom: '16px',\r\n    },\r\n  },\r\n  collapseContainer: {\r\n    maxWidth: '836px',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { Caption1Strong, mergeClasses } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { StepHeader } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { Collapse, useCollapseState, collapseExpander, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { CollapsibleLocations } from './cards/collapsible-locations';\r\nimport { CollapsibleLanguage } from './cards/collapsible-language';\r\nimport { CollapsibleAudiences } from './cards/collapsible-audiences';\r\nimport { CollapsibleGender } from './cards/collapsible-gender';\r\nimport { CollapsibleAge } from './cards/collapsible-age';\r\nimport { CollapsibleConversionGoals } from './cards/collapsible-conversion-goals';\r\nimport { useTargetingStepStyles } from './styles/targeting-step-styles';\r\n\r\nconst UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\nconst AllTargetingSections = ['locations', 'language', 'audiences', 'gender', 'age', 'conversion-goals'];\r\nconst InitiallyExpandedTargetingSections = ['locations', 'language', 'audiences', 'conversion-goals'];\r\n\r\nexport const TargetingStep = ({ data, error, onDataChange }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useTargetingStepStyles();\r\n\r\n  const { scope } = useContext(ScopeContext);\r\n  const { send } = useWizardService();\r\n\r\n  const {\r\n    ageRanges, genders, defaultLocation, hasLinkedInCompatibleGoals,\r\n  } = data || {};\r\n  const { serverErrors = [] } = error || {};\r\n\r\n  const { state } = useFormService();\r\n  const { context: { saveFailed } } = state;\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n  const isLoading = state.matches(FORM_STATES.LOADING);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(serverErrors) || saveFailed;\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const [\r\n    allSections,\r\n    expandedSections,\r\n    setExpandedSections,\r\n  ] = useCollapseState(AllTargetingSections, InitiallyExpandedTargetingSections);\r\n\r\n  const expandSections = useMemo(() =>\r\n    collapseExpander({ setActiveKeys: setExpandedSections }), [setExpandedSections]);\r\n\r\n  const onValidate = useCallback(({ data: newData, isValid }) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        ...newData,\r\n      }),\r\n      isValid,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { onExited: () => scope.save('/campaign/vnext/conversiongoals') });\r\n    send(WIZARD_EVENTS.CANCEL);\r\n  }, [send, scope]);\r\n\r\n  return (\r\n    <div className={mergeClasses('li-targeting-step', classes.root)}>\r\n      <StepHeader\r\n        title={_TL_('Targeting & conversions')}\r\n        description={_TL_('Add your campaign’s targeting and conversion goal settings.')}\r\n      />\r\n      <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n        <AttentionBeaconGroup>\r\n          <FormErrorGroup formErrorProps={{ errors: serverErrors, showAllValidationErrors }}>\r\n            <ValidationGroup validationProps={{ data, onValidate }}>\r\n              <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n              <Collapse\r\n                className={classes.collapseContainer}\r\n                allPanelItems={allSections}\r\n                activeKeys={expandedSections}\r\n                setActiveKeys={setExpandedSections}\r\n                skipItemsTypeCheck\r\n              >\r\n                <CollapsibleLocations\r\n                  key=\"locations\"\r\n                  className=\"locations-card\"\r\n                  defaultLocation={defaultLocation}\r\n                  isLoading={isLoading}\r\n                  attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'locations',\r\n                    expand: expandSections,\r\n                  }}\r\n                />\r\n                <CollapsibleLanguage\r\n                  key=\"language\"\r\n                  className=\"language-card\"\r\n                  isLoading={isLoading}\r\n                  attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'language',\r\n                    expand: expandSections,\r\n                  }}\r\n                />\r\n                <CollapsibleAudiences\r\n                  key=\"audiences\"\r\n                  className=\"audiences-card\"\r\n                  isLoading={isLoading}\r\n                  attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'audiences',\r\n                    expand: expandSections,\r\n                  }}\r\n                />\r\n                <CollapsibleGender\r\n                  key=\"gender\"\r\n                  className=\"gender-card\"\r\n                  genders={genders}\r\n                  isLoading={isLoading}\r\n                  attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'gender',\r\n                    expand: expandSections,\r\n                  }}\r\n                />\r\n                <CollapsibleAge\r\n                  key=\"age\"\r\n                  className=\"age-card\"\r\n                  ageRanges={ageRanges}\r\n                  isLoading={isLoading}\r\n                  attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'age',\r\n                    expand: expandSections,\r\n                  }}\r\n                />\r\n                <CollapsibleConversionGoals\r\n                  key=\"conversion-goals\"\r\n                  className=\"conversion-goals-card\"\r\n                  hasLinkedInCompatibleGoals={hasLinkedInCompatibleGoals}\r\n                  isLoading={isLoading}\r\n                  onNavigateToConversionGoalsClicked={navigateToConversionGoals}\r\n                  attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'conversion-goals',\r\n                    expand: expandSections,\r\n                  }}\r\n                />\r\n                <Caption1Strong>\r\n                  {i18n.getString(_TL_('I certify that I will not use LinkedIn to discriminate based on age, gender or other protected characteristics in ads relating to employment, housing, education or credit.'))}\r\n                </Caption1Strong>\r\n              </Collapse>\r\n            </ValidationGroup>\r\n          </FormErrorGroup>\r\n        </AttentionBeaconGroup>\r\n      </ActuationGroup>\r\n    </div>\r\n  );\r\n};\r\n\r\nTargetingStep.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  error: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState } from 'react';\r\n\r\nimport { LocationTarget } from '@bingads-webui-react/bing-maps';\r\nimport {\r\n  ENTITY_ACTION_TYPES,\r\n  targetOptions,\r\n  LocationTargetTypes,\r\n  getLocationsToSave,\r\n  fromLocationCriterionToBingMapTarget,\r\n  fromBingMapTargetToLocationTargetEDM\r\n} from '@bingads-webui-campaign-react/location-targeting';\r\n\r\nconst isDefaultLocationSelected = (locationTargets, defaultLocation) =>\r\n  locationTargets.length === 1 && locationTargets[0].location.Id === defaultLocation.location.Id;\r\n\r\nexport const useTargetingLocationsAdapter = ({\r\n  campaignId,\r\n}) => {\r\n  const [internalDefaultLocation, setInternalDefaultLocation] = useState(null);\r\n  const [internalLocationTargets, setInternalLocationTargets] = useState([]);\r\n\r\n  const mapToViewModel = useCallback((criterions, defaultLocation) => {\r\n    const initialTargets = fromLocationCriterionToBingMapTarget(criterions);\r\n    const defaultTarget = defaultLocation && LocationTarget.CreateIncludedLocationTarget(defaultLocation);\r\n\r\n    const initialLocationTargets = _.filter(\r\n      initialTargets,\r\n      target => target.targetingType === LocationTargetTypes.Included\r\n    );\r\n\r\n    setInternalLocationTargets(initialLocationTargets);\r\n    setInternalDefaultLocation(defaultTarget);\r\n\r\n    const selectedLocationOption = _.isEmpty(initialLocationTargets) || (defaultTarget && isDefaultLocationSelected(initialLocationTargets, defaultTarget))\r\n      ? targetOptions.quick\r\n      : targetOptions.specific;\r\n\r\n    const positiveLocationTargets = _.filter(initialLocationTargets, target => !defaultTarget || (target.location.Id !== defaultTarget.location.Id));\r\n\r\n    return {\r\n      selectedLocationOption,\r\n      positiveLocationTargets,\r\n    };\r\n  }, []);\r\n\r\n  const mapToBulkModel = useCallback(({\r\n    selectedLocationOption,\r\n    positiveLocationTargets: newLocationTargets,\r\n  }) => {\r\n    let {\r\n      locationsToAdd,\r\n      locationsToDelete,\r\n    } = getLocationsToSave(internalLocationTargets, newLocationTargets);\r\n\r\n    if (selectedLocationOption === targetOptions.quick || newLocationTargets.length === 0) {\r\n      locationsToAdd = _.every(internalLocationTargets, target => target.location.Id !== internalDefaultLocation.location.Id)\r\n        ? [internalDefaultLocation]\r\n        : [];\r\n      locationsToDelete = _.filter(internalLocationTargets, target => target.location.Id !== internalDefaultLocation.location.Id);\r\n    }\r\n\r\n    if (selectedLocationOption === targetOptions.specific && newLocationTargets.length > 0 &&\r\n      _.includes(internalLocationTargets, target => target.location.Id === internalDefaultLocation.location.Id)) {\r\n      locationsToDelete.push(internalDefaultLocation);\r\n    }\r\n\r\n    locationsToAdd = fromBingMapTargetToLocationTargetEDM(\r\n      locationsToAdd,\r\n      campaignId,\r\n      ENTITY_ACTION_TYPES.Add\r\n    );\r\n\r\n    locationsToDelete = fromBingMapTargetToLocationTargetEDM(\r\n      locationsToDelete,\r\n      campaignId,\r\n      ENTITY_ACTION_TYPES.Delete\r\n    );\r\n\r\n    locationsToDelete = _.map(\r\n      locationsToDelete,\r\n      deletedValue => _.extend(deletedValue, { Status: 'Deleted' })\r\n    );\r\n\r\n    return _.union(locationsToAdd, locationsToDelete);\r\n  }, [campaignId, internalLocationTargets, internalDefaultLocation]);\r\n\r\n  return {\r\n    mapToViewModel,\r\n    mapToBulkModel,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState } from 'react';\r\nimport { LinkedInAudienceStatus, LinkedInAudienceType, LinkedInAudienceTypeCriterion } from './consts';\r\n\r\nconst LinkedInAudienceTypeCriterionToViewModel = {\r\n  [LinkedInAudienceType.COMPANY_NAMES]: ({ Id, Criterion }) => ({\r\n    id: String(Criterion.ProfileId),\r\n    name: Criterion.CompanyName,\r\n    industry: Criterion.Industry,\r\n    size: Criterion.Size,\r\n    logo: Criterion.LogoUrl,\r\n    criterionId: Id,\r\n  }),\r\n  [LinkedInAudienceType.COMPANY_INDUSTRIES]: ({ Id, Criterion }) => ({\r\n    id: String(Criterion.ProfileId),\r\n    name: Criterion.Industry,\r\n    criterionId: Id,\r\n  }),\r\n  [LinkedInAudienceType.JOB_FUNCTIONS]: ({ Id, Criterion }) => ({\r\n    id: String(Criterion.ProfileId),\r\n    name: Criterion.JobFunction,\r\n    criterionId: Id,\r\n  }),\r\n  [LinkedInAudienceType.JOB_TITLES]: ({ Id, Criterion }) => ({\r\n    id: String(Criterion.ProfileId),\r\n    name: Criterion.JobTitle,\r\n    criterionId: Id,\r\n  }),\r\n  [LinkedInAudienceType.JOB_SENIORITIES]: ({ Id, Criterion }) => ({\r\n    id: String(Criterion.ProfileId),\r\n    name: Criterion.JobSeniority,\r\n    criterionId: Id,\r\n  }),\r\n};\r\n\r\nconst mapAudienceCriterionsToViewModel = criterions =>\r\n  _.reduce(_.values(LinkedInAudienceType), (acc, audienceType) => {\r\n    const criterionType = LinkedInAudienceTypeCriterion[audienceType];\r\n    const criterionToViewModel = LinkedInAudienceTypeCriterionToViewModel[audienceType];\r\n\r\n    const matchingCriterions = _.filter(criterions, criterion => criterion.Criterion.Type === criterionType);\r\n    const mappedCriterions = _.map(matchingCriterions, criterionToViewModel);\r\n\r\n    return { ...acc, [audienceType]: mappedCriterions };\r\n  }, {});\r\n\r\nconst mapAudienceViewModelToBulkModel = (audienceType, targets, campaignId, status) =>\r\n  targets.map(target => ({\r\n    Campaign: { Id: campaignId },\r\n    CriterionType: LinkedInAudienceTypeCriterion[audienceType],\r\n    Status: status,\r\n    Criterion: {\r\n      Type: LinkedInAudienceTypeCriterion[audienceType],\r\n      [`${LinkedInAudienceTypeCriterion[audienceType]}Criterion`]: {\r\n        Target: Number(target.id),\r\n      },\r\n    },\r\n    ...(status === LinkedInAudienceStatus.Deleted && { Id: target.criterionId }),\r\n  }));\r\n\r\nexport const useTargetingAudiencesAdapter = ({ campaignId }) => {\r\n  const [internalAudienceTargets, setInternalAudienceTargets] = useState({});\r\n\r\n  const mapToViewModel = useCallback((criterions) => {\r\n    const initialAudienceTargets = mapAudienceCriterionsToViewModel(criterions);\r\n\r\n    setInternalAudienceTargets(initialAudienceTargets);\r\n\r\n    return initialAudienceTargets;\r\n  }, []);\r\n\r\n  const mapToBulkModel = useCallback((audienceTargets) => {\r\n    const idsBefore = _.chain(internalAudienceTargets)\r\n      .map(targets => _.pluck(targets, 'id'))\r\n      .flatten()\r\n      .value();\r\n\r\n    const idsAfter = _.chain(audienceTargets)\r\n      .map(targets => _.pluck(targets, 'id'))\r\n      .flatten()\r\n      .value();\r\n\r\n    const idsToAdd = _.difference(idsAfter, idsBefore);\r\n    const idsToDelete = _.difference(idsBefore, idsAfter);\r\n\r\n    const targetsToAdd = _.chain(audienceTargets)\r\n      .mapObject(targets => _.filter(targets, target => idsToAdd.includes(target.id)))\r\n      .map((targets, audienceType) => mapAudienceViewModelToBulkModel(audienceType, targets, campaignId, LinkedInAudienceStatus.Active))\r\n      .flatten()\r\n      .value();\r\n\r\n    const targetsToDelete = _.chain(internalAudienceTargets)\r\n      .mapObject(targets => _.filter(targets, target => idsToDelete.includes(target.id)))\r\n      .map((targets, audienceType) => mapAudienceViewModelToBulkModel(audienceType, targets, campaignId, LinkedInAudienceStatus.Deleted))\r\n      .flatten()\r\n      .value();\r\n\r\n    return _.union(targetsToAdd, targetsToDelete);\r\n  }, [campaignId, internalAudienceTargets]);\r\n\r\n  return {\r\n    mapToViewModel,\r\n    mapToBulkModel,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState } from 'react';\r\nimport { AgeRanges } from './consts';\r\n\r\nconst DefaultAgeRanges = _.keys(AgeRanges);\r\n\r\nconst mapAgeCriterionsToViewModel = criterions =>\r\n  _.map(criterions, ({ Criterion }) => Criterion.AgeRange);\r\n\r\nconst mapAgeRangeToBulkModel = (ageRange, campaignId, status, id) => ({\r\n  Campaign: { Id: campaignId },\r\n  Status: status,\r\n  CriterionType: 'Age',\r\n  Criterion: {\r\n    Type: 'Age',\r\n    AgeCriterion: {\r\n      Target: ageRange,\r\n    },\r\n  },\r\n  ...(status === 'Deleted' && { Id: id }),\r\n});\r\n\r\nexport const useTargetingAgeAdapter = ({\r\n  campaignId,\r\n}) => {\r\n  const [initialCriterions, setInitialCriterions] = useState();\r\n\r\n  const mapToViewModel = useCallback((criterions) => {\r\n    setInitialCriterions(criterions);\r\n\r\n    const initialTargets = mapAgeCriterionsToViewModel(criterions);\r\n    return !_.isEmpty(initialTargets) ? initialTargets : DefaultAgeRanges;\r\n  }, []);\r\n\r\n  const mapToBulkModel = useCallback((newAgeRanges) => {\r\n    const rangesBefore = mapAgeCriterionsToViewModel(initialCriterions);\r\n    const rangesAfter = newAgeRanges;\r\n\r\n    const rangesToAdd = _.difference(rangesAfter, rangesBefore);\r\n    const rangesToDelete = _.difference(rangesBefore, rangesAfter);\r\n\r\n    const targetsToAdd = _.chain(newAgeRanges)\r\n      .filter(range => rangesToAdd.includes(range))\r\n      .map(range => mapAgeRangeToBulkModel(range, campaignId, 'Active'))\r\n      .value();\r\n\r\n    const targetsToDelete = _.chain(initialCriterions)\r\n      .filter(criterion => rangesToDelete.includes(criterion.Criterion.AgeRange))\r\n      .map(criterion => mapAgeRangeToBulkModel(criterion.Criterion.AgeRange, campaignId, 'Deleted', criterion.Id))\r\n      .value();\r\n\r\n    return _.union(targetsToAdd, targetsToDelete);\r\n  }, [campaignId, initialCriterions]);\r\n\r\n  return {\r\n    mapToViewModel,\r\n    mapToBulkModel,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState } from 'react';\r\nimport { Genders } from './consts';\r\n\r\nconst DefaultGenders = _.keys(Genders);\r\n\r\nconst mapGenderCriterionsToViewModel = criterions =>\r\n  _.map(criterions, ({ Criterion }) => Criterion.GenderType);\r\n\r\nconst mapGenderToBulkModel = (gender, campaignId, status, id) => ({\r\n  Campaign: { Id: campaignId },\r\n  Status: status,\r\n  CriterionType: 'Gender',\r\n  Criterion: {\r\n    Type: 'Gender',\r\n    GenderCriterion: {\r\n      Target: gender,\r\n    },\r\n  },\r\n  ...(status === 'Deleted' && { Id: id }),\r\n});\r\n\r\nexport const useTargetingGenderAdapter = ({\r\n  campaignId,\r\n}) => {\r\n  const [initialCriterions, setInitialCriterions] = useState([]);\r\n\r\n  const mapToViewModel = useCallback((criterions) => {\r\n    setInitialCriterions(criterions);\r\n\r\n    const initialTargets = mapGenderCriterionsToViewModel(criterions);\r\n    return !_.isEmpty(initialTargets) ? initialTargets : DefaultGenders;\r\n  }, []);\r\n\r\n  const mapToBulkModel = useCallback((newGenders) => {\r\n    const gendersBefore = mapGenderCriterionsToViewModel(initialCriterions);\r\n    const gendersAfter = newGenders;\r\n\r\n    const gendersToAdd = _.difference(gendersAfter, gendersBefore);\r\n    const gendersToDelete = _.difference(gendersBefore, gendersAfter);\r\n\r\n    const targetsToAdd = _.chain(newGenders)\r\n      .filter(gender => gendersToAdd.includes(gender))\r\n      .map(gender => mapGenderToBulkModel(gender, campaignId, 'Active'))\r\n      .value();\r\n\r\n    const targetsToDelete = _.chain(initialCriterions)\r\n      .filter(criterion => gendersToDelete.includes(criterion.Criterion.GenderType))\r\n      .map(criterion => mapGenderToBulkModel(criterion.Criterion.GenderType, campaignId, 'Deleted', criterion.Id))\r\n      .value();\r\n\r\n    return _.union(targetsToAdd, targetsToDelete);\r\n  }, [campaignId, initialCriterions]);\r\n\r\n  return {\r\n    mapToViewModel,\r\n    mapToBulkModel,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState } from 'react';\r\n\r\nexport const useCampaignConversionGoalsAdapter = ({\r\n  campaignId,\r\n}) => {\r\n  const [initialConversionGoals, setInitialConversionGoals] = useState([]);\r\n\r\n  const mapToViewModel = useCallback((conversionGoals) => {\r\n    const goals = _.map(conversionGoals, goal => ({\r\n      id: String(goal.Id),\r\n      name: goal.Name,\r\n      TrackingStatus: goal.TrackingStatus,\r\n      GoalCategory: goal.GoalCategory,\r\n    }));\r\n\r\n    setInitialConversionGoals(goals);\r\n\r\n    return goals;\r\n  }, [setInitialConversionGoals]);\r\n\r\n  const mapToBulkModel = useCallback((conversionGoals) => {\r\n    const goalsBefore = initialConversionGoals.map(goal => goal.id);\r\n    const goalsAfter = conversionGoals.map(goal => goal.id);\r\n\r\n    const goalsToAdd = _.difference(goalsAfter, goalsBefore);\r\n    const goalsToDelete = _.difference(goalsBefore, goalsAfter);\r\n\r\n    const targetsToAdd = _.chain(conversionGoals)\r\n      .filter(goal => goalsToAdd.includes(goal.id))\r\n      .map(goal => ({\r\n        CampaignId: campaignId,\r\n        Action: 'Add',\r\n        GoalId: Number(goal.id),\r\n        Name: goal.name,\r\n        SubType: 'Goal',\r\n      }))\r\n      .value();\r\n\r\n    const targetsToDelete = _.chain(initialConversionGoals)\r\n      .filter(goal => goalsToDelete.includes(goal.id))\r\n      .map(goal => ({\r\n        CampaignId: campaignId,\r\n        Action: 'Delete',\r\n        GoalId: Number(goal.id),\r\n        Name: goal.name,\r\n        SubType: 'Goal',\r\n      }))\r\n      .value();\r\n\r\n    return _.union(targetsToAdd, targetsToDelete);\r\n  }, [campaignId, initialConversionGoals]);\r\n\r\n  return {\r\n    mapToViewModel,\r\n    mapToBulkModel,\r\n  };\r\n};\r\n","/* eslint-disable prefer-promise-reject-errors */\r\nimport _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport { getWizardData, useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n  ERROR_ENTITY,\r\n  createOrUpdateCampaign,\r\n  readCampaign,\r\n  readCampaignCriterions,\r\n  getDefaultLocation,\r\n  genericApiError,\r\n  getBulkUploadErrorType,\r\n  mapBulkUpsertErrors,\r\n  filterCriterionsByType,\r\n  LocationCriterionTypes,\r\n  AudienceCriterionTypes,\r\n  AgeCriterionTypes,\r\n  GenderCriterionTypes,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { useFetchGoalsFactory } from '@bingads-webui-campaign-react/goal-selector-v2';\r\nimport { useP$DaterangeDefault } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nimport { useTargetingLocationsAdapter } from './use-targeting-locations-adapter';\r\nimport { useTargetingAudiencesAdapter } from './use-targeting-audiences-adapter';\r\nimport { useTargetingAgeAdapter } from './use-targeting-age-adapter';\r\nimport { useTargetingGenderAdapter } from './use-targeting-gender-adapter';\r\nimport { useCampaignConversionGoalsAdapter } from './use-campaign-conversion-goals-adapter';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n  'Campaign Location Criterion Error': ERROR_ENTITY.LocationTargeting,\r\n  'Campaign Company Name Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Industry Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Job Function Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Job Title Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Job Seniority Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n};\r\n\r\nexport const useTargetingStepRepository = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const serverContext = useContext(ServerContext);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInTargetingStep',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const { scope } = useContext(ScopeContext);\r\n  const { cid, aid } = scope.values;\r\n  const { send, state } = useWizardService();\r\n  const { campaignId, ads } = getWizardData(state);\r\n  const { CurrentUser: { LocaleID: lcid } } = serverContext || {};\r\n  const $dateRange = useP$DaterangeDefault();\r\n  const fetchLICompatibleGoals = useFetchGoalsFactory({\r\n    $dateRange,\r\n    cid,\r\n    aid,\r\n    showTrackingStatusIcon: false,\r\n    isLinkedInCompatibleGoals: true,\r\n    i18n,\r\n  });\r\n\r\n  const {\r\n    mapToViewModel: mapLocationsToViewModel,\r\n    mapToBulkModel: mapLocationsToBulkModel,\r\n  } = useTargetingLocationsAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapAudiencesToViewModel,\r\n    mapToBulkModel: mapAudiencesToBulkModel,\r\n  } = useTargetingAudiencesAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapAgeRangesToViewModel,\r\n    mapToBulkModel: mapAgeRangesToBulkModel,\r\n  } = useTargetingAgeAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapGendersToViewModel,\r\n    mapToBulkModel: mapGendersToBulkModel,\r\n  } = useTargetingGenderAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapCampaignConversionGoalToViewModel,\r\n    mapToBulkModel: mapCampaignConversionGoalToBulkModel,\r\n  } = useCampaignConversionGoalsAdapter({ campaignId });\r\n\r\n  const load = useCallback(() => {\r\n    const isMultiAdModel = ads && _.keys(ads).length > 1;\r\n    send(WIZARD_EVENTS.UPDATE_FlOW_FACTORS, {\r\n      flowFactors: {\r\n        isMultiAdModel,\r\n        isAdStepActive: false,\r\n      },\r\n    });\r\n\r\n    const loadCampaign = () => readCampaign(cid, aid, campaignId);\r\n    const loadCampaignCriterions = () => readCampaignCriterions(cid, aid, campaignId);\r\n    const loadDefaultLocation = () => getDefaultLocation(cid, aid, lcid);\r\n    const checkForCompatibleGoals = () => fetchLICompatibleGoals('', 1, 1);\r\n\r\n    const initialRequests = [\r\n      loadCampaign(),\r\n      loadCampaignCriterions(),\r\n      loadDefaultLocation(),\r\n      checkForCompatibleGoals(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests).then(([\r\n      campaign,\r\n      criterionsResponse,\r\n      defaultLocation,\r\n      checkCompatibleGoalResponse,\r\n    ]) => {\r\n      const criterions = _.get(criterionsResponse, 'value', []);\r\n\r\n      const locationCriterions = filterCriterionsByType(criterions, LocationCriterionTypes);\r\n      const audienceCriterions = filterCriterionsByType(criterions, AudienceCriterionTypes);\r\n      const ageCriterions = filterCriterionsByType(criterions, AgeCriterionTypes);\r\n      const genderCriterions = filterCriterionsByType(criterions, GenderCriterionTypes);\r\n      const hasLinkedInCompatibleGoals = checkCompatibleGoalResponse.totalCount > 0;\r\n\r\n      const data = {\r\n        language: campaign.Languages[0],\r\n        locations: mapLocationsToViewModel(locationCriterions, defaultLocation),\r\n        audiences: mapAudiencesToViewModel(audienceCriterions),\r\n        ageRanges: mapAgeRangesToViewModel(ageCriterions),\r\n        genders: mapGendersToViewModel(genderCriterions),\r\n        defaultLocation,\r\n        conversionGoals: mapCampaignConversionGoalToViewModel(campaign.CampaignConversionGoal.Goals),\r\n        hasLinkedInCompatibleGoals,\r\n      };\r\n\r\n      send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n        hasLinkedInCompatibleGoals,\r\n      });\r\n\r\n      return data;\r\n    }).catch((err) => {\r\n      logger.error(`Failed to load targeting data: ${JSON.stringify(err)}`);\r\n      Promise.reject(err);\r\n    });\r\n  }, [aid, campaignId, cid, lcid, send, ads, mapAudiencesToViewModel, mapLocationsToViewModel, mapAgeRangesToViewModel, mapGendersToViewModel, mapCampaignConversionGoalToViewModel, fetchLICompatibleGoals, logger]);\r\n\r\n  const save = useCallback(({ data }) => {\r\n    const campaign = {\r\n      Id: campaignId,\r\n      Languages: [data.language],\r\n      CampaignCriterions: _.union(\r\n        mapLocationsToBulkModel(data.locations),\r\n        mapAudiencesToBulkModel(data.audiences),\r\n        mapAgeRangesToBulkModel(data.ageRanges),\r\n        mapGendersToBulkModel(data.genders)\r\n      ),\r\n      CampaignConversionGoalAssociations: mapCampaignConversionGoalToBulkModel(data.conversionGoals),\r\n    };\r\n\r\n    if (_.isEmpty(campaign.CampaignCriterions)) {\r\n      delete campaign.CampaignCriterions;\r\n    }\r\n\r\n    return createOrUpdateCampaign(campaign)\r\n      .then(() => {\r\n        logger.trace('Campaign updated successfully');\r\n        return data;\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to save campaign: ${JSON.stringify(err)}`);\r\n\r\n        const errors = _.get(err, 'errors');\r\n        const serverErrors = errors\r\n          ? mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n)\r\n          : [genericApiError];\r\n\r\n        return Promise.reject({ error: { serverErrors } });\r\n      });\r\n  }, [campaignId, i18n, mapAudiencesToBulkModel, mapLocationsToBulkModel, mapAgeRangesToBulkModel, mapGendersToBulkModel, mapCampaignConversionGoalToBulkModel, logger]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import React from 'react';\r\n\r\nimport { Skeleton } from '@fluentui/react-components';\r\nimport { DropdownSkeletonItem, LabelSkeletonItem, RadioSkeletonItem } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nexport const BudgetSkeleton = () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem width={330} />\r\n    <DropdownSkeletonItem />\r\n  </Skeleton>\r\n);\r\n\r\nexport const BidStrategySkeleton = () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem width={270} />\r\n    <DropdownSkeletonItem />\r\n  </Skeleton>\r\n);\r\n\r\nexport const DateSettingSkeleton = () => (\r\n  <Skeleton>\r\n    <LabelSkeletonItem width={270} />\r\n    <LabelSkeletonItem width={60} />\r\n    <DropdownSkeletonItem width={130} />\r\n    <LabelSkeletonItem width={60} />\r\n    <RadioSkeletonItem width={90} />\r\n    <RadioSkeletonItem />\r\n  </Skeleton>\r\n);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Wallet24Regular } from '@fluentui/react-icons';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { andComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { ValidatedBudgetInput } from '@bingads-webui-campaign-react/budget-component-v2';\r\nimport { LinkedInBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { BudgetSkeleton } from '../components/skeletons';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignBudgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\n\r\nconst ServerValidatedBudget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedBudgetInput, { filter: campaignBudgetProp }));\r\n\r\nexport const BudgetCard = ({ data, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const serverContext = useContext(ServerContext);\r\n  const currencyCode = (serverContext && serverContext.CurrentAccount && serverContext.CurrentAccount.CurrencyCode) || 'USD';\r\n  const { budgetAmount } = data || {};\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Budget'))}\r\n        contentBefore={<Wallet24Regular />}\r\n        helpTopic=\"pop_BA_LinkedIn_Budget\"\r\n        helpLabel={i18n.getString(_TL_('Click to learn more about budget'))}\r\n      />\r\n      <FormCardBody>\r\n        {data ? (\r\n          <ServerValidatedBudget\r\n            validationProps={{ data: { budgetAmount } }}\r\n            budgetKey=\"budgetAmount\"\r\n            label={i18n.getString(_TL_('How much would you like to spend each day?'))}\r\n            minBudget={LinkedInBudgetRangePerCurrency[currencyCode].Min}\r\n            maxBudget={LinkedInBudgetRangePerCurrency[currencyCode].Max}\r\n          />\r\n        ) : (\r\n          <BudgetSkeleton />\r\n        )}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nBudgetCard.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  error: PropTypes.shape({}).isRequired,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { andComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { getLinkedInBidStrategyOptions } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { ValidatedBidStrategyDropdown, BidStrategyIcon } from '@bingads-webui-campaign-react/bid-strategy-component-v2';\r\n\r\nimport { BidStrategySkeleton } from '../components/skeletons';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignBiddingSchemeProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\n\r\nconst ServerValidatedBidStrategy = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedBidStrategyDropdown, { filter: campaignBiddingSchemeProp }));\r\n\r\nexport const BidStrategyCard = ({ data, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { campaignGoal, bidStrategy } = data || {};\r\n\r\n  const bidStrategyOptions = useMemo(() => getLinkedInBidStrategyOptions(campaignGoal), [campaignGoal]);\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Bid strategy'))}\r\n        contentBefore={<BidStrategyIcon />}\r\n        helpTopic=\"pop_BA_LinkedIn_BidStrategy\"\r\n        helpLabel={i18n.getString(_TL_('Click to learn more about bid strategy'))}\r\n      />\r\n      <FormCardBody>\r\n        {data ? (\r\n          <ServerValidatedBidStrategy\r\n            validationProps={{\r\n            data: { bidStrategy },\r\n            field: 'bidStrategy',\r\n          }}\r\n            options={bidStrategyOptions}\r\n            label={i18n.getString(_TL_('How do you want to manage your bids?'))}\r\n          />\r\n        ) : (\r\n          <BidStrategySkeleton />\r\n        )}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nBidStrategyCard.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedCollapseCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { andComp, orComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { ValidatedDateSetting } from '@bingads-webui-campaign-react/date-setting';\r\n\r\nimport { DateSettingSkeleton } from '../components/skeletons';\r\n\r\nconst entityIsAdGroup = entityIs(ERROR_ENTITY.AdGroup);\r\nconst adGroupDateSettingsProp = andComp(entityIsAdGroup, orComp(propertyIs('StartDate'), propertyIs('EndDate')));\r\n\r\nconst ServerValidatedDateSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedDateSetting, { filter: adGroupDateSettingsProp }));\r\n\r\nexport const DateSettingCard = ({ data, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const {\r\n    StartDate,\r\n    EndDate,\r\n    adGroupStatus,\r\n    campaignTimeZone,\r\n  } = data || {};\r\n\r\n  return (\r\n    <ValidatedCollapseCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Start and end dates'))}\r\n      />\r\n      <FormCardBody>\r\n        {data ? (\r\n          <ServerValidatedDateSetting\r\n            validateOnLoad\r\n            validationProps={{\r\n              data: {\r\n                StartDate,\r\n                EndDate,\r\n                TimeZone: campaignTimeZone,\r\n                status: adGroupStatus,\r\n              },\r\n            }}\r\n            label={i18n.getString(_TL_('When do you want your ads to run?'))}\r\n          />\r\n        ) : (\r\n          <DateSettingSkeleton />\r\n        )}\r\n      </FormCardBody>\r\n    </ValidatedCollapseCard>\r\n  );\r\n};\r\n\r\nDateSettingCard.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useBudgetFormStyles = makeStyles({\r\n  collapseContainer: {\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { Collapse, useCollapseState, collapseExpander, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\n\r\nimport { BudgetCard } from '../cards/budget-card';\r\nimport { BidStrategyCard } from '../cards/bid-strategy-card';\r\nimport { DateSettingCard } from '../cards/date-setting-card';\r\nimport { useBudgetFormStyles } from '../styles/budget-form-styles';\r\n\r\nconst UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\nconst AllBudgetStepSections = ['budget', 'bid-strategy', 'date-setting'];\r\n\r\nexport const BudgetForm = ({\r\n  data,\r\n  onDataChange,\r\n  error,\r\n}) => {\r\n  const classes = useBudgetFormStyles();\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    serverErrors = [],\r\n  } = error || {};\r\n\r\n  const { state } = useFormService();\r\n  const { context: { saveFailed } } = state;\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(serverErrors) || saveFailed;\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const onValidate = useCallback((result) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        ...result.data,\r\n      }),\r\n      isValid: result.isValid,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  return (\r\n    <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n      <AttentionBeaconGroup>\r\n        <FormErrorGroup formErrorProps={{ errors: serverErrors, showAllValidationErrors }}>\r\n          <ValidationGroup\r\n            validationProps={{\r\n              onValidate,\r\n            }}\r\n          >\r\n            <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n            <Collapse\r\n              className={classes.collapseContainer}\r\n              allPanelItems={allSections}\r\n              activeKeys={expandedSections}\r\n              setActiveKeys={setExpandedSections}\r\n              skipItemsTypeCheck\r\n            >\r\n              <BudgetCard\r\n                key=\"budget\"\r\n                className=\"budget-card\"\r\n                data={data}\r\n                attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                actuationProps={{\r\n                  expandKey: 'budget',\r\n                  expand: expandSections,\r\n                }}\r\n              />\r\n              <BidStrategyCard\r\n                key=\"bid-strategy\"\r\n                className=\"bid-strategy-card\"\r\n                data={data}\r\n                attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                actuationProps={{\r\n                  expandKey: 'bid-strategy',\r\n                  expand: expandSections,\r\n                }}\r\n              />\r\n              <DateSettingCard\r\n                key=\"date-setting\"\r\n                className=\"date-setting-card\"\r\n                data={data}\r\n                attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n                actuationProps={{\r\n                  expandKey: 'date-setting',\r\n                  expand: expandSections,\r\n                }}\r\n              />\r\n            </Collapse>\r\n          </ValidationGroup>\r\n        </FormErrorGroup>\r\n      </AttentionBeaconGroup>\r\n    </ActuationGroup>\r\n  );\r\n};\r\n\r\nBudgetForm.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n  error: PropTypes.shape({}).isRequired,\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useBudgetStepStyles = makeStyles({\r\n  formContainer: {\r\n    maxWidth: '836px',\r\n    '& .unmapped-server-errors': {\r\n      marginTop: '16px',\r\n      marginBottom: '16px',\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-fluent-component/wizard';\r\nimport { Campaign, AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n  readCampaign,\r\n  createOrUpdateCampaign,\r\n  readAdGroup,\r\n  ERROR_ENTITY,\r\n  mapBulkUpsertErrors,\r\n  getBulkUploadErrorType,\r\n  genericApiError,\r\n  parseDateFromAPIFormat,\r\n  formatDateToAPIFormat,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n  [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const useBudgetRepository = () => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const i18n = useContext(I18nContext);\r\n  const { cid, aid } = scope.values;\r\n  const { state } = useWizardService();\r\n  const {\r\n    campaignId,\r\n    adGroupId,\r\n  } = getWizardData(state);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInBudgetStep',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const load = useCallback(() => {\r\n    const loadCampaign = () => readCampaign(cid, aid, campaignId);\r\n    const loadAdGroup = () => readAdGroup(cid, aid, campaignId, adGroupId);\r\n\r\n    const initialRequests = [\r\n      loadCampaign(),\r\n      loadAdGroup(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests).then(([\r\n      campaign,\r\n      adGroup,\r\n    ]) => {\r\n      const {\r\n        Budget, BiddingScheme, CampaignSettings = [], TimeZone,\r\n      } = campaign;\r\n      const { Amount } = Budget;\r\n      const { Type: bidStrategy } = BiddingScheme;\r\n      const { StartDate, EndDate, Status } = adGroup;\r\n\r\n      return {\r\n        campaignGoal: CampaignSettings[0].Goal,\r\n        budgetAmount: String(Amount),\r\n        bidStrategy,\r\n        StartDate: parseDateFromAPIFormat(i18n, StartDate),\r\n        EndDate: parseDateFromAPIFormat(i18n, EndDate),\r\n        adGroupStatus: Status,\r\n        campaignTimeZone: TimeZone,\r\n      };\r\n    }).catch((error) => {\r\n      logger.trace(`Failed to load budget data: ${JSON.stringify(error)}`);\r\n      throw error;\r\n    });\r\n  }, [adGroupId, aid, campaignId, cid, i18n, logger]);\r\n\r\n  const save = useCallback(({ data }) => {\r\n    const {\r\n      budgetAmount,\r\n      bidStrategy,\r\n      StartDate,\r\n      EndDate,\r\n    } = data;\r\n\r\n    const modelToSave = {\r\n      Id: campaignId,\r\n      Budget: {\r\n        Amount: budgetAmount,\r\n      },\r\n      BiddingScheme: {\r\n        Type: bidStrategy,\r\n      },\r\n      AdGroups: [{\r\n        Id: adGroupId,\r\n        StartDate: formatDateToAPIFormat(i18n, StartDate),\r\n        EndDate: EndDate ? formatDateToAPIFormat(i18n, EndDate) : '1/1/3000',\r\n        Campaign: { Id: campaignId },\r\n      }],\r\n    };\r\n    logger.trace(`Saving budget data: ${JSON.stringify(modelToSave)}`);\r\n\r\n    return createOrUpdateCampaign(modelToSave).then(() => data).catch((error) => {\r\n      logger.trace(`Failed to save budget data: ${JSON.stringify(error)}`);\r\n      const { errors } = error;\r\n      if (!_.isEmpty(errors)) {\r\n        const serverErrors\r\n          = mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n);\r\n\r\n        // eslint-disable-next-line prefer-promise-reject-errors\r\n        return Promise.reject({ error: { serverErrors } });\r\n      }\r\n      // eslint-disable-next-line prefer-promise-reject-errors\r\n      return Promise.reject({ error: { serverErrors: [genericApiError] } });\r\n    });\r\n  }, [adGroupId, campaignId, i18n, logger]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import { useMemo } from 'react';\r\n\r\nimport { buildDefaultDataProperty } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const buildSchema = options => ({\r\n  separatorStyles: {\r\n    marginBottom: 8,\r\n  },\r\n  ads: {\r\n    type: 'panel',\r\n    header: {\r\n      title: _TL_('Ads'),\r\n      as: 'h2',\r\n      actionButton: {\r\n        label: _TL_('Edit'),\r\n        iconName: 'Edit',\r\n        ariaLabel: _TL_('Edit ads'),\r\n        onClick: options.onEditAdsClick,\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      hd1: { type: 'horizontal-divider' },\r\n      companyPage: {\r\n        type: 'li-company-page',\r\n        dynamicProps: props => props.companyInfo,\r\n      },\r\n      hd2: { type: 'horizontal-divider' },\r\n      adCount: {\r\n        type: 'ad-count',\r\n        dynamicProps: props => props.adCount,\r\n      },\r\n    },\r\n  },\r\n  targeting: {\r\n    type: 'panel',\r\n    header: {\r\n      title: _TL_('Targeting'),\r\n      as: 'h2',\r\n      actionButton: {\r\n        label: _TL_('Edit'),\r\n        iconName: 'Edit',\r\n        ariaLabel: _TL_('Edit targeting'),\r\n        onClick: options.onEditTargetingClick,\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      hd1: { type: 'horizontal-divider' },\r\n      languageTargeting: buildDefaultDataProperty({\r\n        label: _TL_('Language'),\r\n        dynamicProps: props => props.languageTargeting,\r\n      }),\r\n      hd2: { type: 'horizontal-divider' },\r\n      linkedInAudienceTargeting: {\r\n        type: 'li-audience-targeting',\r\n        dynamicProps: props => props.linkedInAudienceTargeting,\r\n      },\r\n      hd3: { type: 'horizontal-divider' },\r\n      genderTargeting: {\r\n        type: 'gender-targeting',\r\n        dynamicProps: props => props.genderTargeting,\r\n      },\r\n      hd4: { type: 'horizontal-divider' },\r\n      ageRangeTargeting: {\r\n        type: 'age-range-targeting',\r\n        dynamicProps: props => props.ageRangeTargeting,\r\n      },\r\n    },\r\n  },\r\n  conversions: {\r\n    type: 'panel',\r\n    header: {\r\n      title: _TL_('Conversions'),\r\n      as: 'h2',\r\n      actionButton: {\r\n        label: _TL_('Edit'),\r\n        iconName: 'Edit',\r\n        ariaLabel: _TL_('Edit Conversions'),\r\n        onClick: options.onEditConversionsClick,\r\n      },\r\n    },\r\n    components: {\r\n      separatorStyles: {\r\n        marginBottom: 8,\r\n      },\r\n      selectedGoals: {\r\n        type: 'goal-count',\r\n        dynamicProps: props => props.goalCount,\r\n      },\r\n      hd1: { type: 'horizontal-divider' },\r\n      goalDetails: {\r\n        type: 'goal-details',\r\n        dynamicProps: props => props.conversionGoals,\r\n      },\r\n    },\r\n  },\r\n  budget: {\r\n    type: 'panel',\r\n    header: {\r\n      title: _TL_('Budget'),\r\n      as: 'h2',\r\n      actionButton: {\r\n        label: _TL_('Edit'),\r\n        iconName: 'Edit',\r\n        ariaLabel: _TL_('Edit budget'),\r\n        onClick: options.onEditBudgetClick,\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      hd1: { type: 'horizontal-divider' },\r\n      bidStrategy: {\r\n        type: 'bid-strategy',\r\n        dynamicProps: props => props.bidStrategy,\r\n      },\r\n      hd2: { type: 'horizontal-divider' },\r\n      adScheduleAdGroup: {\r\n        type: 'ad-schedule',\r\n        dynamicProps: props => props.adScheduleAdGroup,\r\n      },\r\n    },\r\n  },\r\n});\r\n\r\nexport const useSummarySchema = options => useMemo(() => buildSchema(options), [options]);\r\n","import _ from 'underscore';\r\nimport { useContext, useMemo } from 'react';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { areaTargetNameTypeComboGenerator } from '@bingads-webui-campaign-react/location-targeting';\r\nimport { campaignLanguageStrings } from '@bingads-webui-campaign-react/language-target';\r\nimport { parseDateFromAPIFormat } from '@bingads-webui-campaign-react/linkedin-data';\r\n\r\nconst formatLanguage = (i18n, language) => (language\r\n  ? i18n.getString(campaignLanguageStrings[language])\r\n  : i18n.getString('No language targeted'));\r\n\r\nconst formatLocations = (i18n, locationTargets) =>\r\n  _.chain(locationTargets)\r\n    .get('positiveLocationTargets', [])\r\n    .map(loc => areaTargetNameTypeComboGenerator(i18n, {\r\n      name: loc.location.ExpandedName,\r\n      type: loc.location.Type,\r\n      countryCode: loc.location.CountryCode,\r\n    }))\r\n    .compact()\r\n    .value();\r\n\r\nconst formatAudiences = audienceTargets =>\r\n  _.mapObject(audienceTargets, targets => _.pluck(targets, 'name'));\r\n\r\nexport const useSummarySchemaData = ({ data }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const globalI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n\r\n  if (!data) { return {}; }\r\n\r\n  return ({\r\n    adCount: {\r\n      numAds: data.numAds,\r\n    },\r\n    adScheduleAdGroup: {\r\n      startDate: parseDateFromAPIFormat(i18n, data.adGroup.StartDate),\r\n      endDate: parseDateFromAPIFormat(i18n, data.adGroup.EndDate),\r\n    },\r\n    bidStrategy: {\r\n      data: data.campaign.BiddingScheme,\r\n    },\r\n    budget: {\r\n      data: data.campaign.Budget,\r\n      currencyCode: data.currencyCode,\r\n    },\r\n    campaignName: {\r\n      data: data.campaign.Name,\r\n    },\r\n    companyInfo: data.companyInfo,\r\n    languageTargeting: {\r\n      data: formatLanguage(i18n, data.campaign.Languages[0]),\r\n    },\r\n    linkedInAudienceTargeting: formatAudiences(data.audienceTargets),\r\n    locationTargeting: {\r\n      locations: formatLocations(globalI18n, data.locationTargets),\r\n    },\r\n    genderTargeting: {\r\n      genders: data.genderTargets,\r\n    },\r\n    ageRangeTargeting: {\r\n      ageRanges: data.ageTargets,\r\n    },\r\n    goalCount: {\r\n      numGoals: data.numGoals,\r\n    },\r\n    conversionGoals: data.conversionGoals,\r\n  });\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text, makeStyles, shorthands, tokens, typographyStyles } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PropertyRow } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nconst useStyles = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    ...shorthands.gap(tokens.spacingVerticalL),\r\n  },\r\n  targetName: {\r\n    ...typographyStyles.body1Strong,\r\n  },\r\n  targetList: {\r\n    ...typographyStyles.body1,\r\n    textOverflow: 'ellipsis',\r\n    whiteSpace: 'nowrap',\r\n    ...shorthands.overflow('hidden'),\r\n  },\r\n});\r\n\r\nconst SingleTargeting = ({ category, targets = [] }) => {\r\n  const classes = useStyles();\r\n  const formattedTargets = useMemo(() => targets.join(', '), [targets]);\r\n\r\n  if (targets.length === 0) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <Text className={classes.targetName} block>\r\n        {category}\r\n      </Text>\r\n      <Text className={classes.targetList} block title={formattedTargets}>\r\n        {formattedTargets}\r\n      </Text>\r\n    </div>\r\n  );\r\n};\r\n\r\nSingleTargeting.propTypes = {\r\n  category: PropTypes.string.isRequired,\r\n  targets: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nexport const AudienceTargeting = ({\r\n  companyNames,\r\n  companyIndustries,\r\n  jobSeniorities,\r\n  jobTitles,\r\n  jobFunctions,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <PropertyRow propertyLabel={{ label: _TL_('Audience') }}>\r\n      <div className={classes.root}>\r\n        <SingleTargeting\r\n          category={i18n.getString(_TL_('Company'))}\r\n          targets={companyNames}\r\n        />\r\n        <SingleTargeting\r\n          category={i18n.getString(_TL_('Industry'))}\r\n          targets={companyIndustries}\r\n        />\r\n        <SingleTargeting\r\n          category={i18n.getString(_TL_('Job seniority'))}\r\n          targets={jobSeniorities}\r\n        />\r\n        <SingleTargeting\r\n          category={i18n.getString(_TL_('Job function'))}\r\n          targets={jobFunctions}\r\n        />\r\n        <SingleTargeting\r\n          category={i18n.getString(_TL_('Job title'))}\r\n          targets={jobTitles}\r\n        />\r\n      </div>\r\n    </PropertyRow>\r\n  );\r\n};\r\n\r\nAudienceTargeting.propTypes = {\r\n  companyNames: PropTypes.arrayOf(PropTypes.string),\r\n  companyIndustries: PropTypes.arrayOf(PropTypes.string),\r\n  jobSeniorities: PropTypes.arrayOf(PropTypes.string),\r\n  jobTitles: PropTypes.arrayOf(PropTypes.string),\r\n  jobFunctions: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nAudienceTargeting.defaultProps = {\r\n  companyNames: [],\r\n  companyIndustries: [],\r\n  jobSeniorities: [],\r\n  jobTitles: [],\r\n  jobFunctions: [],\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Body1, Caption1 } from '@fluentui/react-components';\r\n\r\nimport { PropertyRow } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const CompanyPage = ({ Name, IndustryType, Location }) => {\r\n  const caption = _.chain([IndustryType, Location]).compact().value().join(' · ');\r\n\r\n  return (\r\n    <PropertyRow propertyLabel={{ label: _TL_('Company') }}>\r\n      <div>\r\n        <Body1 block>{Name}</Body1>\r\n        <Caption1 block>{caption}</Caption1>\r\n      </div>\r\n    </PropertyRow>\r\n  );\r\n};\r\n\r\nCompanyPage.propTypes = {\r\n  Name: PropTypes.string.isRequired,\r\n  IndustryType: PropTypes.string.isRequired,\r\n  Location: PropTypes.string.isRequired,\r\n};\r\n\r\n","import React, { useContext } from 'react';\r\nimport { Caption1, makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst useAdsReviewInfoBannerStyles = makeStyles({\r\n  root: {\r\n    width: '930px',\r\n    marginTop: tokens.spacingVerticalM,\r\n  },\r\n});\r\n\r\nexport const AdsReviewInfoBanner = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useAdsReviewInfoBannerStyles();\r\n\r\n  return (\r\n    <MessageBar className={mergeClasses('ads-review-info-banner', classes.root)}>\r\n      <MessageBarBody>\r\n        <Caption1>\r\n          {i18n.getString(_TL_('Reviewing your ad could take us one business day. Once reviewed, your ad will run.'))}\r\n          {' '}\r\n          {/* <Link\r\n            href=\"#TODO\"\r\n            target=\"_blank\"\r\n            rel=\"noopener noreferrer\"\r\n            inline\r\n          >\r\n            {i18n.getString(_TL_('Learn more'))}\r\n          </Link> */}\r\n        </Caption1>\r\n      </MessageBarBody>\r\n    </MessageBar>\r\n  );\r\n};\r\n","import React, { useMemo, useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Body1, Link } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody, MessageBarTitle } from '@fluentui/react-message-bar';\r\n\r\nimport { PropertyRow } from '@bingads-webui-campaign-react/ui-generator';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\n\r\nexport const GoalDetails = ({ goals = [], hasLinkedInCompatibleGoals }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const { scope } = useContext(ScopeContext);\r\n  const { send } = useWizardService();\r\n\r\n  const formattedGoals = useMemo(() => goals.map(goal => goal.name).join(', '), [goals]);\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { onExited: () => scope.save('/campaign/vnext/conversiongoals') });\r\n    send(WIZARD_EVENTS.CANCEL);\r\n  }, [send, scope]);\r\n\r\n  const noGoalsSelectedWarningMessage = useMemo(() => {\r\n    const template = i18n.getString(_TL_('Select {{bold}}Edit{{/bold}} to associate a conversion goal with this campaign.'));\r\n\r\n    return (\r\n      <ReactTemplate\r\n        template={template}\r\n        model={{ bold: text => <b>{text}</b> }}\r\n      />\r\n    );\r\n  }, [i18n]);\r\n\r\n  const noGoalsAvailableWarningMessage = useMemo(() => {\r\n    const template = i18n.getString(_TL_('To add a conversion goal to this campaign, go to your conversion goals and create a new goal that’s compatible with LinkedIn. Once your campaign is created, you can go to your campaign settings and select the appropriate conversion goal below {{bold}}Conversions{{/bold}}. {{link}}Go to your conversion goals{{/link}}'));\r\n\r\n    return (\r\n      <ReactTemplate\r\n        template={template}\r\n        model={{\r\n          bold: text => <b>{text}</b>,\r\n          link: text => (\r\n            // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n            <Link as=\"a\" onClick={navigateToConversionGoals}>\r\n              {text}\r\n            </Link>\r\n          ),\r\n        }}\r\n      />\r\n    );\r\n  }, [i18n, navigateToConversionGoals]);\r\n\r\n  const warningMessage = hasLinkedInCompatibleGoals\r\n    ? noGoalsSelectedWarningMessage\r\n    : noGoalsAvailableWarningMessage;\r\n\r\n  return (\r\n    <div>\r\n      {goals.length > 0 && (\r\n      <PropertyRow propertyLabel={{ label: _TL_('Goal name') }}>\r\n        <Body1 block>{formattedGoals}</Body1>\r\n      </PropertyRow>\r\n      )}\r\n      {\r\n        goals.length === 0 && (\r\n          <MessageBar intent=\"warning\">\r\n            <MessageBarBody>\r\n              <MessageBarTitle>{i18n.getString(_TL_('No conversion goals selected.'))}</MessageBarTitle>\r\n              {warningMessage}\r\n            </MessageBarBody>\r\n          </MessageBar>\r\n        )\r\n      }\r\n    </div>\r\n\r\n  );\r\n};\r\n\r\nGoalDetails.defaultProps = {\r\n  goals: [],\r\n  hasLinkedInCompatibleGoals: false,\r\n};\r\n\r\nGoalDetails.propTypes = {\r\n  // eslint-disable-next-line\r\n  goals: PropTypes.arrayOf(PropTypes.object),\r\n  hasLinkedInCompatibleGoals: PropTypes.bool,\r\n};\r\n\r\n","export const getSummaryStepStyle = () => ({\r\n  root: {\r\n    '& .unmapped-server-errors': {\r\n      marginTop: '16px',\r\n      marginBottom: '16px',\r\n    },\r\n  },\r\n  heading: {\r\n    '& .panel-header': {\r\n      '& .title': {\r\n        margin: '0px',\r\n      },\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { WIZARD_EVENTS, useWizardService } from '@bingads-webui-fluent-component/wizard';\r\nimport { FORM_STATES, useFormService } from '@bingads-webui-fluent-component/form';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { StepHeader } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\nimport { GeneratedUI } from '@bingads-webui-campaign-react/ui-generator';\r\nimport { summaryPageComponentTypes as sharedComponentTypes } from '@bingads-webui-campaign-react/summary-page';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nimport { useSummarySchema } from './use-summary-schema';\r\nimport { useSummarySchemaData } from './use-summary-schema-data';\r\nimport { CompanyPage, AudienceTargeting, AdCount, AdsReviewInfoBanner, GoalCount, GoalDetails } from './components';\r\nimport { getSummaryStepStyle } from './styles/summary-step-styles';\r\n\r\nconst UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\nconst CustomComponentTypes = {\r\n  ...sharedComponentTypes,\r\n  'ad-count': AdCount,\r\n  'li-company-page': CompanyPage,\r\n  'li-audience-targeting': AudienceTargeting,\r\n  'goal-count': GoalCount,\r\n  'goal-details': GoalDetails,\r\n};\r\n\r\nexport const SummaryStep = ({ data, error }) => {\r\n  const { serverErrors = [] } = error || {};\r\n\r\n  const { send } = useWizardService();\r\n  const { state } = useFormService();\r\n  const { context: { saveFailed } } = state;\r\n\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(serverErrors) || saveFailed;\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const isMultiAdModel = data && data.isMultiAdModel;\r\n\r\n  const navigateToStep = useCallback(stepId => send(WIZARD_EVENTS.NAVIGATE_TO, { stepId }), [send]);\r\n\r\n  const options = useMemo(() => ({\r\n    onEditAdsClick: () => navigateToStep(isMultiAdModel ? LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER : LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD),\r\n    onEditTargetingClick: () => navigateToStep(LINKEDIN_WIZARD_STEP_PATHS.TARGETING),\r\n    onEditBudgetClick: () => navigateToStep(LINKEDIN_WIZARD_STEP_PATHS.BUDGET),\r\n    onEditConversionsClick: () => navigateToStep(LINKEDIN_WIZARD_STEP_PATHS.TARGETING),\r\n  }), [navigateToStep, isMultiAdModel]);\r\n\r\n  const schema = useSummarySchema(options);\r\n  const schemaData = useSummarySchemaData({ data });\r\n  const classes = useDefaultStyles(getSummaryStepStyle);\r\n\r\n  const isLoading = useMemo(() => !data, [data]);\r\n\r\n  return (\r\n    <div className={classNames('linkedin-summary-step', classes.root, classes.heading)}>\r\n      <StepHeader\r\n        title={_TL_('Summary')}\r\n        description={_TL_('Review your campaign details.')}\r\n      />\r\n      {!isLoading && (\r\n        <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n          <AttentionBeaconGroup>\r\n            <FormErrorGroup formErrorProps={{ errors: serverErrors, showAllValidationErrors }}>\r\n              <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n              <GeneratedUI customComponentTypes={CustomComponentTypes} schema={schema} {...schemaData} />\r\n              <AdsReviewInfoBanner />\r\n            </FormErrorGroup>\r\n          </AttentionBeaconGroup>\r\n        </ActuationGroup>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nSummaryStep.propTypes = {\r\n  error: PropTypes.shape({}).isRequired,\r\n  data: PropTypes.shape({\r\n    isMultiAdModel: PropTypes.bool.isRequired,\r\n  }).isRequired,\r\n};\r\n","\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Body1 } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PropertyRow } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const AdCount = ({ numAds }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <PropertyRow propertyLabel={{ label: _TL_('Number of Ads') }}>\r\n      <Body1 block>{`${numAds} ${i18n.getString(numAds === 1 ? _TL_('Ad') : _TL_('Ads'))}`}</Body1>\r\n    </PropertyRow>\r\n  );\r\n};\r\n\r\nAdCount.propTypes = {\r\n  numAds: PropTypes.number.isRequired,\r\n};\r\n\r\n","\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Body1 } from '@fluentui/react-components';\r\n\r\nimport { PropertyRow } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const GoalCount = ({ numGoals }) =>\r\n  (\r\n    <PropertyRow propertyLabel={{ label: _TL_('Selected goals') }}>\r\n      <Body1 block>{numGoals}</Body1>\r\n    </PropertyRow>\r\n  );\r\nGoalCount.propTypes = {\r\n  numGoals: PropTypes.number.isRequired,\r\n};\r\n\r\n","import { useCallback, useContext } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, getWizardData, getFlowFactors } from '@bingads-webui-fluent-component/wizard';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n  readCampaign,\r\n  readAdGroup,\r\n  readCampaignCriterions,\r\n  createOrUpdateCampaign,\r\n  mapBulkUpsertErrors,\r\n  getBulkUploadErrorType,\r\n  ERROR_ENTITY,\r\n  genericApiError,\r\n  filterCriterionsByType,\r\n  LocationCriterionTypes,\r\n  AudienceCriterionTypes,\r\n  AgeCriterionTypes,\r\n  GenderCriterionTypes\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport {\r\n  useTargetingLocationsAdapter,\r\n  useTargetingAudiencesAdapter,\r\n  useTargetingAgeAdapter,\r\n  useTargetingGenderAdapter,\r\n  useCampaignConversionGoalsAdapter,\r\n} from '@bingads-webui-campaign-react/linkedin-targeting';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const useSummaryRepository = () => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { CurrentAccount: { CurrencyCode } } = useContext(ServerContext);\r\n  const { scope: { values: { cid, aid } } } = useContext(ScopeContext);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInSummaryStep',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const { state } = useWizardService();\r\n  const {\r\n    campaignId,\r\n    adGroupId,\r\n    connectedCompanyPage,\r\n    ads,\r\n    hasLinkedInCompatibleGoals,\r\n  } = getWizardData(state);\r\n  const flowFactors = getFlowFactors(state);\r\n  const isMultiAdModel = _.get(flowFactors, ['isMultiAdModel'], false);\r\n\r\n  const { mapToViewModel: mapLocationsToViewModel } = useTargetingLocationsAdapter({ campaignId });\r\n  const { mapToViewModel: mapAudiencesToViewModel } = useTargetingAudiencesAdapter({ campaignId });\r\n  const { mapToViewModel: mapAgeRangesToViewModel } = useTargetingAgeAdapter({ campaignId });\r\n  const { mapToViewModel: mapGendersToViewModel } = useTargetingGenderAdapter({ campaignId });\r\n  const { mapToViewModel: mapConversionGoalsToViewModel } = useCampaignConversionGoalsAdapter({ campaignId });\r\n\r\n  const load = useCallback(() => {\r\n    const loadCampaign = () => readCampaign(cid, aid, campaignId);\r\n    const loadAdGroup = () => readAdGroup(cid, aid, campaignId, adGroupId);\r\n    const loadCampaignCriterions = () => readCampaignCriterions(cid, aid, campaignId);\r\n\r\n    const initialRequests = [\r\n      loadCampaign(),\r\n      loadAdGroup(),\r\n      loadCampaignCriterions(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests)\r\n      .then(([\r\n        campaign,\r\n        adGroup,\r\n        criterionsResponse,\r\n      ]) => {\r\n        const criterions = _.get(criterionsResponse, 'value', []);\r\n\r\n        const locationCriterions = filterCriterionsByType(criterions, LocationCriterionTypes);\r\n        const audienceCriterions = filterCriterionsByType(criterions, AudienceCriterionTypes);\r\n        const ageCriterions = filterCriterionsByType(criterions, AgeCriterionTypes);\r\n        const genderCriterions = filterCriterionsByType(criterions, GenderCriterionTypes);\r\n        const conversionGoals = {\r\n          goals: mapConversionGoalsToViewModel(_.get(campaign, 'CampaignConversionGoal.Goals', [])),\r\n          hasLinkedInCompatibleGoals,\r\n        };\r\n\r\n        return ({\r\n          campaign,\r\n          adGroup,\r\n          companyInfo: connectedCompanyPage,\r\n          locationTargets: mapLocationsToViewModel(locationCriterions),\r\n          audienceTargets: mapAudiencesToViewModel(audienceCriterions),\r\n          ageTargets: mapAgeRangesToViewModel(ageCriterions),\r\n          genderTargets: mapGendersToViewModel(genderCriterions),\r\n          currencyCode: CurrencyCode,\r\n          numAds: _.size(ads),\r\n          isMultiAdModel,\r\n          numGoals: _.size(conversionGoals.goals),\r\n          conversionGoals,\r\n        });\r\n      })\r\n      .catch((error) => {\r\n        logger.error(`Failed to load summary data: ${JSON.stringify(error)}`);\r\n        throw error;\r\n      });\r\n  }, [cid, aid, campaignId, adGroupId, connectedCompanyPage, ads, isMultiAdModel, logger, mapLocationsToViewModel, mapAudiencesToViewModel, mapAgeRangesToViewModel, mapGendersToViewModel, CurrencyCode, mapConversionGoalsToViewModel, hasLinkedInCompatibleGoals]);\r\n\r\n  const save = useCallback(() => {\r\n    const campaign = {\r\n      Id: campaignId,\r\n      Status: 'Active',\r\n      AdGroups: [{\r\n        Id: adGroupId,\r\n        Status: 'Active',\r\n        Campaign: { Id: campaignId },\r\n      }],\r\n    };\r\n\r\n    return createOrUpdateCampaign(campaign)\r\n      .then(() => {\r\n        logger.trace('Activated successfully');\r\n        return Promise.resolve();\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to activate adgroup: ${JSON.stringify(err)}`);\r\n\r\n        const errors = _.get(err, 'errors');\r\n        const serverErrors = errors\r\n          ? mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n)\r\n          : [genericApiError];\r\n\r\n        // eslint-disable-next-line prefer-promise-reject-errors\r\n        return Promise.reject({ error: { serverErrors } });\r\n      });\r\n  }, [adGroupId, campaignId, i18n, logger]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useLinkedInAdGroupSettingsStyles = makeStyles({\r\n  cardContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    maxWidth: '836px',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import React from 'react';\r\n\r\nimport { Skeleton } from '@fluentui/react-components';\r\nimport { DropdownSkeletonItem } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nexport const AdGroupNameSkeleton = () => (\r\n  <Skeleton>\r\n    <DropdownSkeletonItem width={430} />\r\n  </Skeleton>\r\n);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedFormCard, FormCardBasicHeader } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport { FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { andComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\n\r\nimport { AdGroupNameSkeleton } from '../components/skeletons';\r\n\r\nconst entityIsAdGroup = entityIs(ERROR_ENTITY.AdGroup);\r\nconst adGroupNameProp = andComp(entityIsAdGroup, propertyIs('Name'));\r\n\r\nconst ServerValidatedTextField = withControlErrorHandling(withUnvalidatedControlErrors(RemainingCharsValidatedTextField, { filter: adGroupNameProp }));\r\n\r\nexport const AdGroupNameCard = ({ data, ...cardProps }) => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <ValidatedFormCard {...cardProps}>\r\n      <FormCardBasicHeader\r\n        title={i18n.getString(_TL_('Ad group name'))}\r\n        helpTopic=\"pop_BA_CampaignCreate_Settings_CampaignName\"\r\n      />\r\n      <FormCardBody>\r\n        {data ? (\r\n          <ServerValidatedTextField\r\n            i18n={i18n}\r\n            className=\"input-adgroup-name\"\r\n            validationProps={{ schema: AdGroup, field: 'Name' }}\r\n          />\r\n        ) : (\r\n          <AdGroupNameSkeleton />\r\n        )}\r\n      </FormCardBody>\r\n    </ValidatedFormCard>\r\n  );\r\n};\r\n\r\nAdGroupNameCard.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { Collapse, useCollapseState, collapseExpander, getPanelErrorProps as getExtraProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { DateSettingCard } from '@bingads-webui-campaign-react/linkedin-budget';\r\nimport { MemberTokenWarning } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nimport { useLinkedInAdGroupSettingsStyles } from './styles/linkedin-adgroup-settings-styles';\r\nimport { AdGroupNameCard } from './cards/adgroup-name-card';\r\n\r\nconst UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\nconst AdGroupCards = ['budget', 'date-setting'];\r\n\r\nexport const LinkedInAdGroupSettings = ({ data, error, onDataChange }) => {\r\n  const classes = useLinkedInAdGroupSettingsStyles();\r\n\r\n  const { serverErrors = [] } = error || {};\r\n\r\n  const { state } = useFormService();\r\n  const { context: { saveFailed } } = state;\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(serverErrors) || saveFailed;\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const [\r\n    allCards,\r\n    expandedCards,\r\n    setExpandedCards,\r\n  ] = useCollapseState(AdGroupCards, AdGroupCards);\r\n\r\n  const expandCard = useMemo(() =>\r\n    collapseExpander({ setActiveKeys: setExpandedCards }), [setExpandedCards]);\r\n\r\n  const onValidate = useCallback((result) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        ...result.data,\r\n      }),\r\n      isValid: result.isValid,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  if (!data) {\r\n    return null;\r\n  }\r\n\r\n  const { isMemberTokenRevoked } = data || {};\r\n\r\n  return (\r\n    <div className={mergeClasses('li-adgroup-settings-step', classes.cardContainer)}>\r\n      {isMemberTokenRevoked && <MemberTokenWarning /> }\r\n      <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n        <AttentionBeaconGroup>\r\n          <FormErrorGroup formErrorProps={{ errors: serverErrors, showAllValidationErrors }}>\r\n            <ValidationGroup validationProps={{ data, onValidate }}>\r\n              <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n              <Collapse\r\n                className={classes.cardContainer}\r\n                allPanelItems={allCards}\r\n                activeKeys={expandedCards}\r\n                setActiveKeys={setExpandedCards}\r\n                skipItemsTypeCheck\r\n              >\r\n                <AdGroupNameCard\r\n                  key=\"adgroup-name\"\r\n                  className=\"adgroup-name-card\"\r\n                  data={data}\r\n                  attentionBeaconProps={{ getExtraProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'adgroup-name',\r\n                    expand: expandCard,\r\n                  }}\r\n                />\r\n                <DateSettingCard\r\n                  key=\"date-setting\"\r\n                  className=\"date-setting-card\"\r\n                  data={data}\r\n                  attentionBeaconProps={{ getExtraProps }}\r\n                  actuationProps={{\r\n                    expandKey: 'date-setting',\r\n                    expand: expandCard,\r\n                  }}\r\n                />\r\n              </Collapse>\r\n            </ValidationGroup>\r\n          </FormErrorGroup>\r\n        </AttentionBeaconGroup>\r\n      </ActuationGroup>\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInAdGroupSettings.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  error: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","/* eslint-disable prefer-promise-reject-errors */\r\nimport _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n  readCampaign,\r\n  createOrUpdateAdGroup,\r\n  readAdGroup,\r\n  ERROR_ENTITY,\r\n  mapBulkUpsertErrors,\r\n  getBulkUploadErrorType,\r\n  genericApiError,\r\n  parseDateFromAPIFormat,\r\n  formatDateToAPIFormat,\r\n  getConnectedLinkedInCompanyPage,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const useLinkedinAdGroupSettingsRepository = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const { send } = useWizardService();\r\n  const {\r\n    scope: {\r\n      values: {\r\n        cid, aid, campaignId, adGroupId,\r\n      },\r\n    },\r\n  } = useContext(ScopeContext);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInAdGroupSettigns',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const load = useCallback(() => {\r\n    const loadCampaign = () => readCampaign(cid, aid, campaignId);\r\n    const loadAdGroup = () => readAdGroup(cid, aid, campaignId, adGroupId);\r\n    const loadCompanyPage = () => getConnectedLinkedInCompanyPage(cid, aid);\r\n\r\n    const initialRequests = [\r\n      loadCampaign(),\r\n      loadAdGroup(),\r\n      loadCompanyPage(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests)\r\n      .then(([\r\n        campaign,\r\n        adGroup,\r\n        companyInfo,\r\n      ]) => {\r\n        const { TimeZone } = campaign;\r\n        const {\r\n          Name, StartDate, EndDate, Status,\r\n        } = adGroup;\r\n        const isMemberTokenRevoked = companyInfo && companyInfo.IsMemberTokenActive === false;\r\n\r\n        send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isMemberTokenRevoked });\r\n\r\n        return {\r\n          Name,\r\n          StartDate: parseDateFromAPIFormat(i18n, StartDate),\r\n          EndDate: parseDateFromAPIFormat(i18n, EndDate),\r\n          adGroupStatus: Status,\r\n          campaignTimeZone: TimeZone,\r\n          isMemberTokenRevoked,\r\n        };\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to load ad group settings data: ${JSON.stringify(err)}`);\r\n        throw err;\r\n      });\r\n  }, [cid, aid, campaignId, adGroupId, i18n, logger, send]);\r\n\r\n  const save = useCallback(({ data }) => {\r\n    const { Name, StartDate, EndDate } = data;\r\n\r\n    const adGroup = {\r\n      Id: adGroupId,\r\n      Name,\r\n      StartDate: formatDateToAPIFormat(i18n, StartDate),\r\n      EndDate: formatDateToAPIFormat(i18n, EndDate),\r\n      Campaign: { Id: campaignId },\r\n    };\r\n\r\n    return createOrUpdateAdGroup(adGroup)\r\n      .then(() => {\r\n        logger.trace('Ad group settings data saved successfully');\r\n        return Promise.resolve({});\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to save ad group settings data: ${JSON.stringify(err)}`);\r\n\r\n        const errors = _.get(err, 'errors');\r\n        const serverErrors = errors\r\n          ? mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n)\r\n          : [genericApiError];\r\n\r\n        return Promise.reject({ error: { serverErrors } });\r\n      });\r\n  }, [adGroupId, campaignId, i18n, logger]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useLinkedInCampaignSettingsStyles = makeStyles({\r\n  cardContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    maxWidth: '836px',\r\n    ...shorthands.gap(tokens.spacingVerticalS),\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { Collapse, useCollapseState, collapseExpander, getPanelErrorProps as getExtraProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useFormService, FORM_STATES } from '@bingads-webui-fluent-component/form';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport {\r\n  CampaignPanel,\r\n  CompanyPageCard,\r\n} from '@bingads-webui-campaign-react/linkedin-ad';\r\nimport {\r\n  BidStrategyCard,\r\n  BudgetCard,\r\n} from '@bingads-webui-campaign-react/linkedin-budget';\r\nimport {\r\n  CollapsibleLocations,\r\n  CollapsibleLanguage,\r\n  CollapsibleAudiences,\r\n  CollapsibleAge,\r\n  CollapsibleGender,\r\n  CollapsibleConversionGoals,\r\n} from '@bingads-webui-campaign-react/linkedin-targeting';\r\nimport { MemberTokenWarning } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nimport { useLinkedInCampaignSettingsStyles } from './styles/linkedin-campaign-settings-styles';\r\n\r\nconst UnmappedFormServerErrors = withControlErrorHandling(UnmappedFormErrors);\r\n\r\nconst BudgetCards = ['budget', 'bid-strategy'];\r\nconst TargetingCards = ['locations', 'language', 'audiences', 'gender', 'age', 'conversion-goals'];\r\n\r\nexport const LinkedInCampaingSettings = ({ data, error, onDataChange }) => {\r\n  const classes = useLinkedInCampaignSettingsStyles();\r\n\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const {\r\n    campaign = {},\r\n    companyInfo = {},\r\n    budget = {},\r\n    ageRanges = [],\r\n    genders = [],\r\n    defaultLocation,\r\n    hasLinkedInCompatibleGoals,\r\n    isMemberTokenRevoked,\r\n  } = data || {};\r\n\r\n  const { serverErrors = [] } = error || {};\r\n\r\n  const { state } = useFormService();\r\n  const { context: { saveFailed } } = state;\r\n  const isSaving = state.matches(FORM_STATES.SAVING);\r\n  const isLoading = state.matches(FORM_STATES.LOADING);\r\n\r\n  const showAllValidationErrors = !_.isEmpty(serverErrors) || saveFailed;\r\n  const areBeaconsActive = showAllValidationErrors && !isSaving;\r\n\r\n  const [\r\n    targetingCards,\r\n    expandedTargetingCards,\r\n    setTargetingExpandedCards,\r\n  ] = useCollapseState(TargetingCards, TargetingCards);\r\n\r\n  const expandTargetingCard = useMemo(() =>\r\n    collapseExpander({ setActiveKeys: setTargetingExpandedCards }), [setTargetingExpandedCards]);\r\n\r\n  const [\r\n    budgetCards,\r\n    expandedBudgetCards,\r\n    setBudgetExpandedCards,\r\n  ] = useCollapseState(BudgetCards, BudgetCards);\r\n\r\n  const expandBudgetCard = useMemo(() =>\r\n    collapseExpander({ setActiveKeys: setBudgetExpandedCards }), [setBudgetExpandedCards]);\r\n\r\n  const onValidateBudget = useCallback((result) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        budget: {\r\n          ...prevData.budget,\r\n          ...result.data,\r\n        },\r\n      }),\r\n      isValid: result.isValid,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const onValidate = useCallback((result) => {\r\n    onDataChange({\r\n      data: prevData => ({\r\n        ...prevData,\r\n        ...result.data,\r\n      }),\r\n      isValid: result.isValid,\r\n    });\r\n  }, [onDataChange]);\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    scope.save('/campaign/vnext/conversiongoals');\r\n  }, [scope]);\r\n\r\n  const campaignSection = useMemo(() => (\r\n    <div className={classes.cardContainer}>\r\n      <CampaignPanel\r\n        campaign={campaign}\r\n        onDataChange={onDataChange}\r\n      />\r\n      <CompanyPageCard\r\n        companyInfo={companyInfo}\r\n      />\r\n    </div>\r\n  ), [campaign, classes.cardContainer, companyInfo, onDataChange]);\r\n\r\n  const budgetSection = useMemo(() => (\r\n    <ValidationGroup\r\n      validationProps={{\r\n        stopPropagation: true,\r\n        onValidate: onValidateBudget,\r\n      }}\r\n    >\r\n      <Collapse\r\n        className={classes.cardContainer}\r\n        allPanelItems={budgetCards}\r\n        activeKeys={expandedBudgetCards}\r\n        setActiveKeys={setBudgetExpandedCards}\r\n        skipItemsTypeCheck\r\n      >\r\n        <BudgetCard\r\n          key=\"budget\"\r\n          className=\"budget-card\"\r\n          data={budget}\r\n          attentionBeaconProps={{ getExtraProps }}\r\n          actuationProps={{\r\n            expandKey: 'budget',\r\n            expand: expandBudgetCard,\r\n          }}\r\n        />\r\n        <BidStrategyCard\r\n          key=\"bid-strategy\"\r\n          className=\"bid-strategy-card\"\r\n          data={budget}\r\n          attentionBeaconProps={{ getExtraProps }}\r\n          actuationProps={{\r\n            expandKey: 'bid-strategy',\r\n            expand: expandBudgetCard,\r\n          }}\r\n        />\r\n      </Collapse>\r\n    </ValidationGroup>\r\n  ), [onValidateBudget, classes.cardContainer, budgetCards, expandedBudgetCards, setBudgetExpandedCards, budget, expandBudgetCard]);\r\n\r\n  const targetingSection = useMemo(() => (\r\n    <Collapse\r\n      className={classes.cardContainer}\r\n      allPanelItems={targetingCards}\r\n      activeKeys={expandedTargetingCards}\r\n      setActiveKeys={setTargetingExpandedCards}\r\n      skipItemsTypeCheck\r\n    >\r\n      <CollapsibleLocations\r\n        key=\"locations\"\r\n        className=\"locations-card\"\r\n        defaultLocation={defaultLocation}\r\n        isLoading={isLoading}\r\n        attentionBeaconProps={{ getExtraProps }}\r\n        actuationProps={{\r\n          expandKey: 'locations',\r\n          expand: expandTargetingCard,\r\n        }}\r\n      />\r\n      <CollapsibleLanguage\r\n        key=\"language\"\r\n        className=\"language-card\"\r\n        isLoading={isLoading}\r\n        isDisabled // Currently, language isn't editable\r\n        attentionBeaconProps={{ getExtraProps }}\r\n        actuationProps={{\r\n          expandKey: 'language',\r\n          expand: expandTargetingCard,\r\n        }}\r\n      />\r\n      <CollapsibleAudiences\r\n        key=\"audiences\"\r\n        className=\"audiences-card\"\r\n        isLoading={isLoading}\r\n        attentionBeaconProps={{ getExtraProps }}\r\n        actuationProps={{\r\n          expandKey: 'audiences',\r\n          expand: expandTargetingCard,\r\n        }}\r\n      />\r\n      <CollapsibleGender\r\n        key=\"gender\"\r\n        className=\"gender-card\"\r\n        genders={genders}\r\n        isLoading={isLoading}\r\n        attentionBeaconProps={{ getExtraProps }}\r\n        actuationProps={{\r\n          expandKey: 'gender',\r\n          expand: expandTargetingCard,\r\n        }}\r\n      />\r\n      <CollapsibleAge\r\n        key=\"age\"\r\n        className=\"age-card\"\r\n        ageRanges={ageRanges}\r\n        isLoading={isLoading}\r\n        attentionBeaconProps={{ getExtraProps }}\r\n        actuationProps={{\r\n          expandKey: 'age',\r\n          expand: expandTargetingCard,\r\n        }}\r\n      />\r\n      <CollapsibleConversionGoals\r\n        key=\"conversion-goals\"\r\n        className=\"conversion-goals-card\"\r\n        isEditMode\r\n        hasLinkedInCompatibleGoals={hasLinkedInCompatibleGoals}\r\n        isLoading={isLoading}\r\n        onNavigateToConversionGoalsClicked={navigateToConversionGoals}\r\n        attentionBeaconProps={{ getExtraProps }}\r\n        actuationProps={{\r\n          expandKey: 'conversion-goals',\r\n          expand: expandTargetingCard,\r\n        }}\r\n      />\r\n    </Collapse>\r\n  ), [classes.cardContainer, targetingCards, expandedTargetingCards, setTargetingExpandedCards, defaultLocation, isLoading, expandTargetingCard, genders, ageRanges, hasLinkedInCompatibleGoals, navigateToConversionGoals]);\r\n\r\n  if (!data) { return null; }\r\n\r\n  return (\r\n    <div className={mergeClasses('li-campaign-settings-step', classes.cardContainer)}>\r\n      <ActuationGroup actuationProps={{ isActive: areBeaconsActive }}>\r\n        <AttentionBeaconGroup>\r\n          <FormErrorGroup formErrorProps={{ errors: serverErrors, showAllValidationErrors }}>\r\n            <ValidationGroup validationProps={{ data, onValidate }}>\r\n              <UnmappedFormServerErrors className=\"unmapped-server-errors\" />\r\n              {isMemberTokenRevoked && <MemberTokenWarning /> }\r\n              {campaignSection}\r\n              {budgetSection}\r\n              {targetingSection}\r\n            </ValidationGroup>\r\n          </FormErrorGroup>\r\n        </AttentionBeaconGroup>\r\n      </ActuationGroup>\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInCampaingSettings.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  error: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n};\r\n","/* eslint-disable prefer-promise-reject-errors */\r\nimport _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\nimport { Campaign, } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n  ERROR_ENTITY,\r\n  createOrUpdateCampaign,\r\n  readCampaign,\r\n  getConnectedLinkedInCompanyPage,\r\n  readCampaignCriterions,\r\n  getDefaultLocation,\r\n  genericApiError,\r\n  getBulkUploadErrorType,\r\n  mapBulkUpsertErrors,\r\n  mapCampaignToBudgetViewModel,\r\n  mapBudgetToCampaignBulkModel,\r\n  filterCriterionsByType,\r\n  LocationCriterionTypes,\r\n  AudienceCriterionTypes,\r\n  AgeCriterionTypes,\r\n  GenderCriterionTypes,\r\n} from '@bingads-webui-campaign-react/linkedin-data';\r\nimport { useFetchGoalsFactory } from '@bingads-webui-campaign-react/goal-selector-v2';\r\nimport { useP$DaterangeDefault } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n  useTargetingLocationsAdapter,\r\n  useTargetingAudiencesAdapter,\r\n  useTargetingAgeAdapter,\r\n  useTargetingGenderAdapter,\r\n  useCampaignConversionGoalsAdapter,\r\n} from '@bingads-webui-campaign-react/linkedin-targeting';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\n\r\nconst bulkUpsertEntityErrorMap = {\r\n  [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n  'Campaign Location Criterion Error': ERROR_ENTITY.LocationTargeting,\r\n  'Campaign Company Name Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Industry Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Job Function Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Job Title Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n  'Campaign Job Seniority Criterion Error': ERROR_ENTITY.AudienceTargeting,\r\n};\r\n\r\nexport const useLinkedInCampaignSettingsRepository = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const serverContext = useContext(ServerContext);\r\n\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'LinkedInCampaignSettings',\r\n    activityName: 'Repository',\r\n  });\r\n\r\n  const { send } = useWizardService();\r\n  const { scope: { values: { cid, aid, campaignId } } } = useContext(ScopeContext);\r\n  const { CurrentUser: { LocaleID: lcid } } = serverContext || {};\r\n  const $dateRange = useP$DaterangeDefault();\r\n  const fetchLICompatibleGoals = useFetchGoalsFactory({\r\n    $dateRange,\r\n    cid,\r\n    aid,\r\n    showTrackingStatusIcon: false,\r\n    isLinkedInCompatibleGoals: true,\r\n    i18n,\r\n  });\r\n\r\n  const {\r\n    mapToViewModel: mapLocationsToViewModel,\r\n    mapToBulkModel: mapLocationsToBulkModel,\r\n  } = useTargetingLocationsAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapAudiencesToViewModel,\r\n    mapToBulkModel: mapAudiencesToBulkModel,\r\n  } = useTargetingAudiencesAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapAgeRangesToViewModel,\r\n    mapToBulkModel: mapAgeRangesToBulkModel,\r\n  } = useTargetingAgeAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapGendersToViewModel,\r\n    mapToBulkModel: mapGendersToBulkModel,\r\n  } = useTargetingGenderAdapter({ campaignId });\r\n  const {\r\n    mapToViewModel: mapCampaignConversionGoalToViewModel,\r\n    mapToBulkModel: mapCampaignConversionGoalToBulkModel,\r\n  } = useCampaignConversionGoalsAdapter({ campaignId });\r\n\r\n  const load = useCallback(() => {\r\n    const loadCampaign = () => readCampaign(cid, aid, campaignId);\r\n    const loadCompanyPage = () => getConnectedLinkedInCompanyPage(cid, aid);\r\n    const loadCampaignCriterions = () => readCampaignCriterions(cid, aid, campaignId);\r\n    const loadDefaultLocation = () => getDefaultLocation(cid, aid, lcid);\r\n    const checkForCompatibleGoals = () => fetchLICompatibleGoals('', 1, 1);\r\n\r\n    const initialRequests = [\r\n      loadCampaign(),\r\n      loadCompanyPage(),\r\n      loadCampaignCriterions(),\r\n      loadDefaultLocation(),\r\n      checkForCompatibleGoals(),\r\n    ];\r\n\r\n    return Promise.all(initialRequests).then(([\r\n      campaign,\r\n      companyInfo,\r\n      criterionsResponse,\r\n      defaultLocation,\r\n      checkCompatibleGoalResponse,\r\n    ]) => {\r\n      const criterions = _.get(criterionsResponse, 'value', []);\r\n\r\n      const locationCriterions = filterCriterionsByType(criterions, LocationCriterionTypes);\r\n      const audienceCriterions = filterCriterionsByType(criterions, AudienceCriterionTypes);\r\n      const ageCriterions = filterCriterionsByType(criterions, AgeCriterionTypes);\r\n      const genderCriterions = filterCriterionsByType(criterions, GenderCriterionTypes);\r\n      const isMemberTokenRevoked = companyInfo && companyInfo.IsMemberTokenActive === false;\r\n\r\n      const data = {\r\n        campaign: { Name: campaign.Name },\r\n        companyInfo,\r\n        language: campaign.Languages[0],\r\n        budget: mapCampaignToBudgetViewModel(campaign),\r\n        locations: mapLocationsToViewModel(locationCriterions, defaultLocation),\r\n        audiences: mapAudiencesToViewModel(audienceCriterions),\r\n        ageRanges: mapAgeRangesToViewModel(ageCriterions),\r\n        genders: mapGendersToViewModel(genderCriterions),\r\n        defaultLocation,\r\n        conversionGoals: mapCampaignConversionGoalToViewModel(campaign.CampaignConversionGoal.Goals),\r\n        hasLinkedInCompatibleGoals: checkCompatibleGoalResponse.totalCount > 0,\r\n        isMemberTokenRevoked,\r\n      };\r\n\r\n      send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isMemberTokenRevoked });\r\n\r\n      return data;\r\n    }).catch((err) => {\r\n      logger.error(`Failed to load campaign settings data: ${JSON.stringify(err)}`);\r\n      Promise.reject(err);\r\n    });\r\n  }, [cid, aid, campaignId, lcid, fetchLICompatibleGoals, mapLocationsToViewModel, mapAudiencesToViewModel, mapAgeRangesToViewModel, mapGendersToViewModel, mapCampaignConversionGoalToViewModel, send, logger]);\r\n\r\n  const save = useCallback(({ data }) => {\r\n    const {\r\n      campaign,\r\n      budget,\r\n      language,\r\n      locations,\r\n      audiences,\r\n      ageRanges,\r\n      genders,\r\n    } = data;\r\n\r\n    const campaignToSave = {\r\n      Id: campaignId,\r\n      Name: campaign.Name,\r\n      Languages: [language],\r\n      CampaignCriterions: _.union(\r\n        mapLocationsToBulkModel(locations),\r\n        mapAudiencesToBulkModel(audiences),\r\n        mapAgeRangesToBulkModel(ageRanges),\r\n        mapGendersToBulkModel(genders)\r\n      ),\r\n      CampaignConversionGoalAssociations: mapCampaignConversionGoalToBulkModel(data.conversionGoals),\r\n      ...mapBudgetToCampaignBulkModel(budget),\r\n    };\r\n\r\n    if (_.isEmpty(campaignToSave.CampaignCriterions)) {\r\n      delete campaignToSave.CampaignCriterions;\r\n    }\r\n\r\n    return createOrUpdateCampaign(campaignToSave)\r\n      .then((savedData) => {\r\n        logger.trace('Campaign settings data saved successfully');\r\n        return savedData;\r\n      })\r\n      .catch((err) => {\r\n        logger.error(`Failed to save campaign settings data${JSON.stringify(err)}`);\r\n\r\n        const errors = _.get(err, 'errors');\r\n        const serverErrors = errors\r\n          ? mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, _.identity, null, i18n)\r\n          : [genericApiError];\r\n\r\n        return Promise.reject({ error: { serverErrors } });\r\n      });\r\n  }, [campaignId, i18n, logger, mapAudiencesToBulkModel, mapLocationsToBulkModel, mapAgeRangesToBulkModel, mapGendersToBulkModel, mapCampaignConversionGoalToBulkModel]);\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import React from 'react';\r\n\r\nimport { CompanyPageLinkingStep } from '@bingads-webui-campaign-react/linkedin-company-page-linking';\r\nimport { LinkedInAdStep, useLinkedInAdRepository, useAdEditorRepository } from '@bingads-webui-campaign-react/linkedin-ad';\r\nimport { LinkedInAdsManagerStep, useLinkedInAdsManagerRepository } from '@bingads-webui-campaign-react/linkedin-ads-manager';\r\nimport { TargetingStep, useTargetingStepRepository } from '@bingads-webui-campaign-react/linkedin-targeting';\r\nimport { BudgetStep, useBudgetRepository } from '@bingads-webui-campaign-react/linkedin-budget';\r\nimport { SummaryStep, useSummaryRepository } from '@bingads-webui-campaign-react/linkedin-summary';\r\nimport { LinkedInAdGroupSettings, useLinkedinAdGroupSettingsRepository } from '@bingads-webui-campaign-react/linkedin-adgroup-settings';\r\nimport { LinkedInCampaingSettings, useLinkedInCampaignSettingsRepository } from '@bingads-webui-campaign-react/linkedin-campaign-settings';\r\nimport { LINKEDIN_WIZARDS, LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nexport const LinkedInStepConfig = [\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.LI_COMPANY_PAGE_LINKING,\r\n    view: CompanyPageLinkingStep,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD,\r\n    view: LinkedInAdStep,\r\n    repository: useLinkedInAdRepository,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER,\r\n    view: LinkedInAdsManagerStep,\r\n    repository: useLinkedInAdsManagerRepository,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.TARGETING,\r\n    view: TargetingStep,\r\n    repository: useTargetingStepRepository,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.BUDGET,\r\n    view: BudgetStep,\r\n    repository: useBudgetRepository,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.SUMMARY,\r\n    view: SummaryStep,\r\n    repository: useSummaryRepository,\r\n  },\r\n];\r\n\r\nexport const LinkedInSingleStepConfigs = {\r\n  [LINKEDIN_WIZARDS.CAMPAIGN_SETTINGS]: {\r\n    view: LinkedInCampaingSettings,\r\n    repository: useLinkedInCampaignSettingsRepository,\r\n  },\r\n  [LINKEDIN_WIZARDS.AD_GROUP_SETTINGS]: {\r\n    view: LinkedInAdGroupSettings,\r\n    repository: useLinkedinAdGroupSettingsRepository,\r\n  },\r\n  [LINKEDIN_WIZARDS.AD_EDITOR]: {\r\n    view: props => <LinkedInAdStep isAdEditor {...props} />,\r\n    repository: useAdEditorRepository,\r\n  },\r\n};\r\n","import React, { useReducer, useCallback, useEffect } from 'react';\r\nimport { useWizardService, getWizardData, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { useInstrumentLogger } from '@bingads-webui-campaign-react/linkedin-instrumentation';\r\n\r\nimport { useErrorDialog, useErrorMessageBar } from './hooks';\r\nimport { AuthenticationStage, CompanyPageSelectionStage, RequestAccessStage, PermissionCheckStageV2, MemberTokenRefreshStage } from './stages';\r\nimport { getInitialState, companyPageLinkingReducer } from './reducer';\r\nimport { getCurrentLinkingStage } from './utils';\r\nimport { LINKING_STAGES } from './constants';\r\n\r\nexport const CompanyPageLinkingStep = () => {\r\n  const logger = useInstrumentLogger({\r\n    scenarioName: 'CompanyPageLinkingStep',\r\n    activityName: 'Logger',\r\n  });\r\n  const { state: wizardState, send } = useWizardService();\r\n  const {\r\n    permissionStatus, connectedCompanyPage, isMemberTokenActive, isReAuthOnly,\r\n  } = getWizardData(wizardState);\r\n  const initialState = getInitialState(permissionStatus, connectedCompanyPage, isMemberTokenActive, isReAuthOnly);\r\n  const [state, dispatch] = useReducer(companyPageLinkingReducer, initialState);\r\n\r\n  const {\r\n    isAuthenticating,\r\n    isSavingCompanyPage,\r\n    isLoadingPermissionStatus,\r\n    isResendingPermissionRequest,\r\n    isRefreshingToken,\r\n    needRefreshMemberToken,\r\n  } = state;\r\n  // Condition for trigger processing blocker\r\n  const isProcessing = isAuthenticating || isLoadingPermissionStatus || isResendingPermissionRequest || isRefreshingToken || (needRefreshMemberToken && isMemberTokenActive);\r\n\r\n  const currentLinkingStage = getCurrentLinkingStage(state);\r\n  const errorDialog = useErrorDialog({ state, dispatch });\r\n  const serverError = useErrorMessageBar({ state });\r\n\r\n  const onCancel = useCallback(() => {\r\n    logger.trace('Exit wizard from company page linking step');\r\n    send(WIZARD_EVENTS.EXIT);\r\n  }, [logger, send]);\r\n\r\n  const onContinue = useCallback(() => {\r\n    logger.trace('Finish company page linking step');\r\n    send(WIZARD_EVENTS.NEXT);\r\n    send(WIZARD_EVENTS.UPDATE_FlOW_FACTORS, {\r\n      flowFactors: { isCompanyPageReady: true },\r\n    });\r\n  }, [logger, send]);\r\n\r\n  useEffect(() => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isProcessing, isSavingCompanyPage });\r\n  }, [isProcessing, isSavingCompanyPage, send]);\r\n\r\n  return (\r\n    <div className=\"company-page-linking-step\">\r\n      {currentLinkingStage === LINKING_STAGES.MEMBER_TOKEN_REFRESH &&\r\n        <MemberTokenRefreshStage\r\n          state={state}\r\n          dispatch={dispatch}\r\n          onCancel={onCancel}\r\n          onContinue={onContinue}\r\n          serverError={serverError}\r\n          logger={logger}\r\n        />\r\n      }\r\n      {currentLinkingStage === LINKING_STAGES.LINKEDIN_AUTHENTICATION &&\r\n        <AuthenticationStage\r\n          state={state}\r\n          dispatch={dispatch}\r\n          onCancel={onCancel}\r\n          serverError={serverError}\r\n          logger={logger}\r\n        />\r\n      }\r\n      {currentLinkingStage === LINKING_STAGES.COMPANY_PAGE_SELECTION &&\r\n        <CompanyPageSelectionStage\r\n          state={state}\r\n          dispatch={dispatch}\r\n          onCancel={onCancel}\r\n          onContinue={onContinue}\r\n          serverError={serverError}\r\n          logger={logger}\r\n        />\r\n      }\r\n      {currentLinkingStage === LINKING_STAGES.REQUEST_ACCESS &&\r\n        <RequestAccessStage\r\n          state={state}\r\n          dispatch={dispatch}\r\n          onContinue={onContinue}\r\n          serverError={serverError}\r\n          logger={logger}\r\n        />\r\n      }\r\n      {currentLinkingStage === LINKING_STAGES.PERMISSION_CHECK &&\r\n        <PermissionCheckStageV2\r\n          state={state}\r\n          dispatch={dispatch}\r\n          onContinue={onContinue}\r\n          serverError={serverError}\r\n          logger={logger}\r\n        />\r\n      }\r\n      {errorDialog}\r\n    </div>\r\n  );\r\n};\r\n","import { PERMISSION_STATUS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { LINKING_STAGES } from './constants';\r\n\r\nexport const getCurrentLinkingStage = (state) => {\r\n  const {\r\n    permissionStatus,\r\n    connectedCompanyPage,\r\n    isReadyToLink,\r\n    isAuthorized,\r\n    needRefreshMemberToken,\r\n  } = state;\r\n\r\n  // This is separate flow for member token refresh, it triggered by flag: needRefreshMemberToken\r\n  // MEMBER_TOKEN_INACTIVE => PERMISSION_CHECK\r\n  if (needRefreshMemberToken) {\r\n    return LINKING_STAGES.MEMBER_TOKEN_REFRESH;\r\n  }\r\n\r\n  // LINKEDIN_AUTHENTICATION => COMPANY_PAGE_SELECTION => REQUEST_ACCESS => PERMISSION_CHECK\r\n  if (!connectedCompanyPage || permissionStatus === PERMISSION_STATUS.NOT_FOUND) {\r\n    if (!isAuthorized) {\r\n      return LINKING_STAGES.LINKEDIN_AUTHENTICATION;\r\n    }\r\n    // didn't confirm company page yet. including select, agree T&C, acknowledge popup\r\n    if (!isReadyToLink) {\r\n      return LINKING_STAGES.COMPANY_PAGE_SELECTION;\r\n    }\r\n\r\n    return LINKING_STAGES.REQUEST_ACCESS;\r\n  }\r\n\r\n  // Permission Revoked\r\n  if (permissionStatus === PERMISSION_STATUS.REVOKED) {\r\n    return LINKING_STAGES.REQUEST_ACCESS;\r\n  }\r\n\r\n  return LINKING_STAGES.PERMISSION_CHECK;\r\n};\r\n","import { useCallback } from 'react';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\n\r\nexport const useLinkedInAdsManagerRepository = () => {\r\n  const { state, send } = useWizardService();\r\n\r\n  const load = () => new Promise((resolve) => {\r\n    send(WIZARD_EVENTS.UPDATE_FlOW_FACTORS, {\r\n      flowFactors: {\r\n        isAdStepActive: false,\r\n      },\r\n    });\r\n\r\n    resolve(state.context.wizardData);\r\n  });\r\n\r\n  const save = useCallback(() => Promise.resolve(), []);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { StepHeader } from '@bingads-webui-campaign-react/linkedin-shared-components';\r\n\r\nimport { BudgetForm } from './components/budget-form';\r\nimport { useBudgetStepStyles } from './styles/budget-step-styles';\r\n\r\nexport const BudgetStep = ({\r\n  data,\r\n  onDataChange,\r\n  error,\r\n}) => {\r\n  const classes = useBudgetStepStyles();\r\n\r\n  return (\r\n    <div className=\"linkedin-budget-step\">\r\n      <StepHeader\r\n        title={_TL_('Budget & bids')}\r\n        description={_TL_('Tell us how much you\\'d like to spend and select your bid strategy.')}\r\n      />\r\n      <div className={classes.formContainer}>\r\n        <BudgetForm\r\n          data={data}\r\n          onDataChange={onDataChange}\r\n          error={error}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nBudgetStep.propTypes = {\r\n  data: PropTypes.shape({}).isRequired,\r\n  onDataChange: PropTypes.func.isRequired,\r\n  error: PropTypes.shape({}).isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Provider } from 'use-http';\r\n\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nexport function getDefaultUrl(serverContext) {\r\n  const { CampaignAPI } = serverContext.ServicesEndpoints;\r\n\r\n  return `${CampaignAPI}mmp/`;\r\n}\r\n\r\nexport function getDefaultOptions(serverContext) {\r\n  const defaultOptions = {\r\n    headers: {\r\n      'Content-Type': 'application/json',\r\n      lcid: serverContext.CurrentUser.Locale,\r\n      'x-ms-clientapplication': 'bingadsweb', // required, will get 401 if missing\r\n      'x-ms-pagetrackingid': serverContext.PageTrackingId,\r\n      Authorization: `CCMTSmallToken ${serverContext.Token}`,\r\n    },\r\n    cachePolicy: 'no-cache',\r\n    interceptors: {\r\n      request: ({ options }) => {\r\n        // eslint-disable-next-line no-param-reassign\r\n        options.headers['x-ms-requestid'] = generateGuid();\r\n\r\n        return options;\r\n      },\r\n    },\r\n  };\r\n\r\n  return defaultOptions;\r\n}\r\n\r\nexport function MmpFetchProvider({ url, options, children }) {\r\n  const serverContext = useContext(ServerContext);\r\n  const finalOptions = getDefaultOptions(serverContext);\r\n\r\n  if (options && options.headers) {\r\n    finalOptions.headers = { ...finalOptions.headers, ...options.headers };\r\n  }\r\n\r\n  const finalUrl = url || getDefaultUrl(serverContext);\r\n\r\n  return (\r\n    <Provider url={finalUrl} options={finalOptions}>\r\n      {children}\r\n    </Provider>\r\n  );\r\n}\r\n\r\nMmpFetchProvider.propTypes = {\r\n  url: PropTypes.string,\r\n  options: PropTypes.shape({\r\n    headers: PropTypes.shape({}),\r\n  }),\r\n  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\r\n};\r\n\r\nMmpFetchProvider.defaultProps = {\r\n  url: undefined,\r\n  options: undefined,\r\n};\r\n","import { CardTemplate, DefaultTemplate } from '@bingads-webui-fluent-component/wizard';\r\nimport { LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nimport { ProcessingBlocker } from './processing-blocker';\r\n\r\nexport const layoutConfig = {\r\n  [LINKEDIN_WIZARD_STEP_PATHS.LI_COMPANY_PAGE_LINKING]: {\r\n    template: CardTemplate,\r\n    customBlocker: ProcessingBlocker,\r\n    // Will enable this in the future for better development experience\r\n    // noFooter: true,\r\n  },\r\n  [LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD]: {\r\n    template: DefaultTemplate,\r\n  },\r\n  [LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER]: {\r\n    template: DefaultTemplate,\r\n  },\r\n  [LINKEDIN_WIZARD_STEP_PATHS.TARGETING]: {\r\n    template: DefaultTemplate,\r\n  },\r\n  [LINKEDIN_WIZARD_STEP_PATHS.BUDGET]: {\r\n    template: DefaultTemplate,\r\n  },\r\n  [LINKEDIN_WIZARD_STEP_PATHS.SUMMARY]: {\r\n    template: DefaultTemplate,\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 { UiBlocker } from '@bingads-webui-fluent-component/ui-blocker';\r\nimport { useWizardService, getWizardData, } from '@bingads-webui-fluent-component/wizard';\r\n\r\nexport const ProcessingBlocker = ({ children }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const { state } = useWizardService();\r\n  const { isProcessing, isSavingCompanyPage } = getWizardData(state);\r\n  const loadingText = isSavingCompanyPage ? i18n.getString(_TL_('Please hang on, we are creating your ad account and setting up the permissions ...')) : i18n.getString(_TL_('Processing...'));\r\n  const labelPosition = isSavingCompanyPage ? 'below' : 'after';\r\n\r\n  return (\r\n    <UiBlocker blocking={isProcessing || isSavingCompanyPage} loadingText={loadingText} labelPosition={labelPosition}>\r\n      {children}\r\n    </UiBlocker>\r\n  );\r\n};\r\nProcessingBlocker.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n};\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox, Link, makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nconst useTermsAndConditionsStyles = makeStyles({\r\n  root: {\r\n    ...shorthands.margin(tokens.spacingVerticalS, tokens.spacingHorizontalL, '-8px', tokens.spacingHorizontalL),\r\n    alignItems: 'center',\r\n\r\n    '& .fui-Checkbox__indicator': { marginLeft: 0 },\r\n    '& .fui-Checkbox__label': { ...shorthands.padding(0) },\r\n  },\r\n});\r\n\r\nexport const TermsAndConditions = ({ checked, onChange }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useTermsAndConditionsStyles();\r\n\r\n  const label = useMemo(() => {\r\n    const template = i18n.getString(_TL_('By selecting {{bold}}Go live{{/bold}}, you agree to the {{link}}LinkedIn Ads Agreement{{/link}}.'));\r\n\r\n    return (\r\n      <ReactTemplate\r\n        template={template}\r\n        model={{\r\n          bold: text => <b>{text}</b>,\r\n          link: text => (\r\n            <Link\r\n              aria-label={i18n.getString(_TL_('LinkedIn Ads Agreement'))}\r\n              href=\"https://www.linkedin.com/legal/sas-terms\"\r\n              target=\"_blank\"\r\n              rel=\"noopener noreferrer\"\r\n              inline\r\n            >\r\n              {text}\r\n            </Link>\r\n          ),\r\n        }}\r\n      />\r\n    );\r\n  }, [i18n]);\r\n\r\n  const handleChange = useCallback(() => onChange(!checked), [checked, onChange]);\r\n\r\n  return (\r\n    <Checkbox\r\n      className={classes.root}\r\n      label={label}\r\n      checked={checked}\r\n      onChange={handleChange}\r\n    />\r\n  );\r\n};\r\n\r\nTermsAndConditions.propTypes = {\r\n  checked: PropTypes.bool.isRequired,\r\n  onChange: PropTypes.func.isRequired,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useWizardStyles = makeStyles({\r\n  wizardContainer: {\r\n    width: '100%',\r\n    height: '100%',\r\n    '& .error': {\r\n      color: '#A80000',\r\n    },\r\n    '& .ui-blocker-indicator': {\r\n      maxWidth: '376px',\r\n    },\r\n    '& .card-layout': {\r\n      '& .footer-container': {\r\n        display: 'none',\r\n      },\r\n    },\r\n  },\r\n  footer: {\r\n    ...shorthands.borderTop('1px', 'solid', tokens.colorNeutralStroke2),\r\n\r\n    '& .basic-step-footer': {\r\n      ...shorthands.borderTop('none'),\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { getIsLastStep, getWizardData, useWizardService, BasicStepFooter, getCurrentStepId, matchStepState, STEP_STATES, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { LINKEDIN_WIZARD_STEP_PATHS, isAudienceTooNarrow } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { TermsAndConditions } from './terms-and-conditions';\r\nimport { useWizardStyles } from '../styles/wizard-styles';\r\n\r\nexport const LinkedInStepFooter = (props) => {\r\n  const classes = useWizardStyles();\r\n  const { nextDisabled: nextDisabledFromProps, showTermsAndConditions: showTermsAndConditionsProps } = props;\r\n  const { state, send } = useWizardService();\r\n\r\n  const currentStepId = getCurrentStepId(state);\r\n  const { isFirstRun, audienceSize, isMemberTokenRevoked } = getWizardData(state);\r\n  const isLastStep = getIsLastStep(state);\r\n\r\n  // If audience is too narrow at the targeting step, we disable the next button\r\n  const audienceTooNarrow = currentStepId === LINKEDIN_WIZARD_STEP_PATHS.TARGETING && _.isNumber(audienceSize) && isAudienceTooNarrow(audienceSize);\r\n\r\n  const [areTermsChecked, setAreTermsChecked] = useState(false);\r\n\r\n  // During the first run, the user see the terms and conditions\r\n  // on the account linking step. So, we don't require the user to accept it again.\r\n  const termsAccepted = isFirstRun || areTermsChecked;\r\n\r\n  const nextDisabled = nextDisabledFromProps || (showTermsAndConditionsProps && isLastStep && !termsAccepted) || isMemberTokenRevoked || audienceTooNarrow;\r\n  const showTermsAndConditions = showTermsAndConditionsProps && isLastStep && !isFirstRun;\r\n\r\n  // Reset the cancel button custom action\r\n  useEffect(() => {\r\n    if (!matchStepState(state, STEP_STATES.ACTIVE)) { return; }\r\n\r\n    const { onExited } = getWizardData(state);\r\n\r\n    if (!onExited) { return; }\r\n\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { onExited: undefined });\r\n  }, [state, send]);\r\n\r\n  return (\r\n    <div className={classes.footer}>\r\n      {showTermsAndConditions && (\r\n        <TermsAndConditions checked={areTermsChecked} onChange={setAreTermsChecked} />\r\n      )}\r\n      <BasicStepFooter {...props} useCancelButton nextDisabled={nextDisabled} />\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInStepFooter.propTypes = {\r\n  nextDisabled: PropTypes.bool.isRequired,\r\n  showTermsAndConditions: PropTypes.bool,\r\n};\r\n\r\nLinkedInStepFooter.defaultProps = {\r\n  showTermsAndConditions: true,\r\n};\r\n","import { makeStyles, tokens, typographyStyles } from '@fluentui/react-components';\r\n\r\nexport const useSummaryPanelStyles = makeStyles({\r\n  label: {\r\n    color: tokens.colorNeutralForeground3,\r\n    ...typographyStyles.body1Strong,\r\n  },\r\n  estimations: {\r\n    ...typographyStyles.title3,\r\n  },\r\n  error: {\r\n    color: tokens.colorPaletteRedForeground1,\r\n  },\r\n  shimmer: {\r\n    width: '200px',\r\n    marginTop: tokens.spacingVerticalS,\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useEffect, useMemo } from 'react';\r\nimport { Skeleton, SkeletonItem, Text } from '@fluentui/react-components';\r\nimport { useFetch } from 'use-http';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { LINKEDIN_WIZARD_STEP_PATHS, isAudienceTooNarrow } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { getIsStepValid, getStepData, useWizardService, WIZARD_EVENTS } from '@bingads-webui-fluent-component/wizard';\r\nimport { useSummaryPanelStyles } from '../styles/summary-panel-styles';\r\n\r\nconst DEBOUNCE_TIME = 500;\r\n\r\nconst AgeTargetMap = {\r\n  EighteenToTwentyFive: 'EighteenToTwentyFour',\r\n  TwentyFiveToThirtyFive: 'TwentyFiveToThirtyFour',\r\n  ThirtyFiveToFiftyFive: 'ThirtyFiveToFiftyFour',\r\n  FiftyFiveAndAbove: 'FifityFiveAndAbove',\r\n};\r\n\r\nconst formatPayload = (targetingData) => {\r\n  const {\r\n    defaultLocation,\r\n    locations,\r\n    audiences: {\r\n      companyNames,\r\n      companyIndustries,\r\n      jobSeniorities,\r\n      jobFunctions,\r\n      jobTitles,\r\n    },\r\n    genders,\r\n    ageRanges,\r\n  } = targetingData;\r\n\r\n  return {\r\n    Location: {\r\n      Includes: !_.isEmpty(locations.positiveLocationTargets)\r\n        ? _.map(locations.positiveLocationTargets, loc => loc.location.Id)\r\n        : [defaultLocation.Id],\r\n    },\r\n    Age: { Includes: _.compact(_.map(ageRanges, ageRange => AgeTargetMap[ageRange])) },\r\n    Gender: { Includes: genders },\r\n    Company: { Includes: _.pluck(companyNames, 'id') },\r\n    Industry: { Includes: _.pluck(companyIndustries, 'id') },\r\n    JobSeniority: { Includes: _.pluck(jobSeniorities, 'id') },\r\n    JobFunction: { Includes: _.pluck(jobFunctions, 'id') },\r\n    JobTitle: { Includes: _.pluck(jobTitles, 'id') },\r\n  };\r\n};\r\n\r\nconst getAudienceSizeFromData = data => _.get(data, 'elements[0].total', 0);\r\n\r\nconst usePerformanceMetrics = ({ onUpdate }) => {\r\n  const { scope: { values: { aid } } } = useContext(ScopeContext);\r\n  const {\r\n    post, data, error, loading,\r\n  } = useFetch(`Targeting/${aid}/LinkedInTargeting/AudienceEstimation`, {\r\n    loading: true,\r\n    onNewData: (_oldData, newData) => {\r\n      onUpdate(getAudienceSizeFromData(newData));\r\n\r\n      return newData;\r\n    },\r\n    onError: () => onUpdate(null),\r\n  });\r\n\r\n  const debouncedPost = useMemo(() => _.debounce(post, DEBOUNCE_TIME), [post]);\r\n  const audienceSize = useMemo(() => getAudienceSizeFromData(data), [data]);\r\n\r\n  return {\r\n    fetchEstimations: debouncedPost,\r\n    data: { audienceSize },\r\n    error: !!error,\r\n    loading,\r\n  };\r\n};\r\n\r\nexport const SummaryPanelView = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useSummaryPanelStyles();\r\n\r\n  const { state, send } = useWizardService();\r\n\r\n  const currentStepData = getStepData(state, LINKEDIN_WIZARD_STEP_PATHS.TARGETING);\r\n  const isCurrentStepValid = getIsStepValid(state, LINKEDIN_WIZARD_STEP_PATHS.TARGETING);\r\n\r\n  const updateAudienceSize = useCallback((audienceSize) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { audienceSize });\r\n  }, [send]);\r\n\r\n  const {\r\n    fetchEstimations, data, error, loading,\r\n  } = usePerformanceMetrics({\r\n    onUpdate: updateAudienceSize,\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (_.isEmpty(currentStepData) || !isCurrentStepValid) { return; }\r\n\r\n    const formattedPayload = formatPayload(currentStepData);\r\n\r\n    fetchEstimations(formattedPayload);\r\n  }, [fetchEstimations, currentStepData, isCurrentStepValid]);\r\n\r\n  const dataToDisplay = useMemo(() => {\r\n    if (error) {\r\n      return i18n.getString(_TL_('No data available'));\r\n    }\r\n\r\n    if (isAudienceTooNarrow(data.audienceSize)) {\r\n      return i18n.getString(_TL_('Audience too narrow'));\r\n    }\r\n\r\n    return `${(new Intl.NumberFormat()).format(data.audienceSize)}+`;\r\n  }, [i18n, data, error]);\r\n\r\n  return (\r\n    <div className=\"summary-panel-content\">\r\n      <Text className={classes.label} block>\r\n        {i18n.getString(_TL_('Target audience size'))}\r\n      </Text>\r\n      {loading && (\r\n        <Skeleton appearance=\"translucent\">\r\n          <div className={classes.shimmer}>\r\n            <SkeletonItem size=\"32\" />\r\n          </div>\r\n        </Skeleton>\r\n      )}\r\n      {!loading && (\r\n        <>\r\n          <Text className={classes.estimations} block>\r\n            {dataToDisplay}\r\n          </Text>\r\n          {isAudienceTooNarrow(data.audienceSize) && (\r\n            <Text className={classes.error} block>\r\n              {i18n.getString(_TL_('Oops! Your audience is too small to create a campaign. Please expand your audience.'))}\r\n            </Text>\r\n          )}\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n","import { LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { SummaryPanelView } from './summary-panel-view';\r\n\r\nconst PerformanceEstimationsConfig = {\r\n  title: _TL_('Performance'),\r\n  ariaLabel: _TL_('Click here to toggle the performance panel'),\r\n  toolTipText: _TL_('Performance'),\r\n  view: SummaryPanelView,\r\n};\r\n\r\nexport const summaryPanelConfig = [\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.TARGETING,\r\n    ...PerformanceEstimationsConfig,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.BUDGET,\r\n    ...PerformanceEstimationsConfig,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.SUMMARY,\r\n    ...PerformanceEstimationsConfig,\r\n  },\r\n];\r\n","import _ from 'underscore';\r\nimport React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  LayoutContainer,\r\n  Layout,\r\n  StepContainer,\r\n  useWizardService,\r\n  getCurrentStepId,\r\n  getIsLastStep,\r\n  CardFooter,\r\n  SaveBlocker,\r\n  CancelWizardDialog,\r\n  StepList,\r\n  StepBar,\r\n  SummaryPanel,\r\n} from '@bingads-webui-fluent-component/wizard';\r\n\r\nimport { layoutConfig } from './layout-config';\r\nimport { getLinkedInStepListConfig } from '../steps/step-list-config';\r\nimport { LinkedInStepFooter } from './step-footer';\r\nimport { summaryPanelConfig } from './summary-panel-config';\r\n\r\nconst CustomLayoutTemplate = ({ items }) => {\r\n  const { state } = useWizardService();\r\n  const currentStepId = getCurrentStepId(state);\r\n  const config = layoutConfig[currentStepId];\r\n  const {\r\n    template: Template,\r\n    noFooter,\r\n    noStepList,\r\n    customBlocker,\r\n  } = config;\r\n\r\n  let newItems = { ...items };\r\n  if (noFooter) {\r\n    newItems = _.omit(newItems, 'Footer');\r\n    newItems = _.omit(newItems, 'CardFooter');\r\n  }\r\n  if (noStepList) {\r\n    newItems = _.omit(newItems, 'StepList');\r\n  }\r\n  if (customBlocker) {\r\n    newItems.Blocker = customBlocker;\r\n  }\r\n  return <Template items={newItems} />;\r\n};\r\n\r\nCustomLayoutTemplate.propTypes = {\r\n  items: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const CustomLayoutContainer = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const { state } = useWizardService();\r\n  const isLastStep = getIsLastStep(state);\r\n\r\n  const stepListConfig = useMemo(() => getLinkedInStepListConfig(i18n), [i18n]);\r\n  const nextButtonText = useMemo(() => (isLastStep ? _TL_('Go live') : _TL_('Save & go to next step')), [isLastStep]);\r\n\r\n  return (\r\n    <LayoutContainer template={CustomLayoutTemplate}>\r\n      <Layout type=\"StepContainer\" component={StepContainer} />\r\n      <Layout type=\"StepList\" component={StepList} config={stepListConfig} />\r\n      <Layout type=\"StepBar\" component={StepBar} config={stepListConfig} />\r\n      <Layout type=\"SummaryPanel\" component={SummaryPanel} config={summaryPanelConfig} />\r\n      <Layout type=\"CancelDialog\" component={CancelWizardDialog} />\r\n      <Layout\r\n        type=\"Footer\"\r\n        component={LinkedInStepFooter}\r\n        nextButtonText={i18n.getString(nextButtonText)}\r\n      />\r\n      <Layout type=\"CardFooter\" component={CardFooter} />\r\n      <Layout type=\"Blocker\" component={SaveBlocker} />\r\n    </LayoutContainer>\r\n  );\r\n};\r\n","import { LINKEDIN_WIZARD_STEP_PATHS } from '@bingads-webui-campaign-react/linkedin-utils';\r\n\r\nexport const getLinkedInStepListConfig = i18n => [\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.LI_COMPANY_PAGE_LINKING,\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.BUILD_ADS,\r\n    title: i18n.getString(_TL_('Ads')),\r\n    steps: [{\r\n      id: LINKEDIN_WIZARD_STEP_PATHS.LINKEDIN_AD,\r\n      isHidden: true,\r\n    }, {\r\n      id: LINKEDIN_WIZARD_STEP_PATHS.MULTI_AD_MANAGER,\r\n      isHidden: true,\r\n    }],\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.TARGETING,\r\n    title: i18n.getString(_TL_('Targeting & conversions')),\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.BUDGET,\r\n    title: i18n.getString(_TL_('Budget & bids')),\r\n  },\r\n  {\r\n    id: LINKEDIN_WIZARD_STEP_PATHS.SUMMARY,\r\n    title: i18n.getString(_TL_('Summary')),\r\n  },\r\n];\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Wizard } from '@bingads-webui-fluent-component/wizard';\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { getFlow } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { useInitializeWizard } from './use-initialize-wizard';\r\nimport { LinkedInStepConfig } from './steps/step-config';\r\nimport { MmpFetchProvider } from './wizard-components/mmp-provider';\r\nimport { CustomLayoutContainer } from './wizard-components/custom-layout-container';\r\nimport { useWizardStyles } from './styles/wizard-styles';\r\n\r\nexport const LinkedInCampaignWizard = (props) => {\r\n  const {\r\n    perfMarker, siteMap, scope,\r\n  } = props;\r\n  const classes = useWizardStyles();\r\n\r\n  const instrumentation = useContext(InstrumentationContext);\r\n\r\n  const routeToNavigateToWhenDone = getRoutePathById(siteMap, 'campaigns');\r\n\r\n  const wizardPerfMarker = useMemo(() => (\r\n    perfMarker.createChild('LinkedInCampaignWizard')\r\n  ), [perfMarker]);\r\n\r\n  const {\r\n    isInitialized,\r\n    initialStep,\r\n    initialFlowFactors,\r\n    initialWizardData,\r\n  } = useInitializeWizard();\r\n\r\n  const config = useMemo(() => ({\r\n    id: 'linkedin-campaign-wizard',\r\n    steps: LinkedInStepConfig,\r\n    getFlow,\r\n    initialStep,\r\n    initialFlowFactors,\r\n    initialWizardData,\r\n    actions: {\r\n      onDone: () => scope.save(routeToNavigateToWhenDone),\r\n      onExited: ({ wizardData }) => {\r\n        if (wizardData.onExited) {\r\n          wizardData.onExited();\r\n          return;\r\n        }\r\n        scope.save(routeToNavigateToWhenDone);\r\n      },\r\n    },\r\n  }), [initialFlowFactors, initialStep, initialWizardData, routeToNavigateToWhenDone, scope]);\r\n\r\n  if (!isInitialized) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className={mergeClasses('linkedin-campaign-wizard', classes.wizardContainer)}>\r\n      <PerformanceMarkerProvider\r\n        name=\"LinkedInCampaignWizard\"\r\n        instrumentation={instrumentation}\r\n        immediateDone={false}\r\n      >\r\n        <Scenario name=\"LinkedInCampaignCreationWizard\">\r\n          <Activity name=\"DefaultWizardActivity\">\r\n            <Wizard config={config}>\r\n              <WizardPerfMarker wizardName=\"LinkedInCampaignWizard\" wizardMarker={wizardPerfMarker}>\r\n                <MmpFetchProvider>\r\n                  <CustomLayoutContainer />\r\n                </MmpFetchProvider>\r\n              </WizardPerfMarker>\r\n            </Wizard>\r\n          </Activity>\r\n        </Scenario>\r\n      </PerformanceMarkerProvider>\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInCampaignWizard.propTypes = {\r\n  perfMarker: PropTypes.shape({\r\n    createChild: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  siteMap: PropTypes.shape({}).isRequired,\r\n  scope: PropTypes.shape({\r\n    save: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  LayoutContainer,\r\n  Layout,\r\n  StepContainer,\r\n  SaveBlocker,\r\n  DefaultTemplate,\r\n  CancelWizardDialog,\r\n} from '@bingads-webui-fluent-component/wizard';\r\n\r\nimport { LinkedInStepFooter } from './step-footer';\r\n\r\nexport const SingleStepLayoutContainer = () => {\r\n  const i18n = useContext(I18nContext);\r\n  return (\r\n    <LayoutContainer template={DefaultTemplate}>\r\n      <Layout type=\"StepContainer\" component={StepContainer} />\r\n      <Layout type=\"CancelDialog\" component={CancelWizardDialog} />\r\n      <Layout\r\n        type=\"Footer\"\r\n        component={LinkedInStepFooter}\r\n        nextButtonText={i18n.getString('Save and exit')}\r\n        showTermsAndConditions={false}\r\n      />\r\n      <Layout type=\"Blocker\" component={SaveBlocker} />\r\n    </LayoutContainer>\r\n  );\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Wizard } from '@bingads-webui-fluent-component/wizard';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\n\r\nimport { LinkedInSingleStepConfigs } from './steps/step-config';\r\nimport { SingleStepLayoutContainer } from './wizard-components/single-step-layout-container';\r\n\r\nconst SINGLE_STEP_ID = 'SINGLE_STEP_ID';\r\n\r\nexport const LinkedInBaseSingleStepWizard = ({\r\n  scenario, perfMarker, onDone, onExited,\r\n}) => {\r\n  const instrumentation = useContext(InstrumentationContext);\r\n  const wizardPerfMarker = useMemo(() => perfMarker.createChild(scenario), [perfMarker, scenario]);\r\n\r\n  const config = useMemo(() => ({\r\n    id: scenario,\r\n    steps: [{ id: SINGLE_STEP_ID, ...LinkedInSingleStepConfigs[scenario] }],\r\n    actions: { onDone, onExited },\r\n  }), [onDone, onExited, scenario]);\r\n\r\n  return (\r\n    <PerformanceMarkerProvider\r\n      name={scenario}\r\n      instrumentation={instrumentation}\r\n      immediateDone={false}\r\n    >\r\n      <Scenario name={scenario}>\r\n        <Activity name=\"DefaultWizardActivity\">\r\n          <Wizard config={config}>\r\n            <WizardPerfMarker wizardName={scenario} wizardMarker={wizardPerfMarker}>\r\n              <SingleStepLayoutContainer />\r\n            </WizardPerfMarker>\r\n          </Wizard>\r\n        </Activity>\r\n      </Scenario>\r\n    </PerformanceMarkerProvider>\r\n  );\r\n};\r\n\r\nLinkedInBaseSingleStepWizard.propTypes = {\r\n  scenario: PropTypes.string.isRequired,\r\n  perfMarker: PropTypes.shape({\r\n    createChild: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  onDone: PropTypes.func.isRequired,\r\n  onExited: PropTypes.func.isRequired,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { LINKEDIN_WIZARDS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { LinkedInBaseSingleStepWizard } from './base-single-step-wizard';\r\nimport { useWizardStyles } from './styles/wizard-styles';\r\n\r\nexport const LinkedInCampaignSettingsWizard = ({ siteMap, scope, ...restProps }) => {\r\n  const classes = useWizardStyles();\r\n  const navigateToSomeWhere = useCallback(() => scope.save(getRoutePathById(siteMap, 'adgroups')), [scope, siteMap]);\r\n\r\n  return (\r\n    <div className={mergeClasses('campaign-settings-wizard', classes.wizardContainer)}>\r\n      <LinkedInBaseSingleStepWizard\r\n        scenario={LINKEDIN_WIZARDS.CAMPAIGN_SETTINGS}\r\n        onDone={navigateToSomeWhere}\r\n        onExited={navigateToSomeWhere}\r\n        {...restProps}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInCampaignSettingsWizard.propTypes = {\r\n  siteMap: PropTypes.shape({}).isRequired,\r\n  scope: PropTypes.shape({\r\n    save: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { LINKEDIN_WIZARDS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { LinkedInBaseSingleStepWizard } from './base-single-step-wizard';\r\nimport { useWizardStyles } from './styles/wizard-styles';\r\n\r\nexport const LinkedInAdGroupSettingsWizard = ({ siteMap, scope, ...restProps }) => {\r\n  const classes = useWizardStyles();\r\n  const navigateToSomeWhere = useCallback(() => scope.save(getRoutePathById(siteMap, 'adgroups')), [scope, siteMap]);\r\n\r\n  return (\r\n    <div className={mergeClasses('adgroup-settings-wizard', classes.wizardContainer)}>\r\n      <LinkedInBaseSingleStepWizard\r\n        scenario={LINKEDIN_WIZARDS.AD_GROUP_SETTINGS}\r\n        onDone={navigateToSomeWhere}\r\n        onExited={navigateToSomeWhere}\r\n        {...restProps}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInAdGroupSettingsWizard.propTypes = {\r\n  siteMap: PropTypes.shape({}).isRequired,\r\n  scope: PropTypes.shape({\r\n    save: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { LINKEDIN_WIZARDS } from '@bingads-webui-campaign-react/linkedin-utils';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { LinkedInBaseSingleStepWizard } from './base-single-step-wizard';\r\nimport { useWizardStyles } from './styles/wizard-styles';\r\n\r\nconst getNavigationProps = scope => ({\r\n  pathname: '/campaign/vnext/ads',\r\n  search: `?uid=${scope.values.uid}&cid=${scope.values.cid}&aid=${scope.values.aid}&campaignId=${scope.values.campaignId}&adGroupId=${scope.values.adGroupId}`,\r\n});\r\n\r\nexport const LinkedInAdEditorWizard = ({ scope, ...restProps }) => {\r\n  const classes = useWizardStyles();\r\n  const navigateToSomeWhere = useCallback(() => {\r\n    const { pathname, search } = getNavigationProps(scope);\r\n\r\n    scope.history.push({ pathname, search });\r\n  }, [scope]);\r\n\r\n  return (\r\n    <div className={mergeClasses('ad-editor-wizard', classes.wizardContainer)}>\r\n      <LinkedInBaseSingleStepWizard\r\n        scenario={LINKEDIN_WIZARDS.AD_EDITOR}\r\n        onDone={navigateToSomeWhere}\r\n        onExited={navigateToSomeWhere}\r\n        {...restProps}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nLinkedInAdEditorWizard.propTypes = {\r\n  scope: PropTypes.shape({\r\n    history: PropTypes.shape({\r\n      push: PropTypes.func,\r\n    }),\r\n  }).isRequired,\r\n};\r\n","export const imageExperienceLegacyStrings = {\r\n  ImageExperience_RemoveAllImages: _TL_('I don\\'t want to display images in my ads'),\r\n  Audience_Campaign_Ad_Preview_Default_ShortHeadline: _TL_('Short headline'),\r\n  Audience_Campaign_Ad_Preview_Default_LongHeadline: _TL_('Long headline'),\r\n  Audience_Campaign_Ad_Preview_Default_Description: _TL_('Ad text'),\r\n  Audience_Campaign_Ad_Preview_Default_BusinessName: _TL_('Business name'),\r\n  Audience_Campaign_Ad_Preview_Default_CallToAction: _TL_('Shop Now'),\r\n  ImageOptionDropdown_Image: _TL_('Image'),\r\n  ImageOptionDropdown_Logo: _TL_('Logo'),\r\n  ImageOptionDropdown_Portrait: _TL_('Portrait'),\r\n  ImageExperience_Sort_Recent_Upload: _TL_('Most recently uploaded'),\r\n  ImageExperience_Sort_Image_Text: _TL_('Image name'),\r\n  ImageExperience_Existing_Images: _TL_('Existing images'),\r\n  ImageExperience_Stock_Images: _TL_('Stock images'),\r\n  ImageExperience_Website_Suggestions: _TL_('Website images'),\r\n  ImageExperience_New: _TL_('New'),\r\n  ImageExperience_Upload: _TL_('Upload'),\r\n  ImageExperience_Ad_Preview_Title: _TL_('Ad preview'),\r\n  Entity_Ads: _TL_('Ad'),\r\n  FilePicker_FileExtensionInvalid: _TL_('File extension is invalid'),\r\n  FilePicker_FileInvalid: _TL_('File is invalid'),\r\n  ImageExperience_Ad_Preview_Next: _TL_('Next ad preview'),\r\n  ImageExperience_Ad_Preview_Previous: _TL_('Previous ad preview'),\r\n  ImageExperience_Ad_Preview_Ratio_Title_Template: _TL_('{{ratio}} aspect ratio'),\r\n  ImageExperience_Ad_Preview_Title_Template: _TL_('Ad preview ({{ratio}} aspect ratio)'),\r\n  ImageExperience_Add_Video_File_AriaLabel: _TL_('Selected video to upload'),\r\n  ImageExperience_Add_Video_File_Placeholder: _TL_('Select a video to upload'),\r\n  ImageExperience_Add_Video_Option_Local: _TL_('Upload from this PC'),\r\n  ImageExperience_Add_Video_Option_URL: _TL_('Upload from a URL'),\r\n  ImageExperience_AddImageDescription: _TL_('Choose from your existing uploaded images, stock images, or images from your website.'),\r\n  ImageExperience_AddImageTitle: _TL_('Add an image'),\r\n  ImageExperience_Additional_Disclaimer_Message_MultimediaAd: _TL_('The preview only includes images. Headlines and ad text are coming soon.'),\r\n  ImageExperience_Additional_Disclaimer_Message: _TL_('This is an example of how your ad could appear on other websites on the Microsoft Advertising Network. The final ad format is likely to change to match the look and feel of the website.'),\r\n  ImageExperience_AddLogoDescription: _TL_(\"Choose an image you've already uploaded or browse for a new one. Move your mouse over the image to see options to name or delete it.\"),\r\n  ImageExperience_AddLogoTitle: _TL_('Add a logo'),\r\n  ImageExperience_AddVideoDescription: _TL_('Choose a video you\\'ve already uploaded to the Asset Library or add a new one. Move your mouse over the thumbnail to see options to name or delete it.'),\r\n  ImageExperience_AddVideoTitle: _TL_('Add a video'),\r\n  ImageExperience_ApplyClipNoticeDescription: _TL_('We noticed that you made edit to the video length. Please make sure your previous caption file still works.'),\r\n  ImageExperience_ApplyClipNoticeTitle: _TL_('New captions needed?'),\r\n  ImageExperience_ApplyTrimAndCaptionToAllRatio: _TL_('Apply {{effects}} to all other aspect ratios of the same video.'),\r\n  ImageExperience_Asset_Title: _TL_('Assets'),\r\n  ImageExperience_AutomaticThumbnail: _TL_('Automatic'),\r\n  ImageExperience_AutomaticThumbnailDescription: _TL_('In this mode, the thumbnail is generated automatically from the video.'),\r\n  ImageExperience_BestPracticeHelp_Video: _TL_('Best practices for audience ad videos.'),\r\n  ImageExperience_BestPracticeHelp: _TL_('Best practices for audience ad images.'),\r\n  ImageExperience_Cancel: _TL_('Cancel'),\r\n  ImageExperience_CaptionAlert: _TL_('Please be aware that changes to captions you make here will be effective immediately.'),\r\n  ImageExperience_Choose_File_Description: _TL_(\"Don't see an image you want to use?\"),\r\n  ImageExperience_Choose_Video_Description: _TL_(\"Don't see a video you want to use?\"),\r\n  ImageExperience_ChooseThumbnail: _TL_('Select from image library'),\r\n  ImageExperience_ClipperDescription: _TL_('Highlight the best moments of your video. Slide the sides of the trimmer to adjust your video length.'),\r\n  ImageExperience_Confirm: _TL_('OK'),\r\n  ImageExperience_CropperDescription: _TL_('Crop your video manually.'),\r\n  ImageExperience_DeleteCaptionDescription: _TL_('Are you sure you want to delete this video caption?'),\r\n  ImageExperience_DeleteCaptionTitle: _TL_('Delete caption'),\r\n  ImageExperience_Drag_File_Description: _TL_('Upload or drag and drop your images here'),\r\n  ImageExperience_Drag_File_Maximum_Upload_Num: _TL_('You can upload up to {{maxCount}} images to your ad.'),\r\n  ImageExperience_Drag_File_Minimum_Size_Tip: _TL_('Minimum size: {{width}} x {{height}} pixels'),\r\n  ImageExperience_Drop_File_Description: _TL_('Drop your files to upload'),\r\n  ImageExperience_Drop_Image_Description: _TL_('Drag and drop your images here to upload them'),\r\n  ImageExperience_Edit_Aspect_Ratio: _TL_('Edit aspect ratio'),\r\n  ImageExperience_Edit_Image_Label: _TL_('Edit image of aspect ratio {{ratio}}'),\r\n  ImageExperience_Edit_Image_Name: _TL_('Edit image name'),\r\n  ImageExperience_Edit_Image_Placement: _TL_('Edit aspect ratio'),\r\n  ImageExperience_Edit_Image_Template: _TL_('Re-crop image: {{ratio}} aspect ratio'),\r\n  ImageExperience_Edit_Image: _TL_('Edit Image'),\r\n  ImageExperience_Edit_Logo_Template: _TL_('Re-crop logo: {{ratio}} aspect ratio'),\r\n  ImageExperience_Edit_Url: _TL_('Enter URL'),\r\n  ImageExperience_Edit_Video_Label: _TL_('Edit video of aspect ratio {{ratio}}'),\r\n  ImageExperience_EditCaptionDescription: _TL_('Placeholder texts video captions.'),\r\n  ImageExperience_EditCaptionTitle: _TL_('Upload captions (optional)'),\r\n  ImageExperience_EditThumbnailTitle: _TL_('Image library'),\r\n  ImageExperience_EditVideo_Captions: _TL_('Captions'),\r\n  ImageExperience_EditVideo_Crop: _TL_('Crop'),\r\n  ImageExperience_EditVideo_Thumbnail: _TL_('Thumbnail'),\r\n  ImageExperience_EditVideo_Trim_And_Captions: _TL_('trim and captions'),\r\n  ImageExperience_EditVideo_Trim_Only: _TL_('trim'),\r\n  ImageExperience_EditVideo_Trim: _TL_('Trim'),\r\n  ImageExperience_EditVideo: _TL_('Edit video'),\r\n  ImageExperience_EmptyURL: _TL_('Please enter your website’s URL. We’ll extract images from your website.'),\r\n  ImageExperience_Error_AnimatedImageNotAllowed: _TL_('Animated images are not allowed.'),\r\n  ImageExperience_Error_AssetDataEncodingInvalid: _TL_('Data in one of the media entities is not valid format.'),\r\n  ImageExperience_Error_AssetDataInvalid: _TL_('Data in one or more the media is not a supported format.'),\r\n  ImageExperience_Error_GenericUploadErrorMessage: _TL_(\"We're unable to save your image due to an error. Try again or upload another file.\"),\r\n  ImageExperience_Error_ImageMimeTypeInvalid: _TL_(\"The image's MIME type is not supported.\"),\r\n  ImageExperience_Error_ImagesLimitExceededPerAccount: _TL_('Limit of images saved per account reached.'),\r\n  ImageExperience_Error_MediaFormatNotSupported: _TL_('That file type isn’t supported. Please select a different file.'),\r\n  ImageExperience_Error_StockImageLimitExceededPerCustomer: _TL_(\"We're unable to use the stock photo as you have reached the customer limit.\"),\r\n  ImageExperience_Error_StockPhoto_Generic: _TL_('Our stock photo service is having an issue. Please try again later.'),\r\n  ImageExperience_Error_CampaignServiceMediaDataEncodingInvalid: _TL_('Data in one of the media entities is not valid format.'),\r\n  ImageExperience_Error_ValidationError: _TL_('The recommended images were not added to your asset group because their resolution was too low. Please remove these from your selection and try again.'),\r\n  ImageExperience_Error_APIError: _TL_('The recommended images were not added to your asset group. Please try again later.'),\r\n  ImageExperience_Error_MixedError: _TL_('The recommended images were not added to your asset group. Please try again later.'),\r\n  ImageExperience_Error_CampaignServiceMediaFormatNotSupported: _TL_(\"That file type isn't supported. Please select a different file.\"),\r\n  ImageExperience_ExistCaptionTitle: _TL_('Existing captions'),\r\n  ImageExperience_Existing_Videos: _TL_('Existing videos'),\r\n  ImageExperience_FileSize_Too_Big_Template: _TL_('Your image is too large to upload ({{fileSize}} MB). Please upload an image that is smaller than {{maximumFileSize}} MB.'),\r\n  ImageExperience_Get_Video_Label: _TL_('Get video'),\r\n  ImageExperience_Image_Delete_Confirm: _TL_('Are you sure you want to delete selected image?'),\r\n  ImageExperience_Image_List_Description: _TL_('Add your own images to your ad, or choose from the most recently used images.'),\r\n  ImageExperience_Image_List_Label: _TL_('Images'),\r\n  ImageExperience_Image_Picker_No_Image_Label: _TL_('There are no images available.'),\r\n  ImageExperience_Image_Placement_Optional: _TL_('Optional'),\r\n  ImageExperience_Image_Placement_Required_Message: _TL_('This placement is required and cannot be excluded.'),\r\n  ImageExperience_Image_Placement_Required: _TL_('Required'),\r\n  ImageExperience_Image_Ratio_133x100: _TL_('1.33 : 1'),\r\n  ImageExperience_Image_Ratio_150x100: _TL_('1.5 : 1'),\r\n  ImageExperience_Image_Ratio_155x100: _TL_('1.55 : 1'),\r\n  ImageExperience_Image_Ratio_169x100: _TL_('1.69 : 1'),\r\n  ImageExperience_Image_Ratio_172x100: _TL_('1.72 : 1'),\r\n  ImageExperience_Image_Ratio_178x100: _TL_('1.78 : 1'),\r\n  ImageExperience_Image_Ratio_191x100: _TL_('1.91 : 1'),\r\n  ImageExperience_Image_Ratio_1x1: _TL_('1 : 1'),\r\n  ImageExperience_Image_Ratio_1x2: _TL_('1 : 2'),\r\n  ImageExperience_Image_Ratio_4x1: _TL_('4 : 1'),\r\n  ImageExperience_Image_Ratio_93x100: _TL_('0.93 : 1'),\r\n  ImageExperience_Image_Ratio_ImageOriginal: _TL_('Original'),\r\n  ImageExperience_Image_Ratio_201x100: _TL_('2.01 : 1'),\r\n  ImageExperience_Image_Ratio_200x100: _TL_('2 : 1'),\r\n  ImageExperience_Image_Ratio_153x100: _TL_('1.53 : 1'),\r\n  ImageExperience_Image_Ratio_124x100: _TL_('1.24 : 1'),\r\n  ImageExperience_Image_Ratio_120x100: _TL_('1.2 : 1'),\r\n  ImageExperience_Image_ReCrop_Description: _TL_('Crop your image to how you want it appearing in your ad.'),\r\n  ImageExperience_Image: _TL_('Image'),\r\n  ImageExperience_ImageAddDescription: _TL_('Add your own images to your ad, or choose from the most recently used images.'),\r\n  ImageExperience_ImagesAspectRatioRequired: _TL_('You need to add an image and include an aspect ratio before saving your ad.'),\r\n  ImageExperience_ImagesRequired: _TL_('You need to add an image before saving your ad.'),\r\n  ImageExperience_ImageSuggestion_ImagesFound: _TL_(\"We've found images from your Final URL:\"),\r\n  ImageExperience_ImageSuggestion_Subdomain_Placeholder: _TL_('Enter your subdomain'),\r\n  ImageExperience_InProgress: _TL_('We are retrieving your images. This might take longer than usual. Please wait or check back later.'),\r\n  ImageExperience_InvalidURL: _TL_('Please enter a valid Final URL to see images from your website.'),\r\n  ImageExperience_InvalidVideo: _TL_('One or more of your videos are invalid. Please select another video for the placement.'),\r\n  ImageExperience_LandscapeImageRequired: _TL_('A 1.91:1 image is required to create a responsive ad'),\r\n  ImageExperience_OriginalImageRequired: _TL_('An original image is required to create a responsive ad'),\r\n  ImageExperience_LoadImage_Description: _TL_('You can add up to 16 images to your ad.'),\r\n  ImageExperience_LoadImage: _TL_('Add image'),\r\n  ImageExperience_LoadLogo_Description: _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  ImageExperience_LoadLogo: _TL_('Add logo'),\r\n  ImageExperience_LoadVideo: _TL_('Add video'),\r\n  ImageExperience_Logo_Add_Button: _TL_('Load Logo'),\r\n  ImageExperience_Logo_Add_Description: _TL_('Add a logo to your ad. Logo ratio should be 1 : 1.'),\r\n  ImageExperience_Logo_Edit_Button: _TL_('Edit image'),\r\n  ImageExperience_Logo_Label: _TL_('Logo (optional)'),\r\n  ImageExperience_Logo_List_Label: _TL_('Logos'),\r\n  ImageExperience_Logo_ReCrop_Description: _TL_('Crop your logo to how you want it appearing in your ad.'),\r\n  ImageExperience_ManualThumbnail: _TL_('Manual'),\r\n  ImageExperience_Media_Delete_Error_UseInDraft: _TL_('The selected media is currently associated with an audience ad. Please ensure that the media is not being used before deleting it.'),\r\n  ImageExperience_MinimumAspectRatioRequired: _TL_('You need to add at least 1 image with 1.91:1 aspect ratio and 1 image with 1:1 aspect ratio to the ad.'),\r\n  ImageExperience_Multimedia_Delete_Error_UseInDraft: _TL_('The selected media is currently associated with an ad. Please ensure that the media is not being used before deleting it.'),\r\n  ImageExperience_MultipleUpload_Error_MediaFormatNotSupported: _TL_('One or more file types aren’t supported. Please select different file(s).'),\r\n  ImageExperience_MultipleUpload_FileSize_TooBig: _TL_('One or more of your image sizes exceed the supported limit ({{maximumFileSize}} MB).'),\r\n  ImageExperience_MultipleUpload_SizeValidationFailTemplate: _TL_('One or more images are smaller than the required minimum size ({{width}} x {{height}}).'),\r\n  ImageExperience_MultipleUpload_SizeValidationFailTemplate_WithoutDimension: _TL_('One or more images are smaller than the required minimum size.'),\r\n  ImageExperience_NoCaptionFile: _TL_(\"You don't have any captions.\"),\r\n  ImageExperience_NoSuggestion: _TL_('No suggestion found from your site.'),\r\n  ImageExperience_Preview_Type_133x100: _TL_('MSN small headline'),\r\n  ImageExperience_Preview_Type_150x100: _TL_('MSN in-article ad'),\r\n  ImageExperience_Preview_Type_155x100: _TL_('MSN medium headline'),\r\n  ImageExperience_Preview_Type_169x100: _TL_('MSN carousel'),\r\n  ImageExperience_Preview_Type_172x100: _TL_('Microsoft edge medium headline'),\r\n  ImageExperience_Preview_Type_178x100: _TL_('Microsoft edge single carousel'),\r\n  ImageExperience_Preview_Type_191x100: _TL_('MSN feed'),\r\n  ImageExperience_Preview_Type_191x100_V2: _TL_('MSN feed'),\r\n  ImageExperience_Preview_Type_ImageOriginal: _TL_('Original Image'),\r\n  ImageExperience_Preview_Type_201x100: _TL_('Microsoft Edge carousel'),\r\n  ImageExperience_Preview_Type_200x100: _TL_('MSN banner'),\r\n  ImageExperience_Preview_Type_169x100_V2: _TL_('MSN carousel'),\r\n  ImageExperience_Preview_Type_153x100: _TL_('MSN partner stripe'),\r\n  ImageExperience_Preview_Type_124x100: _TL_('MSN Restoday'),\r\n  ImageExperience_Preview_Type_120x100: _TL_('MSN rectangle image'),\r\n  ImageExperience_Preview_Type_1x1: _TL_('MSN square image'),\r\n  ImageExperience_Preview_Type_1x1_V2: _TL_('Microsoft Edge mobile'),\r\n  ImageExperience_Preview_Type_93x100: _TL_('MSN double carousel'),\r\n  ImageExperience_Preview_Type_BingDeskMulti: _TL_('Bing Desktop Multi-Image Extension'),\r\n  ImageExperience_Preview_Type_BingSingleImage: _TL_('Bing Desktop Single-Image Extension'),\r\n  ImageExperience_Preview_Type_MobileMulti: _TL_('Bing Mobile Multi-Image Extension'),\r\n  ImageExperience_Preview_Type_MultimediaAd_191x100: _TL_('Landscape Image Multimedia Ad'),\r\n  ImageExperience_Preview_Type_MultimediaAd_1x1: _TL_('Square Image Multimedia Ad'),\r\n  ImageExperience_Preview_Type_MultimediaAd_1x2: _TL_('Vertical Image Multimedia Ad'),\r\n  ImageExperience_Preview_Type_MultimediaAd_4x1: _TL_('Wide Image Multimedia Ad'),\r\n  ImageExperience_PreviewTitle: _TL_('Preview'),\r\n  ImageExperience_Proceed: _TL_('Proceed'),\r\n  ImageExperience_ReCrop: _TL_('Re-crop'),\r\n  ImageExperience_Remove_Image: _TL_('Remove this image'),\r\n  ImageExperience_Remove: _TL_('Remove'),\r\n  ImageExperience_RemoveAllVideos: _TL_('Remove all videos'),\r\n  ImageExperience_Replace: _TL_('Replace'),\r\n  ImageExperience_ReplaceImageTitle: _TL_('Replace image'),\r\n  ImageExperience_ReplaceVideoTitle: _TL_('Replace video'),\r\n  ImageExperience_Review_Image_Policy: _TL_('Learn more'),\r\n  ImageExperience_Search_Placeholder: _TL_('Image names'),\r\n  ImageExperience_SelectedImage: _TL_('Selected image'),\r\n  ImageExperience_ShutterStock_Disclaimer_Image_Policy: _TL_('There may be images provided by Shutterstock that do not adhere to the Microsoft image policy.'),\r\n  ImageExperience_ShutterStock_Disclaimer_Watermark: _TL_('The Shutterstock watermark appearing on the stock images below will not appear in your ad.'),\r\n  ImageExperience_SizeValidationFailTemplate_WithDetail: _TL_('The resized image is smaller than the required minimum size ({{width}} x {{height}}). The image is resized if the file size is too big.'),\r\n  ImageExperience_SizeValidationFailTemplate_WithDetail_WithoutDimension: _TL_('The resized image is smaller than the required minimum size. The image is resized if the file size is too big.'),\r\n  ImageExperience_SizeValidationFailTemplate: _TL_('The image is smaller than the required minimum size ({{width}} x {{height}}).'),\r\n  ImageExperience_SizeValidationFailTemplate_WithoutDimension: _TL_('The image is smaller than the required minimum size.'),\r\n  ImageExperience_Sort_Video_Text: _TL_('Video name'),\r\n  ImageExperience_SortBy: _TL_('Sort by'),\r\n  ImageExperience_Stock_Search_Placeholder: _TL_('Search stock images (provided by Shutterstock)'),\r\n  ImageExperience_SuggestionExceedsMaximum: _TL_('Suggestions found from your site exceed the maximum. We will restrict to max {{imageSize}} images.'),\r\n  ImageExperience_Thumbnail: _TL_('Edit thumbnail'),\r\n  ImageExperience_ThumbnailDescription: _TL_('Thumbnail images show before a video starts and after it ends.'),\r\n  ImageExperience_Timeout: _TL_('Scan your site timeout.'),\r\n  ImageExperience_UnsavedDraft_Warn: _TL_('Remember to click the Save button in the bottom to apply the changes to the videos.'),\r\n  ImageExperience_UploadCaptionFilePlaceholder: _TL_('Upload SRT files.'),\r\n  ImageExperience_Video_Delete_Confirm: _TL_('Are you sure you want to delete selected video?'),\r\n  ImageExperience_Video_Editor_Description: _TL_('Edit your video to how you want it appearing in your ad.'),\r\n  ImageExperience_Video_Error_AssetDataInvalidAspect: _TL_('Video aspect must range from 16:9 to 9:16.'),\r\n  ImageExperience_Video_Error_AssetDataInvalidHeight: _TL_('Video height must be between 120 and 2160 pixels.'),\r\n  ImageExperience_Video_Error_AssetDataInvalidWidth: _TL_('Video width must be between 120 and 4096 pixels.'),\r\n  ImageExperience_Video_Error_AssetIsUsed: _TL_('This video can’t be deleted because it’s associated with another ad. To delete a video, you must first remove it from all of the ads that are using it.'),\r\n  ImageExperience_Video_Error_DuplicateVideoResource: _TL_('The captions file you selected contain locale that had been applied to video, please remove and try again.'),\r\n  ImageExperience_Video_Error_FileNameWrongFormat: _TL_('You uploaded a caption file with an incorrect file name or unsupported locale. Please use this format: filename.locale.srt. And make sure the locale is in the support list.'),\r\n  ImageExperience_Video_Error_InvalidDuration: _TL_('Video must range from 6 to 120 seconds in duration.'),\r\n  ImageExperience_Video_Error_InvalidId: _TL_('The video you select is not valid.'),\r\n  ImageExperience_Video_Error_InvalidUrl: _TL_('The URL you gave us doesn’t link to a working video. Please check the URL and try again.'),\r\n  ImageExperience_Video_Error_LoadVideoFail_Template: _TL_('Error occurred during video loading: {{error}}.'),\r\n  ImageExperience_Video_Error_UploadFileFormatNotSupported: _TL_('Data in the file your selected is not a supported format.'),\r\n  ImageExperience_Video_Error_VideoOverweight: _TL_('Video is too large.'),\r\n  ImageExperience_Video_FileSize_Too_Big_Template: _TL_('Your video file size is greater than the allowable limit. Please upload a video that is less than {{maximumFileSize}} GB.'),\r\n  ImageExperience_Video_List_Description: _TL_('Add your own videos to your ad, or choose from the most recently used videos.'),\r\n  ImageExperience_Video_List_Label: _TL_('Videos'),\r\n  ImageExperience_Video_Label: _TL_('Video'),\r\n  ImageExperience_Video_NewName: _TL_('New video name'),\r\n  ImageExperience_Video_NoPreview: _TL_('Preview is unavailable when video is not ready or valid.'),\r\n  ImageExperience_Video_Ratio_16x9: _TL_('16 : 9'),\r\n  ImageExperience_Video_Ratio_1x1: _TL_('1 : 1'),\r\n  ImageExperience_Video_Ratio_4x5: _TL_('4 : 5'),\r\n  ImageExperience_Video_Ratio_5x4: _TL_('5 : 4'),\r\n  ImageExperience_Video_Ratio_9x16: _TL_('9 : 16'),\r\n  ImageExperience_Video_RemoveAllWithUpload_Confirm: _TL_('Do you want to stop uploading the video?'),\r\n  ImageExperience_Video_Requirement: _TL_('Video requirement'),\r\n  ImageExperience_Video_Status_Encoding: _TL_('Processing...'),\r\n  ImageExperience_Video_Status_Failed: _TL_('Invalid video'),\r\n  ImageExperience_Video_Status_Unverified: _TL_('Downloading...'),\r\n  ImageExperience_Video_Upload_Cancel_Confirm: _TL_('This will stop the video upload. Do you want to proceed?'),\r\n  ImageExperience_Video_UploadError_InternetLost: _TL_('It looks like your internet connection was lost. Check your connection and try again.'),\r\n  ImageExperience_Video_UploadError_NoInternet: _TL_('Upload failed: Please check your internet connection and try again.'),\r\n  ImageExperience_Video_UploadError_Template: _TL_('Upload failed: Please check your internet connection and try again. '),\r\n  ImageExperience_VideoEditFail: _TL_('Edit video failed.'),\r\n  ImageExperience_VideoNoCustomThumbnail_NoPreview: _TL_('Select image to see preview.'),\r\n  ImageExperience_VideosMissing: _TL_('Your ad is missing a video with all of the required aspect ratios.'),\r\n  ImageExperience_VideosRequired: _TL_('You need to add a video to save your audience ad.'),\r\n  ImageExperience_VideosUploading: _TL_('You can cancel or save the ad after the video has been uploaded.'),\r\n  ImageExperience_VideoUrlValidationFailTemplate: _TL_('Video url validate failed: {{error}}'),\r\n  ImageExperience_View_Placements_Example: _TL_('View example placements'),\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  DataFetcher,\r\n  Store,\r\n  middlewareTypes,\r\n  createInstrumentationMiddleware,\r\n  createErrorMiddleware,\r\n} from '@bingads-webui-react/overreact';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { useCCEnvironment } from '@bingads-webui/overreact-cc';\r\nimport {\r\n  getRequestor as getCampaignRequestor,\r\n  getEnvironmentInstance as getCampaignEnvInstance,\r\n  middlewares,\r\n} from '@bingads-webui/overreact-odata-campaign';\r\nimport { getDefaultHeaderObj } from '@bingads-webui/overreact-bingads';\r\nimport { getConfig } from '@bingads-webui-campaign/odata-config';\r\nimport { redirectToLogin } from '@bingads-webui-campaign/global-app-init';\r\n\r\nconst ExpectedErrorStrings = [\r\n  'TypeError: Failed to fetch',\r\n  'TypeError: Load failed',\r\n  'TypeError: NetworkError when attempting to fetch resource',\r\n  '{\"readyState\":0,\"status\":0,\"statusText\":\"error\",\"headers\":{}}',\r\n].map(errorString => errorString.toLowerCase());\r\nfunction isExpectedErrorString(error) {\r\n  if (!error) {\r\n    return false;\r\n  }\r\n\r\n  const errorMessage = _.isError(error) ? error : JSON.stringify(error);\r\n  const errorMessageInLowerCase = _.isFunction(_.get(errorMessage, 'toLowerCase')) ? errorMessage.toLowerCase() : '';\r\n  return _.some(\r\n    ExpectedErrorStrings,\r\n    errorString => errorMessageInLowerCase.indexOf(errorString) > -1\r\n  );\r\n}\r\n\r\nconst store = new Store();\r\n\r\nfunction useCampaignEnvironment(params) {\r\n  const {\r\n    serviceRoot, token, middleWares,\r\n  } = params;\r\n\r\n  return useMemo(() => {\r\n    const requestor = getCampaignRequestor(\r\n      serviceRoot,\r\n      {\r\n        ...getDefaultHeaderObj(),\r\n        Authorization: `CCMTSmallToken ${token}`,\r\n      }\r\n    );\r\n\r\n    return getCampaignEnvInstance(requestor, store, middleWares);\r\n  }, [middleWares, serviceRoot, token]);\r\n}\r\n\r\nexport const OverreactDataFetcher = (props) => {\r\n  const serverContext = useContext(ServerContext);\r\n  const {\r\n    Token,\r\n    CurrentLocale,\r\n    ServicesEndpoints: {\r\n      ClientCenterUIAPI,\r\n      CampaignAPI, // path to ODataApi root, should have trailing slash\r\n    },\r\n    PageTrackingId,\r\n    CurrentUser,\r\n  } = serverContext;\r\n  const CampaignAPIPath = 'Campaign/V2';\r\n  const CultureLcid = serverContext.CurrentUser.LocaleID;\r\n\r\n  const {\r\n    LocaleID,\r\n    Locale,\r\n  } = CurrentUser || {};\r\n\r\n  const lcid = CultureLcid || LocaleID || Locale;\r\n  const instrumentation = useContext(InstrumentationContext);\r\n  const activity = useMemo(\r\n    () => {\r\n      const scenario = instrumentation && instrumentation.overreactRequest && instrumentation.overreactRequest.create();\r\n      const act = scenario ? scenario.logger.create() : {\r\n        trace: _.noop,\r\n        error: _.noop,\r\n        ajax: _.noop,\r\n      };\r\n      return act;\r\n    },\r\n    [instrumentation]\r\n  );\r\n\r\n  const errorProcessor = useCallback((error) => {\r\n    if (error && error.status === 401) {\r\n      activity.trace('overreact data fetcher starts sign out redirection');\r\n      redirectToLogin(serverContext);\r\n    }\r\n  }, [activity, serverContext]);\r\n\r\n  const instrumentationMiddleware = useMemo(() => ({\r\n    [middlewareTypes.ERROR]: createErrorMiddleware({\r\n      errorProcessor,\r\n    }),\r\n    [middlewareTypes.INSTRUMENTATION]: createInstrumentationMiddleware({\r\n      pageTrackingId: PageTrackingId,\r\n      // traceFunc is called on error and the error is mapped to user error using errorMappers\r\n      // errorFunc is called on error (no result - server or network error)\r\n      // perfFunc is called pre and post request\r\n      loggerFunc: {\r\n        traceFunc: ({\r\n          requestId, message, api, httpMethod,\r\n        }) => {\r\n          activity.trace(message || '', api, requestId, httpMethod);\r\n        },\r\n        errorFunc: ({\r\n          requestId, api, httpMethod, message,\r\n        }) => {\r\n          activity.error(message || '', api, requestId, null /* impact user */, httpMethod);\r\n        },\r\n        perfFunc: ({\r\n          requestId, api, httpMethod, timeTaken, message, isMethodEnter,\r\n        }) => {\r\n          activity.ajax(\r\n            requestId, api, isMethodEnter,\r\n            httpMethod, timeTaken, null /* pass */, message\r\n          );\r\n        },\r\n      },\r\n      errorMappers: [{\r\n        check: (error) => {\r\n          if (!error) {\r\n            return false;\r\n          }\r\n          return isExpectedErrorString(error);\r\n        },\r\n      }],\r\n      stubOptions: { lcid },\r\n    }),\r\n  }), [PageTrackingId, activity, errorProcessor, lcid]);\r\n\r\n  const allMiddlewares = useMemo(\r\n    () => ({ ...middlewares, ...instrumentationMiddleware }),\r\n    [instrumentationMiddleware]\r\n  );\r\n\r\n  const campaignOdataRoot = useMemo(() => {\r\n    const odataConfig = getConfig();\r\n    const odataPath = CampaignAPIPath || odataConfig.odataPath;\r\n    return `${CampaignAPI}${odataPath}`;\r\n  }, [CampaignAPI, CampaignAPIPath]);\r\n\r\n  const overreactCcEnv = useCCEnvironment({\r\n    serviceRoot: ClientCenterUIAPI,\r\n    store,\r\n    middlewares: allMiddlewares,\r\n    locale: CurrentLocale,\r\n  });\r\n\r\n  const overreactCampaignEnv = useCampaignEnvironment({\r\n    serviceRoot: campaignOdataRoot,\r\n    token: Token,\r\n    middlewares: allMiddlewares,\r\n  });\r\n\r\n  return (\r\n    <DataFetcher\r\n      environment={overreactCcEnv}\r\n      environments={[\r\n        overreactCcEnv,\r\n        overreactCampaignEnv,\r\n      ]}\r\n    >\r\n      {props.children}\r\n    </DataFetcher>\r\n  );\r\n};\r\n\r\nOverreactDataFetcher.propTypes = {\r\n  children: PropTypes.oneOfType([\r\n    PropTypes.arrayOf(PropTypes.node),\r\n    PropTypes.node,\r\n  ]).isRequired,\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { buildLegacyI18n, validationLocalization } from '@bingads-webui/build-legacy-i18n';\r\nimport classNames from 'classnames';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport ablEnforcementLegacyStrings from '@bingads-webui-cc-react/abl-enforcement-legacy-strings';\r\nimport ablLegacyStrings from '@bingads-webui-cc-react/address-tax-form-legacy-strings';\r\nimport pidlLegacyString from '@bingads-webui-cc-react/pidl-payment-method-actions-base-legacy-strings';\r\nimport entityUtilLegacyString from '@bingads-webui-clientcenter/entity-utils-legacy-strings';\r\nimport termAndConditionsLegacyString from '@bingads-webui-cc-react/terms-and-conditions-legacy-strings';\r\nimport autoPbcLightboxLegacyStrings from '@bingads-webui-cc-react/auto-pbc-lightbox-legacy-strings';\r\nimport offlinePiLegacyStrings from '@bingads-webui-cc-react/check-bank-transfer-legacy-strings';\r\nimport addFundsLegacyString from '@bingads-webui-cc-react/signup-add-funds-legacy-strings';\r\nimport { aggregateStrings } from '@bingads-webui-cc-react/account-business-location-legacy-strings';\r\nimport { fileDraggerLegacyString } from '@bingads-webui-campaign-react/file-dragger';\r\nimport { msSupportChatLocalization, requestCallModalLocalization } from '@bingads-webui-react/bingads-backbone-header-strings';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyI18nContext } from '@bingads-webui-react/legacy-i18n-context';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getInstrumentation, getInstrumentationService, InstrumentationWithServiceProvider } from '@bingads-webui-campaign-react/pmax-lite-instrumentation';\r\nimport { ServerContext, ServerContextWithActionProvider, withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { imageExperienceLegacyStrings } from './image-experience-legacy-strings';\r\nimport { OverreactDataFetcher } from './overreact-fetcher';\r\n\r\nconst getStyles = () => ({\r\n  container: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    overflow: 'hidden',\r\n    '& .fui-FluentProvider': {\r\n      overflow: 'auto',\r\n      flex: 1,\r\n    },\r\n    '& .collapse-content .fui-FluentProvider': {\r\n      overflow: 'visible',\r\n    },\r\n  },\r\n  '@global': {\r\n    '.fui-Toaster': {\r\n      bottom: '100px !important',\r\n      left: '60px !important',\r\n    },\r\n  },\r\n});\r\n\r\nconst SDKPostSignUpContextInteranal = React.memo(({\r\n  serverContext,\r\n  subSystemName,\r\n  perfMarkerName,\r\n  children,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [\r\n    ValidationStringMap,\r\n    validationLocalization,\r\n    ablEnforcementLegacyStrings,\r\n    autoPbcLightboxLegacyStrings,\r\n    ablLegacyStrings,\r\n    offlinePiLegacyStrings,\r\n    pidlLegacyString,\r\n    entityUtilLegacyString,\r\n    termAndConditionsLegacyString,\r\n    addFundsLegacyString,\r\n    msSupportChatLocalization,\r\n    requestCallModalLocalization,\r\n    aggregateStrings,\r\n    fileDraggerLegacyString,\r\n    imageExperienceLegacyStrings,\r\n  ]), [i18n]);\r\n  const finalServerContext = useMemo(() => ({\r\n    ...serverContext,\r\n    CCBaseUrl: serverContext.Urls.ClientCenterBaseUrl,\r\n  }), [serverContext]);\r\n\r\n  const instrumentation = useMemo(() => getInstrumentation({\r\n    serverContext,\r\n    devConfig: {},\r\n    subSystemName,\r\n  }), [serverContext, subSystemName]);\r\n\r\n  const instrumentationService = useMemo(() => getInstrumentationService({\r\n    instrumentation,\r\n    serverContext,\r\n  }), [instrumentation, serverContext]);\r\n\r\n  const styles = useDefaultStyles(getStyles);\r\n\r\n  return (\r\n    <div className={classNames(styles.container, 'sdk-page-container')}>\r\n      <FluentProvider theme={webLightTheme}>\r\n        <OverreactDataFetcher>\r\n          <LegacyI18nContext.Provider value={legacyI18n}>\r\n            <ServerContextWithActionProvider serverContext={finalServerContext}>\r\n              <InstrumentationWithServiceProvider context={instrumentationService}>\r\n                <ServerContext.Provider value={finalServerContext}>\r\n                  <PerformanceMarkerProvider\r\n                    name={perfMarkerName}\r\n                    instrumentation={instrumentation}\r\n                    immediateDone={false}\r\n                  >\r\n                    {children}\r\n                  </PerformanceMarkerProvider>\r\n                </ServerContext.Provider>\r\n              </InstrumentationWithServiceProvider>\r\n            </ServerContextWithActionProvider>\r\n          </LegacyI18nContext.Provider>\r\n        </OverreactDataFetcher>\r\n      </FluentProvider>\r\n    </div>\r\n  );\r\n});\r\n\r\nSDKPostSignUpContextInteranal.propTypes = {\r\n  serverContext: PropTypes.shape({\r\n    Urls: PropTypes.shape({\r\n      ClientCenterBaseUrl: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n  }).isRequired,\r\n  subSystemName: PropTypes.string,\r\n  perfMarkerName: PropTypes.string,\r\n  children: PropTypes.element.isRequired,\r\n};\r\n\r\nSDKPostSignUpContextInteranal.defaultProps = {\r\n  subSystemName: 'sdk-campaign-overview',\r\n  perfMarkerName: 'MSAdsSDK',\r\n};\r\n\r\nexport const SDKPostSignUpContext = withServerContext(SDKPostSignUpContextInteranal);\r\n","import { useCallback, useContext } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\n\r\nexport const useBackToOverview = ({ siteMap }) => {\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const backToOverviewPage = useCallback(() => {\r\n    const route = getRoutePathById(siteMap, 'sdk-campaign-overview');\r\n    scope.save(route);\r\n  }, [scope, siteMap]);\r\n\r\n  return {\r\n    backToOverviewPage,\r\n  };\r\n};\r\n","/* eslint-disable react/prop-types */\r\nimport React from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport classnames from 'classnames';\r\nimport { ArrowLeft24Regular } from '@fluentui/react-icons';\r\nimport { Button } from '@fluentui/react-components';\r\n\r\nconst getStyles = () => ({\r\n  sdkPageNavigationHeader: {\r\n    marginTop: 12,\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    height: 32,\r\n    padding: '0 43px',\r\n  },\r\n  backBtn: {\r\n    color: '#0F6CBD',\r\n  },\r\n  title: {\r\n    margin: 0,\r\n    fontSize: 26,\r\n    lineHeight: '32px',\r\n    color: '#242424',\r\n  },\r\n});\r\n\r\ninterface ISDKPageNavigationHeader {\r\n  title: string;\r\n  onClickBackButton: () => void;\r\n}\r\n\r\nexport const SDKPageNavigationHeader: React.FC<ISDKPageNavigationHeader> = React.memo(({ title, onClickBackButton }) => {\r\n  const classes = useDefaultStyles(getStyles);\r\n\r\n  return (\r\n    <div className={classnames(classes.sdkPageNavigationHeader, 'sdk-page-navigation-header')}>\r\n      <Button\r\n        appearance=\"transparent\"\r\n        icon={<ArrowLeft24Regular className={classnames(classes.backBtn, 'back-btn')} />}\r\n        onClick={onClickBackButton}\r\n      />\r\n      <h2 className={classes.title}>{title}</h2>\r\n    </div>\r\n  );\r\n});\r\n","/* eslint-disable react/prop-types */\r\nimport React, { useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst getStyles = () => ({\r\n  sdkSettingsActionBar: {\r\n    padding: '12px 38px',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n  },\r\n  cancelBtn: {\r\n    '&.fui-Button': {\r\n      marginRight: 8,\r\n    },\r\n  },\r\n});\r\n\r\ninterface ISDKSettingsActionBar {\r\n  onCancel: () => void;\r\n  onSubmit: () => void;\r\n}\r\n\r\nexport const SDKSettingsActionBar: React.FC<ISDKSettingsActionBar> = React.memo(({\r\n  onCancel,\r\n  onSubmit,\r\n}) => {\r\n  const classes = useDefaultStyles(getStyles);\r\n  const i18n = useContext(I18nContext) as any;\r\n\r\n  return (\r\n    <div className={classnames(classes.sdkSettingsActionBar, 'sdk-settings-action-bar')} >\r\n      <Button onClick={onCancel} className={classnames(classes.cancelBtn, 'cancel-button')}>{i18n.getString(_TL_('Cancel'))}</Button>\r\n      <Button onClick={onSubmit} appearance=\"primary\" className=\"save-button\">{i18n.getString(_TL_('Save'))}</Button>\r\n    </div>\r\n  );\r\n});\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FORM_STATES, Form, useFormService } from '@bingads-webui-react/form';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withSiteMap, processorSet, processor } from '@bingads-webui-react/with-site-map';\r\nimport { useBackToOverview } from './use-back-to-overview';\r\nimport { useSettingsFormAction } from './use-settings-form-actions';\r\nimport { SDKSettingsActionBar } from './action-bar';\r\n\r\nconst getStyles = () => ({\r\n  sdkSettingsFormWrapper: {\r\n    flex: 1,\r\n    display: 'flex',\r\n    overflow: 'hidden',\r\n    flexDirection: 'column',\r\n    margin: '24px 43px 27px 43px',\r\n    boxShadow: '0px 0px 2px 0px rgba(0, 0, 0, 0.12), 0px 2px 4px 0px rgba(0, 0, 0, 0.14)',\r\n    border: '1px solid transparent',\r\n    '& .react-block-ui, & .react-block-ui-none': {\r\n      flex: 1,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      overflow: 'hidden',\r\n    },\r\n  },\r\n  sdkSettingsForm: {\r\n    flex: 1,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    overflow: 'auto',\r\n    borderRadius: 4,\r\n    background: '#f9f9f9',\r\n    padding: '24px 32px 24px 32px',\r\n  },\r\n});\r\n\r\nconst SDKSettingsViewInternal = React.memo((props) => {\r\n  const {\r\n    ContentComponent, siteMap,\r\n  } = props;\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useDefaultStyles(getStyles);\r\n  const { backToOverviewPage } = useBackToOverview({ siteMap });\r\n  const { onClickSaveButton } = useSettingsFormAction(props);\r\n  const { state } = useFormService();\r\n\r\n  return (\r\n    <div className={classes.sdkSettingsFormWrapper}>\r\n      <UiBlocker blocking={state.matches(FORM_STATES.SAVING)} loadingText={i18n.getString(_TL_('Saving...'))}>\r\n        <div className={classes.sdkSettingsForm}>\r\n          <ContentComponent {...props} />\r\n        </div>\r\n        <SDKSettingsActionBar onCancel={backToOverviewPage} onSubmit={onClickSaveButton} />\r\n      </UiBlocker>\r\n    </div>\r\n  );\r\n});\r\nSDKSettingsViewInternal.propTypes = {\r\n  siteMap: PropTypes.shape({}).isRequired,\r\n  ContentComponent: PropTypes.func.isRequired,\r\n  repository: PropTypes.func.isRequired,\r\n};\r\n\r\nconst SDKSettingsView = withSiteMap(SDKSettingsViewInternal, [processor.processPath, ...processorSet.basic]);\r\n\r\nconst SDKSettingsFormInternal = ({\r\n  id, ContentComponent, repository, viewProps, siteMap,\r\n}) => {\r\n  const FormViewWrapper = useCallback(({\r\n    data,\r\n    onDataChange,\r\n  }) => (\r\n    <SDKSettingsView\r\n      {...viewProps}\r\n      ContentComponent={ContentComponent}\r\n      repository={repository}\r\n      data={data}\r\n      onDataChange={onDataChange}\r\n    />\r\n  ), [ContentComponent, repository, viewProps]);\r\n\r\n  const { backToOverviewPage } = useBackToOverview({ siteMap });\r\n  const config = useMemo(() => ({\r\n    id,\r\n    view: FormViewWrapper,\r\n    repository,\r\n    machineOptions: {\r\n      initialState: FORM_STATES.FETCHING,\r\n      actions: {\r\n        onDoneSaving: backToOverviewPage,\r\n      },\r\n    },\r\n  }), [FormViewWrapper, backToOverviewPage, id, repository]);\r\n\r\n  return (\r\n    <Form config={config} />\r\n  );\r\n};\r\n\r\nSDKSettingsFormInternal.propTypes = {\r\n  siteMap: PropTypes.shape({}).isRequired,\r\n  id: PropTypes.string.isRequired,\r\n  ContentComponent: PropTypes.func.isRequired,\r\n  repository: PropTypes.func.isRequired,\r\n  viewProps: PropTypes.shape({}),\r\n};\r\n\r\nSDKSettingsFormInternal.defaultProps = {\r\n  viewProps: {},\r\n};\r\n\r\nexport const SDKSettingsForm = withSiteMap(SDKSettingsFormInternal, [processor.processPath, ...processorSet.basic]);\r\n","import { useCallback } from 'react';\r\nimport { useFormService, FORM_EVENTS } from '@bingads-webui-react/form';\r\nimport { useBackToOverview } from './use-back-to-overview';\r\n\r\n\r\nexport const useSettingsFormAction = ({ siteMap }) => {\r\n  const { send } = useFormService();\r\n\r\n  const { backToOverviewPage } = useBackToOverview({ siteMap });\r\n  // const [isSaving, setIsSaving] = useState(false);\r\n  // const { save } = repository();\r\n  const onClickSaveButton = useCallback(() => {\r\n    send(FORM_EVENTS.SAVE);\r\n  }, [send]);\r\n\r\n  return {\r\n    onClickBackButton: backToOverviewPage,\r\n    onClickSaveButton,\r\n  };\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { SDKPostSignUpContext } from '@bingads-webui-campaign-react/sdk-post-signup-context';\r\nimport { withSiteMap, processorSet, processor } from '@bingads-webui-react/with-site-map';\r\nimport { useBackToOverview } from './use-back-to-overview';\r\nimport { SDKPageNavigationHeader } from './navigation-header';\r\nimport { SDKSettingsForm } from './sdk-settings-form';\r\n\r\nconst getStyles = () => ({\r\n  sdkSettingsPage: {\r\n    flex: 1,\r\n    overflow: 'hidden',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  sdkSettingsFormWrapper: {\r\n    flex: 1,\r\n    display: 'flex',\r\n    overflow: 'hidden',\r\n    flexDirection: 'column',\r\n    margin: '24px 43px 27px 43px',\r\n    boxShadow: '0px 0px 2px 0px rgba(0, 0, 0, 0.12), 0px 2px 4px 0px rgba(0, 0, 0, 0.14)',\r\n    border: '1px solid transparent',\r\n    '& .react-block-ui, & .react-block-ui-none': {\r\n      flex: 1,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      overflow: 'auto',\r\n    },\r\n  },\r\n  sdkSettingsForm: {\r\n    flex: 1,\r\n    display: 'flex',\r\n    overflow: 'hidden',\r\n    borderRadius: 4,\r\n    background: '#f9f9f9',\r\n    padding: '24px 32px 24px 32px',\r\n  },\r\n  '@global': {\r\n    '& .fui-FluentProvider': {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n    },\r\n  },\r\n});\r\n\r\nconst SDKSettingsPageInternal = React.memo(({\r\n  siteMap,\r\n  title,\r\n  className,\r\n  formProps,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useDefaultStyles(getStyles);\r\n  const { backToOverviewPage } = useBackToOverview({ siteMap });\r\n\r\n  return (\r\n    <div className={classNames(classes.sdkSettingsPage, className)}>\r\n      <SDKPageNavigationHeader title={i18n.getString(title)} onClickBackButton={backToOverviewPage} />\r\n      <SDKPostSignUpContext>\r\n        <SDKSettingsForm\r\n          {...formProps}\r\n        />\r\n      </SDKPostSignUpContext>\r\n    </div>\r\n  );\r\n});\r\n\r\nSDKSettingsPageInternal.propTypes = {\r\n  siteMap: PropTypes.shape({}).isRequired,\r\n  view: PropTypes.func.isRequired,\r\n  title: PropTypes.string.isRequired,\r\n  className: PropTypes.string,\r\n  formProps: PropTypes.shape({\r\n    id: PropTypes.string.isRequired,\r\n    ContentComponent: PropTypes.func.isRequired,\r\n    repository: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nSDKSettingsPageInternal.defaultProps = {\r\n  className: '',\r\n};\r\n\r\nexport const SDKSettingsPage = withSiteMap(SDKSettingsPageInternal, [processor.processPath, ...processorSet.basic]);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nexport const wizardContentStyle = {\r\n  display: 'flex',\r\n  flexDirection: 'column',\r\n  flex: 1,\r\n  overflow: 'hidden',\r\n  borderRadius: 4,\r\n  boxShadow: '0px 0px 2px 0px rgba(0, 0, 0, 0.12), 0px 2px 4px 0px rgba(0, 0, 0, 0.14)',\r\n  border: '1px solid transparent',\r\n  margin: '24px 43px 27px 43px',\r\n};\r\n\r\nconst getStyles = (_, { palette }) => ({\r\n  defaultLayout: {\r\n    height: '100%',\r\n    width: '100%',\r\n    '& .react-block-ui-none, .react-block-ui': {\r\n      height: '100%',\r\n      width: '100%',\r\n    },\r\n    '& .error': {\r\n      color: '#A80000',\r\n    },\r\n  },\r\n  mainContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    overflow: 'hidden',\r\n    height: '100%',\r\n    width: '100%',\r\n  },\r\n  stepListContainer: {\r\n    minWidth: '228px',\r\n    overflow: 'hidden auto',\r\n  },\r\n  wizardContent: wizardContentStyle,\r\n  stepContentContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    overflow: 'auto',\r\n    background: palette.neutralLighterAlt,\r\n    padding: '24px 32px',\r\n    '&>div': {\r\n      marginBottom: 48,\r\n    },\r\n    '& .pmax-targeting-step-shell, & .budget-step': {\r\n      paddingTop: 20,\r\n    },\r\n  },\r\n  footerContainer: {\r\n    borderTop: `1px solid ${palette.neutralQuaternaryAlt}`,\r\n    padding: '16px 32px',\r\n  },\r\n  '@global': {\r\n    '.fui-Toaster': {\r\n      bottom: '100px !important',\r\n      left: '60px !important',\r\n    },\r\n  },\r\n});\r\n\r\nexport const SDKWizardTemplate = ({ items }) => {\r\n  const {\r\n    Blocker = React.Fragment,\r\n    LoadingShimmer,\r\n    StepList,\r\n    StepContainer,\r\n    Footer,\r\n  } = items;\r\n  const classes = useDefaultStyles(getStyles);\r\n\r\n  return (\r\n    <div className={classNames('sdk-wizard-layout', classes.defaultLayout)}>\r\n      <Blocker>\r\n        <div className={classNames('main-container', classes.mainContainer)}>\r\n          <div className={classNames('wizard-content', 'step-content-and-footer', classes.wizardContent)}>\r\n            <div className={classNames('step-list-container', classes.stepListContainer)}>\r\n              <StepList />\r\n            </div>\r\n            <div className={classNames('step-content-container', classes.stepContentContainer)}>\r\n              <LoadingShimmer />\r\n              <StepContainer />\r\n            </div>\r\n            <div className={classNames('footer-container', classes.footerContainer)}>\r\n              <Footer />\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </Blocker>\r\n    </div>\r\n  );\r\n};\r\n\r\nSDKWizardTemplate.propTypes = {\r\n  items: PropTypes.shape({\r\n    Blocker: PropTypes.func,\r\n    LoadingShimmer: PropTypes.func,\r\n    StepList: PropTypes.func,\r\n    StepContainer: PropTypes.func.isRequired,\r\n    Footer: PropTypes.func,\r\n    CancelDialog: PropTypes.func,\r\n    StepHeader: PropTypes.func,\r\n  }).isRequired,\r\n  config: PropTypes.shape({\r\n    title: PropTypes.string.isRequired,\r\n    description: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const SDKWizardStepProgress = React.memo(({ status }) => {\r\n  if (status === 'selected') {\r\n    return (\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"193\" height=\"3\" viewBox=\"0 0 193 3\" fill=\"none\">\r\n        <line x1=\"0.0585937\" y1=\"1.27148\" x2=\"192.059\" y2=\"1.27148\" stroke=\"url(#paint0_linear_857_15772)\" strokeWidth=\"2\" />\r\n        <defs>\r\n          <linearGradient id=\"paint0_linear_857_15772\" x1=\"192.059\" y1=\"2.27148\" x2=\"0.0585938\" y2=\"2.27148\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop offset=\"0.210938\" stopColor=\"#0078D4\" />\r\n            <stop offset=\"0.783854\" stopColor=\"#107C10\" />\r\n          </linearGradient>\r\n        </defs>\r\n      </svg>\r\n    );\r\n  } else if (status === 'default') {\r\n    return (\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"193\" height=\"3\" viewBox=\"0 0 193 3\" fill=\"none\">\r\n        <line x1=\"0.0585937\" y1=\"1.03516\" x2=\"192.059\" y2=\"1.03516\" stroke=\"#C8C6C4\" strokeWidth=\"2\" />\r\n      </svg>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"193\" height=\"3\" viewBox=\"0 0 193 3\" fill=\"none\">\r\n      <line x1=\"0.0585937\" y1=\"1.03516\" x2=\"192.059\" y2=\"1.03516\" stroke=\"#107C10\" strokeWidth=\"2\" />\r\n    </svg>\r\n  );\r\n});\r\n\r\nSDKWizardStepProgress.propTypes = {\r\n  status: PropTypes.oneOf(['selected', 'behind', 'default']).isRequired,\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport {\r\n  useWizardService,\r\n  getCurrentStepId,\r\n} from '@bingads-webui-react/wizard';\r\nimport { StepList as ResponsiveStepList } from '@bingads-webui-react/wizard-ui-library';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { getAllExpandStepIds, parseStepConfig, getDefaultItemAriaLabel } from '@bingads-webui-react/step-progress-indicator';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport classNames from 'classnames';\r\nimport { CheckmarkCircle20Regular, Circle20Filled, Circle20Regular } from '@fluentui/react-icons';\r\nimport { SDKWizardStepProgress } from './sdk-wizard-step-progress';\r\n\r\nconst getStyles = () => ({\r\n  listContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    padding: 16,\r\n    borderBottom: '1px solid #E0E0E0',\r\n  },\r\n  listItem: {\r\n    cursor: 'pointer',\r\n  },\r\n  listItemProgress: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  icon: {\r\n    '&.sdk-step-list-icon-selected': {\r\n      color: '#0078D4',\r\n    },\r\n    '&.sdk-step-list-icon-behind': {\r\n      color: '#107C10',\r\n    },\r\n    '&.sdk-step-list-icon-default': {\r\n      color: '#C8C6C4',\r\n    },\r\n  },\r\n  title: {\r\n    '&.sdk-wizard-step-title-selected': {\r\n      fontWeight: 'bold',\r\n    },\r\n    '&.sdk-wizard-step-title-default': {\r\n      color: '#A19F9D',\r\n    },\r\n  },\r\n});\r\n\r\nconst getIcon = (step, styles) => {\r\n  if (step.isSelected || step.containsSelected) {\r\n    return <Circle20Filled className={classNames('sdk-step-list-icon-selected', 'sdk-step-list-icon', styles.icon)} />;\r\n  } else if (step.isBehind) {\r\n    return <CheckmarkCircle20Regular className={classNames('sdk-step-list-icon-behind', 'sdk-step-list-icon', styles.icon)} />;\r\n  }\r\n\r\n  return <Circle20Regular className={classNames('sdk-step-list-icon-default', 'sdk-step-list-icon', styles.icon)} />;\r\n};\r\n\r\nconst getProgressStatus = (step) => {\r\n  let status = 'default';\r\n  if (step.isSelected || step.containsSelected) {\r\n    status = 'selected';\r\n  } else if (step.isBehind) {\r\n    status = 'behind';\r\n  }\r\n  return status;\r\n};\r\n\r\nexport const SDKWizardStepListComponent = ({ steps, getOnItemClickFn, getItemAriaLabel }) => {\r\n  const styles = useDefaultStyles(getStyles);\r\n  const i18n = useContext(I18nContext);\r\n\r\n  return (\r\n    <div className={classNames('sdk-wizard-step-list', styles.listContainer)}>\r\n      {_.map(steps, (step, i) => {\r\n        if (!step.isEnabled || !step.title) {\r\n          return null;\r\n        }\r\n\r\n        const nextStep = i < steps.length - 1 ? steps[i + 1] : null;\r\n        const icon = getIcon(step, styles);\r\n        const onItemClick = getOnItemClickFn ? getOnItemClickFn(step) : undefined;\r\n        const onItemKeyDown = onItemClick ? (e) => {\r\n          if (e.key === 'Enter' || e.key === ' ') {\r\n            onItemClick();\r\n          }\r\n        } : undefined;\r\n\r\n        const itemAriaLabel = getItemAriaLabel ? getItemAriaLabel(step) : getDefaultItemAriaLabel(step, i18n);\r\n        const a11yProps = onItemClick ? {\r\n          role: 'button',\r\n          tabIndex: 0,\r\n          onClick: onItemClick,\r\n          onKeyDown: onItemKeyDown,\r\n          'aria-label': itemAriaLabel,\r\n        } : {};\r\n\r\n        return (\r\n          <div\r\n            className={classNames('sdk-wizard-step-list-item', `sdk-wizard-step-list-item-${getProgressStatus(step)}`, styles.listItem)}\r\n            {...a11yProps}\r\n            key={step.title}\r\n          >\r\n            <div className={classNames('sdk-wizard-step-progress', styles.listItemProgress)}>\r\n              <div className={classNames('sdk-wizard-step-list-icon', styles.iconButton)}>\r\n                {icon}\r\n              </div>\r\n              {i < steps.length - 1 && <SDKWizardStepProgress status={getProgressStatus(nextStep)} />}\r\n            </div>\r\n            <div className={classNames(`sdk-wizard-step-title-${getProgressStatus(step)}`, styles.title)} title={step.title}>\r\n              {step.title}\r\n            </div>\r\n            {step.renderDescription && step.renderDescription(step)}\r\n          </div>\r\n        );\r\n      })}\r\n    </div>\r\n  );\r\n};\r\n\r\nSDKWizardStepListComponent.propTypes = {\r\n  steps: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string.isRequired,\r\n    title: PropTypes.string,\r\n  })).isRequired,\r\n  getOnItemClickFn: PropTypes.func.isRequired,\r\n  getItemAriaLabel: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const SDKWizardStepListInternal = (props) => {\r\n  const {\r\n    config, getOnItemClickFn, getItemAriaLabel,\r\n  } = props;\r\n  const { state } = useWizardService();\r\n  const currentStepId = getCurrentStepId(state);\r\n  const currentFlow = useMemo(() => {\r\n    if (state.context.currentFlow) {\r\n      return state.context.currentFlow;\r\n    }\r\n    return getAllExpandStepIds(config);\r\n  }, [config, state.context.currentFlow]);\r\n  const steps = useMemo(() => parseStepConfig(config, currentStepId, currentFlow).filter(step => step.isEnabled && step.title), [config, currentFlow, currentStepId]);\r\n\r\n  return (\r\n    <SDKWizardStepListComponent steps={steps} getOnItemClickFn={getOnItemClickFn} getItemAriaLabel={getItemAriaLabel} />\r\n  );\r\n};\r\n\r\nSDKWizardStepListInternal.propTypes = {\r\n  config: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string.isRequired,\r\n    title: PropTypes.string,\r\n    steps: PropTypes.arrayOf(PropTypes.shape({\r\n      id: PropTypes.string.isRequired,\r\n      title: PropTypes.string,\r\n    })),\r\n  })).isRequired,\r\n  getOnItemClickFn: PropTypes.func.isRequired,\r\n  getItemAriaLabel: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const SDKWizardStepList = props => (\r\n  <ResponsiveStepList\r\n    {...props}\r\n    LargeScreenStepListComponent={SDKWizardStepListInternal}\r\n  />\r\n);\r\n","import { useCallback, useContext } from 'react';\r\nimport { createOrUpdateCampaign } from '@bingads-webui-campaign-react/perf-max-data';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport Promise from 'bluebird';\r\n\r\nconst DEFAULT_CAMPAIGN_NAME = `Performance-Max-${Math.floor(Math.random() * 100)}`;\r\n\r\nexport function usePmaxCampaignAPI() {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { campaignId } = scope.values;\r\n  const createOrUpdateCampaignPromise = useCallback(({ Name, Language, Status } = { Name: DEFAULT_CAMPAIGN_NAME, Language: 'English', Status: 'Active' }) => {\r\n    const campaignData = {\r\n      Name,\r\n      Status,\r\n      Budget: {\r\n        Amount: 25,\r\n        Type: 'DailyStandard',\r\n      },\r\n      TimeZone: 'PacificTimeUSCanadaTijuana',\r\n      CampaignType: 'PerformanceMax',\r\n      BiddingScheme: {\r\n        Type: 'MaxConversions', // Enhanced CPC will be supported for Performance Max campaigns in Q1\r\n      },\r\n      Languages: [Language],\r\n    };\r\n\r\n    let campaignPromise = () => Promise.resolve();\r\n    if (!campaignId) {\r\n      campaignPromise = () => createOrUpdateCampaign(campaignData).then((campaign) => {\r\n        scope.append({ campaignId: campaign.Id });\r\n        scope.history.replace({\r\n          pathname: scope.history.location.pathname,\r\n          search: scope.stringify(),\r\n        });\r\n        return campaign;\r\n      });\r\n    }\r\n\r\n    return campaignPromise();\r\n  }, [campaignId, scope]);\r\n\r\n  return {\r\n    createOrUpdateCampaignPromise,\r\n  };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  LayoutContainer,\r\n  Layout,\r\n  StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { CardFooter, SaveBlocker } from '@bingads-webui-react/wizard-ui-library';\r\n\r\nconst EmptyComponent = () => null;\r\n\r\nconst getStyles = () => ({\r\n  '@global': {\r\n    '.default-layout': {\r\n      '& .main-container': {\r\n        flexDirection: 'column',\r\n      },\r\n      '& .step-content-and-footer': {\r\n        overflow: 'hidden',\r\n        height: 'auto',\r\n      },\r\n      '& .step-content-container': {\r\n        overflow: 'auto',\r\n      },\r\n    },\r\n  },\r\n});\r\n\r\nexport const CustomLayoutContainer = ({\r\n  template,\r\n  Footer,\r\n  StepList,\r\n  stepListProps,\r\n  InlineSupport,\r\n}) => {\r\n  useDefaultStyles(getStyles);\r\n  return (\r\n    <LayoutContainer template={template}>\r\n      <Layout type=\"StepList\" component={StepList} {...stepListProps} />\r\n      <Layout type=\"StepContainer\" component={StepContainer} />\r\n      <Layout type=\"Footer\" component={Footer} />\r\n      <Layout type=\"Blocker\" component={SaveBlocker} />\r\n      <Layout type=\"LoadingShimmer\" component={EmptyComponent} />\r\n      <Layout type=\"CardFooter\" component={CardFooter} />\r\n      <Layout type=\"CardTail\" component={InlineSupport} />\r\n    </LayoutContainer>\r\n  );\r\n};\r\n\r\nCustomLayoutContainer.propTypes = {\r\n  Footer: PropTypes.func.isRequired,\r\n  StepList: PropTypes.func.isRequired,\r\n  stepListProps: PropTypes.shape({}).isRequired,\r\n  template: PropTypes.func.isRequired,\r\n  InlineSupport: PropTypes.func,\r\n};\r\n\r\nCustomLayoutContainer.defaultProps = {\r\n  InlineSupport: EmptyComponent,\r\n};\r\n\r\n","import React, { useContext } from 'react';\r\nimport { AnimationBlockerView } from '@bingads-webui-campaign-react/pmax-lite-wizard';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport bingAdsIcon from './bing-ads-icon.png';\r\n\r\nconst getStyles = () => ({\r\n  sdkNormalBlocker: {\r\n    '&.animation-blocker': {\r\n      background: '#fff',\r\n      '& .processing-animation-container': {\r\n        boxShadow: 'none',\r\n      },\r\n    },\r\n    '& .animation-description': {\r\n      fontSize: 14,\r\n    },\r\n    '& .animation-container .ms-Label': {\r\n      fontSize: 12,\r\n    },\r\n  },\r\n  header: {\r\n    display: 'block',\r\n    textAlign: 'center',\r\n    '& h1': {\r\n      margin: '8px 0',\r\n      fontSize: 20,\r\n      lineHeight: '28px',\r\n    },\r\n  },\r\n  bingAdsIcon: {\r\n    width: 36,\r\n    height: 32,\r\n  },\r\n});\r\n\r\nexport const SDKNormalBlocker = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const classes = useDefaultStyles(getStyles);\r\n\r\n  return (\r\n    <AnimationBlockerView\r\n      className={classes.sdkNormalBlocker}\r\n      title={(\r\n        <div className={classes.header}>\r\n          <img className={classes.bingAdsIcon} src={bingAdsIcon} alt={i18n.getString(_TL_('Microsoft Advertising icon'))} />\r\n          <h1>{i18n.getString(_TL_('Checking your website'))}</h1>\r\n        </div>\r\n      )}\r\n      description={i18n.getString(_TL_('We\\'ll use your website content to customize your campaign setup and suggest settings to help you get your desired results.'))}\r\n      rollingTexts={[\r\n        i18n.getString(_TL_('Please wait while we crawl your website.')),\r\n        i18n.getString(_TL_('Almost ready...')),\r\n      ]}\r\n      showIcon={false}\r\n      useProgressIndicator={false}\r\n    />\r\n  );\r\n};\r\n","import React, { useContext } from 'react';\r\nimport {\r\n  Spinner,\r\n} from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport bingAdsIcon from './bing-ads-icon.png';\r\n\r\nconst getStyles = () => ({\r\n  sdkNoFinalUrlBlocker: {\r\n    height: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    '& svg .fui-Spinner__Tail': {\r\n      animationDuration: '2s !important',\r\n      animationIterationCount: 'infinite !important',\r\n    },\r\n  },\r\n  blockerContent: {\r\n    textAlign: 'center',\r\n  },\r\n  bingAdsIcon: {\r\n    marginBottom: 16,\r\n  },\r\n});\r\n\r\nexport const SDKNoFinalUrlBlocker = () => {\r\n  const i18n = useContext(I18nContext) as any;\r\n  const classes = useDefaultStyles(getStyles);\r\n\r\n  return (\r\n    <div className={classes.sdkNoFinalUrlBlocker}>\r\n      <div className={classes.blockerContent}>\r\n        <img className={classes.bingAdsIcon} src={bingAdsIcon} alt={i18n.getString(_TL_('Microsoft Advertising icon'))} />\r\n        <Spinner label={i18n.getString(_TL_('Preparing campaign creation...'))} size=\"medium\" />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React from 'react';\r\nimport { getFinalURL } from '@bingads-webui-campaign-react/sdk-utils';\r\nimport { SDKNormalBlocker } from './normal-blocker';\r\nimport { SDKNoFinalUrlBlocker } from './no-final-url-blocker';\r\n\r\nexport const SDKWizardAnimationBlocker = () => {\r\n  const hasFinalUrl = !!getFinalURL();\r\n\r\n  return hasFinalUrl ? <SDKNormalBlocker /> : <SDKNoFinalUrlBlocker />;\r\n};\r\nexport { SDKNormalBlocker };\r\n","import _ from 'underscore';\r\nimport { useEffect, useContext, useState } from 'react';\r\nimport { getSDKParams, getLanguageFromMkt } from '@bingads-webui-campaign-react/sdk-utils';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { usePreference, preferenceNames } from '@bingads-webui-campaign-react/pmax-lite-data';\r\n\r\n\r\nexport const useUpdatePreferencesFromURL = (afterResetPreferences) => {\r\n  const preferenceService = useContext(PreferenceContext);\r\n  const [{ value: websiteUrlPreference }, { update: updateWebsitePreference }] = usePreference(preferenceNames.WebsiteUrl);\r\n  const [, { update: updateLanguagePreference }] = usePreference(preferenceNames.SelectedLanguage);\r\n  const [, { update: updateCountryPreference }] = usePreference(preferenceNames.SelectedCountry);\r\n  const [, { update: updateMktPrefillEnabledPreference }]\r\n    = usePreference(preferenceNames.MarketPrefillEnabled);\r\n  const { mkt, finalUrl, country } = getSDKParams();\r\n  const language = getLanguageFromMkt(mkt);\r\n  const [preferenceReady, setPreferenceReady] = useState(false);\r\n\r\n  useEffect(() => {\r\n    if (preferenceService && _.isFunction(preferenceService.setAtUserLevel) && !preferenceReady) {\r\n      updateMktPrefillEnabledPreference(false);\r\n      updateWebsitePreference(finalUrl);\r\n      updateLanguagePreference(language);\r\n      updateCountryPreference(country);\r\n      setPreferenceReady(true);\r\n\r\n      if (afterResetPreferences) {\r\n        afterResetPreferences({\r\n          websiteUrlPreference,\r\n          finalUrl,\r\n          language,\r\n          country,\r\n        });\r\n      }\r\n    }\r\n  }, [preferenceService.setAtUserLevel, country, finalUrl, language, updateCountryPreference, updateLanguagePreference, updateWebsitePreference, preferenceService, updateMktPrefillEnabledPreference, websiteUrlPreference, preferenceReady, afterResetPreferences]);\r\n\r\n  return {\r\n    preferenceReady,\r\n  };\r\n};\r\n","import { COUNTRY_STRINGS as ORIGINLA_COUNTRY_STRINGS } from '@bingads-webui-campaign/ads-globalization';\r\n\r\nexport const COUNTRY_STRINGS = {\r\n  ...ORIGINLA_COUNTRY_STRINGS,\r\n  CN: _TL_('China'),\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { SupportMenuComponent } from '@bingads-webui-campaign-react/pmax-support-components';\r\n\r\nexport const SDKSupportMenu = () => {\r\n  const { SupportOptions } = useContext(ServerContext);\r\n  const i18n = useContext(I18nContext);\r\n  const headerText = i18n.getString(_TL_('Microsoft Advertising'));\r\n  return (\r\n    <SupportMenuComponent\r\n      supportOptions={{\r\n        ...SupportOptions,\r\n        headerText,\r\n      }}\r\n    />\r\n  );\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\nimport { uiblockerStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const useCampaignNameTagStyles = makeStyles({\r\n  button: {\r\n    textAlign: 'left',\r\n  },\r\n});\r\n\r\nexport const useFilterDropdownStyles = makeStyles({\r\n  root: {\r\n    maxWidth: '250px',\r\n  },\r\n  truncatedText: {\r\n    overflowX: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    whiteSpace: 'nowrap',\r\n  },\r\n});\r\n\r\nexport const useKeywordInputStyles = makeStyles({\r\n  textarea: {\r\n    width: '100%',\r\n    height: '120px',\r\n  },\r\n  textareaContainer: {\r\n    paddingLeft: '36px',\r\n    width: '100%',\r\n  },\r\n});\r\n\r\nexport const useMeasurementTypeSelectorStyles = makeStyles({\r\n  dropdownContainer: {\r\n    paddingLeft: '36px',\r\n    width: '100%',\r\n  },\r\n  dropdown: {\r\n    width: '100%',\r\n  },\r\n  truncatedText: {\r\n    overflowX: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    whiteSpace: 'nowrap',\r\n  },\r\n});\r\n\r\nexport const useRadioChildControlStyles = makeStyles({\r\n  container: {\r\n    paddingLeft: '36px',\r\n    width: '100%',\r\n  },\r\n  warning: {\r\n    marginTop: '10px',\r\n  },\r\n});\r\n\r\nexport const useSearchCustomerIdStyles = makeStyles({\r\n  input: {\r\n    width: '100%',\r\n  },\r\n});\r\n\r\nexport const useSelectCampaignGridStyles = makeStyles({\r\n  dataGridRow: {\r\n    opacity: '1',\r\n  },\r\n  dataGridRowDisabled: {\r\n    opacity: '0.5',\r\n  },\r\n  selectCampaignTableCell: {\r\n    alignItems: 'center',\r\n    display: 'flex',\r\n  },\r\n  spinner: {\r\n    'min-height': '50px',\r\n  },\r\n});\r\n\r\nexport const useTagsListStyles = makeStyles({\r\n  root: {\r\n    paddingBottom: '10px',\r\n  },\r\n  tagsList: {\r\n    columnGap: '2px',\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    rowGap: '2px',\r\n  },\r\n  tagsToolbar: {\r\n    alignItems: 'center',\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n  },\r\n});\r\n\r\nexport const getUIBlockerStyle = () => ({\r\n  '@global': uiblockerStyle({ palette: {} }),\r\n});\r\n\r\nexport const noDataStyles = palette => ({\r\n  color: palette.neutralSecondary,\r\n  fontSize: '26px',\r\n  paddingLeft: '32px',\r\n});\r\n","import React, { useCallback, useContext } from 'react';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Button,\r\n  Caption1,\r\n  Divider,\r\n  makeStyles,\r\n  Select,\r\n  useId,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  ArrowLeftRegular,\r\n  ArrowRightRegular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  root: {\r\n    alignItems: 'center',\r\n    columnGap: '15px',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n  },\r\n  pageNumber: {\r\n    marginRight: '4px',\r\n    maxWidth: '32px',\r\n  },\r\n});\r\n\r\nconst pageSizeOptions = [\r\n  10,\r\n  25,\r\n  50,\r\n];\r\n\r\nexport const Paginator = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const styles = useStyles();\r\n\r\n  const { dispatch, state } = useContext(GridContext);\r\n  const { pageNumber, pageSize } = state.pagination;\r\n\r\n  const pageSizeId = useId();\r\n  const pageSizeLabel = i18n.getString(_TL_('Rows per page:'));\r\n  const pageCount = Math.ceil(state.totalCount / pageSize);\r\n  const pageCountSeparator = i18n.getString(_TL_('of'));\r\n\r\n  const onSelectPageSize = useCallback((e, { value }) => {\r\n    dispatch({\r\n      type: 'UPDATE_PAGINATION',\r\n      payload: {\r\n        pageNumber: 1,\r\n        pageSize: Number(value),\r\n      },\r\n    });\r\n  }, [dispatch]);\r\n\r\n  const onDecreasePageNumber = useCallback(() => {\r\n    if (pageNumber > 1) {\r\n      dispatch({\r\n        type: 'UPDATE_PAGINATION',\r\n        payload: {\r\n          ...state.pagination,\r\n          pageNumber: pageNumber - 1,\r\n        },\r\n      });\r\n    }\r\n  }, [dispatch, state.pagination, pageNumber]);\r\n\r\n  const onIncreasePageNumber = useCallback(() => {\r\n    dispatch({\r\n      type: 'UPDATE_PAGINATION',\r\n      payload: {\r\n        ...state.pagination,\r\n        pageNumber: pageNumber + 1,\r\n      },\r\n    });\r\n  }, [dispatch, state.pagination, pageNumber]);\r\n\r\n  return (\r\n    <div className={styles.root}>\r\n      <Caption1>{pageSizeLabel}</Caption1>\r\n      <Select\r\n        appearance=\"outline\"\r\n        id={pageSizeId}\r\n        onChange={onSelectPageSize}\r\n        size=\"small\"\r\n        value={pageSize}\r\n      >\r\n        {pageSizeOptions.map(pageSizeOption => (\r\n          <option key={pageSizeOption}>{pageSizeOption}</option>\r\n        ))}\r\n      </Select>\r\n      <Divider vertical />\r\n      <Button\r\n        appearance=\"subtle\"\r\n        disabled={pageNumber === 1}\r\n        icon={<ArrowLeftRegular />}\r\n        onClick={onDecreasePageNumber}\r\n        size=\"small\"\r\n      />\r\n      <Caption1>{`${pageNumber} ${pageCountSeparator} ${pageCount}`}</Caption1>\r\n      <Button\r\n        appearance=\"subtle\"\r\n        disabled={pageNumber === pageCount}\r\n        icon={<ArrowRightRegular />}\r\n        onClick={onIncreasePageNumber}\r\n        size=\"small\"\r\n      />\r\n    </div>\r\n  );\r\n};\r\n","import { getTheme } from '@fluentui/react';\r\nimport {\r\n  Caption1,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport React, { useContext } from 'react';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Paginator } from '../common/paginator';\r\nimport { noDataStyles } from '../common/styles';\r\n\r\nconst { palette } = getTheme();\r\nconst useStyles = makeStyles({\r\n  noData: noDataStyles(palette),\r\n});\r\n\r\nexport const LandingPageFooter = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const styles = useStyles();\r\n  const { state } = useContext(GridContext);\r\n\r\n  return (\r\n    <>\r\n      {state.items.length > 0 ?\r\n        <>\r\n          <Caption1>{`${state.totalCount} ${i18n.getString(_TL_('experiments'))}`}</Caption1>\r\n          <Paginator />\r\n        </> :\r\n        <div className={styles.noData}>\r\n          {i18n.getString(_TL_('There are no lift studies.'))}\r\n        </div>\r\n      }\r\n    </>\r\n  );\r\n};\r\n","export const countries = {\r\n  AD: {\r\n    code: 'AD',\r\n    name: _TL_('Andorra'),\r\n  },\r\n  AE: {\r\n    code: 'AE',\r\n    name: _TL_('United Arab Emirates'),\r\n  },\r\n  AG: {\r\n    code: 'AG',\r\n    name: _TL_('Antigua and Barbuda'),\r\n  },\r\n  AI: {\r\n    code: 'AI',\r\n    name: _TL_('Anguilla'),\r\n  },\r\n  AL: {\r\n    code: 'AL',\r\n    name: _TL_('Albania'),\r\n  },\r\n  AM: {\r\n    code: 'AM',\r\n    name: _TL_('Armenia'),\r\n  },\r\n  AR: {\r\n    code: 'AR',\r\n    name: _TL_('Argentina'),\r\n  },\r\n  AS: {\r\n    code: 'AS',\r\n    name: _TL_('American Samoa'),\r\n  },\r\n  AT: {\r\n    code: 'AT',\r\n    name: _TL_('Austria'),\r\n  },\r\n  AU: {\r\n    code: 'AU',\r\n    name: _TL_('Australia'),\r\n  },\r\n  AW: {\r\n    code: 'AW',\r\n    name: _TL_('Aruba'),\r\n  },\r\n  AZ: {\r\n    code: 'AZ',\r\n    name: _TL_('Azerbaijan'),\r\n  },\r\n  BA: {\r\n    code: 'BA',\r\n    name: _TL_('Bosnia and Herzegovina'),\r\n  },\r\n  BB: {\r\n    code: 'BB',\r\n    name: _TL_('Barbados'),\r\n  },\r\n  BD: {\r\n    code: 'BD',\r\n    name: _TL_('Bangladesh'),\r\n  },\r\n  BE: {\r\n    code: 'BE',\r\n    name: _TL_('Belgium'),\r\n  },\r\n  BF: {\r\n    code: 'BF',\r\n    name: _TL_('Burkina Faso'),\r\n  },\r\n  BG: {\r\n    code: 'BG',\r\n    name: _TL_('Bulgaria'),\r\n  },\r\n  BH: {\r\n    code: 'BH',\r\n    name: _TL_('Bahrain'),\r\n  },\r\n  BJ: {\r\n    code: 'BJ',\r\n    name: _TL_('Benin'),\r\n  },\r\n  BM: {\r\n    code: 'BM',\r\n    name: _TL_('Bermuda'),\r\n  },\r\n  BN: {\r\n    code: 'BN',\r\n    name: _TL_('Brunei'),\r\n  },\r\n  BO: {\r\n    code: 'BO',\r\n    name: _TL_('Bolivia'),\r\n  },\r\n  BR: {\r\n    code: 'BR',\r\n    name: _TL_('Brazil'),\r\n  },\r\n  BS: {\r\n    code: 'BS',\r\n    name: _TL_('Bahamas, The'),\r\n  },\r\n  BW: {\r\n    code: 'BW',\r\n    name: _TL_('Botswana'),\r\n  },\r\n  BZ: {\r\n    code: 'BZ',\r\n    name: _TL_('Belize'),\r\n  },\r\n  CA: {\r\n    code: 'CA',\r\n    name: _TL_('Canada'),\r\n  },\r\n  CC: {\r\n    code: 'CC',\r\n    name: _TL_('Cocos (Keeling) Islands'),\r\n  },\r\n  CD: {\r\n    code: 'CD',\r\n    name: _TL_('Congo (DRC)'),\r\n  },\r\n  CF: {\r\n    code: 'CF',\r\n    name: _TL_('Central African Republic'),\r\n  },\r\n  CG: {\r\n    code: 'CG',\r\n    name: _TL_('Congo'),\r\n  },\r\n  CH: {\r\n    code: 'CH',\r\n    name: _TL_('Switzerland'),\r\n  },\r\n  CI: {\r\n    code: 'CI',\r\n    name: _TL_(\"Côte d'Ivoire\"),\r\n  },\r\n  CK: {\r\n    code: 'CK',\r\n    name: _TL_('Cook Islands'),\r\n  },\r\n  CL: {\r\n    code: 'CL',\r\n    name: _TL_('Chile'),\r\n  },\r\n  CM: {\r\n    code: 'CM',\r\n    name: _TL_('Cameroon'),\r\n  },\r\n  CO: {\r\n    code: 'CO',\r\n    name: _TL_('Colombia'),\r\n  },\r\n  CR: {\r\n    code: 'CR',\r\n    name: _TL_('Costa Rica'),\r\n  },\r\n  CX: {\r\n    code: 'CX',\r\n    name: _TL_('Christmas Island'),\r\n  },\r\n  CY: {\r\n    code: 'CY',\r\n    name: _TL_('Cyprus'),\r\n  },\r\n  CZ: {\r\n    code: 'CZ',\r\n    name: _TL_('Czechia'),\r\n  },\r\n  DE: {\r\n    code: 'DE',\r\n    name: _TL_('Germany'),\r\n  },\r\n  DJ: {\r\n    code: 'DJ',\r\n    name: _TL_('Djibouti'),\r\n  },\r\n  DK: {\r\n    code: 'DK',\r\n    name: _TL_('Denmark'),\r\n  },\r\n  DM: {\r\n    code: 'DM',\r\n    name: _TL_('Dominica'),\r\n  },\r\n  DO: {\r\n    code: 'DO',\r\n    name: _TL_('Dominican Republic'),\r\n  },\r\n  DZ: {\r\n    code: 'DZ',\r\n    name: _TL_('Algeria'),\r\n  },\r\n  EC: {\r\n    code: 'EC',\r\n    name: _TL_('Ecuador'),\r\n  },\r\n  EE: {\r\n    code: 'EE',\r\n    name: _TL_('Estonia'),\r\n  },\r\n  EG: {\r\n    code: 'EG',\r\n    name: _TL_('Egypt'),\r\n  },\r\n  ER: {\r\n    code: 'ER',\r\n    name: _TL_('Eritrea'),\r\n  },\r\n  ES: {\r\n    code: 'ES',\r\n    name: _TL_('Spain'),\r\n  },\r\n  ET: {\r\n    code: 'ET',\r\n    name: _TL_('Ethiopia'),\r\n  },\r\n  FI: {\r\n    code: 'FI',\r\n    name: _TL_('Finland'),\r\n  },\r\n  FJ: {\r\n    code: 'FJ',\r\n    name: _TL_('Fiji Islands'),\r\n  },\r\n  FO: {\r\n    code: 'FO',\r\n    name: _TL_('Faroe Islands'),\r\n  },\r\n  FR: {\r\n    code: 'FR',\r\n    name: _TL_('France'),\r\n  },\r\n  GA: {\r\n    code: 'GA',\r\n    name: _TL_('Gabon'),\r\n  },\r\n  GB: {\r\n    code: 'GB',\r\n    name: _TL_('United Kingdom'),\r\n  },\r\n  GD: {\r\n    code: 'GD',\r\n    name: _TL_('Grenada'),\r\n  },\r\n  GE: {\r\n    code: 'GE',\r\n    name: _TL_('Georgia'),\r\n  },\r\n  GF: {\r\n    code: 'GF',\r\n    name: _TL_('French Guiana'),\r\n  },\r\n  GI: {\r\n    code: 'GI',\r\n    name: _TL_('Gibraltar'),\r\n  },\r\n  GL: {\r\n    code: 'GL',\r\n    name: _TL_('Greenland'),\r\n  },\r\n  GM: {\r\n    code: 'GM',\r\n    name: _TL_('Gambia, The'),\r\n  },\r\n  GN: {\r\n    code: 'GN',\r\n    name: _TL_('Guinea'),\r\n  },\r\n  GP: {\r\n    code: 'GP',\r\n    name: _TL_('Guadeloupe'),\r\n  },\r\n  GR: {\r\n    code: 'GR',\r\n    name: _TL_('Greece'),\r\n  },\r\n  GT: {\r\n    code: 'GT',\r\n    name: _TL_('Guatemala'),\r\n  },\r\n  GU: {\r\n    code: 'GU',\r\n    name: _TL_('Guam'),\r\n  },\r\n  GW: {\r\n    code: 'GW',\r\n    name: _TL_('Guinea-Bissau'),\r\n  },\r\n  GY: {\r\n    code: 'GY',\r\n    name: _TL_('Guyana'),\r\n  },\r\n  HK: {\r\n    code: 'HK',\r\n    name: _TL_('Hong Kong SAR'),\r\n  },\r\n  HN: {\r\n    code: 'HN',\r\n    name: _TL_('Honduras'),\r\n  },\r\n  HR: {\r\n    code: 'HR',\r\n    name: _TL_('Croatia'),\r\n  },\r\n  HT: {\r\n    code: 'HT',\r\n    name: _TL_('Haiti'),\r\n  },\r\n  HU: {\r\n    code: 'HU',\r\n    name: _TL_('Hungary'),\r\n  },\r\n  ID: {\r\n    code: 'ID',\r\n    name: _TL_('Indonesia'),\r\n  },\r\n  IE: {\r\n    code: 'IE',\r\n    name: _TL_('Ireland'),\r\n  },\r\n  IL: {\r\n    code: 'IL',\r\n    name: _TL_('Israel'),\r\n  },\r\n  IN: {\r\n    code: 'IN',\r\n    name: _TL_('India'),\r\n  },\r\n  IQ: {\r\n    code: 'IQ',\r\n    name: _TL_('Iraq'),\r\n  },\r\n  IS: {\r\n    code: 'IS',\r\n    name: _TL_('Iceland'),\r\n  },\r\n  IT: {\r\n    code: 'IT',\r\n    name: _TL_('Italy'),\r\n  },\r\n  JM: {\r\n    code: 'JM',\r\n    name: _TL_('Jamaica'),\r\n  },\r\n  JP: {\r\n    code: 'JP',\r\n    name: _TL_('Japan'),\r\n  },\r\n  KG: {\r\n    code: 'KG',\r\n    name: _TL_('Kyrgyzstan'),\r\n  },\r\n  KM: {\r\n    code: 'KM',\r\n    name: _TL_('Comoros'),\r\n  },\r\n  KN: {\r\n    code: 'KN',\r\n    name: _TL_('Saint Kitts and Nevis'),\r\n  },\r\n  KY: {\r\n    code: 'KY',\r\n    name: _TL_('Cayman Islands'),\r\n  },\r\n  LC: {\r\n    code: 'LC',\r\n    name: _TL_('Saint Lucia'),\r\n  },\r\n  LI: {\r\n    code: 'LI',\r\n    name: _TL_('Liechtenstein'),\r\n  },\r\n  LK: {\r\n    code: 'LK',\r\n    name: _TL_('Sri Lanka'),\r\n  },\r\n  LS: {\r\n    code: 'LS',\r\n    name: _TL_('Lesotho'),\r\n  },\r\n  LT: {\r\n    code: 'LT',\r\n    name: _TL_('Lithuania'),\r\n  },\r\n  LU: {\r\n    code: 'LU',\r\n    name: _TL_('Luxembourg'),\r\n  },\r\n  LV: {\r\n    code: 'LV',\r\n    name: _TL_('Latvia'),\r\n  },\r\n  LY: {\r\n    code: 'LY',\r\n    name: _TL_('Libya'),\r\n  },\r\n  MC: {\r\n    code: 'MC',\r\n    name: _TL_('Monaco'),\r\n  },\r\n  MD: {\r\n    code: 'MD',\r\n    name: _TL_('Moldova'),\r\n  },\r\n  ME: {\r\n    code: 'ME',\r\n    name: _TL_('Montenegro'),\r\n  },\r\n  MG: {\r\n    code: 'MG',\r\n    name: _TL_('Madagascar'),\r\n  },\r\n  MH: {\r\n    code: 'MH',\r\n    name: _TL_('Marshall Islands'),\r\n  },\r\n  MK: {\r\n    code: 'MK',\r\n    name: _TL_('Republic of North Macedonia'),\r\n  },\r\n  MN: {\r\n    code: 'MN',\r\n    name: _TL_('Mongolia'),\r\n  },\r\n  MO: {\r\n    code: 'MO',\r\n    name: _TL_('Macao SAR'),\r\n  },\r\n  MP: {\r\n    code: 'MP',\r\n    name: _TL_('Northern Mariana Islands'),\r\n  },\r\n  MQ: {\r\n    code: 'MQ',\r\n    name: _TL_('Martinique'),\r\n  },\r\n  MR: {\r\n    code: 'MR',\r\n    name: _TL_('Mauritania'),\r\n  },\r\n  MS: {\r\n    code: 'MS',\r\n    name: _TL_('Montserrat'),\r\n  },\r\n  MT: {\r\n    code: 'MT',\r\n    name: _TL_('Malta'),\r\n  },\r\n  MU: {\r\n    code: 'MU',\r\n    name: _TL_('Mauritius'),\r\n  },\r\n  MV: {\r\n    code: 'MV',\r\n    name: _TL_('Maldives'),\r\n  },\r\n  MW: {\r\n    code: 'MW',\r\n    name: _TL_('Malawi'),\r\n  },\r\n  MX: {\r\n    code: 'MX',\r\n    name: _TL_('Mexico'),\r\n  },\r\n  MY: {\r\n    code: 'MY',\r\n    name: _TL_('Malaysia'),\r\n  },\r\n  NA: {\r\n    code: 'NA',\r\n    name: _TL_('Namibia'),\r\n  },\r\n  NC: {\r\n    code: 'NC',\r\n    name: _TL_('New Caledonia'),\r\n  },\r\n  NE: {\r\n    code: 'NE',\r\n    name: _TL_('Niger'),\r\n  },\r\n  NF: {\r\n    code: 'NF',\r\n    name: _TL_('Norfolk Island'),\r\n  },\r\n  NG: {\r\n    code: 'NG',\r\n    name: _TL_('Nigeria'),\r\n  },\r\n  NL: {\r\n    code: 'NL',\r\n    name: _TL_('Netherlands'),\r\n  },\r\n  NO: {\r\n    code: 'NO',\r\n    name: _TL_('Norway'),\r\n  },\r\n  NP: {\r\n    code: 'NP',\r\n    name: _TL_('Nepal'),\r\n  },\r\n  NR: {\r\n    code: 'NR',\r\n    name: _TL_('Nauru'),\r\n  },\r\n  NU: {\r\n    code: 'NU',\r\n    name: _TL_('Niue'),\r\n  },\r\n  NZ: {\r\n    code: 'NZ',\r\n    name: _TL_('New Zealand'),\r\n  },\r\n  OM: {\r\n    code: 'OM',\r\n    name: _TL_('Oman'),\r\n  },\r\n  PA: {\r\n    code: 'PA',\r\n    name: _TL_('Panama'),\r\n  },\r\n  PE: {\r\n    code: 'PE',\r\n    name: _TL_('Peru'),\r\n  },\r\n  PF: {\r\n    code: 'PF',\r\n    name: _TL_('French Polynesia'),\r\n  },\r\n  PG: {\r\n    code: 'PG',\r\n    name: _TL_('Papua New Guinea'),\r\n  },\r\n  PH: {\r\n    code: 'PH',\r\n    name: _TL_('Philippines'),\r\n  },\r\n  PK: {\r\n    code: 'PK',\r\n    name: _TL_('Pakistan'),\r\n  },\r\n  PL: {\r\n    code: 'PL',\r\n    name: _TL_('Poland'),\r\n  },\r\n  PM: {\r\n    code: 'PM',\r\n    name: _TL_('Saint Pierre and Miquelon'),\r\n  },\r\n  PN: {\r\n    code: 'PN',\r\n    name: _TL_('Pitcairn Islands'),\r\n  },\r\n  PR: {\r\n    code: 'PR',\r\n    name: _TL_('Puerto Rico'),\r\n  },\r\n  PT: {\r\n    code: 'PT',\r\n    name: _TL_('Portugal'),\r\n  },\r\n  PW: {\r\n    code: 'PW',\r\n    name: _TL_('Palau'),\r\n  },\r\n  PY: {\r\n    code: 'PY',\r\n    name: _TL_('Paraguay'),\r\n  },\r\n  QA: {\r\n    code: 'QA',\r\n    name: _TL_('Qatar'),\r\n  },\r\n  RE: {\r\n    code: 'RE',\r\n    name: _TL_('Reunion'),\r\n  },\r\n  RO: {\r\n    code: 'RO',\r\n    name: _TL_('Romania'),\r\n  },\r\n  RS: {\r\n    code: 'RS',\r\n    name: _TL_('Serbia'),\r\n  },\r\n  RW: {\r\n    code: 'RW',\r\n    name: _TL_('Rwanda'),\r\n  },\r\n  SA: {\r\n    code: 'SA',\r\n    name: _TL_('Saudi Arabia'),\r\n  },\r\n  SC: {\r\n    code: 'SC',\r\n    name: _TL_('Seychelles'),\r\n  },\r\n  SE: {\r\n    code: 'SE',\r\n    name: _TL_('Sweden'),\r\n  },\r\n  SG: {\r\n    code: 'SG',\r\n    name: _TL_('Singapore'),\r\n  },\r\n  SI: {\r\n    code: 'SI',\r\n    name: _TL_('Slovenia'),\r\n  },\r\n  SK: {\r\n    code: 'SK',\r\n    name: _TL_('Slovakia'),\r\n  },\r\n  SL: {\r\n    code: 'SL',\r\n    name: _TL_('Sierra Leone'),\r\n  },\r\n  SM: {\r\n    code: 'SM',\r\n    name: _TL_('San Marino'),\r\n  },\r\n  SN: {\r\n    code: 'SN',\r\n    name: _TL_('Senegal'),\r\n  },\r\n  SO: {\r\n    code: 'SO',\r\n    name: _TL_('Somalia'),\r\n  },\r\n  SR: {\r\n    code: 'SR',\r\n    name: _TL_('Suriname'),\r\n  },\r\n  SV: {\r\n    code: 'SV',\r\n    name: _TL_('El Salvador'),\r\n  },\r\n  TC: {\r\n    code: 'TC',\r\n    name: _TL_('Turks and Caicos Islands'),\r\n  },\r\n  TG: {\r\n    code: 'TG',\r\n    name: _TL_('Togo'),\r\n  },\r\n  TH: {\r\n    code: 'TH',\r\n    name: _TL_('Thailand'),\r\n  },\r\n  TJ: {\r\n    code: 'TJ',\r\n    name: _TL_('Tajikistan'),\r\n  },\r\n  TK: {\r\n    code: 'TK',\r\n    name: _TL_('Tokelau'),\r\n  },\r\n  TN: {\r\n    code: 'TN',\r\n    name: _TL_('Tunisia'),\r\n  },\r\n  TO: {\r\n    code: 'TO',\r\n    name: _TL_('Tonga'),\r\n  },\r\n  TR: {\r\n    code: 'TR',\r\n    name: _TL_('Turkey'),\r\n  },\r\n  TT: {\r\n    code: 'TT',\r\n    name: _TL_('Trinidad and Tobago'),\r\n  },\r\n  TV: {\r\n    code: 'TV',\r\n    name: _TL_('Tuvalu'),\r\n  },\r\n  TW: {\r\n    code: 'TW',\r\n    name: _TL_('Taiwan'),\r\n  },\r\n  TZ: {\r\n    code: 'TZ',\r\n    name: _TL_('Tanzania'),\r\n  },\r\n  UG: {\r\n    code: 'UG',\r\n    name: _TL_('Uganda'),\r\n  },\r\n  US: {\r\n    code: 'US',\r\n    name: _TL_('United States'),\r\n  },\r\n  UY: {\r\n    code: 'UY',\r\n    name: _TL_('Uruguay'),\r\n  },\r\n  VA: {\r\n    code: 'VA',\r\n    name: _TL_('Holy City (the Vatican)'),\r\n  },\r\n  VC: {\r\n    code: 'VC',\r\n    name: _TL_('Saint Vincent and the Grenadines'),\r\n  },\r\n  VE: {\r\n    code: 'VE',\r\n    name: _TL_('Venezuela'),\r\n  },\r\n  VG: {\r\n    code: 'VG',\r\n    name: _TL_('Virgin Islands, British'),\r\n  },\r\n  VI: {\r\n    code: 'VI',\r\n    name: _TL_('Virgin Islands, U.S.'),\r\n  },\r\n  VN: {\r\n    code: 'VN',\r\n    name: _TL_('Vietnam'),\r\n  },\r\n  VU: {\r\n    code: 'VU',\r\n    name: _TL_('Vanuatu'),\r\n  },\r\n  WF: {\r\n    code: 'WF',\r\n    name: _TL_('Wallis and Futuna'),\r\n  },\r\n  WS: {\r\n    code: 'WS',\r\n    name: _TL_('Samoa'),\r\n  },\r\n  YE: {\r\n    code: 'YE',\r\n    name: _TL_('Yemen'),\r\n  },\r\n  YT: {\r\n    code: 'YT',\r\n    name: _TL_('Mayotte'),\r\n  },\r\n  ZA: {\r\n    code: 'ZA',\r\n    name: _TL_('South Africa'),\r\n  },\r\n  ZM: {\r\n    code: 'ZM',\r\n    name: _TL_('Zambia'),\r\n  },\r\n  ZW: {\r\n    code: 'ZW',\r\n    name: _TL_('Zimbabwe'),\r\n  },\r\n};\r\n","export const STATUS_SCHEDULED = 'Scheduled';\r\nexport const STATUS_RUNNING = 'Running';\r\nexport const STATUS_MEASURING = 'MeasuringResults';\r\nexport const STATUS_COMPLETED = 'Completed';\r\nexport const STATUS_FAILED = 'Failed';\r\nexport const STATUS_DELETED = 'Deleted';\r\n\r\nexport const statuses = {\r\n  [STATUS_MEASURING]: {\r\n    badgeColor: 'informative',\r\n    code: STATUS_MEASURING,\r\n    name: _TL_('Measuring results'),\r\n    infoTitle: _TL_(\"We're creating your experiment\"),\r\n    infoText: _TL_(\"Your experiment {{name}} has finished running and we're measuring results.\"),\r\n  },\r\n  [STATUS_RUNNING]: {\r\n    badgeColor: 'informative',\r\n    code: STATUS_RUNNING,\r\n    name: _TL_('Active'),\r\n    infoTitle: _TL_('Your experiment is active'),\r\n    infoText: _TL_(\"Your experiment {{name}} is currently running as expected. Once it's complete, you can view the results. Note: You can't edit active experiments.\"),\r\n  },\r\n  [STATUS_SCHEDULED]: {\r\n    badgeColor: 'important',\r\n    code: STATUS_SCHEDULED,\r\n    name: _TL_('Scheduled'),\r\n    infoTitle: _TL_('Your experiment has been scheduled'),\r\n    infoText: _TL_('Your experiment {{name}} is scheduled to run on {{startDate}}. Note: You can still edit this this experiment before it runs.'),\r\n  },\r\n  [STATUS_FAILED]: {\r\n    badgeColor: 'danger',\r\n    code: STATUS_FAILED,\r\n    name: _TL_('Experiment failed'),\r\n    infoTitle: _TL_('Your experiment has failed'),\r\n    infoText: _TL_(\"Your experiment {{name}} failed. Your campaign(s) didn't meet the eligibility requirements to run the experiment. Please review the eligibility requirements that appear in the Summary pane during experiment creation.\"),\r\n  },\r\n  [STATUS_COMPLETED]: {\r\n    badgeColor: 'success',\r\n    code: STATUS_COMPLETED,\r\n    name: _TL_('Completed'),\r\n    infoTitle: _TL_('Your experiment is complete'),\r\n    infoText: _TL_('Your experiment {{name}} has completed.'),\r\n  },\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Badge,\r\n  makeStyles,\r\n  Popover,\r\n  PopoverTrigger,\r\n  PopoverSurface,\r\n  Subtitle1,\r\n} from '@fluentui/react-components';\r\nimport { statuses } from './statuses';\r\n\r\nconst useStyles = makeStyles({\r\n  popoverContent: {\r\n    maxWidth: '500px',\r\n  },\r\n});\r\n\r\nexport const StatusBadge = ({\r\n  code,\r\n  infoTextData,\r\n  text,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const styles = useStyles();\r\n\r\n  return (\r\n    <Popover\r\n      positioning=\"after\"\r\n      withArrow\r\n    >\r\n      <PopoverTrigger disableButtonEnhancement>\r\n        <Badge\r\n          appearance=\"tint\"\r\n          color={statuses[code].badgeColor}\r\n        >\r\n          {i18n.getString(text)}\r\n        </Badge>\r\n      </PopoverTrigger>\r\n      <PopoverSurface tabIndex={-1}>\r\n        <div className={styles.popoverContent}>\r\n          <Subtitle1>{i18n.getString(statuses[code].infoTitle)}</Subtitle1>\r\n          <p>{i18n.getString(statuses[code].infoText, infoTextData)}</p>\r\n        </div>\r\n      </PopoverSurface>\r\n    </Popover>\r\n  );\r\n};\r\n\r\nStatusBadge.propTypes = {\r\n  code: PropTypes.oneOf(Object.keys(statuses)).isRequired,\r\n  infoTextData: PropTypes.shape({\r\n    name: PropTypes.string,\r\n    startDate: PropTypes.string,\r\n  }).isRequired,\r\n  text: PropTypes.string.isRequired,\r\n};\r\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  Dialog,\r\n  DialogTrigger,\r\n  DialogSurface,\r\n  DialogTitle,\r\n  DialogBody,\r\n  DialogActions,\r\n  DialogContent,\r\n  Button,\r\n} from '@fluentui/react-components';\r\nimport { DeleteRegular } from '@fluentui/react-icons';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  STATUS_COMPLETED,\r\n  STATUS_DELETED,\r\n  STATUS_FAILED,\r\n  STATUS_MEASURING,\r\n  STATUS_RUNNING,\r\n  STATUS_SCHEDULED,\r\n} from '../statuses';\r\n\r\nconst nonDeletableStatuses = [\r\n  STATUS_RUNNING,\r\n  STATUS_MEASURING,\r\n];\r\n\r\nexport const DeleteStudyDialog = ({ onDelete, name, status }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const description = i18n.getString(_TL_('Are you sure you want to delete the lift study, {{name}}?'), { name });\r\n  const deleteButtonLabel = i18n.getString(_TL_('Delete'));\r\n  const closeButtonLabel = i18n.getString(_TL_('Close'));\r\n  return (\r\n    <Dialog>\r\n      <DialogTrigger disableButtonEnhancement>\r\n        <Button\r\n          aria-label={i18n.getString(_TL_('Delete'))}\r\n          disabled={nonDeletableStatuses.includes(status)}\r\n          icon={<DeleteRegular />}\r\n          className=\"delete-experiment-modal\"\r\n        />\r\n      </DialogTrigger>\r\n      <DialogSurface>\r\n        <DialogBody>\r\n          <DialogTitle>{i18n.getString(_TL_('Delete Lift Study'))}</DialogTitle>\r\n          <DialogContent>\r\n            {description}\r\n          </DialogContent>\r\n          <DialogActions>\r\n            <DialogTrigger disableButtonEnhancement>\r\n              <Button appearance=\"secondary\" aria-label={closeButtonLabel}>{closeButtonLabel}</Button>\r\n            </DialogTrigger>\r\n            <Button\r\n              className=\"delete-experiment\"\r\n              appearance=\"primary\"\r\n              onClick={() => onDelete()}\r\n              aria-label={deleteButtonLabel}\r\n            >{deleteButtonLabel}\r\n            </Button>\r\n          </DialogActions>\r\n        </DialogBody>\r\n      </DialogSurface>\r\n    </Dialog>\r\n  );\r\n};\r\n\r\nDeleteStudyDialog.propTypes = {\r\n  onDelete: PropTypes.func.isRequired,\r\n  name: PropTypes.string.isRequired,\r\n  status: PropTypes.oneOf([\r\n    STATUS_COMPLETED,\r\n    STATUS_DELETED,\r\n    STATUS_FAILED,\r\n    STATUS_MEASURING,\r\n    STATUS_RUNNING,\r\n    STATUS_SCHEDULED,\r\n  ]).isRequired,\r\n};\r\n","import React from 'react';\r\nimport {\r\n  Button,\r\n  createTableColumn,\r\n  TableCellLayout,\r\n  Text,\r\n  Tooltip,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  EditRegular,\r\n} from '@fluentui/react-icons';\r\n// import { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { countries } from '../../common/countries';\r\nimport { StatusBadge } from '../status-badge';\r\nimport { DeleteStudyDialog } from './delete-study-dialog';\r\nimport {\r\n  statuses,\r\n  STATUS_COMPLETED,\r\n  STATUS_SCHEDULED,\r\n} from '../statuses';\r\n\r\n/*\r\nconst getHelpButton = (headerName, topic) => {\r\n  const stopPropagation = (e) => { e.stopPropagation(); };\r\n\r\n  return (\r\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\r\n    <span onClick={stopPropagation} onKeyDown={stopPropagation}>\r\n      <HelpButton\r\n        aria-label={headerName}\r\n        topic={topic}\r\n      />\r\n    </span>\r\n  );\r\n};\r\n\r\nconst getHeaderCell = (i18n, name, topic) => {\r\n  const headerName = i18n.getString(_TL_('{{name}}'), { name });\r\n  return (\r\n    <> {headerName} {getHelpButton(headerName, topic)} </>\r\n  );\r\n};\r\n*/\r\n\r\nconst getCountryName = ({ country, i18n }) => i18n.getString(countries[country].name);\r\n\r\nexport const getColumns = ({\r\n  i18n,\r\n  onClickDelete,\r\n  onClickEdit,\r\n  onClickName,\r\n}) => [\r\n  createTableColumn({\r\n    columnId: 'Name',\r\n    compare: (a, b) => a.Name.localeCompare(b.Name),\r\n    renderCell: (item) => {\r\n      const experimentName = item.Status === STATUS_COMPLETED\r\n        ? (\r\n          <Text\r\n            onClick={() => onClickName({\r\n              id: item.Id,\r\n              name: item.Name,\r\n            })}\r\n            style={{ cursor: 'pointer' }}\r\n            underline\r\n          >\r\n            {item.Name}\r\n          </Text>\r\n        )\r\n        : item.Name;\r\n      const instructions = i18n.getString(_TL_('Click to view the results for experiment \"{{name}}\".'), {\r\n        name: item.Name,\r\n      });\r\n\r\n      return (\r\n        <Tooltip\r\n          content={item.Status === STATUS_COMPLETED ? instructions : item.Name}\r\n          relationship=\"description\"\r\n          withArrow\r\n        >\r\n          <TableCellLayout\r\n            className=\"experiment-name\"\r\n            truncate\r\n          >\r\n            {experimentName}\r\n          </TableCellLayout>\r\n        </Tooltip>\r\n      );\r\n    },\r\n    // renderHeaderCell: () => getHeaderCell(i18n, 'Experiment name', 'pop_BA_Experiments_Name'),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Experiment name')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'Status',\r\n    renderCell: (item) => {\r\n      const infoTextData = { name: item.Name };\r\n\r\n      if (item.Status === STATUS_SCHEDULED) {\r\n        infoTextData.startDate = item.StartDate;\r\n      }\r\n\r\n      return (\r\n        <TableCellLayout>\r\n          <StatusBadge\r\n            code={item.Status}\r\n            infoTextData={infoTextData}\r\n            text={statuses[item.Status].name}\r\n          />\r\n        </TableCellLayout>\r\n      );\r\n    },\r\n    // renderHeaderCell: () => getHeaderCell(i18n, 'Status', 'pop_BA_Experiments_Status'),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Status')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'Campaigns',\r\n    renderCell: (item) => {\r\n      const campaignNames = item.Campaigns.map(campaign => campaign.Name);\r\n      const campaignNamesString = campaignNames.join(i18n.getString(_TL_(', ')));\r\n      return (\r\n        <Tooltip\r\n          content={campaignNamesString}\r\n          relationship=\"description\"\r\n          withArrow\r\n        >\r\n          <TableCellLayout truncate>\r\n            {campaignNamesString}\r\n          </TableCellLayout>\r\n        </Tooltip>\r\n      );\r\n    },\r\n    // renderHeaderCell: () => getHeaderCell(i18n, 'Campaigns', 'pop_BA_Experiments_Campaigns'),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Campaigns')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'dates',\r\n    compare: (a, b) => a.StartDate.localeCompare(b.StartDate),\r\n    renderCell: (item) => {\r\n      const dateRangeString = `${i18n.formatDate(new Date(item.StartDate))} - ${i18n.formatDate(new Date(item.EndDate))}`;\r\n      return (\r\n        <Tooltip\r\n          content={dateRangeString}\r\n          relationship=\"description\"\r\n          withArrow\r\n        >\r\n          <TableCellLayout truncate>\r\n            {dateRangeString}\r\n          </TableCellLayout>\r\n        </Tooltip>\r\n      );\r\n    },\r\n    // renderHeaderCell: () => getHeaderCell(i18n, 'Experiment dates', 'pop_BA_Experiments_Dates'),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Experiment dates')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'Country',\r\n    compare: (a, b) => getCountryName({ country: a.Country, i18n }).localeCompare(getCountryName({ country: b.Country, i18n })),\r\n    renderCell: (item) => {\r\n      const countryString = getCountryName({ country: item.Country, i18n });\r\n      return (\r\n        <Tooltip\r\n          content={countryString}\r\n          relationship=\"description\"\r\n          withArrow\r\n        >\r\n          <TableCellLayout truncate>\r\n            {countryString}\r\n          </TableCellLayout>\r\n        </Tooltip>\r\n      );\r\n    },\r\n    // renderHeaderCell: () => getHeaderCell(i18n, 'Country', 'pop_BA_Experiments_Country'),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Country')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'actions',\r\n    renderCell: item => (\r\n      <TableCellLayout>\r\n        <Button\r\n          className=\"edit-experiment\"\r\n          aria-label={i18n.getString(_TL_('Edit'))}\r\n          disabled={item.Status !== STATUS_SCHEDULED}\r\n          icon={<EditRegular />}\r\n          onClick={() => {\r\n            onClickEdit(item.Id);\r\n          }}\r\n        />\r\n        <DeleteStudyDialog\r\n          onDelete={() => onClickDelete(item.Id)}\r\n          name={item.Name}\r\n          status={item.Status}\r\n        />\r\n      </TableCellLayout>\r\n    ),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Actions')),\r\n  }),\r\n];\r\n\r\nexport const getCellFocusMode = (columnId) => {\r\n  if (columnId === 'status' || columnId === 'campaigns') {\r\n    return 'none';\r\n  }\r\n\r\n  if (columnId === 'actions') {\r\n    return 'group';\r\n  }\r\n\r\n  return 'cell';\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const fetchCampaignsByIdEDM = ({ cid, aid }, campaignIds) => {\r\n  const formattedCampaignIds = campaignIds.join(', ');\r\n  return edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .Campaigns\r\n    .get({ filter: { where: `Id in [${formattedCampaignIds}]` } })\r\n    .toPromise();\r\n};\r\n","export const EXPERIMENT_API_ERRORS = {\r\n  CampaignAssociationsLimitExceeded: _TL_('A maximum of 10 campaigns can be selected for a single lift study.'),\r\n  DuplicateEntity: _TL_('One or more of your keywords are duplicated.'),\r\n  DuplicateTagId: _TL_('One or more of your selected tags are duplicated.'),\r\n  EntityAlreadyExists: _TL_('This lift experiment name is already used under this account.'),\r\n  EntityLimitExceeded: _TL_('You have more than 20 keywords.'),\r\n  ExperimentStartDateInvalid: _TL_('The start date selected for the lift study is in the past.'),\r\n  ExperimentTimeperiodOverlapping: _TL_(\"You've already scheduled a lift measurement experiment to run during those dates. You can only run one experiment during a given time period. Please choose different dates.\"),\r\n  ExperimentTypeInvalid: _TL_('At least one measurement type needs to be selected for a lift study.'),\r\n  InvalidCountryCode: _TL_('The selected country is not supported for lift studies.'),\r\n  InvalidCustomerId: _TL_('The CID may not be associated with the business or client. Please confirm and enter the correct CID.'),\r\n  InvalidStatus: _TL_('Only active campaigns, which use audience targeting may be used for lift studies.'),\r\n  InvalidTagStatus: _TL_('One or more of your selected tags are not active.'),\r\n  KeywordIsBlank: _TL_('One or more of your keywords are blank.'),\r\n  KeywordTooLong: _TL_('One or more of your keywords is over the character limit of 100.'),\r\n  NameExceededMaxLen: _TL_('Lift study names must be less than 128 characters.'),\r\n  NotAllowedToDoCurrentOperation: _TL_('The status for this lift study can not be changed.'),\r\n  TagsBatchSizeExceesdLimit: _TL_('A maximum of 5 tags is allowed for a single lift study.'),\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { curlyTemplate } from '@bingads-webui/primitive-utilities';\r\nimport { EXPERIMENT_API_ERRORS } from '../common/constants/experiment-errors';\r\n\r\nexport const USE_SEARCH_MEASUREMENT = 1;\r\nexport const USE_VISIT_MEASUREMENT = 2;\r\nexport const USE_CONVERSION_MEASUREMENT = 4;\r\n\r\nexport const createMeasurementTypeEnum = ({\r\n  useConversionLift,\r\n  useSearchLift,\r\n  useVisitLift,\r\n}) => {\r\n  const x = useSearchLift ? USE_SEARCH_MEASUREMENT : 0;\r\n  const y = useVisitLift ? USE_VISIT_MEASUREMENT : 0;\r\n  const z = useConversionLift ? USE_CONVERSION_MEASUREMENT : 0;\r\n  return x + y + z;\r\n};\r\n\r\nexport const parseMeasurementTypeEnum = combinedEnum => ({\r\n  useConversionLift: combinedEnum.includes('Conversion'),\r\n  useSearchLift: combinedEnum.includes('Search'),\r\n  useVisitLift: combinedEnum.includes('Visit'),\r\n});\r\n\r\nexport const stitchFullCampaignsIntoExperiments = (associatedCampaigns, fetchedLiftExperiments) => {\r\n  const associatedCampaignsById = {};\r\n  associatedCampaigns.forEach((campaign) => {\r\n    associatedCampaignsById[campaign.Id] = campaign;\r\n  });\r\n  const formattedLiftExperiments = fetchedLiftExperiments.reduce((accum, liftExperiment) => {\r\n    const formattedCampaigns = liftExperiment.Campaigns.map(campaignId => associatedCampaignsById[campaignId]);\r\n    accum.push({\r\n      ...liftExperiment,\r\n      Campaigns: formattedCampaigns,\r\n    });\r\n    return accum;\r\n  }, []);\r\n  return formattedLiftExperiments;\r\n};\r\n\r\nexport const fetchExperiment = async ({ cid, aid, liftExperimentId }, { onSuccess, onFailure }) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LiftExperiments\r\n  .$withKey(liftExperimentId)\r\n  .get({\r\n    select: [\r\n      'Id',\r\n      'Name',\r\n      'Campaigns',\r\n      'Country',\r\n      'Keywords',\r\n      'MeasurementType',\r\n      'StartDate',\r\n      'SearchCustomerId',\r\n      'UETTags',\r\n    ],\r\n  })\r\n  .toPromise()\r\n  .then((response) => {\r\n    // This handles the case where a lift exp id param is included but is incorrect (the api returns a 204)\r\n    if (!response) {\r\n      throw new Error();\r\n    }\r\n    onSuccess(response);\r\n  })\r\n  .catch(() => onFailure(curlyTemplate(_TL_('Failed to fetch lift study: {{liftExperimentId}}'))({ liftExperimentId })));\r\n\r\nexport const fetchExperiments = ({ cid, aid }, { query, onSuccess, onFailure }) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LiftExperiments\r\n  .get(query)\r\n  .toPromise()\r\n  .then((response) => {\r\n    onSuccess(response.value);\r\n  })\r\n  .catch(() => onFailure(_TL_('Failed to fetch lift studies')));\r\n\r\nexport const saveExperiment = ({ cid, aid }, { payload, onSuccess, onFailure }) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LiftExperiments\r\n  .post(payload)\r\n  .toPromise()\r\n  .then((response) => {\r\n    onSuccess(response);\r\n    return { isAPISaveFailure: false };\r\n  })\r\n  .catch((response) => {\r\n    const apiErrorCode = response.body.value[0].Code;\r\n    const errorMessage = curlyTemplate(_TL_('Failed to create lift study: {{errorMessage}}'))({ errorMessage: EXPERIMENT_API_ERRORS[apiErrorCode] });\r\n    onFailure(errorMessage);\r\n    return {\r\n      isAPISaveFailure: true,\r\n      error: new Error(errorMessage),\r\n    };\r\n  });\r\n\r\n\r\nexport const updateExperiment = ({ cid, aid }, { payload, onSuccess, onFailure }) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LiftExperiments\r\n  .update(payload.Id, payload)\r\n  .then((response) => {\r\n    onSuccess(response);\r\n    return { isAPISaveFailure: false };\r\n  })\r\n  .catch((response) => {\r\n    const apiErrorCode = response.body.value[0].Code;\r\n    const errorMessage = curlyTemplate(_TL_('Failed to update lift study: {{liftExperimentId}}. {{errorMessage}}'))({ errorMessage: EXPERIMENT_API_ERRORS[apiErrorCode], liftExperimentId: payload.Id });\r\n    onFailure(errorMessage);\r\n    return {\r\n      isAPISaveFailure: true,\r\n      error: new Error(errorMessage),\r\n    };\r\n  });\r\n\r\nexport const deleteExperiment = ({ cid, aid }, liftExperimentId, onSuccess, onFailure) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LiftExperiments\r\n  .$withKey(liftExperimentId)\r\n  .destroyAsPromise()\r\n  .then(() => {\r\n    onSuccess(liftExperimentId);\r\n  })\r\n  .catch(() => {\r\n    onFailure(curlyTemplate(_TL_('Failed to delete lift study: {{liftExperimentId}}'))({ liftExperimentId }));\r\n  });\r\n","import $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useEffect } from 'react';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport {\r\n  DataGrid,\r\n  DataGridBody,\r\n  DataGridCell,\r\n  DataGridHeader,\r\n  DataGridHeaderCell,\r\n  DataGridRow,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  getCellFocusMode,\r\n  getColumns,\r\n} from './config';\r\nimport { fetchCampaignsByIdEDM } from '../../fetch/campaigns';\r\nimport { deleteExperiment, fetchExperiments, stitchFullCampaignsIntoExperiments } from '../../fetch/experiment';\r\n\r\nexport const LiftStudiesGrid = ({ onClickEdit, siteMap }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const { dispatch, state } = useContext(GridContext);\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const onClickName = useCallback(({ id }) => {\r\n    const route = getRoutePathById(siteMap, 'lift-measurement-results');\r\n    scope.append({ liftExperimentId: id });\r\n    scope.save(route);\r\n  }, [scope, siteMap]);\r\n\r\n  const onFailure = useCallback((message) => {\r\n    const alertHelper = new AlertHelper({ i18n });\r\n    alertHelper.showError(message);\r\n  }, [i18n]);\r\n\r\n  const onDeleteFailure = useCallback((message) => {\r\n    setClarityTag({\r\n      IsDeleteLiftExperimentSuccessful: false,\r\n    });\r\n    const alertHelper = new AlertHelper({ i18n });\r\n    alertHelper.showError(message);\r\n  }, [i18n]);\r\n\r\n  const onDeleteSuccess = useCallback((liftExperimentIdToDelete) => {\r\n    const liftExperimentsWithDeletedRemoved = state.items.reduce((accum, liftExperiment) => {\r\n      if (liftExperimentIdToDelete !== liftExperiment.Id) {\r\n        accum.push(liftExperiment);\r\n      }\r\n      return accum;\r\n    }, []);\r\n    setClarityTag({\r\n      IsDeleteLiftExperimentSuccessful: true,\r\n    });\r\n    dispatch({ type: 'FINISH_LOAD_DATA', payload: { items: liftExperimentsWithDeletedRemoved, totalCount: state.totalCount - 1 } });\r\n  }, [dispatch, state.items, state.totalCount]);\r\n\r\n  const onClickDelete = useCallback((liftExperimentIdToDelete) => {\r\n    setClarityTag({\r\n      IsClickedDeleteLiftExperiment: true,\r\n    });\r\n    deleteExperiment(scope.values, liftExperimentIdToDelete, onDeleteSuccess, onDeleteFailure);\r\n  }, [onDeleteSuccess, onDeleteFailure, scope]);\r\n\r\n  const columns = getColumns({\r\n    i18n, onClickDelete, onClickEdit, onClickName,\r\n  });\r\n\r\n  const onFetchExperimentsSuccess = useCallback(async (fetchedLiftExperiments) => {\r\n    const associatedCampaignIds = fetchedLiftExperiments.reduce((accum, liftExperiment) => [...accum, liftExperiment.Campaigns], []);\r\n    if (associatedCampaignIds && associatedCampaignIds.length > 0) {\r\n      const campaignsResponse = await fetchCampaignsByIdEDM(scope.values, associatedCampaignIds)\r\n        .finally(withUiBlock($('.lift-measurement-wrapper'), i18n.getString(_TL_('Loading'))), [i18n]);\r\n      const formattedLiftExperiments = stitchFullCampaignsIntoExperiments(campaignsResponse.value, fetchedLiftExperiments);\r\n      dispatch({ type: 'FINISH_LOAD_DATA', payload: { items: formattedLiftExperiments, totalCount: formattedLiftExperiments.length } });\r\n    } else {\r\n      dispatch({ type: 'FINISH_LOAD_DATA', payload: { items: fetchedLiftExperiments, totalCount: fetchedLiftExperiments.length } });\r\n    }\r\n  }, [dispatch, i18n, scope.values]);\r\n\r\n  const getOrderBy = useCallback((column) => {\r\n    if (!column.fieldName || column.fieldName === 'Status' || column.fieldName === 'Campaigns' || column.fieldName === 'actions') {\r\n      return undefined;\r\n    } else if (column.fieldName === 'dates') {\r\n      return { StartDate: column.isSortDescending ? -1 : 1 };\r\n    }\r\n\r\n    return {\r\n      [column.fieldName]: column.isSortDescending ? -1 : 1,\r\n    };\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    fetchExperiments(scope.values, {\r\n      query: {\r\n        count: true,\r\n        top: state.pagination.pageSize,\r\n        skip: ((state.pagination.pageNumber - 1) * state.pagination.pageSize),\r\n        filter: { where: state.editableFilter },\r\n        orderby: getOrderBy(state.sortedColumn),\r\n      },\r\n      onSuccess: onFetchExperimentsSuccess,\r\n      onFailure,\r\n    });\r\n  }, [getOrderBy, onFailure, onFetchExperimentsSuccess, state.editableFilter, state.pagination, state.sortedColumn, scope.values]);\r\n\r\n  const onSortChange = useCallback((e, { sortColumn, sortDirection }) => {\r\n    setClarityTag({\r\n      IsLiftExperimentSortChanged: true,\r\n      LiftExperimentSortField: sortColumn,\r\n      LiftExperimentSortDirection: sortDirection,\r\n    });\r\n    dispatch({\r\n      type: 'UPDATE_SORTED_COLUMN',\r\n      payload: {\r\n        ...state.sortedColumn,\r\n        fieldName: sortColumn,\r\n        isSortDescending: sortDirection === 'descending',\r\n      },\r\n    });\r\n  }, [dispatch, state]);\r\n\r\n  return (\r\n    <>\r\n      <DataGrid\r\n        className=\"lift-measurement-experiments-grid\"\r\n        columns={columns}\r\n        getRowId={item => item.Id}\r\n        items={state.items}\r\n        onSortChange={onSortChange}\r\n        sortable\r\n      >\r\n        <DataGridHeader>\r\n          <DataGridRow>\r\n            {({ renderHeaderCell }) => (\r\n              <DataGridHeaderCell style={{ padding: '0 10px' }}>\r\n                  {renderHeaderCell()}\r\n              </DataGridHeaderCell>\r\n            )}\r\n          </DataGridRow>\r\n        </DataGridHeader>\r\n        <DataGridBody>\r\n          {({ item, rowId }) => (\r\n            <DataGridRow key={rowId}>\r\n              {({ renderCell, columnId }) => (\r\n                <DataGridCell focusMode={getCellFocusMode(columnId)}>\r\n                  {renderCell(item)}\r\n                </DataGridCell>\r\n              )}\r\n            </DataGridRow>\r\n          )}\r\n        </DataGridBody>\r\n      </DataGrid>\r\n    </>\r\n  );\r\n};\r\n\r\nLiftStudiesGrid.propTypes = {\r\n  onClickEdit: PropTypes.func.isRequired,\r\n  siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string,\r\n  })).isRequired,\r\n};\r\n","import { maxKeywordCount } from './constants/maximums';\r\n\r\nexport const parseKeywordString = (keywordString) => {\r\n  const words = keywordString\r\n    .split(',')\r\n    .map(word => word.trim());\r\n  return words;\r\n};\r\n\r\nexport const sortByName = i18n => (a, b) => {\r\n  if (i18n.getString(a.name) < i18n.getString(b.name)) {\r\n    return -1;\r\n  }\r\n\r\n  if (i18n.getString(b.name) < i18n.getString(a.name)) {\r\n    return 1;\r\n  }\r\n\r\n  return 0;\r\n};\r\n\r\nexport const getUETTags = (wizardData) => {\r\n  if (wizardData.useVisitConversionLift && wizardData.useConversionLift && wizardData.useVisitLift) {\r\n    return wizardData.uetTags.both;\r\n  } else if (wizardData.useConversionLift) {\r\n    return wizardData.uetTags.conversion;\r\n  } else if (wizardData.useVisitLift) {\r\n    return wizardData.uetTags.visit;\r\n  }\r\n  return undefined;\r\n};\r\n\r\nexport const getKeywords = (wizardData) => {\r\n  if (!wizardData.keywordsMethod || !wizardData.useSearchLift) {\r\n    return undefined;\r\n  }\r\n  return wizardData.keywordsMethod === 'entry'\r\n    ? parseKeywordString(wizardData.typedKeywordString)\r\n        .filter(kw => kw.length > 0)\r\n        .slice(0, maxKeywordCount)\r\n    : wizardData.selectedKeywords.map(keywordId => wizardData.fetchedKeywords[keywordId].name);\r\n};\r\n","export const maxCampaignCount = 10; // maximum number of campaigns for a lift experiment\r\nexport const maxExperimentNameLength = 255; // maximum length of an experiment name\r\nexport const maxFetchedAdGroupsCount = 1000; // maximum number of AD Groups\r\nexport const maxFetchedAudienceCriterionCount = 1000; // maximum number of Audience Criterion\r\nexport const maxFetchedGoalsCount = 200; // maximum number of conversion goals to fetch\r\nexport const maxFetchedKeywordsCount = 200; // maximum number of keywords to fetch\r\nexport const maxFetchedTagsCount = 200; // maximum number of UET tags to fetch\r\nexport const maxKeywordCount = 20; // maximum number of keywords for a lift experiment\r\nexport const maxKeywordLength = 100; // maximum length of a keyword\r\nexport const maxSearchCid = 999999999; // maximum value for search CID\r\nexport const maxTagCount = 5; // maximum number of UET tags for a lift experiment\r\nexport const minSearchCid = 1; // minimum value for search CID\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Dropdown,\r\n  Option,\r\n} from '@fluentui/react-components';\r\nimport { countries } from '../../countries';\r\nimport { useFilterDropdownStyles } from '../../styles';\r\nimport { sortByName } from '../../utils';\r\n\r\nexport const getButtonText = ({\r\n  delimiter,\r\n  i18n,\r\n  placeholder,\r\n  selectedCountries,\r\n}) => {\r\n  if (selectedCountries.length === 0) {\r\n    return placeholder;\r\n  }\r\n  const formattedSelectionText = selectedCountries\r\n    .map(code => i18n.getString(countries[code].name))\r\n    .join(delimiter);\r\n  const countryText = selectedCountries.length > 1 ? i18n.getString(_TL_('Countries:')) : i18n.getString(_TL_('Country:'));\r\n  return `${countryText} ${formattedSelectionText}`;\r\n};\r\n\r\nexport const CountrySelector = ({\r\n  onSelect,\r\n  selectedCountries,\r\n}) => {\r\n  const styles = useFilterDropdownStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const placeholder = i18n.getString(_TL_('Countries: All'));\r\n  const dropdownLabel = i18n.getString(_TL_('Experiment country filter'));\r\n  const delimiter = i18n.getString(_TL_(', '));\r\n\r\n  const buttonText = useMemo(() => getButtonText({\r\n    delimiter,\r\n    i18n,\r\n    placeholder,\r\n    selectedCountries,\r\n  }), [delimiter, i18n, placeholder, selectedCountries]);\r\n\r\n  const countryKeyValues = useMemo(() => Object.values(countries).sort(sortByName(i18n)), [i18n]);\r\n\r\n  const onOptionSelect = useCallback((e, data) => {\r\n    onSelect(data.selectedOptions);\r\n  }, [onSelect]);\r\n\r\n  return (\r\n    <div className={styles.root}>\r\n      <Dropdown\r\n        className=\"country-selector\"\r\n        aria-label={dropdownLabel}\r\n        placeholder={placeholder}\r\n        button={<span className={styles.truncatedText}>{buttonText}</span>}\r\n        data-selectedOptions={selectedCountries.length ? selectedCountries : placeholder}\r\n        multiselect\r\n        onOptionSelect={onOptionSelect}\r\n        selectedOptions={selectedCountries}\r\n      >\r\n        {countryKeyValues.map(({ code, name }) => (\r\n          <Option\r\n            key={code}\r\n            value={code}\r\n            className={`country-selector-option-${code}`}\r\n          >\r\n            {i18n.getString(name)}\r\n          </Option>\r\n        ))}\r\n      </Dropdown>\r\n    </div>\r\n  );\r\n};\r\n\r\nCountrySelector.propTypes = {\r\n  onSelect: PropTypes.func.isRequired,\r\n  selectedCountries: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Dropdown,\r\n  Option,\r\n} from '@fluentui/react-components';\r\nimport { useFilterDropdownStyles } from '../common/styles';\r\nimport { statuses } from './statuses';\r\n\r\nexport const getButtonText = ({\r\n  delimiter,\r\n  i18n,\r\n  placeholder,\r\n  selectedStatuses,\r\n}) => {\r\n  if (selectedStatuses.length === 0) {\r\n    return placeholder;\r\n  }\r\n  const formattedSelectionText = selectedStatuses\r\n    .map(status => i18n.getString(statuses[status].name))\r\n    .join(delimiter);\r\n  const statusText = selectedStatuses.length > 1 ? i18n.getString(_TL_('Statuses:')) : i18n.getString(_TL_('Status:'));\r\n  return `${statusText} ${formattedSelectionText}`;\r\n};\r\n\r\nexport const StatusSelector = ({\r\n  onSelect,\r\n  selectedStatuses,\r\n}) => {\r\n  const styles = useFilterDropdownStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const placeholder = i18n.getString(_TL_('Statuses: All'));\r\n  const dropdownLabel = i18n.getString(_TL_('Experiment status filter'));\r\n  const delimiter = i18n.getString(_TL_(', '));\r\n\r\n  const buttonText = useMemo(() => getButtonText({\r\n    delimiter,\r\n    i18n,\r\n    placeholder,\r\n    selectedStatuses,\r\n  }), [delimiter, i18n, placeholder, selectedStatuses]);\r\n\r\n  const statusMap = useMemo(() => Object.values(statuses), []);\r\n\r\n  const onOptionSelect = useCallback((e, data) => {\r\n    onSelect(data.selectedOptions);\r\n  }, [onSelect]);\r\n\r\n\r\n  return (\r\n    <div className={styles.root}>\r\n      <Dropdown\r\n        className=\"status-selector\"\r\n        aria-label={dropdownLabel}\r\n        placeholder={placeholder}\r\n        button={<span className={styles.truncatedText}>{buttonText}</span>}\r\n        data-selectedOptions={selectedStatuses.length ? selectedStatuses : placeholder}\r\n        multiselect\r\n        onOptionSelect={onOptionSelect}\r\n        selectedOptions={selectedStatuses}\r\n      >\r\n        {statusMap.map(({ code, name }) => (\r\n          <Option\r\n            key={code}\r\n            value={code}\r\n            className={`status-selector-option-${name}`}\r\n          >\r\n            {i18n.getString(name)}\r\n          </Option>\r\n        ))}\r\n      </Dropdown>\r\n    </div>\r\n  );\r\n};\r\n\r\nStatusSelector.propTypes = {\r\n  onSelect: PropTypes.func.isRequired,\r\n  selectedStatuses: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport {\r\n  Button,\r\n  Input,\r\n  makeStyles,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  SearchRegular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n  Stack,\r\n} from '@fluentui/react/lib/Stack';\r\nimport { CountrySelector } from '../common/components/country/country-selector';\r\nimport { StatusSelector } from './status-selector';\r\n\r\nconst useStyles = makeStyles({\r\n  search: {\r\n    width: '300px',\r\n  },\r\n});\r\n\r\nconst debouncedEditableFilterDispatch = _.debounce((currentEditableFilterPayload, dispatch) => dispatch({ type: 'SET_EDITABLE_FILTER', payload: currentEditableFilterPayload }), 300);\r\n\r\nexport const Toolbar = ({ onClickCreate }) => {\r\n  const styles = useStyles();\r\n  const toolbarTokens = {\r\n    childrenGap: 12,\r\n  };\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const createButtonLabel = i18n.getString(_TL_('Create'));\r\n  const searchBoxPlaceholder = i18n.getString(_TL_('Search by experiment name'));\r\n  const searchBoxLabel = i18n.getString(_TL_('Experiment name search'));\r\n\r\n  const { dispatch } = useContext(GridContext);\r\n\r\n  const [countryFilters, setCountryFilters] = useState([]);\r\n  const [searchFilter, setSearchFilter] = useState('');\r\n  const [statusFilters, setStatusFilters] = useState([]);\r\n\r\n  const onChangeCountries = useCallback((countries) => {\r\n    setClarityTag({\r\n      IsSelectedLiftExperimentCountryFilter: true,\r\n    });\r\n    setCountryFilters([...countries]);\r\n  }, []);\r\n\r\n  const onChangeSearchInput = useCallback((_e, { value }) => {\r\n    setClarityTag({\r\n      IsChangedLiftExperimentSearchFilter: true,\r\n    });\r\n    setSearchFilter(value);\r\n  }, []);\r\n\r\n  const onChangeStatuses = useCallback((statuses) => {\r\n    setClarityTag({\r\n      IsSelectedLiftExperimentStatusFilter: true,\r\n    });\r\n    setStatusFilters([...statuses]);\r\n  }, []);\r\n\r\n  const fetchExperimentsFilter = useMemo(() => {\r\n    const formattedCountryFilters = countryFilters.map(country => `'${country}'`).join(', ');\r\n    const formattedStatusFilters = statusFilters.map(country => `'${country}'`).join(', ');\r\n    return [\r\n      searchFilter.length ? `contains(tolower(Name), '${searchFilter.toLowerCase()}')` : null,\r\n      countryFilters.length ? `Country in [${formattedCountryFilters}]` : null,\r\n      statusFilters.length ? `Status in [${formattedStatusFilters}]` : null,\r\n    ].filter(fragment => fragment).join(' and ');\r\n  }, [countryFilters, searchFilter, statusFilters]);\r\n\r\n  useEffect(() => {\r\n    debouncedEditableFilterDispatch(fetchExperimentsFilter, dispatch);\r\n  }, [fetchExperimentsFilter, dispatch]);\r\n\r\n  return (\r\n    <Stack horizontal horizontalAlign=\"space-between\">\r\n      <Stack horizontal tokens={toolbarTokens}>\r\n        <Button className=\"create-experiment\" appearance=\"primary\" onClick={onClickCreate}>{createButtonLabel}</Button>\r\n        <StatusSelector\r\n          onSelect={onChangeStatuses}\r\n          selectedStatuses={statusFilters}\r\n        />\r\n        <CountrySelector\r\n          onSelect={onChangeCountries}\r\n          selectedCountries={countryFilters}\r\n        />\r\n      </Stack>\r\n      <Input\r\n        className={mergeClasses('search-filter', styles.search)}\r\n        aria-label={searchBoxLabel}\r\n        contentBefore={<SearchRegular />}\r\n        onChange={onChangeSearchInput}\r\n        placeholder={searchBoxPlaceholder}\r\n        value={searchFilter}\r\n      />\r\n    </Stack>\r\n  );\r\n};\r\n\r\nToolbar.propTypes = {\r\n  onClickCreate: PropTypes.func.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { GridContextProvider } from '@bingads-webui-grid/grid-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Card,\r\n  CardFooter,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { getUIBlockerStyle } from './common/styles';\r\nimport { LandingPageFooter } from './landing-page/landing-page-footer';\r\nimport { LiftStudiesGrid } from './landing-page/lift-studies-grid/grid';\r\nimport { Toolbar } from './landing-page/toolbar';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n  footer: {\r\n    alignItems: 'center',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n  },\r\n  gridMobileView: {\r\n    '@media screen and (max-width: 600px)': {\r\n      width: 'fit-content',\r\n    },\r\n  },\r\n});\r\n\r\nexport const LiftMeasurement = ({ siteMap }) => {\r\n  useDefaultStyles(getUIBlockerStyle);\r\n  const mainLayoutTokens = {\r\n    childrenGap: 15,\r\n    padding: 30,\r\n  };\r\n  const styles = useStyles();\r\n\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const onClickCreate = useCallback(() => {\r\n    setClarityTag({\r\n      IsClickedCreateLiftExperiment: true,\r\n    });\r\n    const route = getRoutePathById(siteMap, 'lift-measurement-creation');\r\n    scope.save(route);\r\n  }, [scope, siteMap]);\r\n  const onClickEdit = useCallback((liftExperimentId) => {\r\n    setClarityTag({\r\n      IsClickedEditLiftExperiment: true,\r\n    });\r\n    const route = getRoutePathById(siteMap, 'lift-measurement-edit');\r\n    scope.append({ liftExperimentId });\r\n    scope.save(route);\r\n  }, [scope, siteMap]);\r\n\r\n  const initialGridContext = useMemo(() => ({\r\n    items: [],\r\n    editableFilter: '',\r\n    pagination: {\r\n      pageNumber: 1,\r\n      pageSize: 10,\r\n    },\r\n    totalCount: 0,\r\n  }), []);\r\n\r\n  return (\r\n    <div className=\"lift-measurement-wrapper\">\r\n      <Stack tokens={mainLayoutTokens}>\r\n        <GridContextProvider {...initialGridContext}>\r\n          <Toolbar onClickCreate={onClickCreate} />\r\n          <Card className={styles.gridMobileView}>\r\n            <LiftStudiesGrid onClickEdit={onClickEdit} siteMap={siteMap} />\r\n            <CardFooter className={styles.footer}>\r\n              <LandingPageFooter />\r\n            </CardFooter>\r\n          </Card>\r\n        </GridContextProvider>\r\n      </Stack >\r\n    </div >\r\n  );\r\n};\r\n\r\nLiftMeasurement.propTypes = {\r\n  siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string,\r\n  })).isRequired,\r\n};\r\n","export const CREATE_INTENT = 'create';\r\nexport const EDIT_INTENT = 'edit';\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Button,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  matchStepState,\r\n  STEP_STATES,\r\n  WIZARD_EVENTS,\r\n  useWizardService,\r\n} from '@bingads-webui-react/wizard';\r\n\r\nexport const NextButton = ({ 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\r\n  const onNextClicked = useCallback(() => {\r\n    send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n  }, [send]);\r\n\r\n  return (\r\n    <Button\r\n      appearance=\"primary\"\r\n      className=\"step-next-button\"\r\n      disabled={disabled || isBlocking}\r\n      onClick={onNextClicked}\r\n    >\r\n      {i18n.getString(_TL_('Next'))}\r\n    </Button>\r\n  );\r\n};\r\n\r\nNextButton.propTypes = {\r\n  disabled: PropTypes.bool,\r\n};\r\n\r\nNextButton.defaultProps = {\r\n  disabled: false,\r\n};\r\n\r\nexport const BackButton = () => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { state, send } = useWizardService();\r\n  const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n  const onBackClicked = useCallback(() => {\r\n    send(WIZARD_EVENTS.BACK);\r\n  }, [send]);\r\n\r\n  return (\r\n    <Button\r\n      className=\"step-back-button\"\r\n      disabled={isBlocking}\r\n      onClick={onBackClicked}\r\n    >\r\n      {i18n.getString(_TL_('Back'))}\r\n    </Button>\r\n  );\r\n};\r\n\r\nexport const CancelButton = () => {\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const { state, send } = useWizardService();\r\n  const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n  const onCancelClicked = useCallback(() => {\r\n    send(WIZARD_EVENTS.CANCEL);\r\n  }, [send]);\r\n\r\n  return (\r\n    <Button\r\n      className=\"step-cancel-button\"\r\n      disabled={isBlocking}\r\n      onClick={onCancelClicked}\r\n    >\r\n      {i18n.getString(_TL_('Cancel'))}\r\n    </Button>\r\n  );\r\n};\r\n\r\nexport const SaveAndExitButton = ({ 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\r\n  const onNextClicked = useCallback(() => {\r\n    send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n  }, [send]);\r\n\r\n  return (\r\n    <Button\r\n      appearance=\"primary\"\r\n      className=\"step-save-and-exit-button\"\r\n      disabled={disabled || isBlocking}\r\n      onClick={onNextClicked}\r\n    >\r\n      {i18n.getString(_TL_('Save and exit'))}\r\n    </Button>\r\n  );\r\n};\r\n\r\nSaveAndExitButton.propTypes = {\r\n  disabled: PropTypes.bool,\r\n};\r\n\r\nSaveAndExitButton.defaultProps = {\r\n  disabled: false,\r\n};\r\n","import React from 'react';\r\nimport {\r\n  getIsFirstStep,\r\n  getIsLastStep,\r\n  useWizardService,\r\n} from '@bingads-webui-react/wizard';\r\nimport { Stack } from '@fluentui/react';\r\nimport { NextButton, BackButton, CancelButton, SaveAndExitButton } from './buttons';\r\n\r\nexport const LiftMeasurementStepFooter = () => {\r\n  const { state } = useWizardService();\r\n  const isFirstStep = getIsFirstStep(state);\r\n  const isLastStep = getIsLastStep(state);\r\n\r\n  return (\r\n    <Stack horizontal tokens={{ childrenGap: 16 }}>\r\n      {isFirstStep && <NextButton />}\r\n      {isLastStep && <BackButton />}\r\n      {isLastStep && <SaveAndExitButton />}\r\n      <CancelButton />\r\n    </Stack>\r\n  );\r\n};\r\n","export const errorMessages = {\r\n  CAMPAIGN_REQUIRED: _TL_('Please select at least one campaign before proceeding to the next step.'),\r\n  CAMPAIGNS_TOO_MANY: _TL_('Your lift experiment can include up to {{max}} campaigns.'),\r\n  CONVERSION_GOAL_REQUIRED: _TL_('Please select a UET tag that has an active conversion goal associated with it.'),\r\n  COUNTRY_REQUIRED: _TL_('Country is required.'),\r\n  KEYWORDS_TOO_LONG: _TL_('You entered {{count}} {{unit}} that {{verb}} the {{max}}-character limit. Please shorten your text.'),\r\n  KEYWORDS_TOO_MANY: _TL_('You entered {{count}} keywords. The lift experiment is limited to {{max}} keywords.'),\r\n  MEASUREMENT_TYPE_REQUIRED: _TL_('You must select at least one lift measurement type.'),\r\n  NAME_REQUIRED: _TL_('Experiment name is required.'),\r\n  NAME_TOO_LONG: _TL_('Experiment name must be 255 or less characters in length.'),\r\n  SAVE_VALIDATION_FAILED: _TL_('You can\\'t save this lift experiment. Please fix the errors and try again.'),\r\n  SEARCH_CID_RANGE: _TL_('Customer ID must be between 1 and 999999999.'),\r\n  SEARCH_CID_TYPE: _TL_('Customer ID must be a number.'),\r\n  SELECTED_KEYWORDS_REQUIRED: _TL_('Keywords are required.'),\r\n  START_DATE_REQUIRED: _TL_('Start date is required.'),\r\n  STATUS_INVALID_FOR_EDIT: _TL_('Lift studies can only be edited while they are in a scheduled status.'),\r\n  TYPED_KEYWORDS_REQUIRED: _TL_('Keywords are required.'),\r\n  UET_TAG_SELECTION_REQUIRED: _TL_('Please check below for an issue with your UET tags selection.'),\r\n  UET_REQUIRED: _TL_('UET tags are required.'),\r\n  VISIT_CONVERSION_LIFT_REQUIRED: _TL_('When using \\'Visit and conversion lift\\', you must choose to measure visit and conversion lift, conversion lift only, or visit lift only.'),\r\n};\r\n","export const mainLayoutTokens = {\r\n  childrenGap: 15,\r\n  padding: 30,\r\n};\r\n\r\nexport const stepLayoutTokens = {\r\n  childrenGap: 15,\r\n  padding: '32px',\r\n  maxWidth: '67%',\r\n};\r\n\r\nexport const selectCampaignsStepLayoutTokens = {\r\n  childrenGap: 15,\r\n  padding: '32px',\r\n};\r\n\r\nexport const footerStyles = {\r\n  alignItems: 'center',\r\n  display: 'flex',\r\n  flexDirection: 'row',\r\n  justifyContent: 'space-between',\r\n};\r\n\r\nexport const cardHeaderStyles = {\r\n  cardHeader: {\r\n    display: 'flex',\r\n  },\r\n  label: {\r\n    paddingRight: '5px',\r\n  },\r\n};\r\n\r\nexport const selectCampaignsStyles = {\r\n  root: {\r\n    display: 'flex',\r\n    flexGrow: 1,\r\n  },\r\n  content: {\r\n    flexGrow: 1,\r\n  },\r\n};\r\n\r\nexport const selectedCampaignsAccordionStyles = {\r\n  accordionHeader: {\r\n    display: 'flex',\r\n    paddingBottom: '5px',\r\n    '& button': {\r\n      paddingLeft: '0px',\r\n      paddingRight: '0px',\r\n    },\r\n  },\r\n  accordionHeaderText: {\r\n    marginRight: 'auto',\r\n  },\r\n  count: {\r\n    color: '#616161',\r\n  },\r\n  tagsList: {\r\n    columnGap: '2px',\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    rowGap: '2px',\r\n  },\r\n};\r\n\r\nexport const studySummaryDrawerStyles = {\r\n  content: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n  },\r\n  drawer: {\r\n    paddingLeft: '15px',\r\n    paddingRight: '20px',\r\n    backgroundColor: '#f5f5f5',\r\n    backgroundSize: '100% 0px',\r\n    borderLeftStyle: 'solid',\r\n    borderLeftWidth: '1px',\r\n    borderLeftColor: '#e1dfdd',\r\n  },\r\n  drawerHeader: {\r\n    paddingBottom: '20px',\r\n  },\r\n  subTitle: {\r\n    marginTop: '20px !important',\r\n    paddingBottom: '15px',\r\n  },\r\n  totalBudget: {\r\n    paddingBottom: '10px',\r\n    color: '#616161',\r\n  },\r\n};\r\n\r\n","import {\r\n  ADD_KEYWORDS_BY_ENTRY,\r\n  ADD_KEYWORDS_BY_SELECTION,\r\n} from './components/keyword/keyword-methods';\r\nimport {\r\n  maxCampaignCount,\r\n  maxExperimentNameLength,\r\n  maxKeywordLength,\r\n  maxSearchCid,\r\n  minSearchCid,\r\n} from './constants/maximums';\r\nimport { errorMessages } from './errors';\r\nimport { parseKeywordString } from './utils';\r\n\r\nexport const validateCampaigns = ({ selectedCampaignsById }) => {\r\n  if (selectedCampaignsById == null) {\r\n    return false;\r\n  }\r\n\r\n  const campaigns = Object.values(selectedCampaignsById);\r\n\r\n  if (campaigns.length === 0) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const validateExperimentName = ({ experimentName }) => {\r\n  if (experimentName.length > maxExperimentNameLength) {\r\n    return false;\r\n  }\r\n\r\n  if (experimentName.trim().length === 0) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const validateStartDate = ({ startDate }) => startDate != null;\r\n\r\nexport const validateCountry = ({ country }) => country != null;\r\n\r\nexport const validateMeasurementTypes = ({ useConversionLift, useSearchLift, useVisitLift }) => (\r\n  !!useConversionLift || !!useSearchLift || !!useVisitLift\r\n);\r\n\r\nexport const validateEnteredKeywordsRequired = ({ typedKeywordString }) => typedKeywordString.trim().length > 0;\r\n\r\nexport const validateSelectedKeywordsCount = ({ selectedKeywords }) => selectedKeywords.length > 0;\r\n\r\nexport const validateSearchCid = ({ searchCid }) => {\r\n  if (searchCid.trim().length === 0) {\r\n    return true;\r\n  }\r\n\r\n  const value = Number(searchCid);\r\n\r\n  if (isNaN(value)) {\r\n    return false;\r\n  }\r\n\r\n  if (!Number.isInteger(value)) {\r\n    return false;\r\n  }\r\n\r\n  if (value < minSearchCid || value > maxSearchCid) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const validateSearchLift = (data) => {\r\n  const {\r\n    keywordsMethod,\r\n    typedKeywordString,\r\n    useSearchLift,\r\n  } = data;\r\n\r\n  if (!useSearchLift) {\r\n    return true;\r\n  }\r\n\r\n  if (keywordsMethod === ADD_KEYWORDS_BY_ENTRY) {\r\n    if (!validateEnteredKeywordsRequired(data)) {\r\n      return false;\r\n    }\r\n\r\n    const parsedKeywords = parseKeywordString(typedKeywordString);\r\n    const tooLongKeywords = parsedKeywords.filter(word => word.length > maxKeywordLength);\r\n\r\n    if (tooLongKeywords.length > 0) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  if (keywordsMethod === ADD_KEYWORDS_BY_SELECTION) {\r\n    if (!validateSelectedKeywordsCount(data)) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  if (!validateSearchCid(data)) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const validateCampaignCount = ({ count, i18n }) => {\r\n  if (count === 0) {\r\n    return {\r\n      isValid: false,\r\n      error: i18n.getString(errorMessages.CAMPAIGN_REQUIRED),\r\n    };\r\n  } else if (count > maxCampaignCount) {\r\n    return {\r\n      isValid: false,\r\n      error: i18n.getString(errorMessages.CAMPAIGNS_TOO_MANY, { max: maxCampaignCount }),\r\n    };\r\n  }\r\n  return {\r\n    isValid: true,\r\n    error: null,\r\n  };\r\n};\r\n\r\nexport const validateVisitConversionLift = (data) => {\r\n  const {\r\n    useConversionLift,\r\n    useVisitLift,\r\n    useVisitConversionLift,\r\n    uetTags,\r\n  } = data;\r\n\r\n  if (!useVisitConversionLift) {\r\n    return true;\r\n  }\r\n\r\n  if (useConversionLift && useVisitLift) {\r\n    return uetTags.both.length !== 0;\r\n  }\r\n\r\n  if (useConversionLift) {\r\n    return uetTags.conversion.length !== 0;\r\n  }\r\n\r\n  if (useVisitLift) {\r\n    return uetTags.visit.length !== 0;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\nconst isMeasurementTypeSelected = data => data.useSearchLift || data.useVisitConversionLift;\r\n\r\nexport const validateLiftExperiment = data => !!data.isValid && isMeasurementTypeSelected(data) && validateVisitConversionLift(data);\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect } from 'react';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { Dropdown } from '@fluentui/react-components';\r\n\r\nconst AdaptedDropdown = ({\r\n  errorMessage,\r\n  onOptionSelect,\r\n  updateValidation,\r\n  useSearchLift,\r\n  validationProps,\r\n  ...restProps\r\n}) => {\r\n  const onSelect = useCallback((e, data) => {\r\n    const { selectedOptions } = data;\r\n    updateValidation(selectedOptions.length === 0 ? [errorMessage] : [], { selectedOptions });\r\n    onOptionSelect(e, data);\r\n  }, [errorMessage, onOptionSelect, updateValidation]);\r\n\r\n  useEffect(() => {\r\n    const selected = validationProps.data.selectedOptions;\r\n    updateValidation(selected.length === 0 && useSearchLift ? [errorMessage] : [], { selectedOptions: selected });\r\n  }, [errorMessage, updateValidation, useSearchLift, validationProps.data.selectedOptions]);\r\n\r\n  return (\r\n    <Dropdown\r\n      {...restProps}\r\n      onOptionSelect={onSelect}\r\n      selectedOptions={validationProps.data.selectedOptions}\r\n    />\r\n  );\r\n};\r\n\r\nAdaptedDropdown.propTypes = {\r\n  errorMessage: PropTypes.string.isRequired,\r\n  onOptionSelect: PropTypes.func.isRequired,\r\n  useSearchLift: PropTypes.bool.isRequired,\r\n  updateValidation: PropTypes.func.isRequired,\r\n  validationProps: PropTypes.shape({\r\n    data: PropTypes.shape({\r\n      selectedOptions: PropTypes.arrayOf(PropTypes.oneOfType([\r\n        PropTypes.number,\r\n        PropTypes.string,\r\n      ])).isRequired,\r\n    }).isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport const RequiredDropdown = withCustomValidation(AdaptedDropdown);\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Card,\r\n  CardHeader,\r\n  Field,\r\n  Label,\r\n  makeStyles,\r\n  Option,\r\n} from '@fluentui/react-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { countries } from '../../countries';\r\nimport { errorMessages } from '../../errors';\r\nimport { cardHeaderStyles } from '../../page-layout';\r\nimport { sortByName } from '../../utils';\r\nimport { RequiredDropdown } from '../validated/required-dropdown';\r\n\r\nconst useStyles = makeStyles(cardHeaderStyles);\r\n\r\nexport const CountryCard = ({ country, onChangeCountry, showError }) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const countryLabel = i18n.getString(_TL_('Country'));\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n  const countryKeyValues = useMemo(() => Object.values(countries).sort(sortByName(i18n)), [i18n]);\r\n  const countryAsArray = useMemo(() => (country ? [country] : []), [country]);\r\n\r\n  const onOptionSelect = useCallback((e, data) => {\r\n    onChangeCountry(data.selectedOptions[0]);\r\n  }, [onChangeCountry]);\r\n\r\n  const [fieldProps, setFieldProps] = useState(null);\r\n\r\n  const onValidateCountry = useCallback(({ isValid, messages }) => {\r\n    if (isValid) {\r\n      setFieldProps(null);\r\n    } else {\r\n      setFieldProps({\r\n        validationMessage: i18n.getString(errorMessages[messages[0]]),\r\n        validationState: 'error',\r\n      });\r\n    }\r\n  }, [i18n]);\r\n\r\n  return (\r\n    <Card className=\"country-card\">\r\n      <CardHeader\r\n        header={\r\n          <div className={styles.cardHeader}>\r\n            <Label size=\"large\" className={styles.label} required>{countryLabel}</Label>\r\n            <HelpButton\r\n              aria-label={`${learnMore} ${countryLabel}`}\r\n              topic=\"pop_BA_Experiments_LiftCountry\"\r\n            />\r\n          </div>\r\n        }\r\n      />\r\n      <Field {...(showError ? fieldProps : null)}>\r\n        <RequiredDropdown\r\n          ariaLabel={i18n.getString(_TL_('Lift measurement country dropdown'))}\r\n          errorMessage=\"COUNTRY_REQUIRED\"\r\n          onOptionSelect={onOptionSelect}\r\n          value={country ? i18n.getString(countries[country].name) : ''}\r\n          validationProps={{\r\n            data: { selectedOptions: countryAsArray },\r\n            field: 'selectedOptions',\r\n            onValidate: onValidateCountry,\r\n          }}\r\n        >\r\n          {countryKeyValues.map(({ code, name }) => (\r\n            <Option\r\n              key={code}\r\n              value={code}\r\n              className={`country-selector-option-${name}`}\r\n            >\r\n              {i18n.getString(name)}\r\n            </Option>\r\n          ))}\r\n        </RequiredDropdown>\r\n      </Field>\r\n    </Card>\r\n  );\r\n};\r\n\r\nCountryCard.propTypes = {\r\n  country: PropTypes.string,\r\n  onChangeCountry: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool,\r\n};\r\n\r\nCountryCard.defaultProps = {\r\n  country: null,\r\n  showError: false,\r\n};\r\n","const MS_PER_SEC = 1000;\r\nconst SEC_PER_MIN = 60;\r\nconst MIN_PER_HR = 60;\r\nconst HR_PER_DAY = 24;\r\n\r\nexport const MS_PER_DAY = MS_PER_SEC * SEC_PER_MIN * MIN_PER_HR * HR_PER_DAY;\r\n\r\nexport const getFormattedDateString = (d) => {\r\n  const isoString = d.toISOString();\r\n  return isoString.split('T')[0];\r\n};\r\n\r\nexport const DATE_FORMAT = 'MM/dd/yyyy';\r\nexport const API_DATE_FORMAT = 'yyyy-MM-dd';\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport dateUtils from '@bingads-webui-component-legacy/humanize/date';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n  Card,\r\n  CardHeader,\r\n  Field,\r\n  Label,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { DatePicker } from '@fluentui/react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport {\r\n  DATE_FORMAT,\r\n  MS_PER_DAY,\r\n} from '../../date';\r\nimport { errorMessages } from '../../errors';\r\nimport { cardHeaderStyles } from '../../page-layout';\r\nimport { getDatePickerStrings } from './date-picker-strings';\r\n\r\nconst useStyles = makeStyles(cardHeaderStyles);\r\n\r\nexport const StartDateCardInternal = ({\r\n  onChangeStartDate,\r\n  showError,\r\n  startDate,\r\n  updateValidation,\r\n}) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const localizedStrings = getDatePickerStrings(i18n);\r\n  const tomorrow = new Date(Date.now() + MS_PER_DAY);\r\n  const initialDate = useMemo(() => (startDate ? new Date(startDate) : null), [startDate]);\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n  const startDateLabel = i18n.getString(_TL_('Start date'));\r\n  const fieldProps = startDate == null && showError\r\n    ? {\r\n      validationMessage: i18n.getString(errorMessages.START_DATE_REQUIRED),\r\n      validationState: 'error',\r\n    }\r\n    : null;\r\n\r\n  const onSelectStartDate = useCallback((date) => {\r\n    const formattedDate = dateUtils.format(date, DATE_FORMAT);\r\n    updateValidation([], { startDate: formattedDate });\r\n    onChangeStartDate(formattedDate);\r\n  }, [onChangeStartDate, updateValidation]);\r\n\r\n  const onFormatDate = useCallback(date => (\r\n    date\r\n      ? i18n.formatDate(date)\r\n      : ''\r\n  ), [i18n]);\r\n\r\n  return (\r\n    <Card className=\"start-date-card\">\r\n      <CardHeader\r\n        header={\r\n          <div className={styles.cardHeader}>\r\n            <Label size=\"large\" className={styles.label} required>{startDateLabel}</Label>\r\n            <HelpButton\r\n              aria-label={`${learnMore} ${startDateLabel}`}\r\n              topic=\"pop_BA_Experiments_StartDate\"\r\n            />\r\n          </div>\r\n          }\r\n      />\r\n      <Field {...fieldProps}>\r\n        <DatePicker\r\n          ariaLabel={i18n.getString(_TL_('Lift measurement start date picker'))}\r\n          formatDate={onFormatDate}\r\n          initialPickerDate={tomorrow}\r\n          minDate={tomorrow}\r\n          onSelectDate={onSelectStartDate}\r\n          strings={localizedStrings}\r\n          value={initialDate}\r\n        />\r\n      </Field>\r\n    </Card>\r\n  );\r\n};\r\n\r\nStartDateCardInternal.propTypes = {\r\n  onChangeStartDate: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool,\r\n  startDate: PropTypes.string,\r\n  updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nStartDateCardInternal.defaultProps = {\r\n  showError: false,\r\n  startDate: null,\r\n};\r\n\r\nexport const StartDateCard = withCustomValidation(StartDateCardInternal);\r\n","export const getDatePickerStrings = i18n => ({\r\n  months: [\r\n    i18n.getString(_TL_('January')),\r\n    i18n.getString(_TL_('February')),\r\n    i18n.getString(_TL_('March')),\r\n    i18n.getString(_TL_('April')),\r\n    i18n.getString(_TL_('May')),\r\n    i18n.getString(_TL_('June')),\r\n    i18n.getString(_TL_('July')),\r\n    i18n.getString(_TL_('August')),\r\n    i18n.getString(_TL_('September')),\r\n    i18n.getString(_TL_('October')),\r\n    i18n.getString(_TL_('November')),\r\n    i18n.getString(_TL_('December')),\r\n  ],\r\n  shortMonths: [\r\n    i18n.getString(_TL_('Jan')),\r\n    i18n.getString(_TL_('Feb')),\r\n    i18n.getString(_TL_('Mar')),\r\n    i18n.getString(_TL_('Apr')),\r\n    i18n.getString(_TL_('May')),\r\n    i18n.getString(_TL_('Jun')),\r\n    i18n.getString(_TL_('Jul')),\r\n    i18n.getString(_TL_('Aug')),\r\n    i18n.getString(_TL_('Sep')),\r\n    i18n.getString(_TL_('Oct')),\r\n    i18n.getString(_TL_('Nov')),\r\n    i18n.getString(_TL_('Dec')),\r\n  ],\r\n  days: [\r\n    i18n.getString(_TL_('Sun')),\r\n    i18n.getString(_TL_('Mon')),\r\n    i18n.getString(_TL_('Tue')),\r\n    i18n.getString(_TL_('Wed')),\r\n    i18n.getString(_TL_('Thu')),\r\n    i18n.getString(_TL_('Fri')),\r\n    i18n.getString(_TL_('Sat')),\r\n  ],\r\n  shortDays: [\r\n    i18n.getString(_TL_('S')),\r\n    i18n.getString(_TL_('M')),\r\n    i18n.getString(_TL_('T')),\r\n    i18n.getString(_TL_('W')),\r\n    i18n.getString(_TL_('T')),\r\n    i18n.getString(_TL_('F')),\r\n    i18n.getString(_TL_('S')),\r\n  ],\r\n  goToToday: i18n.getString(_TL_('Go to today')),\r\n  prevMonthAriaLabel: i18n.getString(_TL_('Go to previous month')),\r\n  nextMonthAriaLabel: i18n.getString(_TL_('Go to next month')),\r\n  prevYearAriaLabel: i18n.getString(_TL_('Go to previous year')),\r\n  nextYearAriaLabel: i18n.getString(_TL_('Go to next year')),\r\n  closeButtonAriaLabel: i18n.getString(_TL_('Close date picker')),\r\n  isRequiredErrorMessage: i18n.getString(_TL_('Start date is required.')),\r\n  invalidInputErrorMessage: i18n.getString(_TL_('Invalid date format.')),\r\n});\r\n","export const ADD_KEYWORDS_BY_ENTRY = 'entry';\r\nexport const ADD_KEYWORDS_BY_SELECTION = 'select';\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  RadioGroup,\r\n  Radio,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  ADD_KEYWORDS_BY_ENTRY,\r\n  ADD_KEYWORDS_BY_SELECTION,\r\n} from './keyword-methods';\r\n\r\nexport const KeywordInput = ({\r\n  entryControl,\r\n  isDisabled,\r\n  isSelectDisabled,\r\n  keywordsMethod,\r\n  onChangeKeywordsMethod,\r\n  selectControl,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const selectLabel = i18n.getString(_TL_('Select keywords'));\r\n  const entryLabel = i18n.getString(_TL_('Enter keywords'));\r\n\r\n  const onSelectRadio = useCallback((e, data) => {\r\n    onChangeKeywordsMethod(data.value);\r\n  }, [onChangeKeywordsMethod]);\r\n\r\n  return (\r\n    <RadioGroup\r\n      className=\"keywords-radio-group\"\r\n      disabled={isDisabled}\r\n      onChange={onSelectRadio}\r\n      value={keywordsMethod}\r\n    >\r\n      <Radio\r\n        disabled={isSelectDisabled}\r\n        label={selectLabel}\r\n        value={ADD_KEYWORDS_BY_SELECTION}\r\n      />\r\n      {keywordsMethod === ADD_KEYWORDS_BY_SELECTION && selectControl}\r\n      <Radio\r\n        label={entryLabel}\r\n        value={ADD_KEYWORDS_BY_ENTRY}\r\n      />\r\n      {keywordsMethod === ADD_KEYWORDS_BY_ENTRY && entryControl}\r\n    </RadioGroup>\r\n  );\r\n};\r\n\r\nKeywordInput.propTypes = {\r\n  entryControl: PropTypes.node.isRequired,\r\n  isDisabled: PropTypes.bool.isRequired,\r\n  isSelectDisabled: PropTypes.bool.isRequired,\r\n  keywordsMethod: PropTypes.oneOf([\r\n    ADD_KEYWORDS_BY_ENTRY,\r\n    ADD_KEYWORDS_BY_SELECTION,\r\n  ]),\r\n  onChangeKeywordsMethod: PropTypes.func.isRequired,\r\n  selectControl: PropTypes.node.isRequired,\r\n};\r\n\r\nKeywordInput.defaultProps = {\r\n  keywordsMethod: null,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport {\r\n  Button,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss12Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nexport const KeywordTag = ({\r\n  id,\r\n  listRemoveId,\r\n  name,\r\n  onRemove,\r\n}) => {\r\n  const removeTagId = `${listRemoveId}-${id}`;\r\n  const onRemoveTag = useCallback(() => {\r\n    onRemove(id);\r\n  }, [id, onRemove]);\r\n\r\n  return (\r\n    <Button\r\n      appearance=\"primary\"\r\n      aria-labelledby={`${listRemoveId} ${removeTagId}`}\r\n      icon={<Dismiss12Regular />}\r\n      iconPosition=\"after\"\r\n      id={removeTagId}\r\n      onClick={onRemoveTag}\r\n      shape=\"circular\"\r\n      size=\"small\"\r\n    >\r\n      {name}\r\n    </Button>\r\n  );\r\n};\r\n\r\nKeywordTag.propTypes = {\r\n  id: PropTypes.number.isRequired,\r\n  listRemoveId: PropTypes.string.isRequired,\r\n  name: PropTypes.string.isRequired,\r\n  onRemove: PropTypes.func.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Button,\r\n  Text,\r\n  useId,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  DeleteRegular,\r\n} from '@fluentui/react-icons';\r\nimport { useTagsListStyles } from '../../styles';\r\nimport { KeywordTag } from './keyword-tag';\r\n\r\nexport const KeywordDisplay = ({\r\n  fetchedKeywords,\r\n  onRemoveAllKeywords,\r\n  onRemoveKeyword,\r\n  selectedKeywords,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const styles = useTagsListStyles();\r\n  const tagsListId = useId('selectedKeywordsTagsList');\r\n  const tagsListRemoveId = `${tagsListId}-remove`;\r\n\r\n  const onRemoveTag = useCallback((removedId) => {\r\n    onRemoveKeyword(removedId);\r\n  }, [onRemoveKeyword]);\r\n\r\n  return (\r\n    <div className={styles.root}>\r\n      <div className={styles.tagsToolbar}>\r\n        <Text weight=\"semibold\">\r\n          {i18n.getString(_TL_('Selected keywords'))}\r\n        </Text>\r\n        <Button\r\n          appearance=\"subtle\"\r\n          icon={<DeleteRegular />}\r\n          iconPosition=\"before\"\r\n          onClick={onRemoveAllKeywords}\r\n          size=\"small\"\r\n        >\r\n          {i18n.getString(_TL_('Remove all'))}\r\n        </Button>\r\n      </div>\r\n      <div\r\n        className={styles.tagsList}\r\n        id={tagsListId}\r\n      >\r\n        {selectedKeywords.map((keywordId) => {\r\n          const { id, name } = fetchedKeywords[keywordId];\r\n          return (\r\n            <KeywordTag\r\n              id={id}\r\n              key={id}\r\n              name={name}\r\n              listRemoveId={tagsListRemoveId}\r\n              onRemove={onRemoveTag}\r\n            />\r\n          );\r\n        })}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nKeywordDisplay.propTypes = {\r\n  fetchedKeywords: PropTypes.objectOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    impressions: PropTypes.number.isRequired,\r\n  })),\r\n  onRemoveAllKeywords: PropTypes.func.isRequired,\r\n  onRemoveKeyword: PropTypes.func.isRequired,\r\n  selectedKeywords: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n};\r\n\r\nKeywordDisplay.defaultProps = {\r\n  fetchedKeywords: null,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Field,\r\n  Label,\r\n  Option,\r\n  useId,\r\n} from '@fluentui/react-components';\r\nimport { maxKeywordCount } from '../../constants/maximums';\r\nimport { errorMessages } from '../../errors';\r\nimport { useMeasurementTypeSelectorStyles } from '../../styles';\r\nimport { RequiredDropdown } from '../validated/required-dropdown';\r\nimport { KeywordDisplay } from './keyword-display';\r\n\r\nexport const KeywordSelector = ({\r\n  fetchedKeywords,\r\n  isDisabled,\r\n  onRemove,\r\n  onRemoveAll,\r\n  onSelect,\r\n  orderedFetchedKeywords,\r\n  selected,\r\n  showError,\r\n  useSearchLift,\r\n}) => {\r\n  const dropdownId = useId('useKeywordSelector');\r\n  const styles = useMeasurementTypeSelectorStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const placeholder = i18n.getString(_TL_('Select keywords'));\r\n  const impressionsUnit = i18n.getString(_TL_('impressions'));\r\n\r\n  const buttonText = useMemo(() => {\r\n    if (selected.length === 0) {\r\n      return placeholder;\r\n    }\r\n    return selected.map(keywordId => fetchedKeywords[keywordId].name).join(i18n.getString(_TL_(', ')));\r\n  }, [fetchedKeywords, i18n, placeholder, selected]);\r\n\r\n  const onSelectDropdownOption = useCallback((e, data) => {\r\n    onSelect(data.selectedOptions);\r\n  }, [onSelect]);\r\n\r\n  const [fieldProps, setFieldProps] = useState(null);\r\n\r\n  const onValidateKeywords = useCallback(({ isValid, messages }) => {\r\n    if (isValid) {\r\n      setFieldProps(null);\r\n    } else {\r\n      setFieldProps({\r\n        validationMessage: i18n.getString(errorMessages[messages[0]]),\r\n        validationState: 'error',\r\n      });\r\n    }\r\n  }, [i18n]);\r\n\r\n  return (\r\n    <div className={styles.dropdownContainer}>\r\n      <Label\r\n        disabled={isDisabled}\r\n        id={dropdownId}\r\n        required\r\n      >\r\n        {i18n.getString(_TL_('Keywords'))}\r\n      </Label>\r\n      {selected.length > 0 && (\r\n        <KeywordDisplay\r\n          fetchedKeywords={fetchedKeywords}\r\n          onRemoveAllKeywords={onRemoveAll}\r\n          onRemoveKeyword={onRemove}\r\n          selectedKeywords={selected}\r\n        />\r\n      )}\r\n      <Field {...(showError ? fieldProps : null)}>\r\n        <RequiredDropdown\r\n          aria-labelledby={dropdownId}\r\n          button={<span className={styles.truncatedText}>{buttonText}</span>}\r\n          className={styles.dropdown}\r\n          disabled={isDisabled}\r\n          errorMessage=\"SELECTED_KEYWORDS_REQUIRED\"\r\n          multiselect\r\n          onOptionSelect={onSelectDropdownOption}\r\n          useSearchLift={useSearchLift}\r\n          validationProps={{\r\n            data: { selectedOptions: selected },\r\n            field: 'selectedOptions',\r\n            onValidate: onValidateKeywords,\r\n          }}\r\n        >\r\n          {orderedFetchedKeywords.map(({ id, impressions, name }) => {\r\n            const isMaxedOut = selected.length === maxKeywordCount;\r\n            const isOptionDisabled = isMaxedOut && !selected.includes(id);\r\n            const optionLabel = `${name} (${impressions} ${impressionsUnit})`;\r\n\r\n            return (\r\n              <Option\r\n                className={`keyword-selector-option-${name}`}\r\n                disabled={isOptionDisabled}\r\n                key={id}\r\n                value={id}\r\n              >\r\n                {optionLabel}\r\n              </Option>\r\n            );\r\n          })}\r\n        </RequiredDropdown>\r\n      </Field>\r\n    </div>\r\n  );\r\n};\r\n\r\nKeywordSelector.propTypes = {\r\n  fetchedKeywords: PropTypes.objectOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    impressions: PropTypes.number.isRequired,\r\n  })),\r\n  isDisabled: PropTypes.bool.isRequired,\r\n  onRemove: PropTypes.func.isRequired,\r\n  onRemoveAll: PropTypes.func.isRequired,\r\n  onSelect: PropTypes.func.isRequired,\r\n  orderedFetchedKeywords: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    impressions: PropTypes.number.isRequired,\r\n  })),\r\n  selected: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n  showError: PropTypes.bool,\r\n  useSearchLift: PropTypes.bool.isRequired,\r\n};\r\n\r\nKeywordSelector.defaultProps = {\r\n  fetchedKeywords: null,\r\n  orderedFetchedKeywords: null,\r\n  showError: false,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n  Field,\r\n  Label,\r\n  Textarea,\r\n  useId,\r\n} from '@fluentui/react-components';\r\nimport { useKeywordInputStyles } from '../../styles';\r\nimport { getCustomValidator } from './keyword-textarea-validation';\r\nimport { errorMessages } from '../../errors';\r\n\r\nconst ValidatedTextarea = withValidation(Textarea);\r\n\r\nexport const KeywordTextarea = ({\r\n  isDisabled,\r\n  keywordString,\r\n  onChange,\r\n  showError,\r\n}) => {\r\n  const textareaId = useId('keywordTextarea');\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const placeholder = i18n.getString(_TL_('Enter keywords separated by commas'));\r\n\r\n  const [fieldProps, setFieldProps] = useState(null);\r\n\r\n  const onChangeTextarea = useCallback((e, data) => {\r\n    if (data.length) {\r\n      const { value } = data[0];\r\n      onChange(value);\r\n    }\r\n  }, [onChange]);\r\n\r\n  const styles = useKeywordInputStyles();\r\n\r\n  const validator = getCustomValidator();\r\n\r\n  const onValidateKeywords = useCallback(({ isValid, messages }) => {\r\n    if (isValid) {\r\n      setFieldProps(null);\r\n    } else {\r\n      const message = messages[0];\r\n\r\n      if (typeof message === 'object') {\r\n        setFieldProps({\r\n          validationMessage: i18n.getString(errorMessages[message.key], message.data),\r\n          validateState: 'error',\r\n        });\r\n      } else {\r\n        setFieldProps({\r\n          validationMessage: i18n.getString(errorMessages[message]),\r\n          validationState: 'error',\r\n        });\r\n      }\r\n    }\r\n  }, [i18n]);\r\n\r\n  return (\r\n    <div className={styles.textareaContainer}>\r\n      <Label\r\n        disabled={isDisabled}\r\n        id={textareaId}\r\n        required\r\n      >\r\n        {i18n.getString(_TL_('Enter keywords separated by commas'))}\r\n      </Label>\r\n      <Field {...(showError ? fieldProps : null)}>\r\n        <ValidatedTextarea\r\n          aria-labelledby={textareaId}\r\n          className={styles.textarea}\r\n          disabled={isDisabled}\r\n          onChange={onChangeTextarea}\r\n          placeholder={placeholder}\r\n          textarea={{ className: styles.textarea }}\r\n          validationProps={{\r\n            data: { keywordString },\r\n            field: 'keywordString',\r\n            onValidate: onValidateKeywords,\r\n            validator,\r\n          }}\r\n        />\r\n      </Field>\r\n    </div>\r\n  );\r\n};\r\n\r\nKeywordTextarea.propTypes = {\r\n  isDisabled: PropTypes.bool.isRequired,\r\n  keywordString: PropTypes.string.isRequired,\r\n  onChange: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool,\r\n};\r\n\r\nKeywordTextarea.defaultProps = {\r\n  showError: false,\r\n};\r\n","import { maxKeywordCount, maxKeywordLength } from '../../constants/maximums';\r\nimport { parseKeywordString } from '../../utils';\r\n\r\nexport const getCustomValidator = () => (value) => {\r\n  const parsedKeywords = parseKeywordString(value);\r\n\r\n  if (!parsedKeywords[0]) {\r\n    // We can't use `parsedKeywords.length === 0` because when `value` is just whitespace, `parsedKeywords` will be an\r\n    // array with an empty string as its only member.\r\n    return ['TYPED_KEYWORDS_REQUIRED'];\r\n  }\r\n\r\n  const tooLongKeywords = parsedKeywords.filter(word => word.length > maxKeywordLength);\r\n\r\n  if (tooLongKeywords.length > 0) {\r\n    return [{\r\n      key: 'KEYWORDS_TOO_LONG',\r\n      data: {\r\n        count: tooLongKeywords.length,\r\n        max: maxKeywordLength,\r\n        unit: tooLongKeywords.length === 1 ? 'keyword' : 'keywords',\r\n        verb: tooLongKeywords.length === 1 ? 'exceeds' : 'exceed',\r\n      },\r\n    }];\r\n  }\r\n\r\n  if (parsedKeywords.length > maxKeywordCount) {\r\n    return [{\r\n      key: 'KEYWORDS_TOO_MANY',\r\n      data: {\r\n        count: parsedKeywords.length,\r\n        max: maxKeywordCount,\r\n      },\r\n    }];\r\n  }\r\n\r\n  return [];\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Card,\r\n  CardHeader,\r\n  makeStyles,\r\n  Subtitle2,\r\n  Switch,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  cardHeader: {\r\n    display: 'flex',\r\n    '& input': {\r\n      height: '100%',\r\n      width: '100%',\r\n    }\r\n  },\r\n});\r\n\r\nexport const MeasurementTypeCard = ({\r\n  children,\r\n  description,\r\n  helpId,\r\n  isAllowed,\r\n  isEnabled,\r\n  onToggle,\r\n  title,\r\n}) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n\r\n  const className = title.toLowerCase().replace(/ /g, '-');\r\n\r\n  return (\r\n    <Card className={`${className}-card`}>\r\n      <CardHeader\r\n        header={\r\n          <div className={styles.cardHeader}>\r\n            <Switch\r\n              checked={isEnabled}\r\n              disabled={!isAllowed}\r\n              label={<Subtitle2>{title}</Subtitle2>}\r\n              onChange={onToggle}\r\n            />\r\n            <HelpButton\r\n              aria-label={`${learnMore} ${title}`}\r\n              topic={helpId}\r\n            />\r\n          </div>\r\n        }\r\n      />\r\n      {description}\r\n      {children}\r\n    </Card>\r\n  );\r\n};\r\n\r\nMeasurementTypeCard.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n  description: PropTypes.oneOfType([\r\n    PropTypes.node,\r\n    PropTypes.string,\r\n  ]),\r\n  helpId: PropTypes.string.isRequired,\r\n  isAllowed: PropTypes.bool.isRequired,\r\n  isEnabled: PropTypes.bool,\r\n  onToggle: PropTypes.func.isRequired,\r\n  title: PropTypes.string.isRequired,\r\n};\r\n\r\nMeasurementTypeCard.defaultProps = {\r\n  description: null,\r\n  isEnabled: true,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n  Field,\r\n  Input,\r\n  Label,\r\n} from '@fluentui/react-components';\r\nimport { maxSearchCid, minSearchCid } from '../../constants/maximums';\r\nimport { errorMessages } from '../../errors';\r\nimport { useSearchCustomerIdStyles } from '../../styles';\r\n\r\nconst SearchCustomerIdInternal = ({\r\n  customerId,\r\n  isDisabled,\r\n  onChange,\r\n  showError,\r\n  updateValidation,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const label = i18n.getString(_TL_('Add customer ID (optional)'));\r\n  const placeholder = i18n.getString(_TL_('Enter the CID associated with your Search campaigns'));\r\n\r\n  const styles = useSearchCustomerIdStyles();\r\n\r\n  const [fieldProps, setFieldProps] = useState(null);\r\n\r\n  const getIsValid = useCallback((data) => {\r\n    if (data === '') {\r\n      return { isValid: true };\r\n    }\r\n    if (!data) {\r\n      return { errorMessage: errorMessages.SEARCH_CID_TYPE, isValid: false };\r\n    }\r\n    const formattedData = Number(data);\r\n    if (formattedData < minSearchCid || formattedData > maxSearchCid) {\r\n      return { errorMessage: errorMessages.SEARCH_CID_RANGE, isValid: false };\r\n    }\r\n    return { isValid: true };\r\n  }, []);\r\n\r\n  const onChangeInput = useCallback((e, data) => {\r\n    const { errorMessage, isValid } = getIsValid(data.value);\r\n    if (isValid) {\r\n      setFieldProps(null);\r\n      updateValidation([], { searchCid: data.value });\r\n    } else {\r\n      setFieldProps({\r\n        validationMessage: i18n.getString(errorMessage),\r\n        validationState: 'error',\r\n      });\r\n      updateValidation([errorMessage], { searchCid: data.value });\r\n    }\r\n    onChange(data.value);\r\n  }, [getIsValid, i18n, onChange, updateValidation]);\r\n\r\n  return (\r\n    <div className=\"search-customer-id\">\r\n      <Label disabled={isDisabled}>{label}</Label>\r\n      <Field {...(showError ? fieldProps : null)}>\r\n        <Input\r\n          className={styles.input}\r\n          disabled={isDisabled}\r\n          onChange={onChangeInput}\r\n          placeholder={placeholder}\r\n          value={customerId}\r\n        />\r\n      </Field>\r\n    </div>\r\n  );\r\n};\r\n\r\nSearchCustomerIdInternal.propTypes = {\r\n  customerId: PropTypes.string.isRequired,\r\n  isDisabled: PropTypes.bool.isRequired,\r\n  onChange: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool,\r\n  updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nSearchCustomerIdInternal.defaultProps = {\r\n  showError: false,\r\n};\r\n\r\nexport const SearchCustomerId = withCustomValidation(SearchCustomerIdInternal);\r\n","import PropTypes from 'prop-types';\r\nimport React, { useMemo } from 'react';\r\nimport {\r\n  makeStyles,\r\n  Skeleton,\r\n  SkeletonItem,\r\n  useId,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  row: {\r\n    alignItems: 'center',\r\n    columnGap: '10px',\r\n    display: 'grid',\r\n    gridTemplateColumns: 'min-content 80%',\r\n    paddingBottom: '10px',\r\n    position: 'relative',\r\n    rowGap: '10px',\r\n  },\r\n});\r\n\r\nexport const CardContentSkeleton = ({ rowCount }) => {\r\n  const skeletonId = useId('cardContentSkeleton');\r\n  const rowKeys = useMemo(() => [...Array(rowCount).keys()], [rowCount]);\r\n  const styles = useStyles();\r\n\r\n  return (\r\n    <div>\r\n      <Skeleton>\r\n        {rowKeys.map(rowKey => (\r\n          <div className={styles.row} key={`${skeletonId}-${rowKey}`}>\r\n            <SkeletonItem shape=\"circle\" size={24} />\r\n            <SkeletonItem size={16} />\r\n          </div>\r\n        ))}\r\n      </Skeleton>\r\n    </div>\r\n  );\r\n};\r\n\r\nCardContentSkeleton.propTypes = {\r\n  rowCount: PropTypes.number,\r\n};\r\n\r\nCardContentSkeleton.defaultProps = {\r\n  rowCount: 3,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { CardContentSkeleton } from '../skeleton/card-content-skeleton';\r\nimport { MeasurementTypeCard } from '../measurement-type-card';\r\n\r\nconst noop = () => {};\r\n\r\nexport const SearchLiftLoading = ({ title }) => (\r\n  <MeasurementTypeCard\r\n    description={null}\r\n    helpId=\"pop_BA_Experiments_SearchLift\"\r\n    isAllowed={false}\r\n    isEnabled={false}\r\n    onToggle={noop}\r\n    title={title}\r\n  >\r\n    <CardContentSkeleton />\r\n  </MeasurementTypeCard>\r\n);\r\n\r\nSearchLiftLoading.propTypes = {\r\n  title: PropTypes.string.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidationGroup, withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { KeywordInput } from '../keyword/keyword-input';\r\nimport {\r\n  ADD_KEYWORDS_BY_ENTRY,\r\n  ADD_KEYWORDS_BY_SELECTION,\r\n} from '../keyword/keyword-methods';\r\nimport { KeywordSelector } from '../keyword/keyword-selector';\r\nimport { KeywordTextarea } from '../keyword/keyword-textarea';\r\nimport { MeasurementTypeCard } from '../measurement-type-card';\r\nimport { SearchCustomerId } from './search-customer-id';\r\nimport { SearchLiftLoading } from './search-lift-loading';\r\n\r\nconst SearchLiftInternal = ({\r\n  customerId,\r\n  isAllowed,\r\n  isEnabled,\r\n  keywordsMethod,\r\n  onChangeCustomerId,\r\n  onChangeKeywords,\r\n  onChangeKeywordsMethod,\r\n  onRemoveAllKeywords,\r\n  onRemoveKeyword,\r\n  onSelectKeywords,\r\n  onToggle,\r\n  selectedKeywords,\r\n  showError,\r\n  typedKeywordString,\r\n  updateValidation,\r\n}) => {\r\n  const { state: wizardState } = useWizardService();\r\n  const { wizardData } = wizardState.context;\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const title = i18n.getString(_TL_('Search lift'));\r\n  const description = i18n.getString(_TL_('Measure your brand search rate (search queries that contain your brand) by adding keywords associated with both your campaign and brand name. You can also enter your customer ID to help measure results. Note: If you use different customer IDs for your Audience and Search campaigns, please ensure that you enter the customer ID associated with your Search campaigns.'));\r\n  const isLiftTypeDisabled = !isAllowed || !isEnabled;\r\n\r\n  const hasNoKeywords = useMemo(() => {\r\n    const keywordKeys = wizardData.fetchedKeywords\r\n      ? Object.keys(wizardData.fetchedKeywords)\r\n      : [];\r\n    return keywordKeys.length === 0;\r\n  }, [wizardData.fetchedKeywords]);\r\n\r\n  const onValidateSearchLift = useCallback(({\r\n    data,\r\n    isDirty,\r\n    isValid,\r\n    messages,\r\n  }) => {\r\n    if (isValid) {\r\n      updateValidation([], data);\r\n    }\r\n\r\n    if (isDirty) {\r\n      updateValidation(messages, data);\r\n    }\r\n  }, [updateValidation]);\r\n\r\n  const validationProps = {\r\n    onValidate: onValidateSearchLift,\r\n  };\r\n\r\n  if (wizardData.isFetchingKeywords !== false) {\r\n    return (\r\n      <SearchLiftLoading title={title} />\r\n    );\r\n  }\r\n\r\n  return wizardData.fetchedKeywords && (\r\n    <ValidationGroup validationProps={validationProps}>\r\n      <MeasurementTypeCard\r\n        description={description}\r\n        helpId=\"pop_BA_Experiments_SearchLift\"\r\n        isAllowed={isAllowed}\r\n        isEnabled={isEnabled}\r\n        onToggle={onToggle}\r\n        title={title}\r\n      >\r\n        <KeywordInput\r\n          entryControl={\r\n            <KeywordTextarea\r\n              isDisabled={isLiftTypeDisabled}\r\n              keywordString={typedKeywordString}\r\n              onChange={onChangeKeywords}\r\n              showError={showError}\r\n            />\r\n          }\r\n          isDisabled={isLiftTypeDisabled}\r\n          isSelectDisabled={hasNoKeywords}\r\n          keywordsMethod={keywordsMethod}\r\n          onChangeKeywordsMethod={onChangeKeywordsMethod}\r\n          selectControl={\r\n            <KeywordSelector\r\n              fetchedKeywords={wizardData.fetchedKeywords}\r\n              isDisabled={isLiftTypeDisabled || hasNoKeywords}\r\n              onRemove={onRemoveKeyword}\r\n              onRemoveAll={onRemoveAllKeywords}\r\n              onSelect={onSelectKeywords}\r\n              orderedFetchedKeywords={wizardData.orderedFetchedKeywords}\r\n              selected={selectedKeywords}\r\n              showError={showError}\r\n              useSearchLift={wizardData.useSearchLift}\r\n            />\r\n          }\r\n        />\r\n        <SearchCustomerId\r\n          customerId={customerId}\r\n          isDisabled={isLiftTypeDisabled}\r\n          onChange={onChangeCustomerId}\r\n          showError={showError}\r\n        />\r\n      </MeasurementTypeCard>\r\n    </ValidationGroup>\r\n  );\r\n};\r\n\r\nSearchLiftInternal.propTypes = {\r\n  customerId: PropTypes.string.isRequired,\r\n  isAllowed: PropTypes.bool.isRequired,\r\n  isEnabled: PropTypes.bool,\r\n  keywordsMethod: PropTypes.oneOf([\r\n    ADD_KEYWORDS_BY_ENTRY,\r\n    ADD_KEYWORDS_BY_SELECTION,\r\n  ]),\r\n  onChangeCustomerId: PropTypes.func.isRequired,\r\n  onChangeKeywords: PropTypes.func.isRequired,\r\n  onChangeKeywordsMethod: PropTypes.func.isRequired,\r\n  onRemoveAllKeywords: PropTypes.func.isRequired,\r\n  onRemoveKeyword: PropTypes.func.isRequired,\r\n  onSelectKeywords: PropTypes.func.isRequired,\r\n  onToggle: PropTypes.func.isRequired,\r\n  selectedKeywords: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n  showError: PropTypes.bool,\r\n  typedKeywordString: PropTypes.string.isRequired,\r\n  updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nSearchLiftInternal.defaultProps = {\r\n  isEnabled: true,\r\n  keywordsMethod: null,\r\n  showError: false,\r\n};\r\n\r\nexport const SearchLift = withCustomValidation(SearchLiftInternal);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\nconst useStyles = makeStyles({\r\n  message: {\r\n    fontSize: '12px',\r\n  },\r\n  root: {\r\n    paddingBottom: '13px',\r\n    paddingTop: '10px',\r\n  },\r\n});\r\n\r\nexport const ApiSaveErrorNotification = ({ message }) => {\r\n  const styles = useStyles();\r\n\r\n  return (\r\n    <MessageBar className={styles.root} intent=\"error\">\r\n      <MessageBarBody>\r\n        <span className={styles.message}>{message}</span>\r\n      </MessageBarBody>\r\n    </MessageBar>\r\n  );\r\n};\r\n\r\nApiSaveErrorNotification.propTypes = {\r\n  message: PropTypes.string.isRequired,\r\n};\r\n","export const getActiveGoalsCount = goals => goals.filter(({ status }) => status === 'Active').length;\r\n\r\nexport const getGoalsOptionText = ({\r\n  goal,\r\n  none,\r\n  plural,\r\n  singular,\r\n}) => {\r\n  const { goals, name } = goal;\r\n  const count = getActiveGoalsCount(goals);\r\n\r\n  if (count === 0) {\r\n    return `${name} (${none})`;\r\n  }\r\n\r\n  if (count === 1) {\r\n    return `${name} (${count} ${singular})`;\r\n  }\r\n\r\n  return `${name} (${count} ${plural})`;\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Field,\r\n  Label,\r\n  Option,\r\n  useId,\r\n  Tooltip,\r\n} from '@fluentui/react-components';\r\nimport { maxTagCount } from '../../constants/maximums';\r\nimport { errorMessages } from '../../errors';\r\nimport { useMeasurementTypeSelectorStyles } from '../../styles';\r\nimport { getGoalsOptionText } from './uet-tag-selector-utils';\r\nimport { RequiredDropdown } from '../validated/required-dropdown';\r\n\r\nexport const UetTagSelector = ({\r\n  fetchedUetTags,\r\n  isDisabled,\r\n  onSelect,\r\n  orderedFetchedUetTags,\r\n  selected,\r\n  showError,\r\n  areActiveConversionGoalsMissing,\r\n}) => {\r\n  const dropdownId = useId('uetTagSelector');\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const placeholder = i18n.getString(_TL_('Select UET tag'));\r\n  const delimiter = i18n.getString(_TL_(', '));\r\n  const buttonText = useMemo(() => {\r\n    if (selected.length === 0) {\r\n      return placeholder;\r\n    }\r\n    return selected.map(tagId => fetchedUetTags[tagId].name).join(delimiter);\r\n  }, [delimiter, fetchedUetTags, placeholder, selected]);\r\n\r\n  const hoverMessage = areActiveConversionGoalsMissing ? i18n.getString(_TL_('The selected conversion lift does not have any active conversion goals')) : null;\r\n  const goalsUnit = i18n.getString(_TL_('active goal'));\r\n  const goalsUnitPlural = i18n.getString(_TL_('active goals'));\r\n  const noGoals = i18n.getString(_TL_('no active goals'));\r\n\r\n  const onOptionSelect = useCallback((e, data) => {\r\n    onSelect(data.selectedOptions);\r\n  }, [onSelect]);\r\n\r\n  const styles = useMeasurementTypeSelectorStyles();\r\n\r\n  const [fieldProps, setFieldProps] = useState(null);\r\n\r\n  const onValidateUetTags = useCallback(({ isValid, messages }) => {\r\n    if (isValid) {\r\n      setFieldProps(null);\r\n    } else {\r\n      setFieldProps({\r\n        validationMessage: i18n.getString(errorMessages[messages[0]]),\r\n        validationState: 'error',\r\n      });\r\n    }\r\n  }, [i18n]);\r\n\r\n  return (\r\n    <div>\r\n      <Label\r\n        disabled={isDisabled}\r\n        id={dropdownId}\r\n        required\r\n      >\r\n        {i18n.getString(_TL_('UET tags'))}\r\n      </Label>\r\n      <Tooltip relationship=\"description\" content={hoverMessage} withArrow visible={areActiveConversionGoalsMissing}>\r\n        <Field {...(showError ? fieldProps : null)}>\r\n          <RequiredDropdown\r\n            aria-labelledby={dropdownId}\r\n            button={<span className={styles.truncatedText}>{buttonText}</span>}\r\n            className={styles.dropdown}\r\n            disabled={isDisabled || areActiveConversionGoalsMissing}\r\n            errorMessage=\"UET_REQUIRED\"\r\n            multiselect\r\n            onOptionSelect={onOptionSelect}\r\n            validationProps={{\r\n              data: { selectedOptions: selected },\r\n              field: 'selectedOptions',\r\n              onValidate: onValidateUetTags,\r\n            }}\r\n          >\r\n            {orderedFetchedUetTags.map((goal) => {\r\n              const { id } = goal;\r\n              const isMaxedOut = selected.length === maxTagCount;\r\n              const isOptionDisabled = isMaxedOut && !selected.includes(id);\r\n\r\n              return (\r\n                <Option\r\n                  disabled={isOptionDisabled}\r\n                  key={id}\r\n                  value={id}\r\n                  className={`uet-tag-selector-option-${id}`}\r\n                >\r\n                  {getGoalsOptionText({\r\n                    goal,\r\n                    none: noGoals,\r\n                    plural: goalsUnitPlural,\r\n                    singular: goalsUnit,\r\n                  })}\r\n                </Option>\r\n              );\r\n            })}\r\n          </RequiredDropdown>\r\n        </Field>\r\n      </Tooltip>\r\n    </div>\r\n  );\r\n};\r\n\r\nUetTagSelector.propTypes = {\r\n  fetchedUetTags: PropTypes.objectOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    goalsCount: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  isDisabled: PropTypes.bool.isRequired,\r\n  onSelect: PropTypes.func.isRequired,\r\n  orderedFetchedUetTags: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    goalsCount: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  selected: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n  showError: PropTypes.bool,\r\n  areActiveConversionGoalsMissing: PropTypes.bool,\r\n};\r\n\r\nUetTagSelector.defaultProps = {\r\n  showError: false,\r\n  areActiveConversionGoalsMissing: false,\r\n};\r\n","export const TRACK_BOTH_VISIT_AND_CONVERSION = 'both';\r\nexport const TRACK_CONVERSION_ONLY = 'conversion';\r\nexport const TRACK_VISIT_ONLY = 'visit';\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  RadioGroup,\r\n  Radio,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  TRACK_BOTH_VISIT_AND_CONVERSION,\r\n  TRACK_CONVERSION_ONLY,\r\n  TRACK_VISIT_ONLY,\r\n} from './visit-conversion-methods';\r\n\r\nexport const VisitConversionInput = ({\r\n  combinedControl,\r\n  conversionControl,\r\n  isDisabled,\r\n  onChangeMethod,\r\n  useConversionLift,\r\n  useVisitLift,\r\n  visitControl,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const combinedLabel = i18n.getString(_TL_('Measure visit and conversion lift'));\r\n  const conversionLabel = i18n.getString(_TL_('Measure conversion lift only'));\r\n  const visitLabel = i18n.getString(_TL_('Measure visit lift only'));\r\n\r\n  let trackingMethod = null;\r\n  if (useConversionLift && useVisitLift) {\r\n    trackingMethod = TRACK_BOTH_VISIT_AND_CONVERSION;\r\n  } else if (useConversionLift) {\r\n    trackingMethod = TRACK_CONVERSION_ONLY;\r\n  } else if (useVisitLift) {\r\n    trackingMethod = TRACK_VISIT_ONLY;\r\n  }\r\n\r\n  const onSelectRadio = useCallback((e, { value }) => {\r\n    if (value === TRACK_BOTH_VISIT_AND_CONVERSION) {\r\n      onChangeMethod({\r\n        useConversionLift: true,\r\n        useVisitLift: true,\r\n      });\r\n    } else if (value === TRACK_CONVERSION_ONLY) {\r\n      onChangeMethod({\r\n        useConversionLift: true,\r\n        useVisitLift: false,\r\n      });\r\n    } else {\r\n      onChangeMethod({\r\n        useConversionLift: false,\r\n        useVisitLift: true,\r\n      });\r\n    }\r\n  }, [onChangeMethod]);\r\n\r\n  return (\r\n    <RadioGroup\r\n      className=\"visit-conversion-radio-group\"\r\n      disabled={isDisabled}\r\n      onChange={onSelectRadio}\r\n      value={trackingMethod}\r\n    >\r\n      <Radio\r\n        label={combinedLabel}\r\n        value={TRACK_BOTH_VISIT_AND_CONVERSION}\r\n      />\r\n      {trackingMethod === TRACK_BOTH_VISIT_AND_CONVERSION && combinedControl}\r\n      <Radio\r\n        label={conversionLabel}\r\n        value={TRACK_CONVERSION_ONLY}\r\n      />\r\n      {trackingMethod === TRACK_CONVERSION_ONLY && conversionControl}\r\n      <Radio\r\n        label={visitLabel}\r\n        value={TRACK_VISIT_ONLY}\r\n      />\r\n      {trackingMethod === TRACK_VISIT_ONLY && visitControl}\r\n    </RadioGroup>\r\n  );\r\n};\r\n\r\nVisitConversionInput.propTypes = {\r\n  combinedControl: PropTypes.node.isRequired,\r\n  conversionControl: PropTypes.node.isRequired,\r\n  isDisabled: PropTypes.bool.isRequired,\r\n  onChangeMethod: PropTypes.func.isRequired,\r\n  useConversionLift: PropTypes.bool,\r\n  useVisitLift: PropTypes.bool,\r\n  visitControl: PropTypes.node.isRequired,\r\n};\r\n\r\nVisitConversionInput.defaultProps = {\r\n  useConversionLift: false,\r\n  useVisitLift: false,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { CardContentSkeleton } from '../skeleton/card-content-skeleton';\r\nimport { MeasurementTypeCard } from '../measurement-type-card';\r\n\r\nconst noop = () => {};\r\n\r\nexport const VisitConversionLiftLoading = ({ title }) => (\r\n  <MeasurementTypeCard\r\n    description={null}\r\n    helpId=\"pop_BA_Experiments_VisitsConversions\"\r\n    isAllowed={false}\r\n    isEnabled={false}\r\n    onToggle={noop}\r\n    title={title}\r\n  >\r\n    <CardContentSkeleton />\r\n  </MeasurementTypeCard>\r\n);\r\n\r\nVisitConversionLiftLoading.propTypes = {\r\n  title: PropTypes.string.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { MeasurementTypeCard } from '../measurement-type-card';\r\n\r\nconst noop = () => {};\r\n\r\nexport const VisitConversionLiftNotAllowed = ({ title }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const explanation = i18n.getString(_TL_(\"You can't measure visits or conversions because you haven't yet set up UET tags and conversion tracking.\"));\r\n  return (\r\n    <MeasurementTypeCard\r\n      description={explanation}\r\n      helpId=\"pop_BA_Experiments_VisitsConversions\"\r\n      isAllowed={false}\r\n      isEnabled={false}\r\n      onToggle={noop}\r\n      title={title}\r\n    />\r\n  );\r\n};\r\n\r\nVisitConversionLiftNotAllowed.propTypes = {\r\n  title: PropTypes.string.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { Field } from '@fluentui/react-components';\r\nimport { errorMessages } from '../../errors';\r\nimport { useRadioChildControlStyles } from '../../styles';\r\nimport { UetTagSelector } from '../uet-tag/uet-tag-selector';\r\nimport { getActiveGoalsCount } from '../uet-tag/uet-tag-selector-utils';\r\nimport { MeasurementTypeCard } from '../measurement-type-card';\r\nimport { VisitConversionInput } from './visit-conversion-input';\r\nimport { VisitConversionLiftLoading } from './visit-conversion-lift-loading';\r\nimport { VisitConversionLiftNotAllowed } from './visit-conversion-lift-not-allowed';\r\n\r\nconst VisitConversionLiftInternal = ({\r\n  isEnabled,\r\n  onChangeMethod,\r\n  onSelectUetTags,\r\n  onToggle,\r\n  selectedUetTags,\r\n  showError,\r\n  updateValidation,\r\n  useConversionLift,\r\n  useVisitLift,\r\n}) => {\r\n  const { state: wizardState } = useWizardService();\r\n  const { wizardData } = wizardState.context;\r\n  const styles = useRadioChildControlStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const title = i18n.getString(_TL_('Visit and conversion lift'));\r\n  const description = i18n.getString(_TL_('Measure your website visitation rate and/or conversion rate. For both measurement types, you\\'ll need to select the appropriate UET tag for your website.'));\r\n\r\n  const isAllowed = useMemo(() => {\r\n    const isFinishedFetching = !!(wizardData.fetchedUetTags && wizardData.orderedFetchedUetTags);\r\n    if (isFinishedFetching) {\r\n      return Object.keys(wizardData.fetchedUetTags).length && wizardData.orderedFetchedUetTags.length;\r\n    }\r\n    return isFinishedFetching;\r\n  }, [wizardData.fetchedUetTags, wizardData.orderedFetchedUetTags]);\r\n  const isLiftTypeDisabled = !isAllowed || !isEnabled;\r\n\r\n  const [hasLiftTypeRequiredError, setHasLiftTypeRequiredError] = useState(false);\r\n\r\n  const onToggleUseVisitConversionLift = useCallback(() => {\r\n    const newValue = !isEnabled;\r\n    if (newValue && !useConversionLift && !useVisitLift) {\r\n      updateValidation(['VISIT_CONVERSION_LIFT_REQUIRED'], { isEnabled: newValue, useConversionLift, useVisitLift });\r\n      setHasLiftTypeRequiredError(true);\r\n    } else {\r\n      setHasLiftTypeRequiredError(false);\r\n    }\r\n    onToggle();\r\n  }, [isEnabled, onToggle, updateValidation, useConversionLift, useVisitLift]);\r\n\r\n  const onChangeLiftTypeMethod = useCallback((values) => {\r\n    updateValidation([], {\r\n      isEnabled,\r\n      useConversionLift: values.useConversionLift,\r\n      useVisitLift: values.useVisitLift,\r\n    });\r\n    setHasLiftTypeRequiredError(false);\r\n    onChangeMethod(values);\r\n  }, [isEnabled, onChangeMethod, updateValidation]);\r\n\r\n  // We need to show only those UET tags with active conversion goals for the \"Measure conversion lift only\" option.\r\n  const orderedFetchedUetTagsWithActiveGoals = useMemo(() => (\r\n    !wizardData.orderedFetchedUetTags\r\n      ? null\r\n      : wizardData.orderedFetchedUetTags.filter(tag => getActiveGoalsCount(tag.goals) > 0)\r\n  ), [wizardData.orderedFetchedUetTags]);\r\n\r\n  // We should only show the conversion warning if the user has opted for both visit and conversion lift and selected\r\n  // UET tags without active conversion goals.\r\n  const [bothVisitAndConversionFieldProps, setBothVisitAndConversionFieldProps] = useState(null);\r\n\r\n  const areActiveConversionGoalsMissing = useMemo(() => (\r\n    orderedFetchedUetTagsWithActiveGoals && orderedFetchedUetTagsWithActiveGoals.length === 0\r\n  ), [orderedFetchedUetTagsWithActiveGoals]);\r\n\r\n  const onSelectWithBothVisitAndConversion = useCallback((selectedTags) => {\r\n    if (selectedTags.length > 0) {\r\n      const withActiveGoalsCount = selectedTags.reduce((sum, tagId) => {\r\n        const tagObject = wizardData.fetchedUetTags[tagId];\r\n        const activeGoalsCount = getActiveGoalsCount(tagObject.goals);\r\n        return sum + activeGoalsCount;\r\n      }, 0);\r\n      if (withActiveGoalsCount === 0) {\r\n        updateValidation(['CONVERSION_GOAL_REQUIRED'], { selectedTags });\r\n        setBothVisitAndConversionFieldProps({\r\n          validationMessage: i18n.getString(errorMessages.CONVERSION_GOAL_REQUIRED),\r\n          validationState: 'error',\r\n        });\r\n      } else {\r\n        updateValidation([], { selectedTags });\r\n        setBothVisitAndConversionFieldProps(null);\r\n      }\r\n    } else {\r\n      updateValidation([], { selectedTags });\r\n      setBothVisitAndConversionFieldProps(null);\r\n    }\r\n    onSelectUetTags(selectedTags);\r\n  }, [i18n, onSelectUetTags, updateValidation, wizardData.fetchedUetTags]);\r\n\r\n  if (!wizardData.isUetTagsFetched) {\r\n    return (\r\n      <VisitConversionLiftLoading title={title} />\r\n    );\r\n  }\r\n\r\n  if (!isAllowed) {\r\n    return (\r\n      <VisitConversionLiftNotAllowed title={title} />\r\n    );\r\n  }\r\n\r\n  return (\r\n    <MeasurementTypeCard\r\n      description={description}\r\n      helpId=\"pop_BA_Experiments_VisitsConversions\"\r\n      isAllowed={isAllowed}\r\n      isEnabled={isEnabled}\r\n      onToggle={onToggleUseVisitConversionLift}\r\n      title={title}\r\n    >\r\n      {showError && hasLiftTypeRequiredError && (\r\n        <MessageBar intent=\"error\">\r\n          <MessageBarBody>{i18n.getString(errorMessages.VISIT_CONVERSION_LIFT_REQUIRED)}</MessageBarBody>\r\n        </MessageBar>\r\n      )}\r\n      <VisitConversionInput\r\n        combinedControl={\r\n          <div className={styles.container}>\r\n            <Field {...(showError ? bothVisitAndConversionFieldProps : null)}>\r\n              <UetTagSelector\r\n                fetchedUetTags={wizardData.fetchedUetTags || null}\r\n                isDisabled={isLiftTypeDisabled}\r\n                orderedFetchedUetTags={wizardData.orderedFetchedUetTags || null}\r\n                onSelect={onSelectWithBothVisitAndConversion}\r\n                selected={selectedUetTags.both || []}\r\n                showError={showError}\r\n                areActiveConversionGoalsMissing={areActiveConversionGoalsMissing}\r\n              />\r\n            </Field>\r\n          </div>\r\n        }\r\n        conversionControl={\r\n          <div className={styles.container}>\r\n            <UetTagSelector\r\n              fetchedUetTags={wizardData.fetchedUetTags || null}\r\n              isDisabled={isLiftTypeDisabled}\r\n              orderedFetchedUetTags={orderedFetchedUetTagsWithActiveGoals}\r\n              onSelect={onSelectUetTags}\r\n              selected={selectedUetTags.conversion || []}\r\n              showError={showError}\r\n              areActiveConversionGoalsMissing={areActiveConversionGoalsMissing}\r\n            />\r\n          </div>\r\n        }\r\n        isDisabled={isLiftTypeDisabled}\r\n        onChangeMethod={onChangeLiftTypeMethod}\r\n        useConversionLift={useConversionLift}\r\n        useVisitLift={useVisitLift}\r\n        visitControl={\r\n          <div className={styles.container}>\r\n            <UetTagSelector\r\n              fetchedUetTags={wizardData.fetchedUetTags || null}\r\n              isDisabled={isLiftTypeDisabled}\r\n              orderedFetchedUetTags={wizardData.orderedFetchedUetTags || null}\r\n              onSelect={onSelectUetTags}\r\n              selected={selectedUetTags.visit || []}\r\n              showError={showError}\r\n            />\r\n          </div>\r\n        }\r\n      />\r\n    </MeasurementTypeCard>\r\n  );\r\n};\r\n\r\nVisitConversionLiftInternal.propTypes = {\r\n  isEnabled: PropTypes.bool,\r\n  onChangeMethod: PropTypes.func.isRequired,\r\n  onSelectUetTags: PropTypes.func.isRequired,\r\n  onToggle: PropTypes.func.isRequired,\r\n  selectedUetTags: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.number)).isRequired,\r\n  showError: PropTypes.bool,\r\n  updateValidation: PropTypes.func.isRequired,\r\n  useConversionLift: PropTypes.bool,\r\n  useVisitLift: PropTypes.bool,\r\n};\r\n\r\nVisitConversionLiftInternal.defaultProps = {\r\n  isEnabled: false,\r\n  showError: false,\r\n  useConversionLift: false,\r\n  useVisitLift: false,\r\n};\r\n\r\nexport const VisitConversionLift = withCustomValidation(VisitConversionLiftInternal);\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n  Card,\r\n  CardHeader,\r\n  Field,\r\n  Input,\r\n  Label,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { maxExperimentNameLength } from '../constants/maximums';\r\nimport { errorMessages } from '../errors';\r\nimport { cardHeaderStyles } from '../page-layout';\r\n\r\nconst useStyles = makeStyles(cardHeaderStyles);\r\n\r\nconst ValidatedInput = withValidation(Input);\r\n\r\nexport const getErrorProcessor = () => {\r\n  const customErrors = {\r\n    required: 'NAME_REQUIRED',\r\n    maxLength: 'NAME_TOO_LONG',\r\n  };\r\n  return errors => Object.entries(errors).map(([key, oldError]) => customErrors[key] || oldError);\r\n};\r\n\r\nexport const experimentNameSchema = {\r\n  name: 'Experiment Name Schema',\r\n  type: 'object',\r\n  properties: {\r\n    experimentName: {\r\n      type: 'string',\r\n      required: true,\r\n      maxLength: maxExperimentNameLength,\r\n    },\r\n  },\r\n};\r\n\r\nexport const ExperimentNameCard = ({ experimentName, onChange, showError }) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n  const experimentNameLabel = i18n.getString(_TL_('Experiment name'));\r\n\r\n  const [fieldProps, setFieldProps] = useState(null);\r\n\r\n  const onValidateExperimentName = useCallback(({ isValid, messages }) => {\r\n    if (isValid) {\r\n      setFieldProps(null);\r\n    } else {\r\n      setFieldProps({\r\n        validationMessage: i18n.getString(errorMessages[messages[0]]),\r\n        validationState: 'error',\r\n      });\r\n    }\r\n  }, [i18n]);\r\n\r\n  const errorProcessor = useCallback(getErrorProcessor(), []);\r\n\r\n  return (\r\n    <Card className=\"experiment-name-card\">\r\n      <CardHeader\r\n        header={\r\n          <div className={styles.cardHeader}>\r\n            <Label size=\"large\" className={styles.label} required>{experimentNameLabel}</Label>\r\n            <HelpButton\r\n              aria-label={`${learnMore} ${experimentNameLabel}`}\r\n              topic=\"pop_BA_Experiments_LiftName\"\r\n            />\r\n          </div>\r\n          }\r\n      />\r\n      <Field {...(showError ? fieldProps : null)}>\r\n        <ValidatedInput\r\n          type=\"text\"\r\n          name=\"experimentName\"\r\n          className=\"experiment-name-input\"\r\n          placeholder={i18n.getString(_TL_('Enter the name'))}\r\n          validationProps={{\r\n            data: { experimentName },\r\n            errorProcessor,\r\n            field: 'experimentName',\r\n            onValidate: onValidateExperimentName,\r\n            schema: experimentNameSchema,\r\n          }}\r\n          onChange={onChange}\r\n        />\r\n      </Field>\r\n    </Card>\r\n  );\r\n};\r\n\r\nExperimentNameCard.propTypes = {\r\n  experimentName: PropTypes.string,\r\n  onChange: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool,\r\n};\r\n\r\nExperimentNameCard.defaultProps = {\r\n  experimentName: null,\r\n  showError: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\nconst useStyles = makeStyles({\r\n  message: {\r\n    fontSize: '12px',\r\n  },\r\n  root: {\r\n    paddingBottom: '5px',\r\n    paddingTop: '10px',\r\n  },\r\n});\r\n\r\nexport const ImpressionThresholdMessage = () => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const message = i18n.getString(_TL_('Lift measurement might not have significant/useful results if audiences associated with your selected campaign(s) have less than one million impressions when the experiment is running. Results are also not guaranteed to be significant even if the impression threshold is met.'));\r\n\r\n  return (\r\n    <MessageBar className={styles.root}>\r\n      <MessageBarBody>\r\n        <span className={styles.message}>{message}</span>\r\n      </MessageBarBody>\r\n    </MessageBar>\r\n  );\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Card,\r\n  Text,\r\n  Subtitle2,\r\n} from '@fluentui/react-components';\r\n\r\nexport const SelectedCampaignsCard = ({ campaigns }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const cardTitle = i18n.getString(_TL_('Campaigns'));\r\n  const noContent = i18n.getString(_TL_('No campaigns selected'));\r\n  const cardContent = campaigns.length === 0\r\n    ? noContent\r\n    : campaigns.map(({ name }) => name).join(i18n.getString(_TL_(', ')));\r\n\r\n  return (\r\n    <Card className=\"selected-campaigns-card\">\r\n      <Subtitle2>{cardTitle}</Subtitle2>\r\n      <Text className=\"selected-campaigns\">{cardContent}</Text>\r\n    </Card>\r\n  );\r\n};\r\n\r\nSelectedCampaignsCard.propTypes = {\r\n  campaigns: PropTypes.arrayOf(PropTypes.shape({\r\n    name: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidationGroup, withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Subtitle1,\r\n  Text,\r\n  Title3,\r\n} from '@fluentui/react-components';\r\nimport { errorMessages } from '../errors';\r\nimport { stepLayoutTokens } from '../page-layout';\r\nimport { validateVisitConversionLift } from '../validate';\r\nimport { CountryCard } from './country/country-card';\r\nimport { StartDateCard } from './date/start-date-card';\r\nimport { ADD_KEYWORDS_BY_SELECTION } from './keyword/keyword-methods';\r\nimport { SearchLift } from './search-lift/search-lift';\r\nimport { ApiSaveErrorNotification } from './api-save-error-notification';\r\nimport { VisitConversionLift } from './visit-conversion-lift/visit-conversion-lift';\r\nimport { ExperimentNameCard } from './experiment-name-card';\r\nimport { ImpressionThresholdMessage } from './impression-threshold-message';\r\nimport { SelectedCampaignsCard } from './selected-campaigns-card';\r\n\r\nconst titles = {\r\n  create: _TL_('Create your lift measurement experiment'),\r\n  edit: _TL_('Edit your lift measurement experiment'),\r\n};\r\n\r\nconst ConfigureStudyStepInternal = ({ updateValidation }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const { state: wizardState, send } = useWizardService();\r\n  const { wizardData } = wizardState.context;\r\n  const { showError } = wizardData;\r\n  const [hasLiftTypeRequiredError, setHasLiftTypeRequiredError] = useState(false);\r\n  const selectedCampaigns = useMemo(() => (\r\n    wizardData.selectedCampaignsById\r\n      ? Object.values(wizardData.selectedCampaignsById).map(campaign => ({ name: campaign.Name }))\r\n      : []\r\n  ), [wizardData.selectedCampaignsById]);\r\n\r\n  // Localized strings.\r\n  const title = i18n.getString(titles[wizardData.intent]);\r\n  const instructions = i18n.getString(_TL_('Lift measurement experiments provide reports on the branch search rate, website visitation rate, and conversion rate for your Audience campaigns (Display, Native, Online Video, and Feed-based). These measurements help you understand how much more likely consumers are to search for your brand, visit your website, and make purchases after seeing your Audience ads.'));\r\n  const measurementSectionHeader = i18n.getString(_TL_('Measurement types'));\r\n\r\n  const onChangeExperimentName = useCallback((event) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { experimentName: event.target.value });\r\n  }, [send]);\r\n\r\n  const onChangeStartDate = useCallback((startDate) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { startDate });\r\n  }, [send]);\r\n\r\n  const onChangeCountry = useCallback((country) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { country });\r\n  }, [send]);\r\n\r\n  const onToggleUseSearchLift = useCallback(() => {\r\n    const newValue = !wizardData.useSearchLift;\r\n\r\n    if (!newValue && !wizardData.useConversionLift && !wizardData.useVisitLift) {\r\n      updateValidation(['MEASUREMENT_TYPE_REQUIRED']);\r\n      setHasLiftTypeRequiredError(true);\r\n    } else {\r\n      setHasLiftTypeRequiredError(false);\r\n    }\r\n\r\n    setClarityTag({\r\n      IsLiftExperimentUsingSearchLift: newValue,\r\n    });\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { useSearchLift: newValue });\r\n  }, [send, updateValidation, wizardData.useConversionLift, wizardData.useSearchLift, wizardData.useVisitLift]);\r\n\r\n  const onChangeKeywords = useCallback((typedKeywordString) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { typedKeywordString });\r\n  }, [send]);\r\n\r\n  const onChangeKeywordsMethod = useCallback((method) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { keywordsMethod: method });\r\n  }, [send]);\r\n\r\n  const onRemoveAllKeywords = useCallback(() => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { selectedKeywords: [] });\r\n  }, [send]);\r\n\r\n  const onRemoveKeyword = useCallback((removedId) => {\r\n    const filteredKeywords = wizardData.selectedKeywords.filter(keywordId => keywordId !== removedId);\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { selectedKeywords: filteredKeywords });\r\n  }, [send, wizardData.selectedKeywords]);\r\n\r\n  const onSelectKeywords = useCallback((selectedWords) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { selectedKeywords: [...selectedWords] });\r\n  }, [send]);\r\n\r\n  const onChangeCustomerId = useCallback((cid) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { searchCid: cid });\r\n  }, [send]);\r\n\r\n  const [hasUETTagsSelectionError, setHasUETTagsSelectionError] = useState(false);\r\n  const onToggleUseVisitConversionLift = useCallback(() => {\r\n    const isNowToggledOn = !wizardData.useVisitConversionLift;\r\n    if (isNowToggledOn) {\r\n      send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { useVisitConversionLift: true });\r\n    } else {\r\n      setHasUETTagsSelectionError(false);\r\n      send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { useVisitConversionLift: false, useVisitLift: false, useConversionLift: false });\r\n    }\r\n  }, [send, wizardData.useVisitConversionLift]);\r\n\r\n  const onChangeVisitConversionLiftMethod = useCallback((values) => {\r\n    if (!wizardData.useSearchLift && !values.useConversionLift && !values.useVisitLift) {\r\n      updateValidation(['MEASUREMENT_TYPE_REQUIRED']);\r\n      setHasLiftTypeRequiredError(true);\r\n    } else {\r\n      setHasLiftTypeRequiredError(false);\r\n    }\r\n\r\n    setClarityTag({\r\n      IsLiftExperimentUsingConversionLift: values.useConversionLift,\r\n      IsLiftExperimentUsingVisitLift: values.useVisitLift,\r\n    });\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n      useConversionLift: values.useConversionLift,\r\n      useVisitLift: values.useVisitLift,\r\n    });\r\n  }, [send, updateValidation, wizardData.useSearchLift]);\r\n\r\n  const onSelectUetTags = useCallback((selectedTags) => {\r\n    let key;\r\n\r\n    if (wizardData.useConversionLift && wizardData.useVisitLift) {\r\n      key = 'both';\r\n    } else if (wizardData.useConversionLift) {\r\n      key = 'conversion';\r\n    } else {\r\n      key = 'visit';\r\n    }\r\n    setHasUETTagsSelectionError(false);\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n      uetTags: {\r\n        ...wizardData.uetTags,\r\n        [key]: [...selectedTags],\r\n      },\r\n    });\r\n  }, [send, wizardData]);\r\n\r\n  const onValidate = useCallback(({ isValid }) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isValid });\r\n  }, [send]);\r\n\r\n  useEffect(() => {\r\n    const isTagsSelectionValid = validateVisitConversionLift(wizardData);\r\n    if (showError && !isTagsSelectionValid) {\r\n      setHasUETTagsSelectionError(true);\r\n    }\r\n  }, [showError, wizardData]);\r\n\r\n  return (\r\n    <ValidationGroup validationProps={{ onValidate }}>\r\n      <Stack tokens={stepLayoutTokens} className=\"configure-study-step\">\r\n        <Title3>{title}</Title3>\r\n        <Text>\r\n          <LearnMoreLink\r\n            linkText={i18n.getString(_TL_('Learn more'))}\r\n            text={instructions}\r\n            topic=\"app54859\"\r\n          />\r\n        </Text>\r\n        {wizardData.apiSaveErrorMessage ? (\r\n          <ApiSaveErrorNotification message={wizardData.apiSaveErrorMessage} />\r\n        ) : (\r\n          <ImpressionThresholdMessage />\r\n        )}\r\n        <SelectedCampaignsCard campaigns={selectedCampaigns} />\r\n        <ExperimentNameCard\r\n          experimentName={wizardData.experimentName || ''}\r\n          onChange={onChangeExperimentName}\r\n          showError={showError}\r\n        />\r\n        <StartDateCard\r\n          startDate={wizardData.startDate || null}\r\n          onChangeStartDate={onChangeStartDate}\r\n          showError={showError}\r\n        />\r\n        <CountryCard\r\n          country={wizardData.country || null}\r\n          onChangeCountry={onChangeCountry}\r\n          showError={showError}\r\n        />\r\n        <Subtitle1>{measurementSectionHeader}</Subtitle1>\r\n        {showError && hasLiftTypeRequiredError && (\r\n          <MessageBar intent=\"error\">\r\n            <MessageBarBody>{i18n.getString(errorMessages.MEASUREMENT_TYPE_REQUIRED)}</MessageBarBody>\r\n          </MessageBar>\r\n        )}\r\n        {showError && hasUETTagsSelectionError && (\r\n          <MessageBar intent=\"error\">\r\n            <MessageBarBody>{i18n.getString(errorMessages.UET_TAG_SELECTION_REQUIRED)}</MessageBarBody>\r\n          </MessageBar>\r\n        )}\r\n        <SearchLift\r\n          customerId={wizardData.searchCid || ''}\r\n          isAllowed\r\n          isEnabled={!!wizardData.useSearchLift}\r\n          keywordsMethod={wizardData.keywordsMethod || ADD_KEYWORDS_BY_SELECTION}\r\n          onChangeCustomerId={onChangeCustomerId}\r\n          onChangeKeywords={onChangeKeywords}\r\n          onChangeKeywordsMethod={onChangeKeywordsMethod}\r\n          onRemoveAllKeywords={onRemoveAllKeywords}\r\n          onRemoveKeyword={onRemoveKeyword}\r\n          onSelectKeywords={onSelectKeywords}\r\n          onToggle={onToggleUseSearchLift}\r\n          selectedKeywords={wizardData.selectedKeywords || []}\r\n          showError={showError}\r\n          typedKeywordString={wizardData.typedKeywordString || ''}\r\n        />\r\n        <VisitConversionLift\r\n          isEnabled={!!wizardData.useVisitConversionLift}\r\n          onChangeMethod={onChangeVisitConversionLiftMethod}\r\n          onSelectUetTags={onSelectUetTags}\r\n          onToggle={onToggleUseVisitConversionLift}\r\n          selectedUetTags={wizardData.uetTags}\r\n          showError={showError}\r\n          useConversionLift={!!wizardData.useConversionLift}\r\n          useVisitLift={!!wizardData.useVisitLift}\r\n        />\r\n      </Stack>\r\n    </ValidationGroup>\r\n  );\r\n};\r\n\r\nConfigureStudyStepInternal.propTypes = {\r\n  updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ConfigureStudyStep = withCustomValidation(ConfigureStudyStepInternal);\r\n","import { getEntityFromScope } from '@bingads-webui/edm-campaign';\r\n\r\nexport const conversionGoalFields = [\r\n  'Id',\r\n  'Name',\r\n  'Status',\r\n  'Tag',\r\n];\r\n\r\nexport const fetchConversionGoal = ({\r\n  count,\r\n  scope,\r\n  tagId,\r\n}) => {\r\n  const { currentAccount } = getEntityFromScope(scope);\r\n  const filters = ['Status eq \\'Active\\''];\r\n\r\n  if (tagId != null) {\r\n    const tagIdFilter = Array.isArray(tagId)\r\n      ? `Tag/Id in [${tagId.join(', ')}]`\r\n      : `Tag/Id eq ${tagId}`;\r\n    filters.push(tagIdFilter);\r\n  }\r\n\r\n  const query = {\r\n    filter: {\r\n      where: filters.join(' and '),\r\n    },\r\n    select: [...conversionGoalFields],\r\n    top: count || 20,\r\n  };\r\n\r\n  return currentAccount.Goals['Default.GetConversionGoals']\r\n    .$makeCall({ query })\r\n    .toPromise();\r\n};\r\n\r\nexport const transformFetchedGoal = fetchedGoal => ({\r\n  id: fetchedGoal.Id,\r\n  name: fetchedGoal.Name,\r\n  status: fetchedGoal.Status,\r\n});\r\n","import { getEntityFromScope } from '@bingads-webui/edm-campaign';\r\n\r\nexport const fetchUetTags = ({\r\n  count,\r\n  ids,\r\n  onFailure,\r\n  onSuccess,\r\n  scope,\r\n}) => {\r\n  const { currentAccount } = getEntityFromScope(scope);\r\n  const currentAccountTagsObservable = currentAccount.Tags.get({\r\n    top: count,\r\n    select: [\r\n      'Id',\r\n      'Name',\r\n      'Status',\r\n      'GoalsCount',\r\n    ],\r\n    orderby: [\r\n      ['GoalsCount', 'desc'],\r\n    ],\r\n    filter: {\r\n      where: ids\r\n        ? `Status eq 'Active' AND Id in [${ids.join(', ')}]`\r\n        : 'Status eq \\'Active\\'',\r\n    },\r\n  });\r\n\r\n  return currentAccountTagsObservable.subscribe({\r\n    next: onSuccess,\r\n    error: onFailure,\r\n  });\r\n};\r\n\r\nexport const transformFetchedUetTag = fetchedTag => ({\r\n  id: fetchedTag.Id,\r\n  name: fetchedTag.Name,\r\n  status: fetchedTag.Status,\r\n  goals: [],\r\n  goalsCount: fetchedTag.GoalsCount,\r\n});\r\n\r\nexport const getFetchedTagCollections = (data) => {\r\n  const fetchedTags = {};\r\n  const fetchedTagsAsArray = [];\r\n\r\n  data.value.forEach((fetchedTag) => {\r\n    const uetTag = transformFetchedUetTag(fetchedTag);\r\n    fetchedTagsAsArray.push(uetTag);\r\n    fetchedTags[fetchedTag.Id] = uetTag;\r\n  });\r\n\r\n  return {\r\n    fetchedTags,\r\n    fetchedTagsAsArray,\r\n  };\r\n};\r\n\r\nexport const getFetchedTagsWithGoalsIds = fetchedTags => fetchedTags\r\n  .filter(fetchedTag => fetchedTag.goalsCount > 0)\r\n  .map(fetchedTag => fetchedTag.id);\r\n","import { useCallback, useContext } from 'react';\r\nimport dateUtils from '@bingads-webui-component-legacy/humanize/date';\r\nimport { notificationApi } from '@bingads-webui-campaign/notification-center';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { fetchConversionGoal, transformFetchedGoal } from '../../fetch/conversion';\r\nimport { fetchKeywords } from '../../fetch/keywords';\r\nimport { fetchUetTags, getFetchedTagCollections, getFetchedTagsWithGoalsIds } from '../../fetch/uet';\r\nimport { EDIT_INTENT } from '../constants/intents';\r\nimport { maxFetchedGoalsCount, maxFetchedKeywordsCount, maxFetchedTagsCount } from '../constants/maximums';\r\nimport { createMeasurementTypeEnum, saveExperiment, updateExperiment } from '../../fetch/experiment';\r\nimport { API_DATE_FORMAT } from '../date';\r\nimport { errorMessages } from '../errors';\r\nimport { getKeywords, getUETTags } from '../utils';\r\nimport { validateLiftExperiment } from '../validate';\r\nimport { ADD_KEYWORDS_BY_ENTRY } from './keyword/keyword-methods';\r\n\r\nconst onFetchKeywordsSuccess = ({ send }) => (keywords) => {\r\n  const orderedFetchedKeywords = [];\r\n  const fetchedKeywords = {};\r\n\r\n  keywords.forEach((keyword) => {\r\n    const fetchedKeyword = {\r\n      id: keyword.Id,\r\n      name: keyword.Text,\r\n      status: keyword.Status,\r\n      impressions: keyword.PerformanceMetrics && keyword.PerformanceMetrics.Impressions,\r\n    };\r\n    orderedFetchedKeywords.push(fetchedKeyword);\r\n    fetchedKeywords[keyword.Id] = { ...fetchedKeyword };\r\n  });\r\n\r\n  const updatedWizardData = {\r\n    fetchedKeywords,\r\n    isFetchingKeywords: false,\r\n    orderedFetchedKeywords,\r\n  };\r\n\r\n  if (orderedFetchedKeywords.length === 0) {\r\n    updatedWizardData.keywordsMethod = ADD_KEYWORDS_BY_ENTRY;\r\n  }\r\n\r\n  send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, updatedWizardData);\r\n};\r\n\r\nconst onFetchUetTagsFailure = ({ i18n, msg, send }) => () => {\r\n  notificationApi.showWarning(i18n.getString(msg));\r\n  send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isUetTagsFetched: true });\r\n};\r\n\r\nconst onFetchUetTagsSuccess = ({ i18n, scope, send }) => (data) => {\r\n  const { fetchedTags, fetchedTagsAsArray } = getFetchedTagCollections(data);\r\n  const tagsWithGoalsIds = getFetchedTagsWithGoalsIds(fetchedTagsAsArray);\r\n\r\n  if (tagsWithGoalsIds.length > 0) {\r\n    // For any fetched tags that have associated conversion goals, we need to fetch those goals and add them to the\r\n    // tag before setting the fetch results in state.\r\n    const msg = _TL_('Failed to fetch conversion goals.');\r\n    fetchConversionGoal({\r\n      count: maxFetchedGoalsCount,\r\n      scope,\r\n      tagId: tagsWithGoalsIds,\r\n    })\r\n      .then(({ value }) => {\r\n        value.forEach((goal) => {\r\n          fetchedTags[goal.Tag.Id].goals.push(transformFetchedGoal(goal));\r\n        });\r\n        send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n          fetchedUetTags: fetchedTags,\r\n          isUetTagsFetched: true,\r\n          orderedFetchedUetTags: fetchedTagsAsArray,\r\n        });\r\n      })\r\n      .catch(onFetchUetTagsFailure({ i18n, msg, send }));\r\n  } else {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n      fetchedUetTags: fetchedTags,\r\n      isUetTagsFetched: true,\r\n      orderedFetchedUetTags: fetchedTagsAsArray,\r\n    });\r\n  }\r\n};\r\n\r\nexport const useConfigureStudyRepository = () => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { state: wizardState, send } = useWizardService();\r\n  const { wizardData } = wizardState.context;\r\n  const isEdit = wizardData.intent === EDIT_INTENT;\r\n\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const load = useCallback(() => new Promise((resolve) => {\r\n    if (wizardData.isFetchingKeywords == null) {\r\n      wizardData.isFetchingKeywords = true;\r\n      fetchKeywords({\r\n        count: maxFetchedKeywordsCount,\r\n        scope,\r\n      })\r\n        .then(onFetchKeywordsSuccess({ send }))\r\n        .catch((error) => {\r\n          notificationApi.showWarning(i18n.getString(_TL_('Failed to fetch keywords: {{ responseText }}'), { responseText: error.responseText }));\r\n          send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isFetchingKeywords: false });\r\n        });\r\n    }\r\n\r\n    if (!wizardData.isUetTagsFetched) {\r\n      const msg = _TL_('Failed to fetch UET tags.');\r\n      fetchUetTags({\r\n        count: maxFetchedTagsCount,\r\n        onFailure: onFetchUetTagsFailure({ i18n, msg, send }),\r\n        onSuccess: onFetchUetTagsSuccess({ i18n, scope, send }),\r\n        scope,\r\n      });\r\n    }\r\n\r\n    setTimeout(() => resolve({}), 1000);\r\n  }), [i18n, scope, send, wizardData.isFetchingKeywords, wizardData.isUetTagsFetched]);\r\n\r\n  const onFailure = useCallback((message) => {\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { apiSaveErrorMessage: message });\r\n  }, [send]);\r\n\r\n  const save = useCallback(async () => {\r\n    if (!validateLiftExperiment(wizardData)) {\r\n      send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { showError: true });\r\n      const saveValidationError = new Error(i18n.getString(errorMessages.SAVE_VALIDATION_FAILED));\r\n      return Promise.reject(saveValidationError);\r\n    }\r\n\r\n    const payload = {\r\n      Campaigns: Object.keys(wizardData.selectedCampaignsById).map(idAsString => Number(idAsString)),\r\n      Country: wizardData.country,\r\n      Keywords: getKeywords(wizardData),\r\n      MeasurementType: createMeasurementTypeEnum({\r\n        useConversionLift: wizardData.useConversionLift,\r\n        useSearchLift: wizardData.useSearchLift,\r\n        useVisitLift: wizardData.useVisitLift,\r\n      }),\r\n      Name: wizardData.experimentName,\r\n      StartDate: dateUtils.toString(wizardData.startDate, API_DATE_FORMAT),\r\n      SearchCustomerId: wizardData.searchCid ? Number(wizardData.searchCid) : null,\r\n      UETTags: getUETTags(wizardData),\r\n    };\r\n\r\n    let saveResult;\r\n    if (isEdit) {\r\n      payload.Id = scope.values.liftExperimentId;\r\n      saveResult = await updateExperiment(scope.values, { payload, onSuccess: () => { }, onFailure });\r\n    } else {\r\n      saveResult = await saveExperiment(scope.values, { payload, onSuccess: () => { }, onFailure });\r\n    }\r\n\r\n    return saveResult.isAPISaveFailure ? Promise.reject(saveResult.error) : Promise.resolve({});\r\n  }, [i18n, isEdit, onFailure, scope.values, send, wizardData]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","export const CAMPAIGN_PAUSED_STATUSES = [\r\n  'UserPaused',\r\n  'BudgetPaused',\r\n  'BudgetUserPaused',\r\n];\r\n\r\nexport const CAMPAIGN_TYPE_DISPLAY = _TL_('Display');\r\nexport const CAMPAIGN_TYPE_NATIVE = _TL_('Native');\r\nexport const CAMPAIGN_TYPE_ONLINE_VIDEO = _TL_('Online video');\r\nexport const CAMPAIGN_TYPE_FEED_BASED = _TL_('Feed-based');\r\n\r\nexport const DEFAULT_CAMPAIGN_SUBTYPE_FILTER = \"CampaignSubType in ['AudienceDynamicFeedBased', 'AudienceFeedBased', 'AudienceStatic', 'AudienceVideoAds', 'BrandAwarenessVideoAds', 'DisplayAds']\";\r\n","export const getSelectedCampaignsGridColumns = (i18n => [{\r\n  key: 'CampaignName',\r\n  name: i18n.getString(_TL_('Campaign name')),\r\n  fieldName: 'Name',\r\n}]);\r\n","export const budgetFormatOptions = {\r\n  compact: 'short',\r\n  minimumFractionDigits: 2,\r\n  maximumFractionDigits: 2,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n  createTableColumn,\r\n  DataGrid,\r\n  DataGridBody,\r\n  DataGridCell,\r\n  DataGridHeader,\r\n  DataGridHeaderCell,\r\n  DataGridRow,\r\n  Spinner,\r\n  TableCellLayout,\r\n} from '@fluentui/react-components';\r\nimport { Pause12Filled, PresenceBusy12Filled } from '@fluentui/react-icons';\r\nimport { budgetFormatOptions } from '../../constants/budget-format-options';\r\nimport {\r\n  CAMPAIGN_PAUSED_STATUSES,\r\n  CAMPAIGN_TYPE_DISPLAY,\r\n  CAMPAIGN_TYPE_FEED_BASED,\r\n  CAMPAIGN_TYPE_NATIVE,\r\n  CAMPAIGN_TYPE_ONLINE_VIDEO,\r\n} from '../../constants/campaign';\r\nimport { EDIT_INTENT } from '../../constants/intents';\r\nimport { useSelectCampaignGridStyles } from '../../styles';\r\n\r\nconst getCampaignSubtypeText = (subType) => {\r\n  switch (subType) {\r\n    case 'AudienceStatic':\r\n      return CAMPAIGN_TYPE_NATIVE;\r\n    case 'BrandAwarenessVideoAds':\r\n    case 'AudienceVideoAds':\r\n      return CAMPAIGN_TYPE_ONLINE_VIDEO;\r\n    case 'AudienceFeedBased':\r\n    case 'AudienceDynamicFeedBased':\r\n      return CAMPAIGN_TYPE_FEED_BASED;\r\n    case 'DisplayAds':\r\n    default:\r\n      return CAMPAIGN_TYPE_DISPLAY;\r\n  }\r\n};\r\n\r\nconst getAudienceTargetingText = (targetingEnabled) => {\r\n  if (targetingEnabled === null) {\r\n    return _TL_('');\r\n  }\r\n\r\n  return targetingEnabled ? _TL_('Enabled') : _TL_('Disabled');\r\n};\r\n\r\nconst getColumns = ({ CurrencyCode, i18n }) => [\r\n  createTableColumn({\r\n    columnId: 'Name',\r\n    compare: (a, b) => a.Name.localeCompare(b.Name),\r\n    renderCell: ((campaign) => {\r\n      let nameIcon = <PresenceBusy12Filled primaryFill=\"#0F7C0F\" />;\r\n      if (CAMPAIGN_PAUSED_STATUSES.includes(campaign.Status)) {\r\n        nameIcon = <Pause12Filled primaryFill=\"#262626\" />;\r\n      } else if (!campaign.IsAudienceTargetingEnabled) {\r\n        nameIcon = <PresenceBusy12Filled primaryFill=\"#262626\" />;\r\n      }\r\n      return (\r\n        <TableCellLayout media={nameIcon} truncate>\r\n          {campaign.Name}\r\n        </TableCellLayout>\r\n      );\r\n    }),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Campaign name')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'CampaignSubType',\r\n    renderCell: campaign => i18n.getString(getCampaignSubtypeText(campaign.CampaignSubType)),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Campaign type')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'IsAudienceTargetingEnabled',\r\n    renderCell: campaign => i18n.getString(getAudienceTargetingText(campaign.IsAudienceTargetingEnabled)),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Audience targeting')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'DailyTargetBudgetAmount',\r\n    compare: (a, b) => a.DailyTargetBudgetAmount - b.DailyTargetBudgetAmount,\r\n    renderCell: campaign => i18n.formatCurrency(campaign.DailyTargetBudgetAmount, CurrencyCode, budgetFormatOptions),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Budget per day')),\r\n  }),\r\n  createTableColumn({\r\n    columnId: 'IsEligibleForMSANLiftExperiment',\r\n    compare: (a, b) => a.IsEligibleForMSANLiftExperiment - b.IsEligibleForMSANLiftExperiment,\r\n    renderCell: campaign => i18n.getString(campaign.IsEligibleForMSANLiftExperiment ? _TL_('Eligible') : _TL_('Ineligible')),\r\n    renderHeaderCell: () => i18n.getString(_TL_('Campaign eligibility')),\r\n  }),\r\n];\r\n\r\nconst SelectCampaignsGridInternal = ({\r\n  onCampaignsChange,\r\n  serverContext,\r\n}) => {\r\n  const styles = useSelectCampaignGridStyles();\r\n\r\n  const { CurrentAccount } = serverContext;\r\n  const { CurrencyCode } = CurrentAccount;\r\n\r\n  const { dispatch, state } = useContext(GridContext);\r\n  const { state: wizardState, send } = useWizardService();\r\n  const i18n = useContext(I18nContext);\r\n  const columns = getColumns({ CurrencyCode, i18n });\r\n\r\n  const onChangeSelectedCampaigns = useCallback((_event, { selectedItems }) => {\r\n    const { selectedCampaignsById } = wizardState.context.wizardData;\r\n\r\n    const eligibleCampaigns = state.items ? state.items.filter(campaign => campaign.IsEligibleForMSANLiftExperiment) : [];\r\n    // Datagrid nas no notion of disabled items, so once something on page is selected - it always gives you back the entire page when clicking select all\r\n    const isSelectAll = selectedItems.size >= state.pagination.pageSize;\r\n    if (isSelectAll) {\r\n      const isAllEligibleCampaignsSelected = eligibleCampaigns.every(campaign => selectedCampaignsById[campaign.Id]);\r\n      if (isAllEligibleCampaignsSelected) {\r\n        eligibleCampaigns.forEach((campaign) => {\r\n          delete selectedCampaignsById[campaign.Id];\r\n        });\r\n      } else {\r\n        eligibleCampaigns.forEach((campaign) => {\r\n          selectedCampaignsById[campaign.Id] = campaign;\r\n        });\r\n      }\r\n    } else {\r\n      eligibleCampaigns.forEach((campaign) => {\r\n        if (selectedItems.has(campaign.Id)) {\r\n          selectedCampaignsById[campaign.Id] = campaign;\r\n        } else if (selectedCampaignsById[campaign.Id]) {\r\n          delete selectedCampaignsById[campaign.Id];\r\n        }\r\n      });\r\n    }\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { selectedCampaignsById });\r\n    onCampaignsChange({ count: Object.keys(selectedCampaignsById).length });\r\n  }, [onCampaignsChange, send, state.items, state.pagination.pageSize, wizardState.context.wizardData]);\r\n\r\n  const selectedItems = useMemo(() => {\r\n    const selectedCampaignsIds = Object.keys(wizardState.context.wizardData.selectedCampaignsById).map(idAsString => Number(idAsString));\r\n    return new Set(selectedCampaignsIds);\r\n    // eslint-disable-next-line\r\n  }, [wizardState.context.wizardData.selectedCampaignsById, Object.keys(wizardState.context.wizardData.selectedCampaignsById).length]);\r\n\r\n  const onSortChange = useCallback((e, { sortColumn, sortDirection }) => {\r\n    dispatch({\r\n      type: 'UPDATE_SORTED_COLUMN',\r\n      payload: {\r\n        ...state.sortedColumn,\r\n        fieldName: sortColumn,\r\n        isSortDescending: sortDirection === 'descending',\r\n      },\r\n    });\r\n  }, [dispatch, state]);\r\n\r\n  const { isInitialized, intent } = wizardState.context.wizardData;\r\n  const isEdit = intent === EDIT_INTENT;\r\n  return (\r\n    <DataGrid\r\n      columns={columns}\r\n      getRowId={campaign => campaign.Id}\r\n      items={state.items || []}\r\n      onSelectionChange={onChangeSelectedCampaigns}\r\n      onSortChange={onSortChange}\r\n      selectionMode=\"multiselect\"\r\n      sortable\r\n      selectedItems={selectedItems}\r\n    >\r\n      <DataGridHeader>\r\n        <DataGridRow\r\n          select\r\n          selectionCell={{\r\n            checkboxIndicator: { 'aria-label': i18n.getString(_TL_('Select all campaigns')) },\r\n          }}\r\n        >\r\n          {({ renderHeaderCell }) => (\r\n            <DataGridHeaderCell>{renderHeaderCell()}</DataGridHeaderCell>\r\n          )}\r\n        </DataGridRow>\r\n      </DataGridHeader>\r\n      {((isEdit && !isInitialized) || state.items === null) ? (\r\n        <Spinner className={styles.spinner} label={i18n.getString(_TL_('Loading campaigns...'))} />\r\n      ) : (\r\n        <DataGridBody>\r\n          {({ item, rowId }) => (\r\n            <DataGridRow\r\n              className={item.IsEligibleForMSANLiftExperiment ? styles.dataGridRow : styles.dataGridRowDisabled}\r\n              key={rowId}\r\n              selectionCell={{\r\n                checkboxIndicator: { 'aria-label': i18n.getString(_TL_('Select campaign')) },\r\n              }}\r\n            >\r\n              {({ renderCell }) => (\r\n                <DataGridCell className={styles.selectCampaignTableCell}>\r\n                  {renderCell(item)}\r\n                </DataGridCell>\r\n              )}\r\n            </DataGridRow>\r\n          )}\r\n        </DataGridBody>\r\n      )}\r\n    </DataGrid>\r\n  );\r\n};\r\n\r\nSelectCampaignsGridInternal.propTypes = {\r\n  onCampaignsChange: PropTypes.func.isRequired,\r\n  serverContext: PropTypes.shape({\r\n    CurrentAccount: PropTypes.shape({\r\n      CurrencyCode: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport const SelectCampaignsGrid = withServerContext(SelectCampaignsGridInternal);\r\n","import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Dropdown, Input, Option } from '@fluentui/react-components';\r\nimport { SearchRegular } from '@fluentui/react-icons';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  CAMPAIGN_TYPE_DISPLAY,\r\n  CAMPAIGN_TYPE_FEED_BASED,\r\n  CAMPAIGN_TYPE_NATIVE,\r\n  CAMPAIGN_TYPE_ONLINE_VIDEO,\r\n  DEFAULT_CAMPAIGN_SUBTYPE_FILTER,\r\n} from '../../constants/campaign';\r\nimport { useFilterDropdownStyles } from '../../styles';\r\n\r\nconst campaignTypes = [\r\n  CAMPAIGN_TYPE_DISPLAY,\r\n  CAMPAIGN_TYPE_NATIVE,\r\n  CAMPAIGN_TYPE_ONLINE_VIDEO,\r\n  CAMPAIGN_TYPE_FEED_BASED,\r\n];\r\n\r\nconst debouncedEditableFilterDispatch = _.debounce((currentEditableFilterPayload, dispatch) => dispatch({ type: 'SET_EDITABLE_FILTER', payload: currentEditableFilterPayload }), 300);\r\n\r\nexport const SelectCampaignsToolbar = () => {\r\n  const styles = useFilterDropdownStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const searchBoxPlaceholder = i18n.getString(_TL_('Search campaigns'));\r\n  const inputLabel = i18n.getString(_TL_('Campaign name search'));\r\n  const dropdownPlaceholder = i18n.getString(_TL_('Campaign types: All'));\r\n  const dropdownLabel = i18n.getString(_TL_('Campaign type filter'));\r\n\r\n  const { dispatch } = useContext(GridContext);\r\n  const [campaignSearchText, setCampaignSearchText] = useState('');\r\n  const [selectedCampaignTypes, setSelectedCampaignTypes] = useState([]);\r\n\r\n  const dropdownButtonText = useMemo(\r\n    () => {\r\n      if (selectedCampaignTypes.length === 0) {\r\n        return dropdownPlaceholder;\r\n      }\r\n      const formattedSelectionText = selectedCampaignTypes.join(i18n.getString(_TL_(', ')));\r\n      const statusText = selectedCampaignTypes.length > 1 ? i18n.getString(_TL_('Campaign types:')) : i18n.getString(_TL_('Campaign type:'));\r\n      return `${statusText} ${formattedSelectionText}`;\r\n    },\r\n    [i18n, dropdownPlaceholder, selectedCampaignTypes]\r\n  );\r\n\r\n  const currentEditableFilterPayload = useMemo(() => {\r\n    const filterPayloadBase = `contains(tolower(Name), '${campaignSearchText.toLowerCase()}')`;\r\n    if (selectedCampaignTypes.length) {\r\n      const formattedCampaignSubTypes = selectedCampaignTypes.map((campaignSubTypeDisplayText) => {\r\n        switch (campaignSubTypeDisplayText) {\r\n          case CAMPAIGN_TYPE_DISPLAY:\r\n            return 'DisplayAds';\r\n          case CAMPAIGN_TYPE_NATIVE:\r\n            return 'AudienceStatic';\r\n          case CAMPAIGN_TYPE_FEED_BASED:\r\n            return \"AudienceDynamicFeedBased', 'AudienceFeedBased\";\r\n          case CAMPAIGN_TYPE_ONLINE_VIDEO:\r\n          default:\r\n            return \"AudienceVideoAds', 'BrandAwarenessVideoAds\";\r\n        }\r\n      });\r\n      const formattedFilter = formattedCampaignSubTypes.map(campaignSubType => `'${campaignSubType}'`).join(', ');\r\n      return `${filterPayloadBase} and CampaignSubType in [${formattedFilter}]`;\r\n    }\r\n    return `${filterPayloadBase} and ${DEFAULT_CAMPAIGN_SUBTYPE_FILTER}`;\r\n  }, [campaignSearchText, selectedCampaignTypes]);\r\n\r\n  useEffect(() => {\r\n    debouncedEditableFilterDispatch(currentEditableFilterPayload, dispatch);\r\n  }, [currentEditableFilterPayload, dispatch]);\r\n\r\n  const onChangeSearchInput = useCallback((_e, { value }) => {\r\n    setCampaignSearchText(value);\r\n  }, []);\r\n\r\n  const onOptionSelect = useCallback((_e, data) => {\r\n    setSelectedCampaignTypes(data.selectedOptions);\r\n  }, []);\r\n\r\n  return (\r\n    <Stack horizontal horizontalAlign=\"space-between\">\r\n      <Input\r\n        className=\"campaigns-search-filter\"\r\n        aria-label={inputLabel}\r\n        contentBefore={<SearchRegular />}\r\n        onChange={onChangeSearchInput}\r\n        placeholder={searchBoxPlaceholder}\r\n        value={campaignSearchText}\r\n      />\r\n      <Dropdown\r\n        className=\"campaign-type-filter\"\r\n        aria-label={dropdownLabel}\r\n        placeholder={dropdownPlaceholder}\r\n        button={\r\n          <span className={styles.truncatedText}>{dropdownButtonText}</span>\r\n        }\r\n        data-selectedOptions={selectedCampaignTypes.length ? selectedCampaignTypes : dropdownPlaceholder}\r\n        multiselect\r\n        onOptionSelect={onOptionSelect}\r\n        selectedOptions={selectedCampaignTypes}\r\n      >\r\n        {campaignTypes.map(campaignType => (\r\n          <Option\r\n            key={campaignType}\r\n            value={campaignType}\r\n            className={`campaign-type-selector-option-${campaignType}`}\r\n          >\r\n            {i18n.getString(campaignType)}\r\n          </Option>\r\n        ))}\r\n      </Dropdown>\r\n    </Stack>\r\n  );\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Button,\r\n  useId,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss12Regular,\r\n} from '@fluentui/react-icons';\r\nimport { useCampaignNameTagStyles } from '../../styles';\r\n\r\nexport const CampaignNameTag = ({\r\n  campaign,\r\n  onRemove,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const tagsListId = useId('selectedCampaignsTagsList');\r\n  const removeTagId = `${tagsListId}-remove-${campaign.Id}`;\r\n  const campaignName = i18n.getString(_TL_('{{name}}'), { name: campaign.Name });\r\n  const styles = useCampaignNameTagStyles();\r\n\r\n  return (\r\n    <Button\r\n      appearance=\"outline\"\r\n      aria-labelledby={removeTagId}\r\n      className={classnames('experiment-summary-campaign', styles.button)}\r\n      icon={<Dismiss12Regular />}\r\n      iconPosition=\"after\"\r\n      id={campaign.Id}\r\n      onClick={() => onRemove(campaign.Id)}\r\n      shape=\"rounded\"\r\n      size=\"small\"\r\n    >\r\n      {campaignName}\r\n    </Button>\r\n  );\r\n};\r\n\r\nCampaignNameTag.propTypes = {\r\n  campaign: PropTypes.shape({\r\n    Id: PropTypes.number.isRequired,\r\n    Name: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  onRemove: PropTypes.func.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport {\r\n  makeStyles,\r\n  Caption1Strong,\r\n  Accordion,\r\n  AccordionItem,\r\n  AccordionHeader,\r\n  AccordionPanel,\r\n} from '@fluentui/react-components';\r\nimport { selectedCampaignsAccordionStyles } from '../../page-layout';\r\nimport { CampaignNameTag } from './campaign-name-tag';\r\n\r\nconst useStyles = makeStyles(selectedCampaignsAccordionStyles);\r\n\r\nexport const SelectedCampaignsAccordion = ({ onRemoveCampaign, selectedCampaigns }) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const selectedCampaignsHeader = i18n.getString(_TL_('Campaigns'));\r\n\r\n  const numCampaigns = useMemo(() => selectedCampaigns.length, [selectedCampaigns]);\r\n\r\n  const { state: wizardState, send } = useWizardService();\r\n  const removeCampaign = useCallback((id) => {\r\n    const { selectedCampaignsById } = wizardState.context.wizardData;\r\n    delete selectedCampaignsById[id];\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { selectedCampaignsById });\r\n    onRemoveCampaign({ count: Object.keys(selectedCampaignsById).length });\r\n  }, [onRemoveCampaign, send, wizardState.context.wizardData]);\r\n\r\n  return (\r\n    <Accordion collapsible defaultOpenItems=\"1\">\r\n      <AccordionItem value=\"1\">\r\n        <AccordionHeader size=\"small\" className={styles.accordionHeader}>\r\n          <Caption1Strong className={styles.accordionHeaderText}>{selectedCampaignsHeader}</Caption1Strong>\r\n          <span className={styles.count}>{numCampaigns} {i18n.getString(_TL_('campaigns'))}</span>\r\n        </AccordionHeader>\r\n        <AccordionPanel>\r\n          <div className={styles.tagsList}>\r\n            {selectedCampaigns.map(campaign => (\r\n              <CampaignNameTag campaign={campaign} onRemove={removeCampaign} key={campaign.Id} />\r\n            ))}\r\n          </div>\r\n        </AccordionPanel>\r\n      </AccordionItem>\r\n    </Accordion>\r\n  );\r\n};\r\n\r\nSelectedCampaignsAccordion.propTypes = {\r\n  onRemoveCampaign: PropTypes.func.isRequired,\r\n  selectedCampaigns: PropTypes.arrayOf(PropTypes.shape({\r\n    Id: PropTypes.number.isRequired,\r\n    Name: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext, useMemo } from 'react';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  makeStyles,\r\n  Subtitle1,\r\n  Subtitle2,\r\n  Body1,\r\n  Caption1,\r\n  Caption1Strong,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  DrawerBody,\r\n  DrawerHeader,\r\n  DrawerHeaderTitle,\r\n  DrawerInline,\r\n} from '@fluentui/react-drawer';\r\nimport { budgetFormatOptions } from '../../constants/budget-format-options';\r\nimport { studySummaryDrawerStyles } from '../../page-layout';\r\nimport { ImpressionThresholdMessage } from '../impression-threshold-message';\r\nimport { SelectedCampaignsAccordion } from './selected-campaigns-accordion';\r\n\r\nconst useStyles = makeStyles(studySummaryDrawerStyles);\r\n\r\nconst StudySummaryDrawerInternal = ({ onRemoveCampaign, serverContext }) => {\r\n  const styles = useStyles();\r\n  const { CurrentAccount } = serverContext;\r\n  const { CurrencyCode } = CurrentAccount;\r\n  const i18n = useContext(I18nContext);\r\n  const studySummaryTitle = i18n.getString(_TL_('Experiment summary'));\r\n  const campaignSelectionTitle = i18n.getString(_TL_('Selected campaigns'));\r\n  const totalBudgetLabel = i18n.getString(_TL_('Total budget for selected campaigns'));\r\n\r\n  const { state: wizardState } = useWizardService();\r\n  const { selectedCampaignsById } = wizardState.context.wizardData;\r\n\r\n  const selectedCampaigns = Object.keys(selectedCampaignsById).map(campaignId => selectedCampaignsById[campaignId]);\r\n  const totalBudgetFormatted = useMemo(() => {\r\n    if (!CurrencyCode) return '--';\r\n    const total = selectedCampaigns.reduce((acc, campaign) => {\r\n      const dailyTargetBudgetAmount = campaign.DailyTargetBudgetAmount ? campaign.DailyTargetBudgetAmount : 0;\r\n      const dailyBudget = campaign.Budget && campaign.Budget.Amount ? campaign.Budget.Amount : dailyTargetBudgetAmount;\r\n      return acc + dailyBudget;\r\n    }, 0);\r\n    return i18n.formatCurrency(total, CurrencyCode, budgetFormatOptions);\r\n  }, [selectedCampaigns, i18n, CurrencyCode]);\r\n\r\n  return (\r\n    <DrawerInline open position=\"end\" size=\"small\" className=\"experiment-summary\">\r\n      <DrawerHeader className={mergeClasses(styles.drawer, styles.drawerHeader)}>\r\n        <DrawerHeaderTitle>\r\n          <Subtitle1> {studySummaryTitle} </Subtitle1>\r\n        </DrawerHeaderTitle>\r\n      </DrawerHeader>\r\n      <DrawerBody className={styles.drawer}>\r\n        <Stack>\r\n          <ImpressionThresholdMessage />\r\n          <Subtitle2 className={styles.subTitle}> {campaignSelectionTitle} </Subtitle2>\r\n          <Body1>\r\n            <div className={mergeClasses(styles.totalBudget, styles.content)}>\r\n              <Caption1Strong>{totalBudgetLabel}</Caption1Strong>\r\n              <Caption1>{totalBudgetFormatted}</Caption1>\r\n            </div>\r\n            <SelectedCampaignsAccordion\r\n              onRemoveCampaign={onRemoveCampaign}\r\n              selectedCampaigns={selectedCampaigns}\r\n            />\r\n          </Body1>\r\n        </Stack>\r\n      </DrawerBody>\r\n    </DrawerInline>\r\n  );\r\n};\r\n\r\nStudySummaryDrawerInternal.propTypes = {\r\n  onRemoveCampaign: PropTypes.func.isRequired,\r\n  serverContext: PropTypes.shape({\r\n    CurrentAccount: PropTypes.shape({\r\n      CurrencyCode: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport const StudySummaryDrawer = withServerContext(StudySummaryDrawerInternal);\r\n","import { getTheme } from '@fluentui/react';\r\nimport {\r\n  Caption1,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport React, { useContext } from 'react';\r\nimport { curlyTemplate } from '@bingads-webui/primitive-utilities';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Paginator } from '../../paginator';\r\nimport { noDataStyles } from '../../styles';\r\n\r\nconst { palette } = getTheme();\r\nconst useStyles = makeStyles({\r\n  noData: noDataStyles(palette),\r\n});\r\n\r\n\r\nexport const SelectCampaignsFooter = () => {\r\n  const i18n = useContext(I18nContext);\r\n  const styles = useStyles();\r\n  const { state } = useContext(GridContext);\r\n\r\n  return state.items && state.items.length > 0\r\n    ? (\r\n      <>\r\n        <Caption1> {curlyTemplate(i18n.getString(_TL_('{{count}} Campaign(s)')))({ count: state.totalCount })}</Caption1>\r\n        <Paginator />\r\n      </>\r\n    ) : (\r\n      <div className={styles.noData}>\r\n        {i18n.getString(_TL_('There are no campaigns.'))}\r\n      </div>\r\n    );\r\n};\r\n","import { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { GridContext } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useCallback, useContext, useEffect } from 'react';\r\nimport { fetchLiftExperimentCampaigns } from '../../../fetch/lift-experiment-campaigns';\r\n\r\nexport const SelectCampaignsGridDataSource = () => {\r\n  const { state, dispatch } = useContext(GridContext);\r\n  const i18n = useContext(I18nContext);\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const getOrderBy = useCallback((column) => {\r\n    if (!column.fieldName) {\r\n      return undefined;\r\n    }\r\n\r\n    return `${column.fieldName} ${column.isSortDescending ? 'DESC' : 'ASC'}`;\r\n  }, []);\r\n\r\n  const onSuccess = useCallback((response) => {\r\n    dispatch({ type: 'FINISH_LOAD_DATA', payload: { items: response.value, totalCount: response['@odata.count'] } });\r\n  }, [dispatch]);\r\n  const onFailure = useCallback((message) => {\r\n    const alertHelper = new AlertHelper({ i18n });\r\n    alertHelper.showError(message);\r\n  }, [i18n]);\r\n\r\n  useEffect(() => {\r\n    const orderBy = getOrderBy(state.sortedColumn);\r\n    dispatch({ type: 'START_LOAD_DATA' });\r\n    fetchLiftExperimentCampaigns(scope.values, {\r\n      query: {\r\n        $count: true,\r\n        $top: state.pagination.pageSize,\r\n        $skip: ((state.pagination.pageNumber - 1) * state.pagination.pageSize),\r\n        $filter: state.editableFilter,\r\n        ...(orderBy ? { $orderby: orderBy } : {}),\r\n      },\r\n      onSuccess,\r\n      onFailure,\r\n    });\r\n  }, [dispatch, getOrderBy, onFailure, onSuccess, state.editableFilter, state.pagination, state.sortedColumn, scope.values]);\r\n\r\n  return null;\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const fetchLiftExperimentCampaigns = (\r\n  { aid, cid },\r\n  {\r\n    onFailure,\r\n    onSuccess,\r\n    query,\r\n  }\r\n) => edmCampaign\r\n  .Customers.$withKey(cid)\r\n  .Accounts.$withKey(aid)\r\n  .LiftExperimentCampaigns\r\n  .get(query)\r\n  .toPromise()\r\n  .then((response) => {\r\n    onSuccess(response);\r\n  })\r\n  .catch(() => onFailure(_TL_('Failed to fetch campaigns')));\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport { GridContextProvider } from '@bingads-webui-grid/grid-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Card,\r\n  CardFooter,\r\n  makeStyles,\r\n  Text,\r\n  Title3,\r\n} from '@fluentui/react-components';\r\nimport { getTheme, SelectionMode } from '@fluentui/react';\r\nimport { DEFAULT_CAMPAIGN_SUBTYPE_FILTER } from '../constants/campaign';\r\nimport { getSelectedCampaignsGridColumns } from '../constants/selected-campaigns-grid-columns';\r\nimport {\r\n  footerStyles,\r\n  selectCampaignsStepLayoutTokens,\r\n  selectCampaignsStyles\r\n} from '../page-layout';\r\nimport { getUIBlockerStyle, noDataStyles } from '../styles';\r\nimport { validateCampaignCount } from '../validate';\r\nimport { SelectCampaignsGrid } from './select-campaigns-grid/select-campaigns-grid';\r\nimport { SelectCampaignsToolbar } from './select-campaigns-grid/select-campaigns-toolbar';\r\nimport { StudySummaryDrawer } from './summary/study-summary-drawer';\r\nimport { SelectCampaignsFooter } from './select-campaigns-grid/select-campaigns-footer';\r\nimport { SelectCampaignsGridDataSource } from './select-campaigns-grid/select-campaigns-grid-data-source';\r\n\r\nconst { palette } = getTheme();\r\n\r\nconst useStyles = makeStyles({\r\n  footer: footerStyles,\r\n  ...selectCampaignsStyles,\r\n  noData: noDataStyles(palette),\r\n});\r\n\r\nexport const SelectCampaignsStep = () => {\r\n  useDefaultStyles(getUIBlockerStyle);\r\n  const styles = useStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const title = i18n.getString(_TL_('Choose one or more campaigns for this experiment'));\r\n  const instructions = i18n.getString(_TL_('Select up to 10 campaigns. Please review the campaign eligibility requirements listed in the summary to ensure that your experiment runs successfully.'));\r\n\r\n  const { state: wizardState, send } = useWizardService();\r\n  const { wizardData } = wizardState.context;\r\n  const {\r\n    isValid,\r\n    selectCampaignsError,\r\n    showError,\r\n  } = wizardData;\r\n\r\n  const onChangeSelectedCampaigns = useCallback(({ count }) => {\r\n    const results = validateCampaignCount({ count, i18n });\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n      isValid: results.isValid,\r\n      selectCampaignsError: results.error,\r\n    });\r\n  }, [i18n, send]);\r\n\r\n  const initialGridContext = useMemo(() => ({\r\n    editableFilter: DEFAULT_CAMPAIGN_SUBTYPE_FILTER,\r\n    items: [],\r\n    pagination: {\r\n      pageNumber: 1,\r\n      pageSize: 10,\r\n    },\r\n    selectedColumns: getSelectedCampaignsGridColumns(i18n),\r\n    selectedItems: new Set(),\r\n    selectionMode: SelectionMode.multiple,\r\n    totalCount: 0,\r\n  }), [i18n]);\r\n\r\n  return (\r\n    <div className={classNames(styles.root, 'select-campaigns-step')}>\r\n      <GridContextProvider {...initialGridContext}>\r\n        <SelectCampaignsGridDataSource />\r\n        <div className={styles.content}>\r\n          <Stack tokens={selectCampaignsStepLayoutTokens}>\r\n            <Title3>{title}</Title3>\r\n            <Text>{instructions}</Text>\r\n            {(showError && !isValid) && (\r\n              <MessageBar intent=\"error\">\r\n                <MessageBarBody>{selectCampaignsError}</MessageBarBody>\r\n              </MessageBar>\r\n            )}\r\n            <SelectCampaignsToolbar />\r\n            <Card>\r\n              <div className=\"select-campaigns-grid\">\r\n                <SelectCampaignsGrid onCampaignsChange={onChangeSelectedCampaigns} />\r\n              </div>\r\n              <CardFooter className={styles.footer}>\r\n                <SelectCampaignsFooter />\r\n              </CardFooter>\r\n            </Card>\r\n          </Stack>\r\n        </div>\r\n        <StudySummaryDrawer onRemoveCampaign={onChangeSelectedCampaigns} />\r\n      </GridContextProvider>\r\n    </div>\r\n  );\r\n};\r\n","import { SaveBlocker, DefaultTemplate } from '@bingads-webui-react/wizard-ui-library';\r\nimport { ConfigureStudyStep } from '../common/components/configure-study-step';\r\nimport { useConfigureStudyRepository } from '../common/components/configure-study-step-repository';\r\nimport { SelectCampaignsStep } from '../common/components/select-campaigns-step';\r\nimport { useSelectCampaignsRepository } from '../common/components/select-campaigns-step-repository';\r\n\r\nexport const stepConfigs = [{\r\n  id: 'step-1',\r\n  view: SelectCampaignsStep,\r\n  repository: useSelectCampaignsRepository,\r\n}, {\r\n  id: 'step-2',\r\n  view: ConfigureStudyStep,\r\n  repository: useConfigureStudyRepository,\r\n}];\r\n\r\nexport const layoutConfig = {\r\n  'step-1': {\r\n    template: DefaultTemplate,\r\n    noBlocker: true,\r\n  },\r\n  'step-2': {\r\n    template: DefaultTemplate,\r\n    customBlocker: SaveBlocker,\r\n  },\r\n};\r\n","import { useCallback, useContext } from 'react';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { fetchCampaignsByIdEDM } from '../../fetch/campaigns';\r\nimport { fetchExperiment, parseMeasurementTypeEnum } from '../../fetch/experiment';\r\nimport { EDIT_INTENT } from '../constants/intents';\r\nimport { errorMessages } from '../errors';\r\nimport { validateCampaignCount } from '../validate';\r\nimport { ADD_KEYWORDS_BY_ENTRY, ADD_KEYWORDS_BY_SELECTION } from './keyword/keyword-methods';\r\nimport { STATUS_SCHEDULED } from '../../landing-page/statuses';\r\n\r\nexport const useSelectCampaignsRepository = () => {\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const { state: wizardState, send } = useWizardService();\r\n  const { wizardData } = wizardState.context;\r\n  const isEdit = wizardData.intent === EDIT_INTENT;\r\n\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const load = useCallback(() => new Promise((resolve) => {\r\n    if (isEdit) {\r\n      if (!wizardData.isInitialized) {\r\n        const onFailure = (message) => {\r\n          const alertHelper = new AlertHelper({ i18n });\r\n          alertHelper.showError(message);\r\n          // If request for lift study fails, push the user back from edit form to lift studies grid\r\n          send(WIZARD_EVENTS.CANCEL);\r\n        };\r\n        const onSuccess = async (liftExperiment) => {\r\n          // Handle the case where user manually enters url for an uneditable lift study\r\n          if (liftExperiment.Status !== STATUS_SCHEDULED) {\r\n            onFailure(errorMessages.STATUS_INVALID_FOR_EDIT);\r\n          }\r\n\r\n          const uetTags = {\r\n            both: [],\r\n            conversion: [],\r\n            visit: [],\r\n          };\r\n          const study = {\r\n            ...liftExperiment,\r\n            ...parseMeasurementTypeEnum(liftExperiment.MeasurementType),\r\n          };\r\n\r\n          if (study.useVisitLift && study.useConversionLift) {\r\n            uetTags.both = [...study.UETTags];\r\n          } else if (study.useVisitLift) {\r\n            uetTags.visit = [...study.UETTags];\r\n          } else if (study.useConversionLift) {\r\n            uetTags.conversion = [...study.UETTags];\r\n          }\r\n\r\n          const response = await fetchCampaignsByIdEDM(scope.values, study.Campaigns);\r\n          const selectedCampaigns = response.value;\r\n          const selectedCampaignsById = {};\r\n          selectedCampaigns.forEach((campaign) => {\r\n            selectedCampaignsById[campaign.Id] = campaign;\r\n          });\r\n\r\n          send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n            isInitialized: true,\r\n            experimentName: study.Name,\r\n            startDate: study.StartDate,\r\n            country: study.Country,\r\n            useSearchLift: study.useSearchLift,\r\n            selectedKeywords: [],\r\n            keywordsMethod: ADD_KEYWORDS_BY_ENTRY,\r\n            typedKeywordString: study.Keywords.join(i18n.getString(_TL_(', '))),\r\n            searchCid: study.SearchCustomerId || '',\r\n            useVisitConversionLift: study.useVisitLift || study.useConversionLift,\r\n            useVisitLift: study.useVisitLift,\r\n            useConversionLift: study.useConversionLift,\r\n            uetTags,\r\n            selectedCampaignsById,\r\n          });\r\n\r\n          resolve({}); // still unsure how this resolution is being used\r\n        };\r\n        fetchExperiment(scope.values, { onSuccess, onFailure });\r\n      }\r\n    } else if (!wizardData.isInitialized) {\r\n      send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n        isInitialized: true,\r\n        isValid: false,\r\n        experimentName: '',\r\n        startDate: null,\r\n        country: null,\r\n        useSearchLift: true,\r\n        selectedKeywords: [],\r\n        keywordsMethod: ADD_KEYWORDS_BY_SELECTION,\r\n        typedKeywordString: '',\r\n        searchCid: '',\r\n        useVisitConversionLift: false,\r\n        useVisitLift: undefined,\r\n        useConversionLift: undefined,\r\n        uetTags: {\r\n          both: [],\r\n          conversion: [],\r\n          visit: [],\r\n        },\r\n      });\r\n    }\r\n\r\n    resolve({});\r\n  }), [i18n, isEdit, scope, send, wizardData.isInitialized]);\r\n\r\n  const save = useCallback(() => {\r\n    const { selectedCampaignsById } = wizardData;\r\n    const count = Object.keys(selectedCampaignsById).length;\r\n    const result = validateCampaignCount({ count, i18n });\r\n\r\n    send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n      isValid: result.isValid,\r\n      selectCampaignsError: result.error,\r\n      showError: !result.isValid,\r\n    });\r\n\r\n    if (!result.isValid) {\r\n      return Promise.reject(new Error(result.error));\r\n    }\r\n\r\n    return new Promise((resolve) => {\r\n      setTimeout(() => resolve({}), 800);\r\n    });\r\n  }, [i18n, send, wizardData]);\r\n\r\n  return {\r\n    load,\r\n    save,\r\n  };\r\n};\r\n","import { getEntityFromScope } from '@bingads-webui/edm-campaign';\r\nimport {\r\n  getFormattedDateString,\r\n  MS_PER_DAY,\r\n} from '../common/date';\r\n\r\nexport const fetchKeywords = ({\r\n  count,\r\n  scope,\r\n}) => {\r\n  const { currentAccount } = getEntityFromScope(scope);\r\n  const endDate = new Date(Date.now());\r\n  const formattedEndDate = getFormattedDateString(endDate);\r\n  const msPer90Days = MS_PER_DAY * 90;\r\n  const startDate = new Date(endDate.valueOf() - msPer90Days);\r\n  const formattedStartDate = getFormattedDateString(startDate);\r\n\r\n  return currentAccount.Keywords['Default.GridData'].findAll({\r\n    select: [\r\n      'Id',\r\n      'Text',\r\n      'Status',\r\n      'PerformanceMetrics/Impressions',\r\n    ],\r\n    filter: {\r\n      where: 'Status eq \\'Active\\'',\r\n    },\r\n    orderBy: [\r\n      {\r\n        key: 'PerformanceMetrics/Impressions',\r\n        direction: 'DESC',\r\n      },\r\n    ],\r\n    limit: count,\r\n    query: {\r\n      gridDataParameters: {\r\n        DateRange: {\r\n          StartDate: formattedStartDate,\r\n          EndDate: formattedEndDate,\r\n        },\r\n      },\r\n    },\r\n  });\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport {\r\n  getCurrentStepId,\r\n  useWizardService,\r\n} from '@bingads-webui-react/wizard';\r\nimport { layoutConfig } from './config';\r\n\r\nexport const CustomLayoutTemplate = ({ items }) => {\r\n  const { state } = useWizardService();\r\n  const currentStepId = getCurrentStepId(state);\r\n  const config = layoutConfig[currentStepId];\r\n  const {\r\n    noBlocker,\r\n    customBlocker,\r\n    template: Template,\r\n  } = config;\r\n  const newItems = { ...items };\r\n\r\n  if (noBlocker) {\r\n    newItems.Blocker = undefined;\r\n  } else if (customBlocker) {\r\n    newItems.Blocker = customBlocker;\r\n  }\r\n\r\n  return <Template items={newItems} />;\r\n};\r\n\r\nCustomLayoutTemplate.propTypes = {\r\n  items: PropTypes.shape({}).isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport {\r\n  Layout,\r\n  LayoutContainer,\r\n  StepContainer,\r\n  Wizard,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n  CardFooter,\r\n  LoadingShimmer,\r\n  BusyBlocker,\r\n  CancelWizardDialog,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { tokens } from '@fluentui/react-components';\r\nimport { CREATE_INTENT, EDIT_INTENT } from '../common/constants/intents';\r\nimport { LiftMeasurementStepFooter } from './footer/footer';\r\nimport { stepConfigs } from './config';\r\nimport { CustomLayoutTemplate } from './templates';\r\n\r\nconst getStyles = () => ({\r\n  '@global': {\r\n    '.default-layout': {\r\n      '& .step-content-container': {\r\n        padding: 0,\r\n      },\r\n      '& .footer-container': {\r\n        'background-color': tokens.colorNeutralBackground1,\r\n        bottom: 0,\r\n        position: 'sticky',\r\n      },\r\n    },\r\n  },\r\n});\r\n\r\nexport const LiftMeasurementWizard = ({\r\n  intent,\r\n  onCancel,\r\n  onSaveAndExit,\r\n}) => {\r\n  useDefaultStyles(getStyles);\r\n\r\n  const config = {\r\n    id: 'lift-measurement-wizard',\r\n    actions: {\r\n      onDone: () => {\r\n        onSaveAndExit();\r\n      },\r\n      onExited: () => {\r\n        onCancel();\r\n      },\r\n    },\r\n    initialWizardData: {\r\n      intent,\r\n      selectedCampaignsById: {},\r\n      uetTags: {\r\n        both: [],\r\n        conversion: [],\r\n        visit: [],\r\n      },\r\n    },\r\n    steps: stepConfigs,\r\n  };\r\n\r\n  return (\r\n    <Wizard config={config}>\r\n      <LayoutContainer template={CustomLayoutTemplate}>\r\n        <Layout type=\"LoadingShimmer\" component={LoadingShimmer} />\r\n        <Layout type=\"StepContainer\" component={StepContainer} />\r\n        <Layout type=\"Footer\" component={LiftMeasurementStepFooter} />\r\n        <Layout type=\"CardFooter\" component={CardFooter} />\r\n        <Layout type=\"Blocker\" component={BusyBlocker} />\r\n        <Layout type=\"CancelDialog\" component={CancelWizardDialog} />\r\n      </LayoutContainer>\r\n    </Wizard>\r\n  );\r\n};\r\n\r\nLiftMeasurementWizard.propTypes = {\r\n  intent: PropTypes.oneOf([\r\n    CREATE_INTENT,\r\n    EDIT_INTENT,\r\n  ]).isRequired,\r\n  onCancel: PropTypes.func.isRequired,\r\n  onSaveAndExit: PropTypes.func.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { CREATE_INTENT, EDIT_INTENT } from './common/constants/intents';\r\nimport { LiftMeasurementWizard } from './wizard/wizard';\r\n\r\nexport const LiftMeasurementForm = ({ intent, siteMap }) => {\r\n  const { scope } = useContext(ScopeContext);\r\n\r\n  const onCancel = useCallback(() => {\r\n    const route = getRoutePathById(siteMap, 'lift-measurement');\r\n    if (intent === EDIT_INTENT) {\r\n      scope.remove('liftExperimentId');\r\n      setClarityTag({\r\n        IsCancellingEditLiftExperiment: true,\r\n      });\r\n    } else {\r\n      setClarityTag({\r\n        IsCancellingCreateLiftExperiment: true,\r\n      });\r\n    }\r\n    scope.save(route);\r\n  }, [intent, scope, siteMap]);\r\n\r\n  const onSaveAndExit = useCallback(() => {\r\n    const route = getRoutePathById(siteMap, 'lift-measurement');\r\n    if (intent === EDIT_INTENT) {\r\n      scope.remove('liftExperimentId');\r\n    }\r\n    scope.save(route);\r\n  }, [intent, scope, siteMap]);\r\n\r\n  return (\r\n    <LiftMeasurementWizard\r\n      intent={intent}\r\n      onCancel={onCancel}\r\n      onSaveAndExit={onSaveAndExit}\r\n    />\r\n  );\r\n};\r\n\r\nLiftMeasurementForm.propTypes = {\r\n  intent: PropTypes.oneOf([\r\n    CREATE_INTENT,\r\n    EDIT_INTENT,\r\n  ]).isRequired,\r\n  siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string,\r\n  })).isRequired,\r\n};\r\n","import React from 'react';\r\nimport { CREATE_INTENT } from './common/constants/intents';\r\nimport { LiftMeasurementForm } from './lift-measurement-form';\r\n\r\nexport const LiftMeasurementCreate = props => <LiftMeasurementForm {...props} intent={CREATE_INTENT} />;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext, useEffect } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { EDIT_INTENT } from './common/constants/intents';\r\nimport { LiftMeasurementForm } from './lift-measurement-form';\r\n\r\nexport const LiftMeasurementEdit = (props) => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { siteMap } = props;\r\n\r\n  useEffect(() => {\r\n    if (scope.values.liftExperimentId == null) {\r\n      const route = getRoutePathById(siteMap, 'lift-measurement');\r\n      scope.remove('liftExperimentId');\r\n      scope.save(route);\r\n    }\r\n  }, [scope, scope.values.liftExperimentId, siteMap]);\r\n\r\n  return <LiftMeasurementForm {...props} intent={EDIT_INTENT} />;\r\n};\r\n\r\nLiftMeasurementEdit.propTypes = {\r\n  siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string,\r\n  })).isRequired,\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const fetchResults = async ({\r\n  liftExperimentId,\r\n  onFailure,\r\n  onSuccess,\r\n  scope: {\r\n    values: {\r\n      aid,\r\n      cid,\r\n    },\r\n  },\r\n  fetch,\r\n}) => {\r\n  try {\r\n    const res = await fetch(`/Customers(${cid})/Accounts(${aid})/GetLiftExperimentResult(${liftExperimentId})`);\r\n    const bodyJson = await res.json();\r\n    if (res.ok) {\r\n      return onSuccess(bodyJson);\r\n    }\r\n    onFailure(res);\r\n    return null;\r\n  } catch (e) {\r\n    onFailure(e);\r\n    return null;\r\n  }\r\n};\r\n\r\nconst stringValues = [\r\n  'Confidence_BSearch',\r\n  'Confidence_Convert',\r\n  'Confidence_Visit',\r\n  'MeasurementCat',\r\n];\r\nexport const transformResults = apiData => _.reduce(apiData, (transformedResults, rootArray, rootKey) => ({\r\n  ...transformedResults,\r\n  [rootKey]: _.map(rootArray, result => _.reduce(result, (transformedResult, value, key) => ({\r\n    ...transformedResult,\r\n    [key]: stringValues.includes(key) || isNaN(Number(value))\r\n      ? value\r\n      : Number(value),\r\n  }), {})),\r\n}), {});\r\n\r\nexport const getConversionData = resultData => ({\r\n  confidence: resultData.Confidence_Convert,\r\n  control: resultData.Control_ConverterRate,\r\n  lift: resultData.Lift_Converter,\r\n  treatment: resultData.Treatment_ConverterRate,\r\n});\r\n\r\nexport const getSearchData = resultData => ({\r\n  confidence: resultData.Confidence_BSearch,\r\n  control: resultData.Control_BSearcherRate,\r\n  lift: resultData.Lift_BSearcher,\r\n  treatment: resultData.Treatment_BSearcherRate,\r\n});\r\n\r\nexport const getVisitData = resultData => ({\r\n  confidence: resultData.Confidence_Visit,\r\n  control: resultData.Control_VisitorRate,\r\n  lift: resultData.Lift_Visitor,\r\n  treatment: resultData.Treatment_VisitorRate,\r\n});\r\n\r\nexport const getAudienceResults = (resultsData) => {\r\n  const audienceResults = resultsData.TargetType_Result;\r\n  return {\r\n    conversion: audienceResults.map((audienceData, i) => ({\r\n      id: `${audienceData.TargetTypeId}-${i}`,\r\n      name: audienceData.TargetTypeId,\r\n      ...getConversionData(audienceData),\r\n    })),\r\n    search: audienceResults.map((audienceData, i) => ({\r\n      id: `${audienceData.TargetTypeId}-${i}`,\r\n      name: audienceData.TargetTypeId,\r\n      ...getSearchData(audienceData),\r\n    })),\r\n    visit: audienceResults.map((audienceData, i) => ({\r\n      id: `${audienceData.TargetTypeId}-${i}`,\r\n      name: audienceData.TargetTypeId,\r\n      ...getVisitData(audienceData),\r\n    })),\r\n  };\r\n};\r\n\r\nexport const measurementCategories = {\r\n  'Awareness-Search Lift': 'search',\r\n  'Consideration-Visit Lift': 'visit',\r\n  'Conversion-Conversion Lift': 'conversion',\r\n};\r\n\r\nexport const getBottomPerformerResults = (resultsData) => {\r\n  const bottomPerformerResults = resultsData.Bottom5_Result || [];\r\n  const allData = {\r\n    conversion: [],\r\n    search: [],\r\n    visit: [],\r\n  };\r\n  bottomPerformerResults.forEach((performerData) => {\r\n    if (measurementCategories[performerData.MeasurementCat]) {\r\n      const mappedData = {\r\n        audienceId: performerData.TargetValueId,\r\n        audienceTypeId: performerData.TargetTypeId,\r\n        rank: performerData.Rank_Lift,\r\n      };\r\n      allData[measurementCategories[performerData.MeasurementCat]].push(mappedData);\r\n    }\r\n  });\r\n  return allData;\r\n};\r\n\r\nexport const getTopPerformerResults = (resultsData) => {\r\n  const topPerformerResults = resultsData.Top5_Result;\r\n  const allData = {\r\n    conversion: [],\r\n    search: [],\r\n    visit: [],\r\n  };\r\n  topPerformerResults.forEach((performerData) => {\r\n    if (measurementCategories[performerData.MeasurementCat]) {\r\n      const mappedData = {\r\n        audienceId: performerData.TargetValueId, // This is the ID for the value shown in the \"Audience name\" column.\r\n        audienceTypeId: performerData.TargetTypeId, // This is the ID for the value shown in the \"Audience type\" column.\r\n        rank: performerData.Rank_Lift,\r\n      };\r\n      allData[measurementCategories[performerData.MeasurementCat]].push(mappedData);\r\n    }\r\n  });\r\n  // Still need to sort the data by `rank`.\r\n  return allData;\r\n};\r\n\r\nexport const getCampaignIds = (resultsData) => {\r\n  let campaignIds = [];\r\n  if (resultsData.Campaign_Result) {\r\n    campaignIds = resultsData.Campaign_Result.map(campaignData => campaignData.CampaignId);\r\n  }\r\n  return campaignIds;\r\n};\r\n\r\nexport const getCampaignResults = (resultsData, campaigns) => {\r\n  const campaignResults = resultsData.Campaign_Result;\r\n  return {\r\n    conversion: campaignResults.map(campaignData => ({\r\n      id: campaignData.CampaignId,\r\n      name: campaigns[campaignData.CampaignId].name,\r\n      ...getConversionData(campaignData),\r\n    })),\r\n    search: campaignResults.map(campaignData => ({\r\n      id: campaignData.CampaignId,\r\n      name: campaigns[campaignData.CampaignId].name,\r\n      ...getSearchData(campaignData),\r\n    })),\r\n    visit: campaignResults.map(campaignData => ({\r\n      id: campaignData.CampaignId,\r\n      name: campaigns[campaignData.CampaignId].name,\r\n      ...getVisitData(campaignData),\r\n    })),\r\n  };\r\n};\r\n\r\nexport const getOverallResults = (resultsData) => {\r\n  const overallResults = resultsData.CID_Result[0];\r\n  return {\r\n    conversion: getConversionData(overallResults),\r\n    search: getSearchData(overallResults),\r\n    visit: getVisitData(overallResults),\r\n  };\r\n};\r\n","export const confidenceLevels = {\r\n  High: _TL_('High'),\r\n  Low: _TL_('Low'),\r\n  Medium: _TL_('Medium'),\r\n};\r\n\r\nexport const getConfidenceLevel = (value) => {\r\n  if (confidenceLevels[value] == null) {\r\n    return _TL_('Invalid confidence level');\r\n  }\r\n  return confidenceLevels[value];\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableHeader,\r\n  TableHeaderCell,\r\n  TableRow,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { getConfidenceLevel } from './confidence-levels';\r\n\r\nconst useStyles = makeStyles({\r\n  helpContainer: {\r\n    alignItems: 'center',\r\n    columnGap: '5px',\r\n    display: 'flex',\r\n  },\r\n  tableHeaderCell: {\r\n    fontWeight: 'bold',\r\n  },\r\n});\r\n\r\nexport const OverviewTable = ({\r\n  items,\r\n  liftHelpTopic,\r\n  liftLabel,\r\n  primaryColumnHeader,\r\n  primaryColumnHelpTopic,\r\n  title,\r\n}) => {\r\n  const className = title.toLowerCase().replace(/ /g, '-');\r\n  const i18n = useContext(I18nContext);\r\n  const confidenceLabel = i18n.getString(_TL_('Confidence level'));\r\n  const controlLabel = i18n.getString(_TL_('Control'));\r\n  const defaultLiftLabel = i18n.getString(_TL_('Lift'));\r\n  const treatmentLabel = i18n.getString(_TL_('Treatment'));\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n  const styles = useStyles();\r\n  const columns = [\r\n    {\r\n      columnKey: 'name',\r\n      label: (\r\n        <div className={styles.helpContainer}>\r\n          <span>{primaryColumnHeader}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${primaryColumnHeader}`}\r\n            topic={primaryColumnHelpTopic}\r\n          />\r\n        </div>\r\n      ),\r\n    },\r\n    {\r\n      columnKey: 'control',\r\n      label: (\r\n        <div className={styles.helpContainer}>\r\n          <span>{controlLabel}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${controlLabel}`}\r\n            topic=\"pop_BA_Experiments_Control\"\r\n          />\r\n        </div>\r\n      ),\r\n    },\r\n    {\r\n      columnKey: 'treatment',\r\n      label: (\r\n        <div className={styles.helpContainer}>\r\n          <span>{treatmentLabel}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${treatmentLabel}`}\r\n            topic=\"pop_BA_Experiments_Treatment\"\r\n          />\r\n        </div>\r\n      ),\r\n    },\r\n    {\r\n      columnKey: 'lift',\r\n      label: (\r\n        <div className={styles.helpContainer}>\r\n          <span>{liftLabel || defaultLiftLabel}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${liftLabel || defaultLiftLabel}`}\r\n            topic={liftHelpTopic}\r\n          />\r\n        </div>\r\n      ),\r\n    },\r\n    {\r\n      columnKey: 'confidence',\r\n      label: (\r\n        <div className={styles.helpContainer}>\r\n          <span>{confidenceLabel}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${confidenceLabel}`}\r\n            topic=\"pop_BA_Experiments_Confidence\"\r\n          />\r\n        </div>\r\n      ),\r\n    },\r\n  ];\r\n  const getPercentageString = useCallback((value) => {\r\n    if (value === 'N/A') {\r\n      return '--';\r\n    }\r\n    const percentageValue = i18n.formatDecimalToFixed(value * 100, { digits: 2 });\r\n    const percentageString = i18n.getString(_TL_('{{value}}%'), {\r\n      value: percentageValue,\r\n    });\r\n    return percentageString;\r\n  }, [i18n]);\r\n\r\n  return (\r\n    <Table aria-label={title} className={`${className}-overview-table`}>\r\n      <TableHeader>\r\n        <TableRow>\r\n          {columns.map(column => (\r\n            <TableHeaderCell className={styles.tableHeaderCell} key={column.columnKey}>\r\n              {column.label}\r\n            </TableHeaderCell>\r\n          ))}\r\n        </TableRow>\r\n      </TableHeader>\r\n      <TableBody>\r\n        {items.map(item => (\r\n          <TableRow key={item.id}>\r\n            <TableCell>{item.name}</TableCell>\r\n            <TableCell>{getPercentageString(item.control)}</TableCell>\r\n            <TableCell>{getPercentageString(item.treatment)}</TableCell>\r\n            <TableCell>{getPercentageString(item.lift)}</TableCell>\r\n            <TableCell>{i18n.getString(getConfidenceLevel(item.confidence))}</TableCell>\r\n          </TableRow>\r\n        ))}\r\n      </TableBody>\r\n    </Table>\r\n  );\r\n};\r\n\r\nOverviewTable.propTypes = {\r\n  items: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  liftHelpTopic: PropTypes.string.isRequired,\r\n  liftLabel: PropTypes.string,\r\n  primaryColumnHeader: PropTypes.string.isRequired,\r\n  primaryColumnHelpTopic: PropTypes.string.isRequired,\r\n  title: PropTypes.string.isRequired,\r\n};\r\n\r\nOverviewTable.defaultProps = {\r\n  liftLabel: null,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Card,\r\n  Subtitle2,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  root: {\r\n    marginBottom: '12px',\r\n  },\r\n  row: {\r\n    alignItems: 'start',\r\n    columnGap: '10px',\r\n    display: 'grid',\r\n    gridTemplateColumns: '12% 88%',\r\n    position: 'relative',\r\n  },\r\n});\r\n\r\nconst sortByRank = (a, b) => {\r\n  if (a.rank < b.rank) {\r\n    return -1;\r\n  }\r\n  if (b.rank < a.rank) {\r\n    return 1;\r\n  }\r\n  return 0;\r\n};\r\n\r\nconst PerformersList = ({ data, label }) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const sortedData = useMemo(() => {\r\n    if (data) {\r\n      return [...data].sort(sortByRank);\r\n    }\r\n    return null;\r\n  }, [data]);\r\n\r\n  if (!sortedData) {\r\n    return null;\r\n  }\r\n\r\n  const delimiter = i18n.getString(_TL_(', '));\r\n  const list = sortedData.map(performer => (\r\n    `${performer.audienceId} (${performer.audienceTypeId})`\r\n  )).join(delimiter);\r\n\r\n  return (\r\n    <div className={styles.row}>\r\n      <span>{label}</span>\r\n      <span>{list}</span>\r\n    </div>\r\n  );\r\n};\r\n\r\nPerformersList.propTypes = {\r\n  data: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })),\r\n  label: PropTypes.string.isRequired,\r\n};\r\n\r\nPerformersList.defaultProps = {\r\n  data: null,\r\n};\r\n\r\nexport const PositivePerformingAudiencesCard = ({ bottomData, topData }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const title = i18n.getString(_TL_('Audience performance'));\r\n  const highLabel = i18n.getString(_TL_('High-performing'));\r\n  const lowLabel = i18n.getString(_TL_('Low-performing'));\r\n  const styles = useStyles();\r\n\r\n  return (\r\n    <div className=\"audience-performance\">\r\n      <Card className={styles.root}>\r\n        <Subtitle2>{title}</Subtitle2>\r\n        <PerformersList\r\n          data={topData}\r\n          label={highLabel}\r\n        />\r\n        {bottomData.length > 0 && (\r\n          <PerformersList\r\n            data={bottomData}\r\n            label={lowLabel}\r\n          />\r\n        )}\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nPositivePerformingAudiencesCard.propTypes = {\r\n  bottomData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })),\r\n  topData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n};\r\n\r\nPositivePerformingAudiencesCard.defaultProps = {\r\n  bottomData: null,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Accordion,\r\n  AccordionHeader,\r\n  AccordionItem,\r\n  AccordionPanel,\r\n  Card,\r\n  Subtitle1,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { OverviewTable } from './overview-table';\r\nimport { PositivePerformingAudiencesCard } from './positive-performing-audiences-card';\r\n\r\nconst useStyles = makeStyles({\r\n  accordionHeader: {\r\n    fontWeight: '600',\r\n  },\r\n  card: {\r\n    paddingBottom: '24px',\r\n  },\r\n  heading: {\r\n    marginTop: '36px !important',\r\n  },\r\n});\r\n\r\nconst layoutTokens = {\r\n  childrenGap: 15,\r\n};\r\n\r\nexport const AudienceOverviewSection = ({\r\n  conversionBottomPerformerData,\r\n  conversionData,\r\n  conversionTopPerformerData,\r\n  measurementTypes,\r\n  searchBottomPerformerData,\r\n  searchData,\r\n  searchTopPerformerData,\r\n  visitBottomPerformerData,\r\n  visitData,\r\n  visitTopPerformerData,\r\n}) => {\r\n  const [openItems, setOpenItems] = useState([1]);\r\n  const onToggle = useCallback((event, data) => {\r\n    setOpenItems(data.openItems);\r\n  }, []);\r\n\r\n  const styles = useStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const sectionTitle = i18n.getString(_TL_('Audience overview'));\r\n  const searchLiftTitle = i18n.getString(_TL_('Search lift'));\r\n  const visitLiftTitle = i18n.getString(_TL_('Visit lift'));\r\n  const conversionLiftTitle = i18n.getString(_TL_('Conversion lift'));\r\n  const audienceTypeColumnHeader = i18n.getString(_TL_('Audience type'));\r\n  const { useConversionLift, useSearchLift, useVisitLift } = measurementTypes;\r\n\r\n  return (\r\n    <>\r\n      <Subtitle1 className={styles.heading}>{sectionTitle}</Subtitle1>\r\n      <Accordion\r\n        collapsible\r\n        multiple\r\n        onToggle={onToggle}\r\n        openItems={openItems}\r\n      >\r\n        {useSearchLift && (\r\n          <AccordionItem value={1} className=\"search-lift\">\r\n            <AccordionHeader as=\"h5\" size=\"large\">\r\n              <span className={styles.accordionHeader}>\r\n                {searchLiftTitle}\r\n              </span>\r\n            </AccordionHeader>\r\n            <AccordionPanel>\r\n              <Stack tokens={layoutTokens}>\r\n                <Card className={styles.card}>\r\n                  <OverviewTable\r\n                    items={searchData}\r\n                    liftHelpTopic=\"pop_BA_Experiments_Audiences_SearchLift\"\r\n                    primaryColumnHeader={audienceTypeColumnHeader}\r\n                    primaryColumnHelpTopic=\"pop_BA_Experiments_AudienceListType\"\r\n                    title={searchLiftTitle}\r\n                  />\r\n                </Card>\r\n                <PositivePerformingAudiencesCard\r\n                  bottomData={searchBottomPerformerData}\r\n                  topData={searchTopPerformerData}\r\n                />\r\n              </Stack>\r\n            </AccordionPanel>\r\n          </AccordionItem>\r\n        )}\r\n        {useVisitLift && (\r\n          <AccordionItem value={2} className=\"visit-lift\">\r\n            <AccordionHeader as=\"h5\" size=\"large\">\r\n              <span className={styles.accordionHeader}>\r\n                {visitLiftTitle}\r\n              </span>\r\n            </AccordionHeader>\r\n            <AccordionPanel>\r\n              <Stack tokens={layoutTokens}>\r\n                <Card className={styles.card}>\r\n                  <OverviewTable\r\n                    items={visitData}\r\n                    liftHelpTopic=\"pop_BA_Experiments_Audiences_VisitsLift\"\r\n                    primaryColumnHeader={audienceTypeColumnHeader}\r\n                    primaryColumnHelpTopic=\"pop_BA_Experiments_AudienceListType\"\r\n                    title={visitLiftTitle}\r\n                  />\r\n                </Card>\r\n                <PositivePerformingAudiencesCard\r\n                  bottomData={visitBottomPerformerData}\r\n                  topData={visitTopPerformerData}\r\n                />\r\n              </Stack>\r\n            </AccordionPanel>\r\n          </AccordionItem>\r\n        )}\r\n        {useConversionLift && (\r\n          <AccordionItem value={3} className=\"conversion-lift\">\r\n            <AccordionHeader as=\"h5\" size=\"large\">\r\n              <span className={styles.accordionHeader}>\r\n                {conversionLiftTitle}\r\n              </span>\r\n            </AccordionHeader>\r\n            <AccordionPanel>\r\n              <Stack tokens={layoutTokens}>\r\n                <Card className={styles.card}>\r\n                  <OverviewTable\r\n                    items={conversionData}\r\n                    liftHelpTopic=\"pop_BA_Experiments_Audiences_ConversionLift\"\r\n                    primaryColumnHeader={audienceTypeColumnHeader}\r\n                    primaryColumnHelpTopic=\"pop_BA_Experiments_AudienceListType\"\r\n                    title={conversionLiftTitle}\r\n                  />\r\n                </Card>\r\n                <PositivePerformingAudiencesCard\r\n                  bottomData={conversionBottomPerformerData}\r\n                  topData={conversionTopPerformerData}\r\n                />\r\n              </Stack>\r\n            </AccordionPanel>\r\n          </AccordionItem>\r\n        )}\r\n      </Accordion>\r\n    </>\r\n  );\r\n};\r\n\r\nAudienceOverviewSection.propTypes = {\r\n  conversionBottomPerformerData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })),\r\n  conversionData: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  conversionTopPerformerData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  measurementTypes: PropTypes.shape({\r\n    useConversionLift: PropTypes.bool.isRequired,\r\n    useSearchLift: PropTypes.bool.isRequired,\r\n    useVisitLift: PropTypes.bool.isRequired,\r\n  }).isRequired,\r\n  searchBottomPerformerData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })),\r\n  searchData: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  searchTopPerformerData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  visitBottomPerformerData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })),\r\n  visitData: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  visitTopPerformerData: PropTypes.arrayOf(PropTypes.shape({\r\n    audienceId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    audienceTypeId: PropTypes.oneOfType([\r\n      PropTypes.number,\r\n      PropTypes.string,\r\n    ]).isRequired,\r\n    rank: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n};\r\n\r\nAudienceOverviewSection.defaultProps = {\r\n  conversionBottomPerformerData: null,\r\n  searchBottomPerformerData: null,\r\n  visitBottomPerformerData: null,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Card,\r\n  Subtitle1,\r\n  Subtitle2,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { OverviewTable } from './overview-table';\r\n\r\nconst useStyles = makeStyles({\r\n  card: {\r\n    marginBottom: '12px',\r\n    paddingBottom: '24px',\r\n  },\r\n  cards: {\r\n    marginTop: '15px',\r\n  },\r\n  heading: {\r\n    marginTop: '24px !important',\r\n  },\r\n});\r\n\r\nexport const CampaignOverviewSection = ({\r\n  conversionData,\r\n  measurementTypes,\r\n  searchData,\r\n  visitData,\r\n}) => {\r\n  const styles = useStyles();\r\n\r\n  const i18n = useContext(I18nContext);\r\n  const sectionTitle = i18n.getString(_TL_('Campaign overview'));\r\n  const searchLiftTitle = i18n.getString(_TL_('Search lift'));\r\n  const visitLiftTitle = i18n.getString(_TL_('Visit lift'));\r\n  const conversionLiftTitle = i18n.getString(_TL_('Conversion lift'));\r\n  const campaignNameColumnHeader = i18n.getString(_TL_('Campaign'));\r\n  const { useConversionLift, useSearchLift, useVisitLift } = measurementTypes;\r\n\r\n  return (\r\n    <div className=\"campaign-overview\">\r\n      <Subtitle1 className={styles.heading}>{sectionTitle}</Subtitle1>\r\n      <div className={styles.cards}>\r\n        {useSearchLift && (\r\n          <Card className={styles.card}>\r\n            <Subtitle2>{searchLiftTitle}</Subtitle2>\r\n            <OverviewTable\r\n              items={searchData}\r\n              liftHelpTopic=\"pop_BA_Experiments_Campaigns_SearchLift\"\r\n              primaryColumnHeader={campaignNameColumnHeader}\r\n              primaryColumnHelpTopic=\"pop_BA_Experiments_LiftCampaignName\"\r\n              title={searchLiftTitle}\r\n            />\r\n          </Card>\r\n        )}\r\n        {useVisitLift && (\r\n          <Card className={styles.card}>\r\n            <Subtitle2>{visitLiftTitle}</Subtitle2>\r\n            <OverviewTable\r\n              items={visitData}\r\n              liftHelpTopic=\"pop_BA_Experiments_Campaigns_VisitLift\"\r\n              primaryColumnHeader={campaignNameColumnHeader}\r\n              primaryColumnHelpTopic=\"pop_BA_Experiments_LiftCampaignName\"\r\n              title={visitLiftTitle}\r\n            />\r\n          </Card>\r\n        )}\r\n        {useConversionLift && (\r\n          <Card className={styles.card}>\r\n            <Subtitle2>{conversionLiftTitle}</Subtitle2>\r\n            <OverviewTable\r\n              items={conversionData}\r\n              liftHelpTopic=\"pop_BA_Experiments_Campaigns_ConversionLift\"\r\n              primaryColumnHeader={campaignNameColumnHeader}\r\n              primaryColumnHelpTopic=\"pop_BA_Experiments_LiftCampaignName\"\r\n              title={conversionLiftTitle}\r\n            />\r\n          </Card>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nCampaignOverviewSection.propTypes = {\r\n  conversionData: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  measurementTypes: PropTypes.shape({\r\n    useConversionLift: PropTypes.bool.isRequired,\r\n    useSearchLift: PropTypes.bool.isRequired,\r\n    useVisitLift: PropTypes.bool.isRequired,\r\n  }).isRequired,\r\n  searchData: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n  visitData: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    name: PropTypes.string.isRequired,\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  })).isRequired,\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n  helpContainer: {\r\n    alignItems: 'center',\r\n    columnGap: '5px',\r\n    display: 'flex',\r\n  },\r\n  card: {\r\n    borderBottomStyle: 'solid',\r\n    borderBottomWidth: '0px',\r\n    borderLeftStyle: 'solid',\r\n    borderLeftWidth: '5px',\r\n    borderRightStyle: 'solid',\r\n    borderRightWidth: '0px',\r\n    borderTopStyle: 'solid',\r\n    borderTopWidth: '0px',\r\n  },\r\n  label: {\r\n    alignItems: 'center',\r\n    columnGap: '5px',\r\n    display: 'flex',\r\n  },\r\n});\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Body1,\r\n  Title2,\r\n} from '@fluentui/react-components';\r\nimport { useStyles } from './styles';\r\n\r\nexport const Lift = ({\r\n  color,\r\n  helpTopic,\r\n  label,\r\n  value,\r\n}) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const displayedValue = Number.isFinite(value)\r\n    ? i18n.getString(_TL_('{{percentage}}%'), {\r\n      percentage: Math.round(value * 100),\r\n    })\r\n    : i18n.getString(_TL_('--'));\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n\r\n  return (\r\n    <Stack>\r\n      <div className={styles.label}>\r\n        <Body1>{label}</Body1>\r\n        <HelpButton\r\n          aria-label={`${learnMore} ${label}`}\r\n          topic={helpTopic}\r\n        />\r\n      </div>\r\n      <Title2 style={{ color }}>\r\n        {displayedValue}\r\n      </Title2>\r\n    </Stack>\r\n  );\r\n};\r\n\r\nLift.propTypes = {\r\n  color: PropTypes.string.isRequired,\r\n  helpTopic: PropTypes.string.isRequired,\r\n  label: PropTypes.string.isRequired,\r\n  value: PropTypes.number.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Caption1,\r\n  Caption1Strong,\r\n} from '@fluentui/react-components';\r\nimport { useStyles } from './styles';\r\n\r\nexport const ConfidenceLevel = ({ value }) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const label = i18n.getString(_TL_('Confidence level'));\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n\r\n  return (\r\n    <Stack>\r\n      <div className={styles.label}>\r\n        <Caption1>{label}</Caption1>\r\n        <HelpButton\r\n          aria-label={`${learnMore} ${label}`}\r\n          topic=\"pop_BA_Experiments_Confidence\"\r\n        />\r\n      </div>\r\n      <Caption1Strong>{value}</Caption1Strong>\r\n    </Stack>\r\n  );\r\n};\r\n\r\nConfidenceLevel.propTypes = {\r\n  value: PropTypes.string.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HorizontalBarChart } from '@fluentui/react-charting';\r\nimport { useStyles } from './styles';\r\n\r\nconst dataVizColors = {\r\n  control: '#637CEF',\r\n  conversion: '#CA5010',\r\n  search: '#9373C0',\r\n  visit: '#E3008C',\r\n};\r\n\r\nconst getPercentageString = (value, i18n) => {\r\n  if (value === 'N/A') {\r\n    return '--';\r\n  }\r\n  const percentageValue = i18n.formatDecimalToFixed(value * 100, { digits: 2 });\r\n  return i18n.getString(_TL_('{{value}}%'), {\r\n    value: percentageValue,\r\n  });\r\n};\r\n\r\nconst CustomDataLabel = ({ chartData }) => {\r\n  const i18n = useContext(I18nContext);\r\n  const rawValue = chartData[0].horizontalBarChartdata.x;\r\n  return getPercentageString(rawValue, i18n);\r\n};\r\n\r\nCustomDataLabel.propTypes = {\r\n  chartData: PropTypes.arrayOf(PropTypes.shape({\r\n    horizontalBarChartdata: PropTypes.shape({\r\n      x: PropTypes.number.isRequired,\r\n      y: PropTypes.number.isRequired,\r\n    }).isRequired,\r\n  })).isRequired,\r\n};\r\n\r\nexport const TreatmentControl = ({\r\n  color,\r\n  control,\r\n  treatment,\r\n}) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const treatmentLabel = i18n.getString(_TL_('Treatment'));\r\n  const controlLabel = i18n.getString(_TL_('Control'));\r\n  const learnMore = i18n.getString(_TL_('Click to learn more about'));\r\n  const maxValue = treatment > control ? treatment : control;\r\n\r\n  const data = [\r\n    {\r\n      chartData: [\r\n        {\r\n          color,\r\n          horizontalBarChartdata: { x: treatment, y: maxValue },\r\n          legend: treatmentLabel,\r\n          yAxisCalloutData: getPercentageString(treatment, i18n),\r\n        },\r\n      ],\r\n      chartTitle: (\r\n        <span className={styles.label}>\r\n          <span>{treatmentLabel}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${treatmentLabel}`}\r\n            topic=\"pop_BA_Experiments_Treatment\"\r\n          />\r\n        </span>\r\n      ),\r\n    },\r\n    {\r\n      chartData: [\r\n        {\r\n          color: dataVizColors.control,\r\n          horizontalBarChartdata: { x: control, y: maxValue },\r\n          legend: controlLabel,\r\n          yAxisCalloutData: getPercentageString(control, i18n),\r\n        },\r\n      ],\r\n      chartTitle: (\r\n        <span className={styles.label}>\r\n          <span>{controlLabel}</span>\r\n          <HelpButton\r\n            aria-label={`${learnMore} ${controlLabel}`}\r\n            topic=\"pop_BA_Experiments_Control\"\r\n          />\r\n        </span>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const getCustomDataLabel = useCallback(props => (\r\n    <CustomDataLabel {...props} />\r\n  ), []);\r\n\r\n  return (\r\n    <HorizontalBarChart\r\n      barChartCustomData={getCustomDataLabel}\r\n      data={data}\r\n    />\r\n  );\r\n};\r\n\r\nTreatmentControl.propTypes = {\r\n  color: PropTypes.string.isRequired,\r\n  control: PropTypes.number.isRequired,\r\n  treatment: PropTypes.number.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport {\r\n  Card,\r\n  Subtitle1,\r\n} from '@fluentui/react-components';\r\nimport { Lift } from './lift';\r\nimport { ConfidenceLevel } from './confidence-level';\r\nimport { TreatmentControl } from './treatment-control';\r\nimport { useStyles } from './styles';\r\n\r\nexport const PerformanceCard = ({\r\n  color,\r\n  confidence,\r\n  control,\r\n  lift,\r\n  liftHelpTopic,\r\n  subtitle,\r\n  title,\r\n  treatment,\r\n}) => {\r\n  const styles = useStyles();\r\n  const className = `${title.toLowerCase().replace(/ /g, '-')}-overview`;\r\n\r\n  return (\r\n    <div className={className}>\r\n      <Card\r\n        className={styles.card}\r\n        orientation=\"horizontal\"\r\n        style={{ borderColor: color }}\r\n      >\r\n        <section>\r\n          <Subtitle1>{title}</Subtitle1>\r\n          <Lift\r\n            color={color}\r\n            helpTopic={liftHelpTopic}\r\n            label={subtitle}\r\n            value={lift}\r\n          />\r\n          <ConfidenceLevel value={confidence} />\r\n        </section>\r\n        <section>\r\n          <TreatmentControl\r\n            color={color}\r\n            control={control}\r\n            treatment={treatment}\r\n          />\r\n        </section>\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nPerformanceCard.propTypes = {\r\n  color: PropTypes.string.isRequired,\r\n  confidence: PropTypes.string.isRequired,\r\n  control: PropTypes.number.isRequired,\r\n  lift: PropTypes.number.isRequired,\r\n  liftHelpTopic: PropTypes.string.isRequired,\r\n  subtitle: PropTypes.string.isRequired,\r\n  title: PropTypes.string.isRequired,\r\n  treatment: PropTypes.number.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Subtitle1,\r\n} from '@fluentui/react-components';\r\nimport { PerformanceCard } from './performance-card/performance-card';\r\n\r\nconst dataVizColors = {\r\n  conversion: '#CA5010',\r\n  search: '#9373C0',\r\n  visit: '#E3008C',\r\n};\r\n\r\nconst tokens = {\r\n  childrenGap: 15,\r\n};\r\n\r\nexport const ExperimentOverviewSection = ({\r\n  conversionData,\r\n  measurementTypes,\r\n  searchData,\r\n  visitData,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const sectionTitle = i18n.getString(_TL_('Overview'));\r\n  const searchTitle = i18n.getString(_TL_('Search lift'));\r\n  const searchSubtitle = i18n.getString(_TL_('Brand search rate'));\r\n  const visitTitle = i18n.getString(_TL_('Visit lift'));\r\n  const visitSubtitle = i18n.getString(_TL_('Website visitation rate'));\r\n  const conversionTitle = i18n.getString(_TL_('Conversion lift'));\r\n  const conversionSubtitle = i18n.getString(_TL_('Conversion rate'));\r\n  const { useConversionLift, useSearchLift, useVisitLift } = measurementTypes;\r\n\r\n  return (\r\n    <>\r\n      <Subtitle1>{sectionTitle}</Subtitle1>\r\n      <Stack horizontal tokens={tokens}>\r\n        {useSearchLift && (\r\n          <PerformanceCard\r\n            color={dataVizColors.search}\r\n            liftHelpTopic=\"pop_BA_Experiments_Awareness\"\r\n            subtitle={searchSubtitle}\r\n            title={searchTitle}\r\n            {...searchData}\r\n          />\r\n        )}\r\n        {useVisitLift && (\r\n          <PerformanceCard\r\n            color={dataVizColors.visit}\r\n            liftHelpTopic=\"pop_BA_Experiments_Consideration\"\r\n            subtitle={visitSubtitle}\r\n            title={visitTitle}\r\n            {...visitData}\r\n          />\r\n        )}\r\n        {useConversionLift && (\r\n          <PerformanceCard\r\n            color={dataVizColors.conversion}\r\n            liftHelpTopic=\"pop_BA_Experiments_Conversions\"\r\n            subtitle={conversionSubtitle}\r\n            title={conversionTitle}\r\n            {...conversionData}\r\n          />\r\n        )}\r\n      </Stack>\r\n    </>\r\n  );\r\n};\r\n\r\nExperimentOverviewSection.propTypes = {\r\n  conversionData: PropTypes.shape({\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  }).isRequired,\r\n  measurementTypes: PropTypes.shape({\r\n    useConversionLift: PropTypes.bool.isRequired,\r\n    useSearchLift: PropTypes.bool.isRequired,\r\n    useVisitLift: PropTypes.bool.isRequired,\r\n  }).isRequired,\r\n  searchData: PropTypes.shape({\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  }).isRequired,\r\n  visitData: PropTypes.shape({\r\n    confidence: PropTypes.string.isRequired,\r\n    control: PropTypes.number.isRequired,\r\n    lift: PropTypes.number.isRequired,\r\n    treatment: PropTypes.number.isRequired,\r\n  }).isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Button,\r\n  Menu,\r\n  MenuItem,\r\n  MenuList,\r\n  MenuPopover,\r\n  MenuTrigger,\r\n  Title3,\r\n} from '@fluentui/react-components';\r\nimport { ArrowDownload20Filled } from '@fluentui/react-icons';\r\n\r\nexport const DownloadMenu = ({\r\n  onClickExcel,\r\n  onClickJson,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const downloadLabel = i18n.getString(_TL_('Download'));\r\n  const excelLabel = i18n.getString(_TL_('Excel'));\r\n  const jsonLabel = i18n.getString(_TL_('JSON'));\r\n\r\n  return (\r\n    <Menu>\r\n      <MenuTrigger disableButtonEnhancement>\r\n        <Button>\r\n          <ArrowDownload20Filled />\r\n          {downloadLabel}\r\n        </Button>\r\n      </MenuTrigger>\r\n      <MenuPopover>\r\n        <MenuList>\r\n          <MenuItem onClick={onClickExcel}>{excelLabel}</MenuItem>\r\n          <MenuItem onClick={onClickJson}>{jsonLabel}</MenuItem>\r\n        </MenuList>\r\n      </MenuPopover>\r\n    </Menu>\r\n  );\r\n};\r\n\r\nDownloadMenu.propTypes = {\r\n  onClickExcel: PropTypes.func.isRequired,\r\n  onClickJson: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ResultsPageHeader = ({\r\n  onClickExcel,\r\n  title,\r\n}) => {\r\n  const i18n = useContext(I18nContext);\r\n  const pageDescription = i18n.getString(_TL_('View your reports for conversion lift, search lift, and visit lift. We report specific data points for each lift measurement type: Conversion rate, brand search rate, and website visitation rate. These measurements help you understand how much more likely consumers are to search for your brand, visit your website, and convert on your website after seeing your Audience ads.'));\r\n  const downloadLabel = i18n.getString(_TL_('Download'));\r\n\r\n  return (\r\n    <div className=\"results-page-header\">\r\n      <Stack horizontal horizontalAlign=\"space-between\">\r\n        <Title3>{title}</Title3>\r\n        <Button onClick={onClickExcel} className=\"download-results-btn\">\r\n          <ArrowDownload20Filled />\r\n          {downloadLabel}\r\n        </Button>\r\n      </Stack>\r\n      <p>\r\n        <LearnMoreLink\r\n          linkText={i18n.getString(_TL_('Learn more'))}\r\n          text={pageDescription}\r\n          topic=\"app54859\"\r\n        />\r\n      </p>\r\n    </div>\r\n  );\r\n};\r\n\r\nResultsPageHeader.propTypes = {\r\n  onClickExcel: PropTypes.func.isRequired,\r\n  title: PropTypes.string.isRequired,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext, useMemo } from 'react';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n  Card,\r\n  Skeleton,\r\n  SkeletonItem,\r\n  Subtitle1,\r\n  Text,\r\n  makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { countries } from '../common/countries';\r\n\r\nconst useStyles = makeStyles({\r\n  card: {\r\n    marginBottom: '12px',\r\n  },\r\n  field: {\r\n    display: 'table-row',\r\n  },\r\n  fields: {\r\n    borderSpacing: '1em',\r\n    display: 'table',\r\n  },\r\n  label: {\r\n    display: 'table-cell',\r\n    minWidth: '136px',\r\n    whiteSpace: 'nowrap',\r\n  },\r\n  labelContents: {\r\n    columnGap: '5px',\r\n    display: 'flex',\r\n  },\r\n  value: {\r\n    display: 'table-cell',\r\n  },\r\n});\r\n\r\nconst StudySummaryCardField = ({\r\n  helpTopic,\r\n  label,\r\n  value,\r\n}) => {\r\n  const styles = useStyles();\r\n  return (\r\n    <section className={styles.field}>\r\n      <div className={styles.label}>\r\n        <div className={styles.labelContents}>\r\n          <Text weight=\"bold\">{label}</Text>\r\n          {!!helpTopic && (\r\n            <HelpButton\r\n              aria-label={label}\r\n              topic={helpTopic}\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n      <div className={styles.value}>\r\n        <Text>{value}</Text>\r\n      </div>\r\n    </section>\r\n  );\r\n};\r\n\r\nStudySummaryCardField.propTypes = {\r\n  helpTopic: PropTypes.string,\r\n  label: PropTypes.string.isRequired,\r\n  value: PropTypes.string.isRequired,\r\n};\r\n\r\nStudySummaryCardField.defaultProps = {\r\n  helpTopic: null,\r\n};\r\n\r\nexport const StudySummaryCard = ({\r\n  campaigns,\r\n  country,\r\n  endDate,\r\n  keywords,\r\n  startDate,\r\n  uetTags,\r\n}) => {\r\n  const styles = useStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const cardTitle = i18n.getString(_TL_('Summary'));\r\n  const campaignsLabel = i18n.getString(_TL_('Campaigns'));\r\n  const campaignsValue = useMemo(() => campaigns.map(campaign => campaign.name).join(i18n.getString(_TL_(', '))), [campaigns, i18n]);\r\n  const countryLabel = i18n.getString(_TL_('Country'));\r\n  const countryValue = i18n.getString(countries[country].name);\r\n  const dateRangeLabel = i18n.getString(_TL_('Experiment dates'));\r\n  const dateRangeValue = i18n.getString(_TL_('{{startDate}} - {{endDate}}'), {\r\n    startDate: i18n.formatDate(new Date(startDate), { raw: 'MM/dd/yy' }),\r\n    endDate: i18n.formatDate(new Date(endDate), { raw: 'MM/dd/yy' }),\r\n  });\r\n  const keywordsLabel = i18n.getString(_TL_('Keywords'));\r\n  const keywordsValue = useMemo(\r\n    () => (\r\n      keywords.length\r\n        ? keywords.join(i18n.getString(_TL_(', ')))\r\n        : i18n.getString(_TL_('None selected'))\r\n    ),\r\n    [keywords, i18n]\r\n  );\r\n  const uetTagsLabel = i18n.getString(_TL_('UET Tags'));\r\n  const uetTagsValue = useMemo(\r\n    () => (\r\n      uetTags.length\r\n        ? uetTags.join(i18n.getString(_TL_(', ')))\r\n        : i18n.getString(_TL_('None selected'))\r\n    ),\r\n    [i18n, uetTags]\r\n  );\r\n\r\n  return (\r\n    <div className=\"study-summary-card\">\r\n      <Card className={styles.card}>\r\n        <Subtitle1>{cardTitle}</Subtitle1>\r\n        <section className={styles.fields}>\r\n          <StudySummaryCardField\r\n            helpTopic=\"pop_BA_Experiments_Campaigns\"\r\n            label={campaignsLabel}\r\n            value={campaignsValue}\r\n          />\r\n          <StudySummaryCardField\r\n            helpTopic=\"pop_BA_Experiments_Country\"\r\n            label={countryLabel}\r\n            value={countryValue}\r\n          />\r\n          <StudySummaryCardField\r\n            helpTopic=\"pop_BA_Experiments_Dates\"\r\n            label={dateRangeLabel}\r\n            value={dateRangeValue}\r\n          />\r\n          <StudySummaryCardField\r\n            label={keywordsLabel}\r\n            value={keywordsValue}\r\n          />\r\n          <StudySummaryCardField\r\n            label={uetTagsLabel}\r\n            value={uetTagsValue}\r\n          />\r\n        </section>\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nStudySummaryCard.propTypes = {\r\n  campaigns: PropTypes.arrayOf(PropTypes.shape({\r\n    name: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n  country: PropTypes.string.isRequired,\r\n  endDate: PropTypes.string.isRequired,\r\n  keywords: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n  startDate: PropTypes.string.isRequired,\r\n  uetTags: PropTypes.arrayOf(PropTypes.oneOfType([\r\n    PropTypes.number,\r\n    PropTypes.string,\r\n  ])).isRequired,\r\n};\r\n\r\nconst useSkeletonStyles = makeStyles({\r\n  card: {\r\n    marginBottom: '12px',\r\n  },\r\n  firstRow: {\r\n    alignItems: 'center',\r\n    columnGap: '20px',\r\n    display: 'grid',\r\n    gridTemplateColumns: '17% 42%',\r\n    position: 'relative',\r\n    rowGap: '12px',\r\n  },\r\n  row: {\r\n    alignItems: 'center',\r\n    columnGap: '20px',\r\n    display: 'grid',\r\n    gridTemplateColumns: '17% 17%',\r\n    paddingTop: '20px',\r\n    position: 'relative',\r\n    rowGap: '12px',\r\n  },\r\n  skeletonRoot: {\r\n    marginBottom: '12px',\r\n    marginLeft: '12px',\r\n    marginRight: '12px',\r\n    marginTop: '12px',\r\n  },\r\n});\r\n\r\nexport const StudySummaryCardSkeleton = () => {\r\n  const styles = useSkeletonStyles();\r\n  const i18n = useContext(I18nContext);\r\n  const loadingMessage = i18n.getString(_TL_('Loading content'));\r\n  const cardTitle = i18n.getString(_TL_('Experiment summary'));\r\n\r\n  return (\r\n    <Card className={styles.card}>\r\n      <Subtitle1>{cardTitle}</Subtitle1>\r\n      <Skeleton aria-label={loadingMessage} className={styles.skeletonRoot}>\r\n        <div className={styles.firstRow}>\r\n          <SkeletonItem size={20} />\r\n          <SkeletonItem size={20} />\r\n        </div>\r\n        <div className={styles.row}>\r\n          <SkeletonItem size={20} />\r\n          <SkeletonItem size={20} />\r\n        </div>\r\n        <div className={styles.row}>\r\n          <SkeletonItem size={20} />\r\n          <SkeletonItem size={20} />\r\n        </div>\r\n      </Skeleton>\r\n    </Card>\r\n  );\r\n};\r\n","import XLSX from 'xlsx';\r\nimport { downloadify } from '@bingads-webui/download-service';\r\n\r\nconst getDateString = () => new Date().toISOString().split('T')[0];\r\n\r\nconst getFileName = (id, extension) => {\r\n  const dateString = getDateString();\r\n  return `Lift_Experiment_Result_${id}_${dateString}.${extension}`;\r\n};\r\n\r\nconst addWorksheet = (results, workbook, sheetName) => {\r\n  if (results && results.length > 0) {\r\n    const worksheet = XLSX.utils.json_to_sheet(results);\r\n    XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);\r\n  }\r\n};\r\n\r\nexport const downloadExcel = (id, data) => {\r\n  const workbook = XLSX.utils.book_new();\r\n  const fileName = getFileName(id, 'xlsx');\r\n\r\n  addWorksheet(data.Campaign_Result, workbook, 'CampaignResult');\r\n  addWorksheet(data.CID_Result, workbook, 'CIDResult');\r\n  addWorksheet(data.TargetType_Result, workbook, 'TargetTypeResult');\r\n  addWorksheet(data.Top5_Result, workbook, 'Top5Result');\r\n  addWorksheet(data.Bottom5_Result, workbook, 'Bottom5Result');\r\n\r\n  XLSX.writeFile(workbook, fileName);\r\n\r\n  return true;\r\n};\r\n\r\nexport const downloadJson = (id, data) => {\r\n  const fileName = getFileName(id, 'json');\r\n  const dataString = JSON.stringify(data);\r\n  downloadify(fileName, dataString, { type: 'text/json' });\r\n\r\n  return true;\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\r\nimport { notificationApi } from '@bingads-webui-campaign/notification-center';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useFetch } from '@bingads-webui-campaign/react-hook-use-fetch';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport {\r\n  Title3,\r\n} from '@fluentui/react-components';\r\nimport { fetchExperiment, parseMeasurementTypeEnum } from './fetch/experiment';\r\nimport { fetchCampaignsByIdEDM } from './fetch/campaigns';\r\nimport { fetchUetTags, getFetchedTagCollections } from './fetch/uet';\r\nimport {\r\n  getAudienceResults,\r\n  getBottomPerformerResults,\r\n  getCampaignResults,\r\n  getOverallResults,\r\n  getTopPerformerResults,\r\n  transformResults,\r\n  getCampaignIds,\r\n  fetchResults,\r\n} from './fetch/result';\r\nimport { AudienceOverviewSection } from './results/audience-overview-section';\r\nimport { CampaignOverviewSection } from './results/campaign-overview-section';\r\nimport { ExperimentOverviewSection } from './results/experiment-overview-section';\r\nimport { ResultsPageHeader } from './results/page-header';\r\nimport { StudySummaryCard } from './results/study-summary-card';\r\nimport { downloadExcel } from './utils/download';\r\n\r\nconst mainLayoutTokens = {\r\n  childrenGap: 15,\r\n  padding: 30,\r\n};\r\n\r\nexport const LiftMeasurementResultsInternal = ({ siteMap }) => {\r\n  const { scope } = useContext(ScopeContext);\r\n  const { fetch } = useFetch();\r\n\r\n  const [isLoading, setIsLoading] = useState(true);\r\n  const [experimentName, setExperimentName] = useState('');\r\n  const [campaignsAsArray, setCampaignsAsArray] = useState([]);\r\n  const [country, setCountry] = useState(null);\r\n  const [startDate, setStartDate] = useState(null);\r\n  const [endDate, setEndDate] = useState(null);\r\n  const [measurementTypes, setMeasurementTypes] = useState({\r\n    useConversionLift: false,\r\n    useSearchLift: false,\r\n    useVisitLift: false,\r\n  });\r\n  const [keywords, setKeywords] = useState([]);\r\n  const [uetTags, setUetTags] = useState([]);\r\n  const [overallResults, setOverallResults] = useState({});\r\n  const [audienceResults, setAudienceResults] = useState({});\r\n  const [topPerformerResults, setTopPerformerResults] = useState({});\r\n  const [bottomPerformerResults, setBottomPerformerResults] = useState({});\r\n  const [campaignResults, setCampaignResults] = useState({});\r\n  const [liftStudyResults, setLiftStudyResults] = useState();\r\n\r\n  const fetchCampaigns = useCallback(async (studyResults) => {\r\n    try {\r\n      const campaignIds = getCampaignIds(studyResults);\r\n      const results = campaignIds.length > 0 ? await fetchCampaignsByIdEDM(scope.values, campaignIds) : null;\r\n\r\n      if (!results || !results.value) return;\r\n\r\n      const transformedCampaigns = results.value.reduce((acc, result) => {\r\n        acc[result.Id] = { name: result.Name, id: result.Id };\r\n        return acc;\r\n      }, {});\r\n\r\n      setCampaignsAsArray(Object.values(transformedCampaigns));\r\n      setCampaignResults(getCampaignResults(studyResults, transformedCampaigns));\r\n    } catch (e) {\r\n      console.log('Error fetching campaigns');\r\n      console.log(e);\r\n    }\r\n  }, [scope.values]);\r\n\r\n  const i18n = useContext(I18nContext);\r\n\r\n  const fetchLiftStudyResults = useCallback(async liftExperimentId => fetchResults({\r\n    liftExperimentId,\r\n    scope,\r\n    fetch,\r\n    onSuccess: (response) => {\r\n      setClarityTag({\r\n        IsFetchLiftExperimentResultsSuccessful: true,\r\n      });\r\n      setLiftStudyResults(response);\r\n      return transformResults(response);\r\n    },\r\n    onFailure: (error) => {\r\n      setClarityTag({\r\n        IsFetchLiftExperimentResultsSuccessful: false,\r\n      });\r\n      setIsLoading(false);\r\n      console.log('Error fetching lift study results');\r\n      console.log(error);\r\n    },\r\n  }), [fetch, scope]);\r\n\r\n  useEffect(() => {\r\n    if (scope.values.liftExperimentId == null) {\r\n      const route = getRoutePathById(siteMap, 'lift-measurement');\r\n      scope.remove('liftExperimentId');\r\n      scope.save(route);\r\n    } else {\r\n      setClarityTag({\r\n        IsFetchingLiftExperimentResults: true,\r\n        IsLiftMeasurementPage: true,\r\n        LiftMeasurementPage: 'results',\r\n      });\r\n      // Fetch from the experiment, experiment results, and campaigns endpoints to build out the page state.\r\n      fetchExperiment(scope.values, {\r\n        onSuccess: async (liftExperiment) => {\r\n          setExperimentName(liftExperiment.Name);\r\n          setCountry(liftExperiment.Country);\r\n          setStartDate(liftExperiment.StartDate);\r\n          setEndDate(liftExperiment.EndDate);\r\n          setMeasurementTypes(parseMeasurementTypeEnum(liftExperiment.MeasurementType));\r\n          setKeywords(liftExperiment.Keywords == null ? [] : liftExperiment.Keywords);\r\n\r\n          if (liftExperiment.UETTags == null) {\r\n            setUetTags([]);\r\n          } else {\r\n            await fetchUetTags({\r\n              count: liftExperiment.UETTags.length,\r\n              ids: liftExperiment.UETTags,\r\n              onFailure: () => {\r\n                // Failed to fetch the UET tags so continue with the IDs.\r\n                notificationApi.showWarning(i18n.getString(_TL_('Failed to fetch UET tags for IDs: {{ tagIds }}'), {\r\n                  tagIds: liftExperiment.UETTags.join(i18n.getString(_TL_(', '))),\r\n                }));\r\n                setUetTags(liftExperiment.UETTags);\r\n              },\r\n              onSuccess: (data) => {\r\n                const { fetchedTagsAsArray } = getFetchedTagCollections(data);\r\n                const uetTagNames = fetchedTagsAsArray.map(tag => tag.name);\r\n                setUetTags(uetTagNames);\r\n              },\r\n              scope,\r\n            });\r\n          }\r\n\r\n          const results = await fetchLiftStudyResults(liftExperiment.Id);\r\n\r\n          if (results) {\r\n            await fetchCampaigns(results);\r\n            setOverallResults(getOverallResults(results));\r\n            setAudienceResults(getAudienceResults(results));\r\n            setTopPerformerResults(getTopPerformerResults(results));\r\n            setBottomPerformerResults(getBottomPerformerResults(results));\r\n            setIsLoading(false);\r\n          }\r\n        },\r\n        onFailure: (message) => {\r\n          // We should log the details of the failure and then route the user back to the landing page.\r\n          console.log('The fetch failed:');\r\n          console.log(message);\r\n        },\r\n      });\r\n    }\r\n  }, [fetchCampaigns, fetchLiftStudyResults, i18n, scope, scope.values.liftExperimentId, siteMap]);\r\n\r\n  const onClickExcel = useCallback(() => {\r\n    if (liftStudyResults) {\r\n      setClarityTag({\r\n        IsDownloadingLiftMeasurementExcelResults: true,\r\n      });\r\n      downloadExcel(scope.values.liftExperimentId, liftStudyResults);\r\n    }\r\n  }, [scope.values.liftExperimentId, liftStudyResults]);\r\n\r\n  const loadingMessage = i18n.getString(_TL_('Loading lift experiment results...'));\r\n\r\n  return (\r\n    <div className=\"lift-measurement-results\">\r\n      {isLoading ?\r\n        <Stack tokens={mainLayoutTokens}>\r\n          <Title3 className=\"loading-message\">{loadingMessage}</Title3>\r\n        </Stack>\r\n        :\r\n        <Stack tokens={mainLayoutTokens}>\r\n          <ResultsPageHeader\r\n            onClickExcel={onClickExcel}\r\n            title={experimentName}\r\n          />\r\n          <StudySummaryCard\r\n            campaigns={campaignsAsArray}\r\n            country={country}\r\n            endDate={endDate}\r\n            keywords={keywords}\r\n            startDate={startDate}\r\n            uetTags={uetTags}\r\n          />\r\n          <ExperimentOverviewSection\r\n            conversionData={overallResults.conversion}\r\n            measurementTypes={measurementTypes}\r\n            searchData={overallResults.search}\r\n            visitData={overallResults.visit}\r\n          />\r\n          <AudienceOverviewSection\r\n            conversionBottomPerformerData={bottomPerformerResults.conversion}\r\n            conversionData={audienceResults.conversion}\r\n            conversionTopPerformerData={topPerformerResults.conversion}\r\n            measurementTypes={measurementTypes}\r\n            searchBottomPerformerData={bottomPerformerResults.search}\r\n            searchData={audienceResults.search}\r\n            searchTopPerformerData={topPerformerResults.search}\r\n            visitBottomPerformerData={bottomPerformerResults.visit}\r\n            visitData={audienceResults.visit}\r\n            visitTopPerformerData={topPerformerResults.visit}\r\n          />\r\n          <CampaignOverviewSection\r\n            conversionData={campaignResults.conversion}\r\n            measurementTypes={measurementTypes}\r\n            searchData={campaignResults.search}\r\n            visitData={campaignResults.visit}\r\n          />\r\n        </Stack>\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nLiftMeasurementResultsInternal.propTypes = {\r\n  siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.string,\r\n  })).isRequired,\r\n  serverContext: PropTypes.shape({\r\n    Token: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport const LiftMeasurementResults = withServerContext(LiftMeasurementResultsInternal);\r\n","\r\nexport type SDKEventTypeName = 'SDKLandingPageReady'\r\n  | 'UpdateUsername'\r\n  | 'SDKReady'\r\n  | 'UpdatePermissions'\r\n  | 'SignUpUserAndCampaignCreated'\r\n  | 'SignUpComplete'\r\n  | 'CampaignCreated'\r\n  | 'LoginCompleted'\r\n  | 'SDKAdBannerReady'\r\n  | 'AdBannerClicked'\r\n  | 'SDKSignInWithExistingAccount'\r\n  | 'SDKRedirectToSignInWithExistingAccountPage';\r\n\r\nexport const SDKEventTypes: Record<SDKEventTypeName, SDKEventTypeName> = {\r\n  SDKReady: 'SDKReady',\r\n  UpdatePermissions: 'UpdatePermissions',\r\n  SignUpUserAndCampaignCreated: 'SignUpUserAndCampaignCreated',\r\n  SignUpComplete: 'SignUpComplete',\r\n  CampaignCreated: 'CampaignCreated',\r\n  LoginCompleted: 'LoginCompleted',\r\n  SDKLandingPageReady: 'SDKLandingPageReady',\r\n  UpdateUsername: 'UpdateUsername',\r\n  SDKAdBannerReady: 'SDKAdBannerReady',\r\n  AdBannerClicked: 'AdBannerClicked',\r\n  SDKSignInWithExistingAccount: 'SDKSignInWithExistingAccount',\r\n  SDKRedirectToSignInWithExistingAccountPage: 'SDKRedirectToSignInWithExistingAccountPage',\r\n};\r\n\r\nexport interface ISignUpUserAndCampaignCreatedPayload {\r\n  cid: number;\r\n  aid: number;\r\n  uid: number;\r\n  campaignId: number;\r\n  username: string;\r\n}\r\n\r\nexport interface ISignUpCompleteEventPayload {\r\n  cid: number;\r\n  aid: number;\r\n  uid: number;\r\n  campaignId: number;\r\n  assetGroupId: number;\r\n  username: string;\r\n}\r\n\r\nexport interface ICampaignEventPayload {\r\n  campaignId: number;\r\n  assetGroupdId: number;\r\n}\r\n\r\nexport interface IUpdateUsernameEventPayload {\r\n  username: string;\r\n}\r\n\r\nexport interface ISDKLandingPageReady {\r\n  height: number;\r\n}\r\n\r\nexport interface ISDKEvent<T extends SDKEventTypeName, P = any> {\r\n  type: T;\r\n  payload?: P;\r\n}\r\n\r\nexport interface ICustomSupportOptionItem {\r\n  text?: string;\r\n  href: string;\r\n  onClick?: () => void;\r\n}\r\n\r\nexport interface ICustomSupportOptions {\r\n  headerText: string;\r\n  flowId?: string;\r\n  supportOptions: ICustomSupportOptionItem[];\r\n}\r\n\r\nexport interface ISupportOptions {\r\n  IfShowLiveChat?: boolean;\r\n  RequestCallText?: string;\r\n  customSupportOptions?: ICustomSupportOptions;\r\n}\r\n\r\nexport interface IServerContext {\r\n  Permissions?: Record<string, boolean>;\r\n  DynamicPermissions?: Record<string, boolean>;\r\n  CCUIPilots?: Record<string, boolean> & { dynamic: Record<string, boolean>};\r\n  Urls?: Record<string, string>;\r\n  SupportOptions?: ISupportOptions;\r\n}\r\n\r\nexport type SDKReadyEvent = ISDKEvent<'SDKReady', undefined>;\r\nexport type UpdatePermissionsEvent = ISDKEvent<'UpdatePermissions', IServerContext>;\r\nexport type SignUpUserAndCampaignCreatedEvent = ISDKEvent<'SignUpUserAndCampaignCreated', ISignUpUserAndCampaignCreatedPayload>;\r\nexport type SignUpCompleteEvent = ISDKEvent<'SignUpComplete', ISignUpCompleteEventPayload>;\r\nexport type CampaignCreatedEvent = ISDKEvent<'CampaignCreated', ICampaignEventPayload>;\r\nexport type LoginCompletedEvent = ISDKEvent<'LoginCompleted', undefined>;\r\nexport type SDKLandingPageReadyEvent = ISDKEvent<'SDKLandingPageReady', ISDKLandingPageReady>;\r\nexport type UpdateUsernameEvent = ISDKEvent<'UpdateUsername', IUpdateUsernameEventPayload>;\r\nexport type AdBannerClickedEvent = ISDKEvent<'AdBannerClicked', undefined>;\r\nexport type SDKAdBannerReadyEvent = ISDKEvent<'SDKAdBannerReady', undefined>;\r\nexport type SDKSignInWithExistingAccountEvent = ISDKEvent<'SDKSignInWithExistingAccount', undefined>;\r\nexport type SDKRedirectToSignInWithExistingAccountPageEvent = ISDKEvent<'SDKRedirectToSignInWithExistingAccountPage', undefined>;\r\nexport type SDKEvent = SDKReadyEvent |\r\n  UpdatePermissionsEvent |\r\n  SignUpCompleteEvent |\r\n  SignUpUserAndCampaignCreatedEvent |\r\n  CampaignCreatedEvent |\r\n  LoginCompletedEvent |\r\n  UpdateUsernameEvent |\r\n  SDKLandingPageReadyEvent |\r\n  SDKAdBannerReadyEvent |\r\n  AdBannerClickedEvent |\r\n  SDKSignInWithExistingAccountEvent |\r\n  SDKRedirectToSignInWithExistingAccountPageEvent;\r\n\r\nexport function sendSDKEvent(evt: SDKEvent) {\r\n  if (window.parent) {\r\n    window.parent.postMessage(evt, '*');\r\n  }\r\n}\r\n","import { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { useEffect, useState, useContext, useCallback } from 'react';\r\n\r\ndeclare global {\r\n  // eslint-disable-next-line no-unused-vars\r\n  interface Window {\r\n    // eslint-disable-next-line no-unused-vars\r\n    refreshConversionStatus: (result: boolean) => void;\r\n  }\r\n}\r\n\r\nexport function fetchHasAvailableConversionGoals({\r\n  CurrentAccount,\r\n}) {\r\n  const url = `/Customers(${CurrentAccount.AdvertiserCustomerID})/Accounts(${CurrentAccount.Id})/ConversionGoalDetails`;\r\n\r\n  return odata.get(url, {\r\n    path: 'Advertiser/V2',\r\n  }).then(response => response.IsActiveConversionGoalPresent);\r\n}\r\n\r\nexport const useHasConversionSetup = () => {\r\n  const serverContext: any = useContext(ServerContext);\r\n  const [hasConversionSetup, setHasConversionSetup] = useState<boolean | null>(null);\r\n\r\n  useEffect(() => {\r\n    fetchHasAvailableConversionGoals({\r\n      CurrentAccount: serverContext.CurrentAccount,\r\n    }).then((resp) => {\r\n      setHasConversionSetup(resp);\r\n    }).catch(() => {\r\n      setHasConversionSetup(false);\r\n    });\r\n  }, [serverContext.CurrentAccount]);\r\n\r\n  return { hasConversionSetup };\r\n};\r\n\r\nexport const useCheckConversionGoalExists = ({\r\n  hasConversionCallback,\r\n}: {\r\n  // eslint-disable-next-line no-unused-vars\r\n  hasConversionCallback: (result: boolean) => void,\r\n}) => {\r\n  const serverContext: any = useContext(ServerContext);\r\n  const refreshConversionStatus = useCallback(() => {\r\n    if (document.visibilityState === 'visible') {\r\n      fetchHasAvailableConversionGoals({\r\n        CurrentAccount: serverContext.CurrentAccount,\r\n      }).then((result) => {\r\n        hasConversionCallback(result);\r\n      });\r\n    }\r\n  }, [serverContext.CurrentAccount, hasConversionCallback]);\r\n\r\n  useEffect(() => {\r\n    document.addEventListener('visibilitychange', refreshConversionStatus);\r\n    if (window.location.search.indexOf('isselenium=true') !== -1) {\r\n      window.refreshConversionStatus = refreshConversionStatus;\r\n    }\r\n    return () => {\r\n      document.removeEventListener('visibilitychange', refreshConversionStatus);\r\n    };\r\n  }, [refreshConversionStatus]);\r\n\r\n  return {\r\n    refreshConversionStatus,\r\n  };\r\n};\r\n"],"names":["LINKEDIN_CAMPAIGN_OBJECTIVES","LINKEDIN_CAMPAIGN_GOALS","getLinkedInCampaignGoal","localStorage","getLocalStorage","campaignObjective","supportsStorage","get","getCampaignObjective","PERMISSION_STATUS","LINKEDIN_WIZARDS","LINKEDIN_WIZARD_STEP_PATHS","getFlow","_ref","isCompanyPageReady","isMultiAdModel","multiAdSteps","isAdStepActive","concat","_toConsumableArray","isAudienceTooNarrow","audienceSize","_","campaignResource","edmCampaign","types","resolve","ResourceIdentifier","createOrUpdateCampaign","data","Id","bulkUpdate","bind","bulkCreate","readCampaign","cid","aid","campaignId","Customers","$withKey","Accounts","Campaigns","select","toPromise","readCampaignCriterions","CampaignCriterions","$cast","top","filter","where","join","adGroupResource","readAdGroup","adGroupId","AdGroups","adResource","createOrUpdateAd","arguments","length","undefined","Promise","getDefaultLocation","lcid","getBundleCountriesAndBundleLocationCriterions","then","bundleLocationCriterions","locationCriterion","first","value","LocationId","CountryCode","Name","GeoPoint","Latitude","Longitude","Type","readAudienceDataFactory","model","filterOnServer","search","Demographics","_objectSpread","servingChannel","readCompanyNames","readCompanyIndustries","readJobSeniorities","readJobFunctions","readJobTitles","getConnectedLinkedInCompanyPage","LinkedInCompanyPages","$makeCall","bypassCache","catch","err","hostname","document","location","toLowerCase","indexOf","isLocal","getCompanyPagePermissionStatus","connectToLinkedInCompanyPage","payload","generateDefaultCampaignName","i18n","today","Date","addz","n","time","getHours","getMinutes","getSeconds","date","getMonth","getDate","getFullYear","toString","slice","prefix","getString","_TL_","mapCampaignToBudgetViewModel","campaign","Amount","Budget","BiddingScheme","_campaign$CampaignSet","CampaignSettings","budgetAmount","bidStrategy","campaignGoal","Goal","LinkedInImageType","Landscape","Square","Vertical","LinkedInImageTypeAspectRatio","_defineProperty","CallToActionOptions","key","text","getDefaultAd","finalUrl","connectedCompanyPage","Website","startsWith","FinalUrls","FinalUrlForRecommendation","SelectedImageType","getSelectedImageTypeFromModel","imageAsset","Images","Asset","imageAssetAspectRatio","CropWidth","CropHeight","imageType","Math","abs","getCTAFromModel","cta","CallToAction","ctaOption","find","option","optionValue","optionText","selectedOptions","useLinkedInAdAdapter","mapToViewModel","useCallback","ImageAssets","Headlines","Headline0","Headline","Descriptions","Description0","Text","mapToBulkModel","adGroup","adData","isDeleted","imageList","ImageList","imageArray","imageObj","type","flattenImageList","images","image","id","idString","String","subType","associationType","cropX","cropSettings","SourceX","cropY","SourceY","cropWidth","SourceWidth","cropHeight","SourceHeight","fields","AdType","JSON","stringify","Campaign","AdGroup","CallToActionLanguage","Status","parseDateFromAPIFormat","dateFromMdyyyyFormat","parseDate","substring","raw","dateFromyyyyMdFormat","formatDateToAPIFormat","formatDate","LocationCriterionTypes","AudienceCriterionTypes","AgeCriterionTypes","GenderCriterionTypes","filterCriterionsByType","criterions","c","includes","Criterion","ERROR_ENTITY","genericApiError","CampaignApiError","mapBulkUpsertErrors","errors","bulkUpsertEntityErrorMap","errorProcessor","identity","scenario","activityLogger","getBulkApiErrors","map","error","errorType","mappedErrorType","result","getBulkUploadErrorType","entitySchema","properties","name","getBulkUploadEntityType","useInitializeWizard","isReAuthOnly","URLSearchParams","window","has","_useInitializeCompany","_scope$values","useContext","ScopeContext","scope","values","logger","useInstrumentLogger","scenarioName","activityName","_useState","useState","_useState2","_slicedToArray","isCompanyPageInitialized","setIsCompanyPageInitialized","_useState3","_useState4","isFirstRun","setIsFirstRun","_useState5","_useState6","isMemberTokenActive","setIsMemberTokenActive","_useState7","_useState8","permissionStatus","setPermissionStatus","_useState9","_useState10","setConnectedCompanyPage","_useState11","_useState12","isLoading","setIsLoading","_useState13","_useState14","loadError","setLoadError","useEffect","Error","res","IsMemberTokenActive","trace","finally","useInitializeCompanyPage","isInitialized","initialStep","initialFlowFactors","initialWizardData","decorateMessage","message","_useBaseInstrumerLogg","useBaseInstrumerLogger","COMPANY_PAGE_LINKING_ACTIONS","companyPageLinkingReducer","state","action","isAuthenticating","authenticationError","companyPages","authorizationData","selectedCompanyPage","isAuthorized","saveCompanyPageError","isReadyToLink","isSavingCompanyPage","isLoadingPermissionStatus","loadPermissionStatusError","checkDateTime","isResendingPermissionRequest","resendPermissionRequestError","isRefreshingToken","refreshTokenError","LinkedInConfig","clientId","Prod","Test","url","defaultActivityLogger","useLinkedInLinking","_ref$config","config","windowObject","_useContext$scope$val","isProd","isProdEnvironment","host","openPopupAndWaitForAuth","useOpenPopupAndWaitForAuth","login","activity","contextValue","now","random","substr","baseCallbackUrl","origin","cbUrlSearchParams","append","callbackUrl","targetUrl","URL","authSearchParams","response_type","client_id","redirect_uri","searchParams","set","matcher","AuthorizationCode","code","RedirectUrl","useLoadCompanyPages","dispatch","isProcessing","setIsProcessing","loadLinkedInCompanyPages","companyPagesRes","CompanyPages","userProfileImageSrc","UserProfilePictureDownloadUri","useSaveCompanyPage","onContinue","send","useWizardService","companyPageID","LinkedInTnCAccepted","WIZARD_EVENTS","UPDATE_WIZARD_DATA","ERROR_MODES","useErrorStyles","makeStyles","helpLink","marginLeft","useErrorMessages","I18nContext","classes","useMemo","mode","title","content","_jsxs","children","_jsx","HelpLink","query","className","Code","console","log","useMessageBarStyles","messageBar","marginTop","maxWidth","whiteSpace","alignItems","paddingTop","tokens","spacingVerticalM","paddingBottom","useRefreshMemberToken","reauthLinkedInMember","Res","useStyles","fontWeight","fontSize","lineHeight","shorthands","margin","description","StepHeader","React","mergeClasses","LinkedInLogo","width","height","viewBox","fill","xmlns","clipPath","fillRule","clipRule","d","transform","propTypes","PropTypes","defaultProps","LinkedInLogo24","LinkedInIconWhite","_ref2","row","display","marginBottom","gap","LabelSkeletonItem","style","SkeletonItem","size","RadioSkeletonItem","shape","DropdownSkeletonItem","_ref3","MemberTokenWarning","navigateToReAuthFlow","isReAuth","remove","save","MessageBar","intent","MessageBarBody","MessageBarTitle","MessageBarActions","Button","appearance","onClick","useAuthenticationStageStyles","container","flexDirection","contentContainer","logo","color","colorNeutralForeground1","fontSizeBase400","colorNeutralForeground2","itemsContainer","alignSelf","spacingVerticalL","item","checkmark","colorPaletteSeafoamForeground2","fontSizeBase600","marginRight","itemText","actionsContainer","spacingVerticalS","FEATURES","AuthenticationStage","props","onCancel","serverError","onLinkClicked","as","feature","CheckmarkCircleFilled","icon","useComponyPageItemStyles","companyPageItem","borderRadius","borderRadiusMedium","details","justifyContent","industry","fontSizeBase200","ComponyPageItem","companyPageName","companyPageLogoSrc","industryLocation","industryType","Image","src","alt","useCompanyPageSelectionStageStyles","spacingVerticalXXXL","descriptionContainer","textAlign","companyPageContainer","selectedCompanyPageContainer","borderRadiusLarge","border","colorNeutralStroke1","companyPageInfo","flexGrow","flexShrink","flexBasis","companyPageActions","colorNeutralForeground3BrandHover","selectionContainer","selector","info","infoIcon","termsAndConditions","typographyStyles","caption1","padding","TermsAndConditions","checked","onChange","label","template","ReactTemplate","link","Link","href","target","rel","inline","handleChange","Checkbox","CompanyPageSelectionStage","serverContext","ServerContext","CurrentAccount","CurrentCustomer","termsAndConditionsAccepted","setTermsAndConditionsAccepted","_state$selectedCompan","_ref$Id","selectedCompanyPageId","disableAllowButton","onChangePageSelection","newSelectedCompanyPage","isAdminOf","some","onContinueClicked","fetchCompanies","typeaheadCompanyPageSearch","customRender","_ref4","LogoDownloadUrl","Location","IndustryType","Label","SearchableSelectorWithDefaultList","loadingText","placeholderText","noResultsText","fetchFn","onRenderOption","onSelectOption","defaultGroupName","defaultResults","searchResultGroupName","Dialog","modalType","DialogTrigger","disableButtonEnhancement","disabled","DialogSurface","DialogBody","DialogTitle","DialogContent","DialogActions","useRequestAccessStageStyles","infoSection","backgroundColor","colorNeutralBackground1Pressed","RequestAccessStage","onClickRequestAccess","PERMISSION_REQUIRED_LOGO_SRC","usePermissionCheckStageV2Styles","statusContainer","statusLogo","PermissionCheckStageV2","isOrgUpdateAllowed","IsOrgUpdateAllowed","useLoadPermissionStatus","useResendPermissionRequest","onCheckStatus","onGoback","onResend","timer","setTimeout","clearTimeout","renderPermissionStatusSession","logoSrc","PERMISSION_REJECTED_LOGO_SRC","PERMISSION_PENDING_LOGO_SRC","PERMISSION_APPROVED_LOGO_SRC","renderActionButtons","MemberTokenRefreshStage","onLoginClicked","LINKING_STAGES","CampaignPanel","onDataChange","_useCollapseState","useCollapseState","_useCollapseState2","campaignSection","campaignExpandedSection","setcampaignExpandedSection","campaignNameProp","andComp","entityIs","propertyIs","onCampaignDataChange","results","prevData","isValid","isDirty","ValidationGroup","validationProps","schema","onValidate","stopPropagation","Collapse","allPanelItems","checkItems","skipItemsTypeCheck","activeKeys","setActiveKeys","ValidatedFormCard","attentionBeaconProps","getExtraProps","getPanelErrorProps","FormCardBasicHeader","helpLabel","helpTopic","contentBefore","CampaignNameImg","FormCardBody","RemainingCharsValidatedTextField","placeholder","field","formErrorProps","getCompanyPageStyle","flex","order","imageContainer","overflow","profileImage","objectFit","frame","fontFamily","CompanyPageCard","companyInfo","useDefaultStyles","companyPageSection","companyPageExpandedSection","setcompanyPageExpandedSection","descriptionText","industryText","Boolean","FormCard","classNames","DEFAULT_PROFILE_IMAGE","getAdStepStyle","flexWrap","minHeight","rightStyles","position","formContainer","outline","ValidatedFinalUrl","withError","withCustomValidation","InternalValidatedFinalUrl","CollapsibleFinalUrl","finalUrlsObj","additionalProperties","finalUrlSection","finalUrlExpandedSection","setFinalUrlExpandedSection","FinalUrlImg","containerClassName","hideLabel","initialValue","validateOnRender","selectedOption","setNewCTACallback","newCTA","Dropdown","onOptionSelect","event","Option","CollapsibleCallToAction","callToActionSection","callToActionExpandedSection","setCallToActionExpandedSection","CallToActionImg","entityIsAd","DescriptionProp","ServerValidatedTextField","withControlErrorHandling","withUnvalidatedControlErrors","CollapsibleIntroductoryText","legacyI18n","buildLegacyI18n","ValidationStringMap","allSections","expandedSections","setExpandedSections","TextAssetsImg","multiline","useDisabledKeynavRegion","ref","current","observer","MutationObserver","querySelectorAll","forEach","child","setAttribute","observe","childList","subtree","attributes","characterData","disconnect","opacity","pointerEvents","CollapsibleHeadline","setAddNewShortHeadlinesCallback","styles","useRef","ValidatedCollapseCard","HeadlineAssetCollection","featureName","isOptional","showDeleteButton","renderInlineCopilot","CollapsibleImages","imagesContainerRef","imageExperiencePortalContainerState","imageExperienceAddNewImageCallback","maxUploadNum","MessageBarText","ImageAssetsImg","ImageListPortalContainerWithControlErrorHandling","containerRef","containerState","isLogos","PerfMaxImageSuggestionCarousel","addImageCallback","customMessageBarText","FormCardSummary","ImageListSummaryCardDetails","LinkedInImageTypeMinSize","AdPreviewConfig","placementSetName","placementTypes","PT","LinkedIn","SingleImageDesktop","SingleImageMobile","AdPreviewExtraPlacementInfo","previewTitle","MediaEditorConfirmationDialog","open","onConfirm","MediaEditorControls","onSelectedAspectRatioChange","currentImageType","setCurrentImageType","newCurrentImageType","setNewCurrentImageType","items","baseImage","_LinkedInImageTypeMin","minWidth","useAvailableAspectRatioItems","showConfirmationDialog","newImageType","cancelNewImageTypeSelection","confirmNewImageTypeSelection","FluentProvider","theme","webLightTheme","Menu","MenuTrigger","MenuButton","MenuPopover","MenuList","MenuItem","REPLACE_EXISTING_ASSETS","LinkedInAdSettingsShell","withRecommendationContext","withBannerService","adPreviewData","adPreviewState","isAdEditor","perfMarker","PerformanceMarkerContext","cloneDeep","AssetGroup","maxLength","getLinkedInAdSchema","instrumentation","InstrumentationContext","permissions","previewImagesSharedState","setPreviewImagesSharedState","openEditor","saveChanges","finalurls","callToAction","selectedImageType","isArray","adPreviewConfig","adType","placementConfig","setImageExperiencePortalContainerState","noop","setImageExperienceAddNewImageCallback","addNewShortHeadlinesCallback","newCTACallback","addNewIntroductoryTextCallBack","newTextAssets","newIntroductoryText","onAdDataChange","updateFinalUrlForRecommendation","handleReset","dataPatch","onUpdateFinalUrls","newFinalUrls","onRenderAllowedAspectRatioControl","onAllowedAspectRatioChange","allowedAspectRatio","handleFinalUrlKeyUpEvent","e","finalUrlAdditionalProps","onBlur","onKeyUp","customCopilotBannerStrings","ApplyingSucceeded","_useCopilot","useCopilot","recommendations","addNewLongHeadlinesCallback","addNewDescriptionCallback","onReset","isSaving","isCanceling","enableCopilotRecommendations","customBannerStrings","copilotBanner","suggestionPoller","imageExperienceComponents","ValidatedImageExperienceWrapper","customMaxImageCount","imagesContaineRef","updateFinalUrlCallback","updatePortalContainerState","wizardPerfMarker","isStockImageEnabled","isLogoEnabled","UAPLPMaxIntegration","isCombinedMsanAndMmaAspectRatios","isLinkedInAd","customPreviewTexts","customOnEditImage","customOnSaveEditImage","CopilotRepositoryProvider","locale","getLocale","recommendationType","useAdPreviwerStyles","root","header","carouselWrapper","placementAndCaptionContainer","placementContainer","colorNeutralBackground2","caption","colorNeutralForeground3","isPlaceholderPlacement","placement","DefaultImage","AdPreviewer","_useImageExperienceAd","useImageExperienceAdPreviewModel","onUpdateImageExperienceImageList","imageExperiencePlacementSets","placementList","placementSets","findWhere","getPlacementList","onRenderHeader","placementType","placementMeta","showEditButton","onRenderPlacement","AdPlacementComponent","isEnabled","placementData","AdPreviewCarouselLayoutEx","useCustomCarousel","enableAutoPlay","customCarouselWrapperClassName","DEFAULT_AD_PREVIEW_STATE","previewImageId","cropImageObj","editingPlacementType","PREVIEW_PROPS","useAdPreviewData","defaultData","introductoryText","headline","getDefaultData","currentData","getCurrentData","setData","debouncedSetData","newAdData","hasAdPreviewDataChanged","cancel","reduce","acc","prop","getDataWithDefaults","getStyles","footerContainer","columnGap","LinkedInAdFooter","SAVE_AND_GOTO","flowFactors","stepId","LinkedInAdStep","_ref$campaign","_ref$adData","isMemberTokenRevoked","_ref2$serverErrors","serverErrors","useFormService","saveFailed","context","matches","FORM_STATES","SAVING","showAllValidationErrors","areBeaconsActive","UnmappedFormServerErrors","UnmappedFormErrors","matchingImage","clone","setCropSettings","newSelectedImageType","updatedImageList","updatedImage","setIncluded","useAdPreviewState","_useMemo","isEditing","getTitleAndDescription","stepTitle","stepDescription","ActuationGroup","actuationProps","isActive","AttentionBeaconGroup","FormErrorGroup","leftStyles","ResponsiveAd","getAdPreviewStyles","placementCardHeader","paddingLeft","paddingRight","placementLogo","placementCompanyName","placementPromoteText","placementIntroductory","placementIntroductoryText","placementCardPreview","placementCardFooter","borderWidth","background","placementFooterText","placementHeadline","WebkitBoxOrient","WebkitLineClamp","placementFinalUrl","AdPreview","extraData","adImageUrl","CardHeader","CardPreview","CardFooter","getAdsManagerStepStyle","LocationsSkeleton","Skeleton","LanguageSkeleton","AudiencesSkeleton","ConversionSkeleton","ValidationAdapter","AdapterFactory","defaultValue","valueToInject","functionToInject","withValidationWrapper","withValidation","withUnvalidatedControlErrorsWrapper","ServerValidatedTargetingLocations","defaultLocation","mapRef","strings","choiceGroupLabel","getLocationTargetsEditorStrings","optionConfigs","targetOptions","quick","specific","selectedLocationOption","_ref3$positiveLocatio","positiveLocationTargets","searchOptions","getLocations","Locations","onSelectedLocationOptionChange","newOption","onPositiveLocationTargetsChange","newTargets","onValidationComplete","errorMessage","locationsErrorString","BingMapsContextProvider","campaingApiToken","Token","bingMapsApiKey","LocationTargeting","optionsConfig","allowNegativeLocationTargeting","isRadiusExcludeEnabled","showSearchTypeOptions","maxLocationTargets","customizedLocationEqual","isLegacyLocationAndRadiusEqual","defaultSelectedSearchType","SEARCH_TYPE","Boundary","useInternalValidation","locationTargets","onChangeLocationOption","onLocationTargetsChange","onNotifyValidationResult","CollapsibleLocations","cardProps","_objectWithoutProperties","_excluded","isSavingFailed","SAVING_FAILED","validator","newData","targets","isLocationDataValid","Location24Regular","LanguageInfoBanner","bannerMessage","bold","Caption1","LINKEDIN_SUPPORTED_TARGETING_LANGUAGES","LinkedInAudienceType","COMPANY_NAMES","COMPANY_INDUSTRIES","JOB_SENIORITIES","JOB_FUNCTIONS","JOB_TITLES","LinkedInAudienceTypesInOrder","LinkedInAudienceConfig","mutuallyExclusiveDisclaimer","mutuallyExclusiveTypes","LinkedInAudienceTypeCriterion","LinkedInAudienceStatus","LinkedInAudienceCompanySizeMap","One","TwotoTen","EleventoFifty","FiftyOnetoTwoHundred","TwoHundredOnetoFiveHundred","FiveHundredOnetoOneThousand","OneThousandOnetoFiveThousand","FiveThousandOnetoTenThousand","OverTenThousand","AgeRanges","EighteenToTwentyFive","TwentyFiveToThirtyFive","ThirtyFiveToFiftyFive","FiftyFiveAndAbove","Genders","Female","Male","TargetingLanguage","isDisabled","isEnglishSelected","setIsEnglishSelected","language","ValidatedSingleLanguageInput","languages","CollapsibleLanguage","LocalLanguage24Regular","getCompanyNameOptionStyles","nameContainer","spacingXS","body1Strong","industryAndSize","body1","colorNeutralForeground4","useTargetingAudiencesStyles","LinkedInAudienceCustomOptionRender","mapCompanyNameResultsToViewModel","Industry","Size","LogoUrl","mapResultsToViewModel","ServerValidatedTargetingAudiences","_ref6","fetchFunctions","fetchCompanyNames","fetchCompanyIndustries","fetchJobFunctions","fetchJobTitles","fetchJobSeniorities","cachedFetchCompanyIndustries","useFilterOnClient","cachedFetchJobFunctions","cachedFetchJobSeniorities","useAudienceFetchFunctions","typesWithData","onAudienceDataChange","block","_LinkedInAudienceConf","typesToCheck","areTypesPresent","SearchableMultiSelectorInput","tooltipText","CollapsibleAudiences","formatGender","gender","formatGenders","genders","gendersListString","sortGenders","TargetingGender","Target","ariaLabel","formatter","availableDimensions","dimensions","hideDeselectAll","CollapsibleGender","Person24Regular","formatAgeRange","ageRange","formatAgeRanges","ageRanges","ranges","ageRangesListString","range","TargetingAge","CollapsibleAge","FoodCake24Regular","NoCompatibleGoalsWarningMessage","isEditMode","onNavigateToConversionGoalsClicked","noGoalsAvailableWarningMessage","ServerValidatedConversionGoals","ConversionGoalKeyToStringMapping","mergedI18n","mergeI18n","$dateRange","useP$DaterangeDefault","AdvertiserCustomerID","onRenderLabel","GoalSelector","selectedGoals","Array","pageSize","resultsTitle","isLinkedInCompatibleGoals","showTrackingStatusIcon","CollapsibleConversionGoals","hasLinkedInCompatibleGoals","ArrowSwap24Regular","useTargetingStepStyles","collapseContainer","AllTargetingSections","InitiallyExpandedTargetingSections","useTargetingLocationsAdapter","internalDefaultLocation","setInternalDefaultLocation","internalLocationTargets","setInternalLocationTargets","initialTargets","fromLocationCriterionToBingMapTarget","defaultTarget","LocationTarget","CreateIncludedLocationTarget","initialLocationTargets","targetingType","LocationTargetTypes","Included","isDefaultLocationSelected","newLocationTargets","_getLocationsToSave","getLocationsToSave","locationsToAdd","locationsToDelete","push","fromBingMapTargetToLocationTargetEDM","ENTITY_ACTION_TYPES","Add","Delete","deletedValue","LinkedInAudienceTypeCriterionToViewModel","ProfileId","CompanyName","criterionId","JobFunction","JobTitle","_ref5","JobSeniority","mapAudienceViewModelToBulkModel","audienceType","status","CriterionType","Number","useTargetingAudiencesAdapter","internalAudienceTargets","setInternalAudienceTargets","initialAudienceTargets","criterionType","criterionToViewModel","matchingCriterions","criterion","mappedCriterions","mapAudienceCriterionsToViewModel","audienceTargets","idsBefore","flatten","idsAfter","idsToAdd","idsToDelete","targetsToAdd","mapObject","targetsToDelete","DefaultAgeRanges","mapAgeCriterionsToViewModel","AgeRange","mapAgeRangeToBulkModel","AgeCriterion","useTargetingAgeAdapter","initialCriterions","setInitialCriterions","newAgeRanges","rangesBefore","rangesAfter","rangesToAdd","rangesToDelete","DefaultGenders","mapGenderCriterionsToViewModel","GenderType","mapGenderToBulkModel","GenderCriterion","useTargetingGenderAdapter","newGenders","gendersBefore","gendersAfter","gendersToAdd","gendersToDelete","useCampaignConversionGoalsAdapter","initialConversionGoals","setInitialConversionGoals","conversionGoals","goals","goal","TrackingStatus","GoalCategory","goalsBefore","goalsAfter","goalsToAdd","goalsToDelete","CampaignId","Action","GoalId","SubType","BudgetSkeleton","BidStrategySkeleton","DateSettingSkeleton","entityIsCampaign","campaignBudgetProp","ServerValidatedBudget","ValidatedBudgetInput","BudgetCard","currencyCode","CurrencyCode","Wallet24Regular","budgetKey","minBudget","LinkedInBudgetRangePerCurrency","Min","maxBudget","Max","campaignBiddingSchemeProp","ServerValidatedBidStrategy","ValidatedBidStrategyDropdown","BidStrategyCard","bidStrategyOptions","getLinkedInBidStrategyOptions","BidStrategyIcon","options","entityIsAdGroup","adGroupDateSettingsProp","orComp","ServerValidatedDateSetting","ValidatedDateSetting","DateSettingCard","StartDate","EndDate","adGroupStatus","campaignTimeZone","validateOnLoad","TimeZone","useBudgetFormStyles","AllBudgetStepSections","BudgetForm","expandSections","collapseExpander","expandKey","expand","useBudgetStepStyles","useSummarySchema","separatorStyles","ads","actionButton","iconName","onEditAdsClick","components","campaignName","buildDefaultDataProperty","dynamicProps","hd1","companyPage","hd2","adCount","targeting","onEditTargetingClick","locationTargeting","languageTargeting","linkedInAudienceTargeting","hd3","genderTargeting","hd4","ageRangeTargeting","conversions","onEditConversionsClick","goalCount","goalDetails","budget","onEditBudgetClick","adScheduleAdGroup","buildSchema","formatLanguage","campaignLanguageStrings","formatLocations","loc","areaTargetNameTypeComboGenerator","ExpandedName","countryCode","compact","targetName","targetList","textOverflow","SingleTargeting","category","_ref$targets","formattedTargets","AudienceTargeting","companyNames","companyIndustries","jobSeniorities","jobTitles","jobFunctions","PropertyRow","propertyLabel","useAdsReviewInfoBannerStyles","AdsReviewInfoBanner","GoalDetails","_ref$goals","formattedGoals","navigateToConversionGoals","onExited","CANCEL","noGoalsSelectedWarningMessage","warningMessage","Body1","getSummaryStepStyle","heading","CustomComponentTypes","sharedComponentTypes","numAds","numGoals","useLinkedInAdGroupSettingsStyles","cardContainer","AdGroupNameSkeleton","adGroupNameProp","AdGroupNameCard","AdGroupCards","useLinkedInCampaignSettingsStyles","BudgetCards","TargetingCards","LinkedInStepConfig","view","_useWizardService","wizardState","_getWizardData","getWizardData","initialState","needRefreshMemberToken","getInitialState","_useReducer","useReducer","_useReducer2","currentLinkingStage","getCurrentLinkingStage","errorDialog","_useErrorMessages","_useConfirmDialog","useConfirmDialog","confirmText","hideCancel","_useConfirmDialog2","showErrorDialog","isErrorDialogVisible","useErrorDialog","_useErrorMessages2","layout","useErrorMessageBar","EXIT","NEXT","UPDATE_FlOW_FACTORS","repository","editingAdId","mapLinkedInAdToBulkModel","loadCampaign","bidStrategyType","Languages","CampaignType","CampaignGoal","getDefaultCampaign","loadAdGroup","loadAd","load","initialRequests","all","saveCampaign","campaignToUpdate","campaignToCreate","campaignToSave","saveAds","modelToSave","campaignRes","_campaignRes$AdGroups","adGroupRes","adRes","reject","deleteErrors","setDeleteErrors","MultiAdsManager","onCreateAd","wizardData","onDeleteAd","adId","adToDelete","adsWithoutDeletedAd","onEditAd","_ref3$serverErrors","LOADING","Caption1Strong","CurrentUser","LocaleID","fetchLICompatibleGoals","useFetchGoalsFactory","_useTargetingLocation","mapLocationsToViewModel","mapLocationsToBulkModel","_useTargetingAudience","mapAudiencesToViewModel","mapAudiencesToBulkModel","_useTargetingAgeAdapt","mapAgeRangesToViewModel","mapAgeRangesToBulkModel","_useTargetingGenderAd","mapGendersToViewModel","mapGendersToBulkModel","_useCampaignConversio","mapCampaignConversionGoalToViewModel","mapCampaignConversionGoalToBulkModel","criterionsResponse","checkCompatibleGoalResponse","locationCriterions","audienceCriterions","ageCriterions","genderCriterions","totalCount","locations","audiences","CampaignConversionGoal","Goals","CampaignConversionGoalAssociations","navigateToStep","NAVIGATE_TO","schemaData","globalI18n","globalLegacyI18n","startDate","endDate","genderTargets","ageTargets","useSummarySchemaData","GeneratedUI","customComponentTypes","_useContext2$scope$va","getFlowFactors","mapConversionGoalsToViewModel","LinkedInSingleStepConfigs","_ref2$campaign","_ref2$companyInfo","_ref2$budget","_ref2$ageRanges","_ref2$genders","targetingCards","expandedTargetingCards","setTargetingExpandedCards","expandTargetingCard","_useCollapseState3","_useCollapseState4","budgetCards","expandedBudgetCards","setBudgetExpandedCards","expandBudgetCard","onValidateBudget","budgetSection","targetingSection","mapBudgetToCampaignBulkModel","savedData","allCards","expandedCards","setExpandedCards","expandCard","createOrUpdateAdGroup","_useLinkedInAdAdapter","mapLinkedInAdToViewModel","loadCompanyPage","Ads","readAd","MmpFetchProvider","finalOptions","headers","Locale","PageTrackingId","Authorization","cachePolicy","interceptors","request","generateGuid","getDefaultOptions","CampaignAPI","ServicesEndpoints","getDefaultUrl","Provider","layoutConfig","CardTemplate","customBlocker","labelPosition","UiBlocker","blocking","DefaultTemplate","useTermsAndConditionsStyles","spacingHorizontalL","useWizardStyles","wizardContainer","footer","borderTop","colorNeutralStroke2","LinkedInStepFooter","nextDisabledFromProps","nextDisabled","showTermsAndConditionsProps","showTermsAndConditions","currentStepId","getCurrentStepId","isLastStep","getIsLastStep","audienceTooNarrow","areTermsChecked","setAreTermsChecked","matchStepState","STEP_STATES","ACTIVE","BasicStepFooter","useCancelButton","useSummaryPanelStyles","estimations","title3","colorPaletteRedForeground1","shimmer","AgeTargetMap","getAudienceSizeFromData","PerformanceEstimationsConfig","toolTipText","currentStepData","getStepData","isCurrentStepValid","getIsStepValid","_usePerformanceMetric","onUpdate","_useFetch","useFetch","loading","onNewData","_oldData","onError","post","fetchEstimations","usePerformanceMetrics","formattedPayload","targetingData","_targetingData$audien","Includes","Age","Gender","Company","formatPayload","dataToDisplay","Intl","NumberFormat","format","_Fragment","summaryPanelConfig","CustomLayoutTemplate","Template","noFooter","noStepList","newItems","Blocker","CustomLayoutContainer","stepListConfig","steps","isHidden","getLinkedInStepListConfig","nextButtonText","LayoutContainer","Layout","component","StepContainer","StepList","StepBar","SummaryPanel","CancelWizardDialog","SaveBlocker","LinkedInCampaignWizard","siteMap","routeToNavigateToWhenDone","getRoutePathById","createChild","_useInitializeWizard","actions","onDone","PerformanceMarkerProvider","immediateDone","Scenario","Activity","Wizard","WizardPerfMarker","wizardName","wizardMarker","SingleStepLayoutContainer","LinkedInBaseSingleStepWizard","LinkedInCampaignSettingsWizard","restProps","navigateToSomeWhere","LinkedInAdGroupSettingsWizard","LinkedInAdEditorWizard","_getNavigationProps","pathname","uid","getNavigationProps","history","imageExperienceLegacyStrings","ImageExperience_RemoveAllImages","Audience_Campaign_Ad_Preview_Default_ShortHeadline","Audience_Campaign_Ad_Preview_Default_LongHeadline","Audience_Campaign_Ad_Preview_Default_Description","Audience_Campaign_Ad_Preview_Default_BusinessName","Audience_Campaign_Ad_Preview_Default_CallToAction","ImageOptionDropdown_Image","ImageOptionDropdown_Logo","ImageOptionDropdown_Portrait","ImageExperience_Sort_Recent_Upload","ImageExperience_Sort_Image_Text","ImageExperience_Existing_Images","ImageExperience_Stock_Images","ImageExperience_Website_Suggestions","ImageExperience_New","ImageExperience_Upload","ImageExperience_Ad_Preview_Title","Entity_Ads","FilePicker_FileExtensionInvalid","FilePicker_FileInvalid","ImageExperience_Ad_Preview_Next","ImageExperience_Ad_Preview_Previous","ImageExperience_Ad_Preview_Ratio_Title_Template","ImageExperience_Ad_Preview_Title_Template","ImageExperience_Add_Video_File_AriaLabel","ImageExperience_Add_Video_File_Placeholder","ImageExperience_Add_Video_Option_Local","ImageExperience_Add_Video_Option_URL","ImageExperience_AddImageDescription","ImageExperience_AddImageTitle","ImageExperience_Additional_Disclaimer_Message_MultimediaAd","ImageExperience_Additional_Disclaimer_Message","ImageExperience_AddLogoDescription","ImageExperience_AddLogoTitle","ImageExperience_AddVideoDescription","ImageExperience_AddVideoTitle","ImageExperience_ApplyClipNoticeDescription","ImageExperience_ApplyClipNoticeTitle","ImageExperience_ApplyTrimAndCaptionToAllRatio","ImageExperience_Asset_Title","ImageExperience_AutomaticThumbnail","ImageExperience_AutomaticThumbnailDescription","ImageExperience_BestPracticeHelp_Video","ImageExperience_BestPracticeHelp","ImageExperience_Cancel","ImageExperience_CaptionAlert","ImageExperience_Choose_File_Description","ImageExperience_Choose_Video_Description","ImageExperience_ChooseThumbnail","ImageExperience_ClipperDescription","ImageExperience_Confirm","ImageExperience_CropperDescription","ImageExperience_DeleteCaptionDescription","ImageExperience_DeleteCaptionTitle","ImageExperience_Drag_File_Description","ImageExperience_Drag_File_Maximum_Upload_Num","ImageExperience_Drag_File_Minimum_Size_Tip","ImageExperience_Drop_File_Description","ImageExperience_Drop_Image_Description","ImageExperience_Edit_Aspect_Ratio","ImageExperience_Edit_Image_Label","ImageExperience_Edit_Image_Name","ImageExperience_Edit_Image_Placement","ImageExperience_Edit_Image_Template","ImageExperience_Edit_Image","ImageExperience_Edit_Logo_Template","ImageExperience_Edit_Url","ImageExperience_Edit_Video_Label","ImageExperience_EditCaptionDescription","ImageExperience_EditCaptionTitle","ImageExperience_EditThumbnailTitle","ImageExperience_EditVideo_Captions","ImageExperience_EditVideo_Crop","ImageExperience_EditVideo_Thumbnail","ImageExperience_EditVideo_Trim_And_Captions","ImageExperience_EditVideo_Trim_Only","ImageExperience_EditVideo_Trim","ImageExperience_EditVideo","ImageExperience_EmptyURL","ImageExperience_Error_AnimatedImageNotAllowed","ImageExperience_Error_AssetDataEncodingInvalid","ImageExperience_Error_AssetDataInvalid","ImageExperience_Error_GenericUploadErrorMessage","ImageExperience_Error_ImageMimeTypeInvalid","ImageExperience_Error_ImagesLimitExceededPerAccount","ImageExperience_Error_MediaFormatNotSupported","ImageExperience_Error_StockImageLimitExceededPerCustomer","ImageExperience_Error_StockPhoto_Generic","ImageExperience_Error_CampaignServiceMediaDataEncodingInvalid","ImageExperience_Error_ValidationError","ImageExperience_Error_APIError","ImageExperience_Error_MixedError","ImageExperience_Error_CampaignServiceMediaFormatNotSupported","ImageExperience_ExistCaptionTitle","ImageExperience_Existing_Videos","ImageExperience_FileSize_Too_Big_Template","ImageExperience_Get_Video_Label","ImageExperience_Image_Delete_Confirm","ImageExperience_Image_List_Description","ImageExperience_Image_List_Label","ImageExperience_Image_Picker_No_Image_Label","ImageExperience_Image_Placement_Optional","ImageExperience_Image_Placement_Required_Message","ImageExperience_Image_Placement_Required","ImageExperience_Image_Ratio_133x100","ImageExperience_Image_Ratio_150x100","ImageExperience_Image_Ratio_155x100","ImageExperience_Image_Ratio_169x100","ImageExperience_Image_Ratio_172x100","ImageExperience_Image_Ratio_178x100","ImageExperience_Image_Ratio_191x100","ImageExperience_Image_Ratio_1x1","ImageExperience_Image_Ratio_1x2","ImageExperience_Image_Ratio_4x1","ImageExperience_Image_Ratio_93x100","ImageExperience_Image_Ratio_ImageOriginal","ImageExperience_Image_Ratio_201x100","ImageExperience_Image_Ratio_200x100","ImageExperience_Image_Ratio_153x100","ImageExperience_Image_Ratio_124x100","ImageExperience_Image_Ratio_120x100","ImageExperience_Image_ReCrop_Description","ImageExperience_Image","ImageExperience_ImageAddDescription","ImageExperience_ImagesAspectRatioRequired","ImageExperience_ImagesRequired","ImageExperience_ImageSuggestion_ImagesFound","ImageExperience_ImageSuggestion_Subdomain_Placeholder","ImageExperience_InProgress","ImageExperience_InvalidURL","ImageExperience_InvalidVideo","ImageExperience_LandscapeImageRequired","ImageExperience_OriginalImageRequired","ImageExperience_LoadImage_Description","ImageExperience_LoadImage","ImageExperience_LoadLogo_Description","ImageExperience_LoadLogo","ImageExperience_LoadVideo","ImageExperience_Logo_Add_Button","ImageExperience_Logo_Add_Description","ImageExperience_Logo_Edit_Button","ImageExperience_Logo_Label","ImageExperience_Logo_List_Label","ImageExperience_Logo_ReCrop_Description","ImageExperience_ManualThumbnail","ImageExperience_Media_Delete_Error_UseInDraft","ImageExperience_MinimumAspectRatioRequired","ImageExperience_Multimedia_Delete_Error_UseInDraft","ImageExperience_MultipleUpload_Error_MediaFormatNotSupported","ImageExperience_MultipleUpload_FileSize_TooBig","ImageExperience_MultipleUpload_SizeValidationFailTemplate","ImageExperience_MultipleUpload_SizeValidationFailTemplate_WithoutDimension","ImageExperience_NoCaptionFile","ImageExperience_NoSuggestion","ImageExperience_Preview_Type_133x100","ImageExperience_Preview_Type_150x100","ImageExperience_Preview_Type_155x100","ImageExperience_Preview_Type_169x100","ImageExperience_Preview_Type_172x100","ImageExperience_Preview_Type_178x100","ImageExperience_Preview_Type_191x100","ImageExperience_Preview_Type_191x100_V2","ImageExperience_Preview_Type_ImageOriginal","ImageExperience_Preview_Type_201x100","ImageExperience_Preview_Type_200x100","ImageExperience_Preview_Type_169x100_V2","ImageExperience_Preview_Type_153x100","ImageExperience_Preview_Type_124x100","ImageExperience_Preview_Type_120x100","ImageExperience_Preview_Type_1x1","ImageExperience_Preview_Type_1x1_V2","ImageExperience_Preview_Type_93x100","ImageExperience_Preview_Type_BingDeskMulti","ImageExperience_Preview_Type_BingSingleImage","ImageExperience_Preview_Type_MobileMulti","ImageExperience_Preview_Type_MultimediaAd_191x100","ImageExperience_Preview_Type_MultimediaAd_1x1","ImageExperience_Preview_Type_MultimediaAd_1x2","ImageExperience_Preview_Type_MultimediaAd_4x1","ImageExperience_PreviewTitle","ImageExperience_Proceed","ImageExperience_ReCrop","ImageExperience_Remove_Image","ImageExperience_Remove","ImageExperience_RemoveAllVideos","ImageExperience_Replace","ImageExperience_ReplaceImageTitle","ImageExperience_ReplaceVideoTitle","ImageExperience_Review_Image_Policy","ImageExperience_Search_Placeholder","ImageExperience_SelectedImage","ImageExperience_ShutterStock_Disclaimer_Image_Policy","ImageExperience_ShutterStock_Disclaimer_Watermark","ImageExperience_SizeValidationFailTemplate_WithDetail","ImageExperience_SizeValidationFailTemplate_WithDetail_WithoutDimension","ImageExperience_SizeValidationFailTemplate","ImageExperience_SizeValidationFailTemplate_WithoutDimension","ImageExperience_Sort_Video_Text","ImageExperience_SortBy","ImageExperience_Stock_Search_Placeholder","ImageExperience_SuggestionExceedsMaximum","ImageExperience_Thumbnail","ImageExperience_ThumbnailDescription","ImageExperience_Timeout","ImageExperience_UnsavedDraft_Warn","ImageExperience_UploadCaptionFilePlaceholder","ImageExperience_Video_Delete_Confirm","ImageExperience_Video_Editor_Description","ImageExperience_Video_Error_AssetDataInvalidAspect","ImageExperience_Video_Error_AssetDataInvalidHeight","ImageExperience_Video_Error_AssetDataInvalidWidth","ImageExperience_Video_Error_AssetIsUsed","ImageExperience_Video_Error_DuplicateVideoResource","ImageExperience_Video_Error_FileNameWrongFormat","ImageExperience_Video_Error_InvalidDuration","ImageExperience_Video_Error_InvalidId","ImageExperience_Video_Error_InvalidUrl","ImageExperience_Video_Error_LoadVideoFail_Template","ImageExperience_Video_Error_UploadFileFormatNotSupported","ImageExperience_Video_Error_VideoOverweight","ImageExperience_Video_FileSize_Too_Big_Template","ImageExperience_Video_List_Description","ImageExperience_Video_List_Label","ImageExperience_Video_Label","ImageExperience_Video_NewName","ImageExperience_Video_NoPreview","ImageExperience_Video_Ratio_16x9","ImageExperience_Video_Ratio_1x1","ImageExperience_Video_Ratio_4x5","ImageExperience_Video_Ratio_5x4","ImageExperience_Video_Ratio_9x16","ImageExperience_Video_RemoveAllWithUpload_Confirm","ImageExperience_Video_Requirement","ImageExperience_Video_Status_Encoding","ImageExperience_Video_Status_Failed","ImageExperience_Video_Status_Unverified","ImageExperience_Video_Upload_Cancel_Confirm","ImageExperience_Video_UploadError_InternetLost","ImageExperience_Video_UploadError_NoInternet","ImageExperience_Video_UploadError_Template","ImageExperience_VideoEditFail","ImageExperience_VideoNoCustomThumbnail_NoPreview","ImageExperience_VideosMissing","ImageExperience_VideosRequired","ImageExperience_VideosUploading","ImageExperience_VideoUrlValidationFailTemplate","ImageExperience_View_Placements_Example","ExpectedErrorStrings","errorString","store","Store","OverreactDataFetcher","CurrentLocale","_serverContext$Servic","ClientCenterUIAPI","CampaignAPIPath","CultureLcid","overreactRequest","create","ajax","redirectToLogin","instrumentationMiddleware","middlewareTypes","ERROR","createErrorMiddleware","INSTRUMENTATION","createInstrumentationMiddleware","pageTrackingId","loggerFunc","traceFunc","requestId","api","httpMethod","errorFunc","perfFunc","timeTaken","isMethodEnter","errorMappers","check","errorMessageInLowerCase","isExpectedErrorString","stubOptions","allMiddlewares","middlewares","campaignOdataRoot","odataConfig","getConfig","odataPath","overreactCcEnv","useCCEnvironment","serviceRoot","overreactCampaignEnv","params","token","middleWares","requestor","getCampaignRequestor","getDefaultHeaderObj","getCampaignEnvInstance","useCampaignEnvironment","DataFetcher","environment","environments","bottom","left","SDKPostSignUpContextInteranal","subSystemName","perfMarkerName","validationLocalization","ablEnforcementLegacyStrings","autoPbcLightboxLegacyStrings","ablLegacyStrings","offlinePiLegacyStrings","pidlLegacyString","entityUtilLegacyString","termAndConditionsLegacyString","addFundsLegacyString","msSupportChatLocalization","requestCallModalLocalization","aggregateStrings","fileDraggerLegacyString","finalServerContext","CCBaseUrl","Urls","ClientCenterBaseUrl","getInstrumentation","devConfig","instrumentationService","getInstrumentationService","LegacyI18nContext","ServerContextWithActionProvider","InstrumentationWithServiceProvider","SDKPostSignUpContext","withServerContext","useBackToOverview","backToOverviewPage","route","sdkPageNavigationHeader","backBtn","SDKPageNavigationHeader","onClickBackButton","sdkSettingsActionBar","cancelBtn","SDKSettingsActionBar","onSubmit","sdkSettingsFormWrapper","boxShadow","sdkSettingsForm","SDKSettingsViewInternal","ContentComponent","_useSettingsFormActio","onClickSaveButton","FORM_EVENTS","SAVE","useSettingsFormAction","SDKSettingsView","withSiteMap","processor","processPath","processorSet","basic","SDKSettingsFormInternal","viewProps","FormViewWrapper","machineOptions","FETCHING","onDoneSaving","Form","SDKSettingsForm","sdkSettingsPage","SDKSettingsPageInternal","formProps","SDKSettingsPage","wizardContentStyle","palette","defaultLayout","mainContainer","stepListContainer","wizardContent","stepContentContainer","neutralLighterAlt","neutralQuaternaryAlt","SDKWizardTemplate","_items$Blocker","LoadingShimmer","Footer","SDKWizardStepProgress","x1","y1","x2","y2","stroke","strokeWidth","gradientUnits","offset","stopColor","listContainer","borderBottom","listItem","cursor","listItemProgress","getProgressStatus","step","isSelected","containsSelected","isBehind","SDKWizardStepListComponent","getOnItemClickFn","getItemAriaLabel","i","nextStep","Circle20Filled","CheckmarkCircle20Regular","Circle20Regular","getIcon","onItemClick","onItemKeyDown","itemAriaLabel","getDefaultItemAriaLabel","a11yProps","role","tabIndex","onKeyDown","_createElement","iconButton","renderDescription","SDKWizardStepListInternal","currentFlow","getAllExpandStepIds","parseStepConfig","SDKWizardStepList","ResponsiveStepList","LargeScreenStepListComponent","DEFAULT_CAMPAIGN_NAME","floor","usePmaxCampaignAPI","createOrUpdateCampaignPromise","Language","campaignData","campaignPromise","replace","EmptyComponent","stepListProps","InlineSupport","sdkNormalBlocker","bingAdsIcon","SDKNormalBlocker","AnimationBlockerView","rollingTexts","showIcon","useProgressIndicator","sdkNoFinalUrlBlocker","animationDuration","animationIterationCount","blockerContent","SDKNoFinalUrlBlocker","Spinner","SDKWizardAnimationBlocker","getFinalURL","useUpdatePreferencesFromURL","afterResetPreferences","preferenceService","PreferenceContext","_usePreference","usePreference","preferenceNames","WebsiteUrl","_usePreference2","websiteUrlPreference","updateWebsitePreference","update","_usePreference3","SelectedLanguage","updateLanguagePreference","_usePreference5","SelectedCountry","updateCountryPreference","_usePreference7","MarketPrefillEnabled","updateMktPrefillEnabledPreference","_getSDKParams","getSDKParams","mkt","country","getLanguageFromMkt","preferenceReady","setPreferenceReady","setAtUserLevel","COUNTRY_STRINGS","ORIGINLA_COUNTRY_STRINGS","CN","SDKSupportMenu","SupportOptions","headerText","SupportMenuComponent","supportOptions","useCampaignNameTagStyles","button","useFilterDropdownStyles","truncatedText","overflowX","useKeywordInputStyles","textarea","textareaContainer","useMeasurementTypeSelectorStyles","dropdownContainer","dropdown","useRadioChildControlStyles","warning","useSearchCustomerIdStyles","input","useSelectCampaignGridStyles","dataGridRow","dataGridRowDisabled","selectCampaignTableCell","spinner","useTagsListStyles","tagsList","rowGap","tagsToolbar","getUIBlockerStyle","uiblockerStyle","noDataStyles","neutralSecondary","pageNumber","pageSizeOptions","Paginator","_useContext","GridContext","_state$pagination","pagination","pageSizeId","useId","pageSizeLabel","pageCount","ceil","pageCountSeparator","onSelectPageSize","onDecreasePageNumber","onIncreasePageNumber","Select","pageSizeOption","Divider","vertical","ArrowLeftRegular","ArrowRightRegular","getTheme","noData","LandingPageFooter","countries","AD","AE","AG","AI","AL","AM","AR","AS","AT","AU","AW","AZ","BA","BB","BD","BE","BF","BG","BH","BJ","BM","BN","BO","BR","BS","BW","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CO","CR","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","ER","ES","ET","FI","FJ","FO","FR","GA","GB","GD","GE","GF","GI","GL","GM","GN","GP","GR","GT","GU","GW","GY","HK","HN","HR","HT","HU","ID","IE","IL","IN","IQ","IS","IT","JM","JP","KG","KM","KN","KY","LC","LI","LK","LS","LT","LU","LV","LY","MC","MD","ME","MG","MH","MK","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","NA","NC","NE","NF","NG","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PW","PY","QA","RE","RO","RS","RW","SA","SC","SE","SG","SI","SK","SL","SM","SN","SO","SR","SV","TC","TG","TH","TJ","TK","TN","TO","TR","TT","TV","TW","TZ","UG","US","UY","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW","STATUS_SCHEDULED","STATUS_RUNNING","STATUS_MEASURING","STATUS_COMPLETED","STATUS_FAILED","statuses","badgeColor","infoTitle","infoText","popoverContent","StatusBadge","infoTextData","Popover","positioning","withArrow","PopoverTrigger","Badge","PopoverSurface","Subtitle1","nonDeletableStatuses","DeleteStudyDialog","onDelete","deleteButtonLabel","closeButtonLabel","DeleteRegular","getCountryName","getCellFocusMode","columnId","fetchCampaignsByIdEDM","campaignIds","formattedCampaignIds","EXPERIMENT_API_ERRORS","CampaignAssociationsLimitExceeded","DuplicateEntity","DuplicateTagId","EntityAlreadyExists","EntityLimitExceeded","ExperimentStartDateInvalid","ExperimentTimeperiodOverlapping","ExperimentTypeInvalid","InvalidCountryCode","InvalidCustomerId","InvalidStatus","InvalidTagStatus","KeywordIsBlank","KeywordTooLong","NameExceededMaxLen","NotAllowedToDoCurrentOperation","TagsBatchSizeExceesdLimit","createMeasurementTypeEnum","useConversionLift","useSearchLift","useVisitLift","parseMeasurementTypeEnum","combinedEnum","stitchFullCampaignsIntoExperiments","associatedCampaigns","fetchedLiftExperiments","associatedCampaignsById","accum","liftExperiment","formattedCampaigns","fetchExperiment","_asyncToGenerator","_regeneratorRuntime","mark","_callee","liftExperimentId","onSuccess","onFailure","wrap","_context","prev","next","abrupt","LiftExperiments","response","curlyTemplate","stop","_x","_x2","apply","saveExperiment","_ref7","_ref8","isAPISaveFailure","apiErrorCode","body","updateExperiment","_ref9","_ref10","LiftStudiesGrid","onClickEdit","onClickName","AlertHelper","showError","onDeleteFailure","setClarityTag","IsDeleteLiftExperimentSuccessful","onDeleteSuccess","liftExperimentIdToDelete","liftExperimentsWithDeletedRemoved","onClickDelete","IsClickedDeleteLiftExperiment","_ref11","destroyAsPromise","deleteExperiment","columns","createTableColumn","compare","a","b","localeCompare","renderCell","experimentName","underline","instructions","Tooltip","relationship","TableCellLayout","truncate","renderHeaderCell","campaignNamesString","dateRangeString","Country","countryString","EditRegular","getColumns","onFetchExperimentsSuccess","associatedCampaignIds","campaignsResponse","formattedLiftExperiments","withUiBlock","$","sent","getOrderBy","column","fieldName","isSortDescending","fetchExperiments","count","skip","editableFilter","orderby","sortedColumn","onSortChange","sortColumn","sortDirection","IsLiftExperimentSortChanged","LiftExperimentSortField","LiftExperimentSortDirection","DataGrid","getRowId","sortable","DataGridHeader","DataGridRow","DataGridHeaderCell","DataGridBody","rowId","DataGridCell","focusMode","parseKeywordString","keywordString","split","word","trim","sortByName","getUETTags","useVisitConversionLift","uetTags","both","conversion","visit","getKeywords","keywordsMethod","typedKeywordString","kw","selectedKeywords","keywordId","fetchedKeywords","CountrySelector","onSelect","selectedCountries","dropdownLabel","delimiter","buttonText","formattedSelectionText","countryText","getButtonText","countryKeyValues","Object","sort","multiselect","StatusSelector","selectedStatuses","statusText","statusMap","debouncedEditableFilterDispatch","currentEditableFilterPayload","Toolbar","onClickCreate","createButtonLabel","searchBoxPlaceholder","searchBoxLabel","countryFilters","setCountryFilters","searchFilter","setSearchFilter","statusFilters","setStatusFilters","onChangeCountries","IsSelectedLiftExperimentCountryFilter","onChangeSearchInput","_e","IsChangedLiftExperimentSearchFilter","onChangeStatuses","IsSelectedLiftExperimentStatusFilter","fetchExperimentsFilter","formattedCountryFilters","formattedStatusFilters","fragment","Stack","horizontal","horizontalAlign","childrenGap","Input","SearchRegular","gridMobileView","LiftMeasurement","IsClickedCreateLiftExperiment","IsClickedEditLiftExperiment","initialGridContext","GridContextProvider","Card","EDIT_INTENT","NextButton","isBlocking","onNextClicked","SAVE_AND_NEXT","BackButton","_useWizardService2","onBackClicked","BACK","CancelButton","_useWizardService3","onCancelClicked","SaveAndExitButton","_useWizardService4","SAVE_AND_EXIT","LiftMeasurementStepFooter","isFirstStep","getIsFirstStep","errorMessages","CAMPAIGN_REQUIRED","CAMPAIGNS_TOO_MANY","CONVERSION_GOAL_REQUIRED","COUNTRY_REQUIRED","KEYWORDS_TOO_LONG","KEYWORDS_TOO_MANY","MEASUREMENT_TYPE_REQUIRED","NAME_REQUIRED","NAME_TOO_LONG","SAVE_VALIDATION_FAILED","SEARCH_CID_RANGE","SEARCH_CID_TYPE","SELECTED_KEYWORDS_REQUIRED","START_DATE_REQUIRED","STATUS_INVALID_FOR_EDIT","TYPED_KEYWORDS_REQUIRED","UET_TAG_SELECTION_REQUIRED","UET_REQUIRED","VISIT_CONVERSION_LIFT_REQUIRED","stepLayoutTokens","selectCampaignsStepLayoutTokens","cardHeaderStyles","cardHeader","validateCampaignCount","max","validateVisitConversionLift","RequiredDropdown","updateValidation","selected","CountryCard","onChangeCountry","countryLabel","learnMore","countryAsArray","fieldProps","setFieldProps","onValidateCountry","messages","validationMessage","validationState","required","HelpButton","topic","Field","MS_PER_DAY","MS_PER_SEC","getFormattedDateString","toISOString","StartDateCardInternal","onChangeStartDate","localizedStrings","months","shortMonths","days","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","closeButtonAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","getDatePickerStrings","tomorrow","initialDate","startDateLabel","onSelectStartDate","formattedDate","dateUtils","onFormatDate","DatePicker","initialPickerDate","minDate","onSelectDate","StartDateCard","ADD_KEYWORDS_BY_ENTRY","ADD_KEYWORDS_BY_SELECTION","KeywordInput","entryControl","isSelectDisabled","onChangeKeywordsMethod","selectControl","selectLabel","entryLabel","onSelectRadio","RadioGroup","Radio","KeywordTag","listRemoveId","onRemove","removeTagId","onRemoveTag","Dismiss12Regular","iconPosition","KeywordDisplay","onRemoveAllKeywords","onRemoveKeyword","tagsListId","tagsListRemoveId","removedId","weight","_fetchedKeywords$keyw","KeywordSelector","onRemoveAll","orderedFetchedKeywords","dropdownId","impressionsUnit","onSelectDropdownOption","onValidateKeywords","impressions","isOptionDisabled","optionLabel","ValidatedTextarea","Textarea","KeywordTextarea","textareaId","onChangeTextarea","parsedKeywords","tooLongKeywords","unit","verb","validateState","MeasurementTypeCard","helpId","isAllowed","onToggle","Switch","Subtitle2","SearchCustomerIdInternal","customerId","getIsValid","formattedData","onChangeInput","_getIsValid","searchCid","SearchCustomerId","gridTemplateColumns","CardContentSkeleton","rowCount","skeletonId","rowKeys","keys","rowKey","SearchLiftLoading","SearchLiftInternal","onChangeCustomerId","onChangeKeywords","onSelectKeywords","isLiftTypeDisabled","hasNoKeywords","isFetchingKeywords","SearchLift","ApiSaveErrorNotification","getActiveGoalsCount","getGoalsOptionText","none","plural","singular","UetTagSelector","fetchedUetTags","orderedFetchedUetTags","areActiveConversionGoalsMissing","tagId","hoverMessage","goalsUnit","goalsUnitPlural","noGoals","onValidateUetTags","visible","TRACK_BOTH_VISIT_AND_CONVERSION","TRACK_CONVERSION_ONLY","TRACK_VISIT_ONLY","VisitConversionInput","combinedControl","conversionControl","onChangeMethod","visitControl","combinedLabel","conversionLabel","visitLabel","trackingMethod","VisitConversionLiftLoading","VisitConversionLiftNotAllowed","explanation","VisitConversionLiftInternal","onSelectUetTags","selectedUetTags","isFinishedFetching","hasLiftTypeRequiredError","setHasLiftTypeRequiredError","onToggleUseVisitConversionLift","newValue","onChangeLiftTypeMethod","orderedFetchedUetTagsWithActiveGoals","tag","bothVisitAndConversionFieldProps","setBothVisitAndConversionFieldProps","onSelectWithBothVisitAndConversion","selectedTags","sum","tagObject","isUetTagsFetched","VisitConversionLift","ValidatedInput","experimentNameSchema","ExperimentNameCard","experimentNameLabel","onValidateExperimentName","customErrors","entries","oldError","getErrorProcessor","ImpressionThresholdMessage","SelectedCampaignsCard","campaigns","cardTitle","noContent","cardContent","titles","edit","ConfigureStudyStep","selectedCampaigns","selectedCampaignsById","measurementSectionHeader","onChangeExperimentName","onToggleUseSearchLift","IsLiftExperimentUsingSearchLift","method","filteredKeywords","selectedWords","hasUETTagsSelectionError","setHasUETTagsSelectionError","onChangeVisitConversionLiftMethod","IsLiftExperimentUsingConversionLift","IsLiftExperimentUsingVisitLift","isTagsSelectionValid","Title3","LearnMoreLink","linkText","apiSaveErrorMessage","conversionGoalFields","fetchUetTags","ids","getEntityFromScope","currentAccount","Tags","subscribe","getFetchedTagCollections","fetchedTags","fetchedTagsAsArray","fetchedTag","uetTag","goalsCount","GoalsCount","transformFetchedUetTag","onFetchUetTagsFailure","msg","notificationApi","showWarning","onFetchUetTagsSuccess","_getFetchedTagCollect","tagsWithGoalsIds","getFetchedTagsWithGoalsIds","filters","tagIdFilter","fetchConversionGoal","fetchedGoal","Tag","CAMPAIGN_PAUSED_STATUSES","CAMPAIGN_TYPE_DISPLAY","CAMPAIGN_TYPE_NATIVE","CAMPAIGN_TYPE_ONLINE_VIDEO","CAMPAIGN_TYPE_FEED_BASED","DEFAULT_CAMPAIGN_SUBTYPE_FILTER","getSelectedCampaignsGridColumns","budgetFormatOptions","minimumFractionDigits","maximumFractionDigits","nameIcon","PresenceBusy12Filled","primaryFill","Pause12Filled","IsAudienceTargetingEnabled","media","getCampaignSubtypeText","CampaignSubType","targetingEnabled","DailyTargetBudgetAmount","formatCurrency","IsEligibleForMSANLiftExperiment","SelectCampaignsGrid","onCampaignsChange","onChangeSelectedCampaigns","_event","selectedItems","eligibleCampaigns","every","selectedCampaignsIds","idAsString","Set","_wizardState$context$","isEdit","onSelectionChange","selectionMode","selectionCell","checkboxIndicator","campaignTypes","SelectCampaignsToolbar","inputLabel","dropdownPlaceholder","campaignSearchText","setCampaignSearchText","selectedCampaignTypes","setSelectedCampaignTypes","dropdownButtonText","filterPayloadBase","formattedFilter","campaignSubTypeDisplayText","campaignSubType","campaignType","CampaignNameTag","classnames","accordionHeader","accordionHeaderText","SelectedCampaignsAccordion","onRemoveCampaign","selectedCampaignsHeader","numCampaigns","removeCampaign","Accordion","collapsible","defaultOpenItems","AccordionItem","AccordionHeader","AccordionPanel","drawer","backgroundSize","borderLeftStyle","borderLeftWidth","borderLeftColor","drawerHeader","subTitle","totalBudget","StudySummaryDrawer","studySummaryTitle","campaignSelectionTitle","totalBudgetLabel","totalBudgetFormatted","total","dailyTargetBudgetAmount","DrawerInline","DrawerHeader","DrawerHeaderTitle","DrawerBody","SelectCampaignsFooter","SelectCampaignsGridDataSource","orderBy","LiftExperimentCampaigns","fetchLiftExperimentCampaigns","$count","$top","$skip","$filter","$orderby","stepConfigs","selectCampaignsError","selectedColumns","SelectionMode","multiple","study","MeasurementType","UETTags","Keywords","formattedEndDate","valueOf","formattedStartDate","findAll","direction","limit","gridDataParameters","DateRange","fetchKeywords","keywords","keyword","fetchedKeyword","PerformanceMetrics","Impressions","updatedWizardData","onFetchKeywordsSuccess","responseText","saveValidationError","saveResult","isMeasurementTypeSelected","noBlocker","colorNeutralBackground1","LiftMeasurementWizard","onSaveAndExit","BusyBlocker","LiftMeasurementForm","IsCancellingEditLiftExperiment","IsCancellingCreateLiftExperiment","LiftMeasurementCreate","LiftMeasurementEdit","fetchResults","_ref$scope$values","fetch","bodyJson","json","ok","t0","stringValues","getConversionData","resultData","confidence","Confidence_Convert","control","Control_ConverterRate","lift","Lift_Converter","treatment","Treatment_ConverterRate","getSearchData","Confidence_BSearch","Control_BSearcherRate","Lift_BSearcher","Treatment_BSearcherRate","getVisitData","Confidence_Visit","Control_VisitorRate","Lift_Visitor","Treatment_VisitorRate","getAudienceResults","resultsData","audienceResults","TargetType_Result","audienceData","TargetTypeId","measurementCategories","getBottomPerformerResults","bottomPerformerResults","Bottom5_Result","allData","performerData","MeasurementCat","mappedData","audienceId","TargetValueId","audienceTypeId","rank","Rank_Lift","getTopPerformerResults","topPerformerResults","Top5_Result","getCampaignIds","Campaign_Result","getCampaignResults","campaignResults","getOverallResults","overallResults","CID_Result","confidenceLevels","High","Low","Medium","helpContainer","tableHeaderCell","OverviewTable","liftHelpTopic","liftLabel","primaryColumnHeader","primaryColumnHelpTopic","confidenceLabel","controlLabel","defaultLiftLabel","treatmentLabel","columnKey","getPercentageString","percentageValue","formatDecimalToFixed","digits","Table","TableHeader","TableRow","TableHeaderCell","TableBody","TableCell","sortByRank","PerformersList","sortedData","list","performer","PositivePerformingAudiencesCard","bottomData","topData","highLabel","lowLabel","card","layoutTokens","AudienceOverviewSection","conversionBottomPerformerData","conversionData","conversionTopPerformerData","measurementTypes","searchBottomPerformerData","searchData","searchTopPerformerData","visitBottomPerformerData","visitData","visitTopPerformerData","openItems","setOpenItems","sectionTitle","searchLiftTitle","visitLiftTitle","conversionLiftTitle","audienceTypeColumnHeader","cards","CampaignOverviewSection","campaignNameColumnHeader","borderBottomStyle","borderBottomWidth","borderRightStyle","borderRightWidth","borderTopStyle","borderTopWidth","Lift","displayedValue","isFinite","percentage","round","Title2","ConfidenceLevel","dataVizColors","CustomDataLabel","chartData","rawValue","horizontalBarChartdata","x","isRequired","y","TreatmentControl","maxValue","legend","yAxisCalloutData","chartTitle","getCustomDataLabel","HorizontalBarChart","barChartCustomData","PerformanceCard","subtitle","orientation","borderColor","ExperimentOverviewSection","searchTitle","searchSubtitle","visitTitle","visitSubtitle","conversionTitle","conversionSubtitle","ResultsPageHeader","onClickExcel","pageDescription","downloadLabel","ArrowDownload20Filled","borderSpacing","labelContents","StudySummaryCardField","StudySummaryCard","campaignsLabel","campaignsValue","countryValue","dateRangeLabel","dateRangeValue","keywordsLabel","keywordsValue","uetTagsLabel","uetTagsValue","firstRow","skeletonRoot","getFileName","extension","dateString","addWorksheet","workbook","sheetName","worksheet","XLSX","json_to_sheet","book_append_sheet","mainLayoutTokens","LiftMeasurementResults","setExperimentName","campaignsAsArray","setCampaignsAsArray","setCountry","setStartDate","setEndDate","setMeasurementTypes","_useState15","_useState16","setKeywords","_useState17","_useState18","setUetTags","_useState19","_useState20","setOverallResults","_useState21","_useState22","setAudienceResults","_useState23","_useState24","setTopPerformerResults","_useState25","_useState26","setBottomPerformerResults","_useState27","_useState28","setCampaignResults","_useState29","_useState30","liftStudyResults","setLiftStudyResults","fetchCampaigns","studyResults","transformedCampaigns","t1","fetchLiftStudyResults","_callee2","_context2","IsFetchLiftExperimentResultsSuccessful","apiData","transformedResults","rootArray","rootKey","transformedResult","isNaN","IsFetchingLiftExperimentResults","IsLiftMeasurementPage","LiftMeasurementPage","_onSuccess","_callee3","_context3","tagIds","uetTagNames","_x3","IsDownloadingLiftMeasurementExcelResults","book_new","fileName","downloadExcel","loadingMessage","SDKEventTypes","SDKReady","UpdatePermissions","SignUpUserAndCampaignCreated","SignUpComplete","CampaignCreated","LoginCompleted","SDKLandingPageReady","UpdateUsername","SDKAdBannerReady","AdBannerClicked","SDKSignInWithExistingAccount","SDKRedirectToSignInWithExistingAccountPage","sendSDKEvent","evt","parent","postMessage","fetchHasAvailableConversionGoals","path","IsActiveConversionGoalPresent","useHasConversionSetup","hasConversionSetup","setHasConversionSetup","resp","useCheckConversionGoalExists","hasConversionCallback","refreshConversionStatus","visibilityState","addEventListener","removeEventListener"],"sourceRoot":""}