{"version":3,"file":"static/js/application.async.non-landing~f919398d.c3ee4472.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/linkedin-utils/src/campaign-goal.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-utils/src/permission-status.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-utils/src/wizard-utils.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-utils/src/audience.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/edm-crud/campaign-crud.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/edm-crud/ad-group-crud.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/edm-crud/ad-crud.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/edm-crud/location.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/edm-crud/audience.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/edm-crud/company-page-linking.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/model/campaign.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/model/ad.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/model/budget.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/model/criterion.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-data/src/error-handling/bulk-upsert-errors.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/use-initialize-wizard.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/use-initialize-company-page.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-instrumentation/src/use-intrument-logger.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/reducer.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-linkedin-linking.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-load-compony-pages.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-save-company-page.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-error.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-refresh-member-token.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-shared-components/src/step-header.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-shared-components/src/linkedin-logo.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-shared-components/src/common-skeletons.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-shared-components/src/member-token-warning.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/styles/authentication-stage-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/stages/authentication-stage.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/shared-components/compony-page-item.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/styles/company-page-selection-stage-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/shared-components/term-and-conditions.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/stages/company-page-selection-stage.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/styles/request-access-stage-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/stages/request-access-stage.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/styles/permission-check-stage-V2-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/stages/permission-check-stage-V2.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-load-permission-status.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/hooks/use-resend-permission-request.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/stages/member-token-refresh-stage.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/campaign-panel.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/styles/company-page-style.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/company-page-card.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/styles/linkedIn-ad-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/collapsible-final-url.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/call-to-action.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/collapsible-call-to-action.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/collapsible-introductory-text.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/hooks/use-disabled-keynav-region.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/collapsible-headline.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/collapsible-images.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/consts.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/media-editor-controls.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/linkedin-ad-settings.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/styles/ad-previewer-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/ad-previewer.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/use-ad-preview-state.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/use-ad-preview-data.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/components/linkedin-ad-footer.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/linkedIn-ad-step.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/linkedIn-ad-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ad/src/use-ad-editor-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ads-manager/src/styles/ad-preview-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ads-manager/src/components/ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ads-manager/src/styles/ads-manager-step-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ads-manager/src/linkedin-ads-manager-step.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/skeletons.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/cards/collapsible-locations.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/targeting-locations.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/language-info-banner.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/consts.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/targeting-language.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/cards/collapsible-language.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/styles/company-name-option-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/styles/targeting-audiences-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/targeting-audiences.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/company-name-option.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/cards/collapsible-audiences.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/targeting-gender.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/cards/collapsible-gender.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/targeting-age.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/cards/collapsible-age.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/warning-message.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/cards/collapsible-conversion-goals.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/components/conversion-goals.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/styles/targeting-step-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/targeting-step.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/use-targeting-locations-adapter.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/use-targeting-audiences-adapter.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/use-targeting-age-adapter.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/use-targeting-gender-adapter.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/use-campaign-conversion-goals-adapter.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-targeting/src/use-targeting-step-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/components/skeletons.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/cards/budget-card.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/cards/bid-strategy-card.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/cards/date-setting-card.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/styles/budget-form-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/components/budget-form.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/styles/budget-step-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/use-budget-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/use-summary-schema.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/use-summary-schema-data.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/components/audience-targeting.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/components/company-page.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/components/ads-review-info-banner.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/components/goal-details.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/styles/summary-step-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/summary-step.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/components/ad-count.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/components/goal-count.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-summary/src/use-summary-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-adgroup-settings/src/styles/linkedin-adgroup-settings-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-adgroup-settings/src/components/skeletons.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-adgroup-settings/src/cards/adgroup-name-card.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-adgroup-settings/src/linkedin-adgroup-settings.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-adgroup-settings/src/use-linkedin-adgroup-settings-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-settings/src/styles/linkedin-campaign-settings-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-settings/src/linkedin-campaign-settings.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-settings/src/use-campaign-settings-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/steps/step-config.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/company-page-linking-step.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-company-page-linking/src/utils.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-ads-manager/src/use-linkedin-ads-manager-repository.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-budget/src/budget-step.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/mmp-provider.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/layout-config.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/processing-blocker.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/terms-and-conditions.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/styles/wizard-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/step-footer.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/styles/summary-panel-styles.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/summary-panel-view.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/summary-panel-config.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/custom-layout-container.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/steps/step-list-config.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/campaign-creation-wizard.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/wizard-components/single-step-layout-container.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/base-single-step-wizard.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/campaign-settings-wizard.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/adgroup-settings-wizard.js","../../../node_modules/@bingads-webui-campaign-react/linkedin-campaign-wizard/src/ad-editor-wizard.js"],"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 \r\n \r\n {i18n.getString(_TL_('The administrator of the company\\'s LinkedIn page needs to grant you permission to serve ads.'))}\r\n \r\n {i18n.getString(_TL_('Learn more'))}\r\n \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 \r\n {i18n.getString(_TL_(' Please re-login to the correct account.'))}\r\n \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 \r\n \r\n {title && {title}}\r\n {content}\r\n \r\n \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 \r\n

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

\r\n

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

\r\n
\r\n );\r\n};\r\n\r\nStepHeader.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const LinkedInLogo = React.memo(({ width, height }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n));\r\n\r\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(() => );\r\nexport const LinkedInLogo40 = React.memo(() => );\r\nexport const LinkedInLogo120 = React.memo(() => );\r\n\r\nexport const LinkedInIconWhite = React.memo(({ width, height }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n));\r\n\r\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
\r\n \r\n
\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
\r\n \r\n
\r\n \r\n
\r\n
\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
\r\n \r\n
\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 \r\n \r\n {_TL_('Your LinkedIn authentication has been revoked.')}\r\n {_TL_('Please re-authenticate to continue using LinkedIn features.')}\r\n \r\n \r\n \r\n \r\n \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
\r\n
\r\n
\r\n \r\n
\r\n \r\n {i18n.getString(_TL_('Connect to your company\\'s LinkedIn page'))}\r\n \r\n \r\n \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 \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n
\r\n {FEATURES.map(feature => (\r\n
\r\n \r\n {i18n.getString(feature.text)}\r\n
\r\n ))}\r\n
\r\n
\r\n {serverError}\r\n
\r\n \r\n }\r\n >\r\n {i18n.getString(_TL_('Connect'))}\r\n \r\n
\r\n
\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
\r\n {companyPageName}\r\n
\r\n \r\n {companyPageName}\r\n \r\n { industry && {industry}}\r\n
\r\n
\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 (\r\n \r\n {text}\r\n \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 \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 \r\n ), []);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n {i18n.getString(_TL_('Connect to your company’s LinkedIn page'))}\r\n \r\n {i18n.getString(_TL_('Connect to your company to advertise on LinkedIn.'))}\r\n
\r\n
\r\n {selectedCompanyPageId ? (\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n onChangePageSelection(null)}\r\n >\r\n {i18n.getString(_TL_('Update'))}\r\n \r\n
\r\n
\r\n
\r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {serverError}\r\n
\r\n \r\n\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Next'))}\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('You cannot change your company page once you’ve connected'))}\r\n {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 \r\n \r\n \r\n {i18n.getString(_TL_('Continue'))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n );\r\n};\r\n\r\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
\r\n
\r\n
\r\n \r\n \r\n {i18n.getString(_TL_('Permission required'))}\r\n \r\n \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 \r\n
\r\n
\r\n \r\n
\r\n
\r\n {serverError}\r\n
\r\n \r\n {i18n.getString(_TL_('Request permission'))}\r\n \r\n
\r\n
\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
\r\n \r\n \r\n {i18n.getString(title)}\r\n \r\n \r\n {i18n.getString(description)}\r\n \r\n
\r\n );\r\n }, [state, classes, i18n]);\r\n\r\n const renderActionButtons = useMemo(() => (\r\n
\r\n {permissionStatus === PERMISSION_STATUS.REQUESTED && (\r\n \r\n {i18n.getString(_TL_('Check status'))}\r\n \r\n )}\r\n {permissionStatus === PERMISSION_STATUS.REJECTED && isOrgUpdateAllowed && (\r\n \r\n {i18n.getString(_TL_('Go back'))}\r\n \r\n )}\r\n {permissionStatus === PERMISSION_STATUS.REJECTED && (\r\n \r\n {i18n.getString(_TL_('Resend request'))}\r\n \r\n )}\r\n {permissionStatus === PERMISSION_STATUS.APPROVED && (\r\n }\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 \r\n )}\r\n
\r\n ), [classes.actionsContainer, permissionStatus, onCheckStatus, i18n, isOrgUpdateAllowed, onGoback, onResend, isResendingPermissionRequest]);\r\n\r\n return (\r\n
\r\n
\r\n {renderPermissionStatusSession}\r\n
\r\n \r\n
\r\n
\r\n {serverError}\r\n {renderActionButtons}\r\n
\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
\r\n
\r\n
\r\n \r\n
\r\n \r\n {i18n.getString(_TL_('Refresh linkedin authentication'))}\r\n \r\n \r\n \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 \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n
\r\n {FEATURES.map(feature => (\r\n
\r\n \r\n {i18n.getString(feature.text)}\r\n
\r\n ))}\r\n
\r\n
\r\n {serverError}\r\n
\r\n \r\n }\r\n >\r\n {i18n.getString(_TL_('Login'))}\r\n \r\n
\r\n
\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
\r\n \r\n \r\n \r\n }\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\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
\r\n \r\n \r\n }\r\n />\r\n \r\n {/* TODO: add Learn more link */}\r\n

{descriptionText}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n {companyPageName}\r\n {industryText}\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\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 \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \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
\r\n \r\n {CallToActionOptions.map(option => (\r\n \r\n ))}\r\n \r\n
\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 \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \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
\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\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 \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\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 \r\n \r\n }\r\n />\r\n \r\n {i18n.getString(_TL_('Add one image per ad.'))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\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 \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Are you sure you want to change your aspect ratio for cropping images?'))}\r\n \r\n \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 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\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 \r\n \r\n \r\n {i18n.getString(_TL_('Crop'))}\r\n \r\n \r\n \r\n {items.map(({ type, label }) => (\r\n showConfirmationDialog(type)}>\r\n {label}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Note'))}\r\n \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 \r\n \r\n \r\n \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 \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
\r\n \r\n
), [i18n, permissions, onUpdateFinalUrls, previewImagesSharedState, setPreviewImagesSharedState, adData, suggestionPoller, perfMarker, adPreviewConfig, adPreviewData, openEditor, saveChanges, onRenderAllowedAspectRatioControl]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {copilotBanner}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {imageExperienceComponents}\r\n
\r\n \r\n \r\n
\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
\r\n {i18n.getString(previewTitle)}\r\n {showEditButton && (\r\n \r\n )}\r\n
\r\n );\r\n }, [classes.header, i18n, isAdEditor, openEditor]);\r\n\r\n const onRenderPlacement = useCallback((placement, AdPlacementComponent) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n {i18n.getString(_TL_('These are examples of how your ads could appear. Depending on placement, the actual ad shown may appear differently.'))}\r\n \r\n
\r\n ), [i18n, adPreviewData, classes.placementAndCaptionContainer, classes.placementContainer, classes.caption]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \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
\r\n \r\n {i18n.getString(_TL_('Save & create another ad'))}\r\n \r\n
\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
\r\n
\r\n \r\n
\r\n {isAdEditor && isMemberTokenRevoked && }\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {!isAdEditor && (\r\n \r\n )}\r\n {!isAdEditor && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {(EnableMultiAd && !isAdEditor) && }\r\n
\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
\r\n }\r\n header={
{companyPageName}
}\r\n description={{i18n.getString(_TL_('Promoted'))}}\r\n />\r\n\r\n
\r\n {introductoryText}\r\n
\r\n\r\n \r\n \"ad\r\n \r\n\r\n \r\n
\r\n {headline}\r\n {finalUrl}\r\n
\r\n
\r\n
\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
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\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 \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LanguageSkeleton = () => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const AudiencesSkeleton = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const ConversionSkeleton = () => () => (\r\n \r\n \r\n \r\n \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 \r\n }\r\n />\r\n \r\n {!isLoading ? (\r\n \r\n ) : }\r\n \r\n \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 \r\n \r\n \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 {text} }}\r\n />\r\n );\r\n }, [i18n]);\r\n\r\n return (\r\n \r\n \r\n \r\n {bannerMessage}\r\n \r\n \r\n \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
\r\n \r\n {isEnglishSelected && }\r\n
\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 \r\n }\r\n />\r\n \r\n {!isLoading ? : }\r\n \r\n \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
\r\n \r\n {i18n.getString(_TL_('How do you want to target your audience? Choose from the targeting options below.'))}\r\n \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 \r\n );\r\n })}\r\n
\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
\r\n
\r\n {logo && }\r\n
\r\n {name}\r\n
\r\n
\r\n
\r\n {industry}; {LinkedInAudienceCompanySizeMap[size]}\r\n
\r\n
\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 \r\n }\r\n />\r\n \r\n {!isLoading ? (\r\n \r\n ) : }\r\n \r\n \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
\r\n \r\n
\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 \r\n }\r\n />\r\n \r\n {!isLoading\r\n ? \r\n : }\r\n \r\n \r\n {!isLoading\r\n ? formatGenders(genders, i18n)\r\n : }\r\n \r\n \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
\r\n \r\n
\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 \r\n }\r\n />\r\n \r\n {!isLoading\r\n ? \r\n : }\r\n \r\n \r\n {!isLoading\r\n ? formatAgeRanges(ageRanges, i18n)\r\n : }\r\n \r\n \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 {text},\r\n link: text => (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n \r\n {text}\r\n \r\n ),\r\n }}\r\n />\r\n ), [template, onNavigateToConversionGoalsClicked]);\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('You haven’t yet created any conversion goals that are compatible with LinkedIn.'))}\r\n {noGoalsAvailableWarningMessage}\r\n \r\n \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 \r\n }\r\n helpLabel={i18n.getString(_TL_('Click to learn more about conversions'))}\r\n helpTopic=\"pop_BA_LinkedIn_Conversions\"\r\n />\r\n \r\n {!isLoading && hasLinkedInCompatibleGoals && (\r\n \r\n )}\r\n {!isLoading && !hasLinkedInCompatibleGoals && (\r\n \r\n )}\r\n {isLoading && }\r\n \r\n \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
\r\n {i18n.getString(_TL_('Measure the actions that people take on your website after clicking or viewing your ad on LinkedIn.'))}\r\n
\r\n ), [i18n]);\r\n\r\n return (\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
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {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 \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nTargetingStep.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n 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 \r\n \r\n \r\n \r\n);\r\n\r\nexport const BidStrategySkeleton = () => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const DateSettingSkeleton = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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 \r\n }\r\n helpTopic=\"pop_BA_LinkedIn_Budget\"\r\n helpLabel={i18n.getString(_TL_('Click to learn more about budget'))}\r\n />\r\n \r\n {data ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \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 \r\n }\r\n helpTopic=\"pop_BA_LinkedIn_BidStrategy\"\r\n helpLabel={i18n.getString(_TL_('Click to learn more about bid strategy'))}\r\n />\r\n \r\n {data ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \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 \r\n \r\n \r\n {data ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \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 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\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
\r\n \r\n {category}\r\n \r\n \r\n {formattedTargets}\r\n \r\n
\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 \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\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 \r\n
\r\n {Name}\r\n {caption}\r\n
\r\n
\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 \r\n \r\n \r\n {i18n.getString(_TL_('Reviewing your ad could take us one business day. Once reviewed, your ad will run.'))}\r\n {' '}\r\n {/* \r\n {i18n.getString(_TL_('Learn more'))}\r\n */}\r\n \r\n \r\n \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 {text} }}\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 {text},\r\n link: text => (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n \r\n {text}\r\n \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
\r\n {goals.length > 0 && (\r\n \r\n {formattedGoals}\r\n \r\n )}\r\n {\r\n goals.length === 0 && (\r\n \r\n \r\n {i18n.getString(_TL_('No conversion goals selected.'))}\r\n {warningMessage}\r\n \r\n \r\n )\r\n }\r\n
\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
\r\n \r\n {!isLoading && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\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 \r\n {`${numAds} ${i18n.getString(numAds === 1 ? _TL_('Ad') : _TL_('Ads'))}`}\r\n \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 \r\n {numGoals}\r\n \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 \r\n \r\n \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 \r\n \r\n \r\n {data ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \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
\r\n {isMemberTokenRevoked && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\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
\r\n \r\n \r\n
\r\n ), [campaign, classes.cardContainer, companyInfo, onDataChange]);\r\n\r\n const budgetSection = useMemo(() => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ), [onValidateBudget, classes.cardContainer, budgetCards, expandedBudgetCards, setBudgetExpandedCards, budget, expandBudgetCard]);\r\n\r\n const targetingSection = useMemo(() => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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
\r\n \r\n \r\n \r\n \r\n \r\n {isMemberTokenRevoked && }\r\n {campaignSection}\r\n {budgetSection}\r\n {targetingSection}\r\n \r\n \r\n \r\n \r\n
\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 => ,\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
\r\n {currentLinkingStage === LINKING_STAGES.MEMBER_TOKEN_REFRESH &&\r\n \r\n }\r\n {currentLinkingStage === LINKING_STAGES.LINKEDIN_AUTHENTICATION &&\r\n \r\n }\r\n {currentLinkingStage === LINKING_STAGES.COMPANY_PAGE_SELECTION &&\r\n \r\n }\r\n {currentLinkingStage === LINKING_STAGES.REQUEST_ACCESS &&\r\n \r\n }\r\n {currentLinkingStage === LINKING_STAGES.PERMISSION_CHECK &&\r\n \r\n }\r\n {errorDialog}\r\n
\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
\r\n \r\n
\r\n \r\n
\r\n
\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 \r\n {children}\r\n \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 \r\n {children}\r\n \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 {text},\r\n link: text => (\r\n \r\n {text}\r\n \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 \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
\r\n {showTermsAndConditions && (\r\n \r\n )}\r\n \r\n
\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
\r\n \r\n {i18n.getString(_TL_('Target audience size'))}\r\n \r\n {loading && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n {!loading && (\r\n <>\r\n \r\n {dataToDisplay}\r\n \r\n {isAudienceTooNarrow(data.audienceSize) && (\r\n \r\n {i18n.getString(_TL_('Oops! Your audience is too small to create a campaign. Please expand your audience.'))}\r\n \r\n )}\r\n \r\n )}\r\n
\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