From b2075690ea187a3302306e06f0c88dd9e19cd3d5 Mon Sep 17 00:00:00 2001 From: asvinb Date: Thu, 29 Aug 2024 18:11:38 +0400 Subject: [PATCH 01/18] Move PaidAdsFeaturesSection and PaidAdsSetupSections components. --- .../paid-ads/ads-campaign}/clientSession.js | 0 .../paid-ads/{ads-campaign.js => ads-campaign/index.js} | 8 ++++---- .../paid-ads/ads-campaign}/paid-ads-features-section.js | 0 .../paid-ads/ads-campaign}/paid-ads-features-section.scss | 0 .../paid-ads/ads-campaign}/paid-ads-setup-sections.js | 0 .../setup-stepper/setup-paid-ads/setup-paid-ads.js | 6 +++--- 6 files changed, 7 insertions(+), 7 deletions(-) rename js/src/{setup-mc/setup-stepper/setup-paid-ads => components/paid-ads/ads-campaign}/clientSession.js (100%) rename js/src/components/paid-ads/{ads-campaign.js => ads-campaign/index.js} (94%) rename js/src/{setup-mc/setup-stepper/setup-paid-ads => components/paid-ads/ads-campaign}/paid-ads-features-section.js (100%) rename js/src/{setup-mc/setup-stepper/setup-paid-ads => components/paid-ads/ads-campaign}/paid-ads-features-section.scss (100%) rename js/src/{setup-mc/setup-stepper/setup-paid-ads => components/paid-ads/ads-campaign}/paid-ads-setup-sections.js (100%) diff --git a/js/src/setup-mc/setup-stepper/setup-paid-ads/clientSession.js b/js/src/components/paid-ads/ads-campaign/clientSession.js similarity index 100% rename from js/src/setup-mc/setup-stepper/setup-paid-ads/clientSession.js rename to js/src/components/paid-ads/ads-campaign/clientSession.js diff --git a/js/src/components/paid-ads/ads-campaign.js b/js/src/components/paid-ads/ads-campaign/index.js similarity index 94% rename from js/src/components/paid-ads/ads-campaign.js rename to js/src/components/paid-ads/ads-campaign/index.js index 9de67da91e..abf9ca52be 100644 --- a/js/src/components/paid-ads/ads-campaign.js +++ b/js/src/components/paid-ads/ads-campaign/index.js @@ -13,10 +13,10 @@ import StepContentFooter from '.~/components/stepper/step-content-footer'; import AppDocumentationLink from '.~/components/app-documentation-link'; import AppButton from '.~/components/app-button'; import { useAdaptiveFormContext } from '.~/components/adaptive-form'; -import AudienceSection from './audience-section'; -import BudgetSection from './budget-section'; -import { CampaignPreviewCard } from './campaign-preview'; -import FaqsSection from './faqs-section'; +import AudienceSection from '../audience-section'; +import BudgetSection from '../budget-section'; +import { CampaignPreviewCard } from '../campaign-preview'; +import FaqsSection from '../faqs-section'; /** * @typedef {import('.~/data/actions').Campaign} Campaign diff --git a/js/src/setup-mc/setup-stepper/setup-paid-ads/paid-ads-features-section.js b/js/src/components/paid-ads/ads-campaign/paid-ads-features-section.js similarity index 100% rename from js/src/setup-mc/setup-stepper/setup-paid-ads/paid-ads-features-section.js rename to js/src/components/paid-ads/ads-campaign/paid-ads-features-section.js diff --git a/js/src/setup-mc/setup-stepper/setup-paid-ads/paid-ads-features-section.scss b/js/src/components/paid-ads/ads-campaign/paid-ads-features-section.scss similarity index 100% rename from js/src/setup-mc/setup-stepper/setup-paid-ads/paid-ads-features-section.scss rename to js/src/components/paid-ads/ads-campaign/paid-ads-features-section.scss diff --git a/js/src/setup-mc/setup-stepper/setup-paid-ads/paid-ads-setup-sections.js b/js/src/components/paid-ads/ads-campaign/paid-ads-setup-sections.js similarity index 100% rename from js/src/setup-mc/setup-stepper/setup-paid-ads/paid-ads-setup-sections.js rename to js/src/components/paid-ads/ads-campaign/paid-ads-setup-sections.js diff --git a/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js b/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js index f5dd0f9a07..4eb2a1b305 100644 --- a/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js +++ b/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js @@ -20,10 +20,10 @@ import StepContentHeader from '.~/components/stepper/step-content-header'; import StepContentFooter from '.~/components/stepper/step-content-footer'; import FaqsSection from '.~/components/paid-ads/faqs-section'; import AppButton from '.~/components/app-button'; -import PaidAdsFeaturesSection from './paid-ads-features-section'; -import PaidAdsSetupSections from './paid-ads-setup-sections'; +import PaidAdsFeaturesSection from '.~/components/paid-ads/ads-campaign/paid-ads-features-section'; +import PaidAdsSetupSections from '.~/components/paid-ads/ads-campaign/paid-ads-setup-sections'; import { getProductFeedUrl } from '.~/utils/urls'; -import clientSession from './clientSession'; +import clientSession from '.~/components/paid-ads/ads-campaign/clientSession'; import { API_NAMESPACE, STORE_KEY } from '.~/data/constants'; import { GUIDE_NAMES } from '.~/constants'; From f65fbee80a2d6ae13b48e03dcbabcd6d39b1b5b7 Mon Sep 17 00:00:00 2001 From: asvinb Date: Mon, 2 Sep 2024 11:56:33 +0400 Subject: [PATCH 02/18] Save Work in progress. --- .../components/paid-ads/ads-campaign/index.js | 24 ++++++-- .../ads-campaign/paid-ads-setup-sections.js | 56 ++++++------------- js/src/setup-ads/ads-stepper/index.js | 2 +- js/src/setup-mc/setup-stepper/index.js | 10 ++-- .../setup-stepper/saved-setup-stepper.js | 12 +++- .../setup-paid-ads/setup-paid-ads.js | 2 + 6 files changed, 57 insertions(+), 49 deletions(-) diff --git a/js/src/components/paid-ads/ads-campaign/index.js b/js/src/components/paid-ads/ads-campaign/index.js index abf9ca52be..7c568ab513 100644 --- a/js/src/components/paid-ads/ads-campaign/index.js +++ b/js/src/components/paid-ads/ads-campaign/index.js @@ -2,7 +2,7 @@ * External dependencies */ import { __ } from '@wordpress/i18n'; -import { createInterpolateElement } from '@wordpress/element'; +import { createInterpolateElement, useState } from '@wordpress/element'; /** * Internal dependencies @@ -16,7 +16,10 @@ import { useAdaptiveFormContext } from '.~/components/adaptive-form'; import AudienceSection from '../audience-section'; import BudgetSection from '../budget-section'; import { CampaignPreviewCard } from '../campaign-preview'; +import useGoogleAdsAccount from '.~/hooks/useGoogleAdsAccount'; import FaqsSection from '../faqs-section'; +import PaidAdsFeaturesSection from './paid-ads-features-section'; +import PaidAdsSetupSections from './paid-ads-setup-sections'; /** * @typedef {import('.~/data/actions').Campaign} Campaign @@ -29,7 +32,6 @@ import FaqsSection from '../faqs-section'; * so it expects a `CampaignAssetsForm` to existing in its parents. * * @fires gla_documentation_link_click with `{ context: 'create-ads' | 'edit-ads' | 'setup-ads', link_id: 'see-what-ads-look-like', href: 'https://support.google.com/google-ads/answer/6275294' }` - * * @param {Object} props React props. * @param {Campaign} [props.campaign] Campaign data to be edited. If not provided, this component will show campaign creation UI. * @param {() => void} props.onContinue Callback called once continue button is clicked. @@ -42,7 +44,12 @@ export default function AdsCampaign( { } ) { const isCreation = ! campaign; const formContext = useAdaptiveFormContext(); - const { isValidForm } = formContext; + const { isValidForm, setValue } = formContext; + const { googleAdsAccount, hasGoogleAdsConnection } = useGoogleAdsAccount(); + const handleOnStatesReceived = ( { amount, countryCodes } ) => { + setValue( 'amount', amount ); + setValue( 'countryCodes', countryCodes ); + }; const disabledBudgetSection = ! formContext.values.countryCodes.length; const helperText = isCreation @@ -85,7 +92,7 @@ export default function AdsCampaign( { } ) } /> - +
*/ } + + + { /* TODO: Add disabled={ ! isCreation } for AudienceSection */ } + + void} props.onStatesReceived Callback to receive the data for setting up paid ads when initial and also when the audience, budget, and billing are updated. */ export default function PaidAdsSetupSections( { onStatesReceived } ) { + const formProps = useAdaptiveFormContext(); const { hasGoogleAdsConnection } = useGoogleAdsAccount(); const { data: targetAudience } = useTargetAudienceFinalCountryCodes(); const { billingStatus } = useGoogleAdsAccountBillingStatus(); @@ -140,44 +141,23 @@ export default function PaidAdsSetupSections( { onStatesReceived } ) { ); } - const initialValues = { - countryCodes: paidAds.countryCodes, - amount: paidAds.amount, - }; + const { countryCodes } = formProps.values; + const disabledAudience = ! hasGoogleAdsConnection; + const disabledBudget = disabledAudience || countryCodes.length === 0; return ( -
{ - setPaidAds( { ...paidAds, ...values, isValid } ); - } } - validate={ validateCampaign } - > - { ( formProps ) => { - const { countryCodes } = formProps.values; - const disabledAudience = ! hasGoogleAdsConnection; - const disabledBudget = - disabledAudience || countryCodes.length === 0; - - return ( - <> - - - { ! disabledBudget && } - - - ); - } } - + <> + + + { ! disabledBudget && } + + ); } diff --git a/js/src/setup-ads/ads-stepper/index.js b/js/src/setup-ads/ads-stepper/index.js index 3979e0dcba..e1391caa70 100644 --- a/js/src/setup-ads/ads-stepper/index.js +++ b/js/src/setup-ads/ads-stepper/index.js @@ -26,7 +26,7 @@ import { * @fires gla_setup_ads with `{ triggered_by: 'stepper-step1-button' | 'stepper-step2-button', action: 'go-to-step1' | 'go-to-step2' }`. */ const AdsStepper = ( { formProps } ) => { - const [ step, setStep ] = useState( '1' ); + const [ step, setStep ] = useState( '2' ); useEventPropertiesFilter( FILTER_ONBOARDING, { context: CONTEXT_ADS_ONBOARDING, diff --git a/js/src/setup-mc/setup-stepper/index.js b/js/src/setup-mc/setup-stepper/index.js index 2c35a06064..dacc5ec1f1 100644 --- a/js/src/setup-mc/setup-stepper/index.js +++ b/js/src/setup-mc/setup-stepper/index.js @@ -26,12 +26,12 @@ const SetupStepper = () => { const { status, step } = mcSetup; - if ( status === 'complete' ) { - getHistory().replace( getNewPath( {}, '/google/dashboard' ) ); - return null; - } + // if ( status === 'complete' ) { + // getHistory().replace( getNewPath( {}, '/google/dashboard' ) ); + // return null; + // } - return ; + return ; }; export default SetupStepper; diff --git a/js/src/setup-mc/setup-stepper/saved-setup-stepper.js b/js/src/setup-mc/setup-stepper/saved-setup-stepper.js index 000b0a9336..71344599a4 100644 --- a/js/src/setup-mc/setup-stepper/saved-setup-stepper.js +++ b/js/src/setup-mc/setup-stepper/saved-setup-stepper.js @@ -23,6 +23,7 @@ import SetupFreeListings from '.~/components/free-listings/setup-free-listings'; import StoreRequirements from './store-requirements'; import SetupPaidAds from './setup-paid-ads'; import stepNameKeyMap from './stepNameKeyMap'; +import CampaignAssetsForm from '.~/components/paid-ads/campaign-assets-form'; import { recordStepperChangeEvent, recordStepContinueEvent, @@ -225,7 +226,16 @@ const SavedSetupStepper = ( { savedStep } ) => { { key: stepNameKeyMap.paid_ads, label: __( 'Create a campaign', 'google-listings-and-ads' ), - content: , + content: ( + + + + ), onClick: handleStepClick, }, ] } diff --git a/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js b/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js index 4eb2a1b305..60eab7b297 100644 --- a/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js +++ b/js/src/setup-mc/setup-stepper/setup-paid-ads/setup-paid-ads.js @@ -169,6 +169,7 @@ export default function SetupPaidAds() { 'google-listings-and-ads' ) } /> + ) } +