2021-02-22 18:40:44 +00:00
|
|
|
/**
|
|
|
|
* External dependencies
|
|
|
|
*/
|
|
|
|
import { __ } from '@wordpress/i18n';
|
|
|
|
import { Guide } from '@wordpress/components';
|
|
|
|
import { OPTIONS_STORE_NAME } from '@woocommerce/data';
|
|
|
|
import { recordEvent } from '@woocommerce/tracks';
|
|
|
|
import { Text } from '@woocommerce/experimental';
|
|
|
|
import { useEffect, useState } from '@wordpress/element';
|
|
|
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Internal dependencies
|
|
|
|
*/
|
|
|
|
import './style.scss';
|
2021-03-02 23:24:02 +00:00
|
|
|
import NavInto1 from './images/nav-intro-1.png';
|
|
|
|
import NavInto2 from './images/nav-intro-2.png';
|
|
|
|
import NavInto3 from './images/nav-intro-3.png';
|
2021-02-22 18:40:44 +00:00
|
|
|
import { WELCOME_MODAL_DISMISSED_OPTION_NAME } from '../../../homescreen/constants';
|
|
|
|
|
2021-03-09 22:53:24 +00:00
|
|
|
export const INTRO_MODAL_DISMISSED_OPTION_NAME =
|
2021-02-22 18:40:44 +00:00
|
|
|
'woocommerce_navigation_intro_modal_dismissed';
|
|
|
|
|
|
|
|
export const IntroModal = () => {
|
|
|
|
const [ isOpen, setOpen ] = useState( true );
|
|
|
|
|
|
|
|
const { updateOptions } = useDispatch( OPTIONS_STORE_NAME );
|
|
|
|
|
2021-03-09 22:53:24 +00:00
|
|
|
const { isDismissed, isResolving, isWelcomeModalShown } = useSelect(
|
|
|
|
( select ) => {
|
|
|
|
const { getOption, isResolving: isOptionResolving } = select(
|
|
|
|
OPTIONS_STORE_NAME
|
|
|
|
);
|
|
|
|
const dismissedOption = getOption(
|
|
|
|
INTRO_MODAL_DISMISSED_OPTION_NAME
|
|
|
|
);
|
2021-02-22 18:40:44 +00:00
|
|
|
|
2021-03-09 22:53:24 +00:00
|
|
|
return {
|
|
|
|
isDismissed: dismissedOption === 'yes',
|
|
|
|
isWelcomeModalShown:
|
|
|
|
getOption( WELCOME_MODAL_DISMISSED_OPTION_NAME ) !== 'yes',
|
|
|
|
isResolving:
|
|
|
|
typeof dismissedOption === 'undefined' ||
|
|
|
|
isOptionResolving( 'getOption', [
|
|
|
|
INTRO_MODAL_DISMISSED_OPTION_NAME,
|
|
|
|
] ) ||
|
|
|
|
isOptionResolving( 'getOption', [
|
|
|
|
WELCOME_MODAL_DISMISSED_OPTION_NAME,
|
|
|
|
] ),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
);
|
2021-02-22 18:40:44 +00:00
|
|
|
|
|
|
|
const dismissModal = () => {
|
|
|
|
updateOptions( {
|
|
|
|
[ INTRO_MODAL_DISMISSED_OPTION_NAME ]: 'yes',
|
|
|
|
} );
|
|
|
|
recordEvent( 'navigation_intro_modal_close', {} );
|
|
|
|
setOpen( false );
|
|
|
|
};
|
|
|
|
|
|
|
|
// Dismiss the modal when the welcome modal is shown.
|
|
|
|
// It is likely in this case that the navigation is on by default.
|
|
|
|
useEffect( () => {
|
2021-03-09 22:53:24 +00:00
|
|
|
if ( ! isResolving && isWelcomeModalShown && ! isDismissed ) {
|
2021-02-22 18:40:44 +00:00
|
|
|
dismissModal();
|
|
|
|
}
|
2021-03-09 22:53:24 +00:00
|
|
|
}, [ isDismissed, isResolving, isWelcomeModalShown ] );
|
2021-02-22 18:40:44 +00:00
|
|
|
|
2021-03-09 22:53:24 +00:00
|
|
|
if ( ! isOpen || isDismissed || isResolving || isWelcomeModalShown ) {
|
2021-02-22 18:40:44 +00:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
const getPage = ( title, description, imageUrl ) => {
|
|
|
|
return {
|
|
|
|
content: (
|
|
|
|
<div className="woocommerce-navigation-intro-modal__page-wrapper">
|
|
|
|
<div className="woocommerce-navigation-intro-modal__page-text">
|
|
|
|
<Text variant="title.large" as="h2">
|
|
|
|
{ title }
|
|
|
|
</Text>
|
|
|
|
<Text variant="body.large">{ description }</Text>
|
|
|
|
</div>
|
|
|
|
<div className="woocommerce-navigation-intro-modal__image-wrapper">
|
|
|
|
<img alt={ title } src={ imageUrl } />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
),
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Guide
|
|
|
|
className="woocommerce-navigation-intro-modal"
|
|
|
|
onFinish={ dismissModal }
|
|
|
|
pages={ [
|
|
|
|
getPage(
|
|
|
|
__(
|
|
|
|
'A new navigation for WooCommerce',
|
|
|
|
'woocommerce-admin'
|
|
|
|
),
|
|
|
|
__(
|
|
|
|
'All of your store management features in one place',
|
|
|
|
'woocommerce-admin'
|
|
|
|
),
|
2021-03-02 23:24:02 +00:00
|
|
|
NavInto1
|
2021-02-22 18:40:44 +00:00
|
|
|
),
|
|
|
|
getPage(
|
|
|
|
__( 'Focus on managing your store', 'woocommerce-admin' ),
|
|
|
|
__(
|
|
|
|
'Give your attention to key areas of WooCommerce with little distraction',
|
|
|
|
'woocommerce-admin'
|
|
|
|
),
|
2021-03-02 23:24:02 +00:00
|
|
|
NavInto2
|
2021-02-22 18:40:44 +00:00
|
|
|
),
|
|
|
|
getPage(
|
|
|
|
__(
|
|
|
|
'Easily find and favorite your extensions',
|
|
|
|
'woocommerce-admin'
|
|
|
|
),
|
|
|
|
__(
|
|
|
|
"They'll appear in the top level of the navigation for quick access",
|
|
|
|
'woocommerce-admin'
|
|
|
|
),
|
2021-03-02 23:24:02 +00:00
|
|
|
NavInto3
|
2021-02-22 18:40:44 +00:00
|
|
|
),
|
|
|
|
] }
|
|
|
|
/>
|
|
|
|
);
|
|
|
|
};
|