diff --git a/src/OnboardingSPA/components/Header/components/SiteGenHeader/index.js b/src/OnboardingSPA/components/Header/components/SiteGenHeader/index.js index a75ec317f..6a5834935 100644 --- a/src/OnboardingSPA/components/Header/components/SiteGenHeader/index.js +++ b/src/OnboardingSPA/components/Header/components/SiteGenHeader/index.js @@ -16,6 +16,7 @@ import StepNavigation from './step-navigation'; // eslint-disable-next-line import/no-extraneous-dependencies import { findIndex } from 'lodash'; +import { stepMigration } from '../../../../steps/SiteGen/Migration/step'; /** * Interface header rendered into header render prop in . @@ -23,16 +24,16 @@ import { findIndex } from 'lodash'; * @return {WPComponent} Header */ const SiteGenHeader = () => { - const { isHeaderNavigationEnabled, currentStep, allSteps } = useSelect( - ( select ) => { + const { isHeaderNavigationEnabled, currentStep, allSteps, currentRoute } = + useSelect( ( select ) => { return { currentStep: select( nfdOnboardingStore ).getCurrentStep(), + currentRoute: select( nfdOnboardingStore ).getCurrentStepPath(), isHeaderNavigationEnabled: select( nfdOnboardingStore ).isHeaderNavigationEnabled(), allSteps: select( nfdOnboardingStore ).getAllSteps(), }; - } - ); + } ); const currentStepIndex = findIndex( allSteps, { path: currentStep?.path, @@ -45,9 +46,10 @@ const SiteGenHeader = () => { <> - { currentStep !== stepTheFork && ( - - ) } + { currentStep !== stepTheFork && + currentRoute !== stepMigration.path && ( + + ) } diff --git a/src/OnboardingSPA/components/NewfoldInterfaceSkeleton/SiteBuild/index.js b/src/OnboardingSPA/components/NewfoldInterfaceSkeleton/SiteBuild/index.js index 954a9a660..35e27a6f1 100644 --- a/src/OnboardingSPA/components/NewfoldInterfaceSkeleton/SiteBuild/index.js +++ b/src/OnboardingSPA/components/NewfoldInterfaceSkeleton/SiteBuild/index.js @@ -55,6 +55,7 @@ import { stepTheFork } from '../../../steps/TheFork/step'; import { ThemeProvider } from '../../ThemeContextProvider'; import themeToggleHOC from '../themeToggleHOC'; import Footer from '../../Footer'; +import { stepMigration } from '../../../steps/SiteGen/Migration/step'; const SiteBuild = () => { const location = useLocation(); @@ -67,6 +68,7 @@ const SiteBuild = () => { onboardingFlow, currentData, currentStep, + currentRoute, lastChapter, socialData, firstStep, @@ -99,6 +101,7 @@ const SiteBuild = () => { initialize: select( nfdOnboardingStore ).getInitialize(), pluginInstallHash: select( nfdOnboardingStore ).getPluginInstallHash(), + currentRoute: select( nfdOnboardingStore ).getCurrentStepPath(), }; }, [ location.pathname ] @@ -431,6 +434,7 @@ const SiteBuild = () => { const isForkStep = currentStep === stepTheFork || + currentRoute === stepMigration.path || window.nfdOnboarding.currentFlow === 'sitegen'; // wrapping the NewfoldInterfaceSkeleton with the HOC to make 'theme' available const ThemedNewfoldInterfaceSkeleton = themeToggleHOC( diff --git a/src/OnboardingSPA/data/flows/ecommerce.js b/src/OnboardingSPA/data/flows/ecommerce.js index 68bca7e04..956c6d2e5 100644 --- a/src/OnboardingSPA/data/flows/ecommerce.js +++ b/src/OnboardingSPA/data/flows/ecommerce.js @@ -19,6 +19,7 @@ import { filter } from 'lodash'; import { store } from '@wordpress/icons'; import { __ } from '@wordpress/i18n'; import { stepTheFork } from '../../steps/TheFork/step'; +import { stepMigration } from '../../steps/SiteGen/Migration/step'; export const pages = [ indexPage, errorPage ]; @@ -50,6 +51,7 @@ export const getSteps = ( chapters = initialChapters ) => { export const getRoutes = ( chapters = initialChapters ) => { let routes = [ ...pages ]; routes.push( stepTheFork ); + routes.push( stepMigration ); routes.push( stepWelcome ); chapters.forEach( ( chapter ) => { routes = routes.concat( [ diff --git a/src/OnboardingSPA/steps/SiteGen/Migration/contents.js b/src/OnboardingSPA/steps/SiteGen/Migration/contents.js new file mode 100644 index 000000000..985490d00 --- /dev/null +++ b/src/OnboardingSPA/steps/SiteGen/Migration/contents.js @@ -0,0 +1,17 @@ +import { __ } from '@wordpress/i18n'; + +const getContents = () => { + return { + heading: __( + "Let's migrate your existing site to your new account", + 'wp-module-onboarding' + ), + description: __( + 'Please wait a few seconds while we get your new account ready to import your existing WordPress site. ', + 'wp-module-onboarding' + ), + importtext: __( 'Preparing your account', 'wp-module-onboarding' ), + }; +}; + +export default getContents; diff --git a/src/OnboardingSPA/steps/SiteGen/Migration/index.js b/src/OnboardingSPA/steps/SiteGen/Migration/index.js new file mode 100644 index 000000000..f9d3fe44e --- /dev/null +++ b/src/OnboardingSPA/steps/SiteGen/Migration/index.js @@ -0,0 +1,56 @@ +import CommonLayout from '../../../components/Layouts/Common'; + +import { useEffect } from '@wordpress/element'; +import { useDispatch } from '@wordpress/data'; + +import { store as nfdOnboardingStore } from '../../../store'; +import { FOOTER_SITEGEN, HEADER_SITEGEN } from '../../../../constants'; + +import getContents from './contents'; +import HeadingWithSubHeading from '../../../components/HeadingWithSubHeading/SiteGen'; +import { getSiteMigrateUrl } from '../../../utils/api/siteGen'; + +const Migrate = () => { + const { + setIsHeaderEnabled, + setSidebarActiveView, + setHeaderActiveView, + setDrawerActiveView, + setIsHeaderNavigationEnabled, + setFooterActiveView, + setHideFooterNav, + } = useDispatch( nfdOnboardingStore ); + + const loadData = async () => { + const migrateUrl = await getSiteMigrateUrl(); + migrateUrl?.body && window.open(migrateUrl?.body, "_self") + }; + + useEffect( () => { + setHideFooterNav( true ); + setIsHeaderEnabled( false ); + setSidebarActiveView( false ); + setIsHeaderNavigationEnabled( false ); + setHeaderActiveView( HEADER_SITEGEN ); + setDrawerActiveView( false ); + setFooterActiveView( FOOTER_SITEGEN ); + loadData() + } ); + + const content = getContents(); + return ( + + +
+
{ ' ' } +

{ content?.importtext }

+
+

{ content?.description }

+
+ ); +}; + +export default Migrate; diff --git a/src/OnboardingSPA/steps/SiteGen/Migration/step.js b/src/OnboardingSPA/steps/SiteGen/Migration/step.js new file mode 100644 index 000000000..d29a21840 --- /dev/null +++ b/src/OnboardingSPA/steps/SiteGen/Migration/step.js @@ -0,0 +1,19 @@ +import { copy } from '@wordpress/icons'; +import { lazy } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { Step } from '../../../data/models/Step'; + +const StepMigration = lazy( () => import( './index' ) ); + +export const stepMigration = new Step( { + path: '/sitegen/step/migration', + title: __( 'Migration', 'wp-module-onboarding' ), + Component: StepMigration, + icon: copy, + drawerNavigation: false, + sidebars: { + LearnMore: { + SidebarComponents: [], + }, + }, +} ); diff --git a/src/OnboardingSPA/steps/SiteGen/Migration/stylesheet.scss b/src/OnboardingSPA/steps/SiteGen/Migration/stylesheet.scss new file mode 100644 index 000000000..db9ea90bf --- /dev/null +++ b/src/OnboardingSPA/steps/SiteGen/Migration/stylesheet.scss @@ -0,0 +1,41 @@ +.nfd-onboarding-step--site-gen__migration { + display: flex; + align-items: center; + flex-direction: column; + justify-content: flex-start; + font-weight: 500; + .description{ + font-size: 18px; + color: var(--nfd-onboarding-primary); + margin: 50px 0; + } + .nfd-onboarding-step--site-gen__migration__contain { + display: flex; + align-items: center; + border-radius: 12px; + gap: 16px; + padding: 24px; + background-color: var(--nfd-onboarding-card-background); + justify-content: center; + width: 436px; + .importtext{ + color: var(--nfd-onboarding-primary); + font-size: 16px; + font-weight: 500; + } + .nfd-onboarding-step--site-gen__migration__loader { + border: 5px solid var(--nfd-onboarding-progress-bar-background); + border-top: 5px solid var(--nfd-onboarding-progress-bar-fill); + border-radius: 50%; + width: 29px; + height: 28px; + animation: spin 2s linear infinite; + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + } + +} \ No newline at end of file diff --git a/src/OnboardingSPA/steps/TheFork/index.js b/src/OnboardingSPA/steps/TheFork/index.js index 1bb4cf42b..0e11b0ce7 100644 --- a/src/OnboardingSPA/steps/TheFork/index.js +++ b/src/OnboardingSPA/steps/TheFork/index.js @@ -20,6 +20,7 @@ import { trackOnboardingEvent, } from '../../utils/analytics/hiive'; import { ACTION_SITEGEN_FORK_OPTION_SELECTED } from '../../utils/analytics/hiive/constants'; +import { useNavigate } from 'react-router-dom'; const TheFork = () => { const { migrationUrl } = useSelect( ( select ) => { @@ -63,6 +64,8 @@ const TheFork = () => { window.location.replace( pluginDashboardPage ); }; const content = getContents(); + const navigate = useNavigate(); + return ( {

{ migrationUrl && ( - + // href={ migrationUrl } + // target={ '_blank' } + // rel={ 'noreferrer' } + onClick={ () => { + navigate( '/sitegen/step/migration' ); trackOnboardingEvent( new OnboardingEvent( ACTION_SITEGEN_FORK_OPTION_SELECTED, 'MIGRATE' ) - ) - } + ); + } } > { content.importtext } - + ) } { return ( @@ -15,6 +15,12 @@ export const installerRestURL = ( api ) => { ); }; +export const migrateRestURL = ( api ) => { + return ( + `${ migrateRestBase }/${ api }` + ); +}; + export const wpRestURL = ( api ) => { return `${ wpRestBase }/${ api }`; }; diff --git a/src/OnboardingSPA/utils/api/siteGen.js b/src/OnboardingSPA/utils/api/siteGen.js index 64893f1c0..151898e09 100644 --- a/src/OnboardingSPA/utils/api/siteGen.js +++ b/src/OnboardingSPA/utils/api/siteGen.js @@ -1,7 +1,7 @@ import apiFetch from '@wordpress/api-fetch'; import { resolve } from './resolve.js'; -import { onboardingRestURL } from './common'; +import { onboardingRestURL, migrateRestURL } from './common'; export async function getSiteGenIdentifiers() { return await resolve( @@ -88,3 +88,11 @@ export async function publishSitemapPages( siteDescription ) { } ).then() ); } + +export async function getSiteMigrateUrl() { + return await resolve( + apiFetch( { + url: migrateRestURL( 'migrate/connect' ), + } ).then() + ); +} diff --git a/src/constants.js b/src/constants.js index 125041109..25a6c3443 100644 --- a/src/constants.js +++ b/src/constants.js @@ -10,9 +10,11 @@ export const wpRestURL = window.nfdOnboarding.restUrl; export const wpRestRoute = 'wp/v2'; export const onboardingRestRoute = 'newfold-onboarding/v1'; export const installerRestRoute = 'newfold-installer/v1'; +export const migrationRestRoute = 'newfold-migration/v1'; export const wpRestBase = `${ wpRestURL }/${ wpRestRoute }`; export const onboardingRestBase = `${ wpRestURL }/${ onboardingRestRoute }`; export const installerRestBase = `${ wpRestURL }/${ installerRestRoute }`; +export const migrateRestBase = `${ wpRestURL }/${ migrationRestRoute }`; export const wpAdminPage = addQueryArgs( `${ wpAdminUrl }index.php`, window.nfdOnboarding.currentBrand?.dashboardRedirectParams