woocommerce/plugins/woocommerce-admin/client/launch-your-store/settings/slotfill.js

180 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* External dependencies
*/
import {
createSlotFill,
ToggleControl,
RadioControl,
} from '@wordpress/components';
import { useState, useEffect } from '@wordpress/element';
import { registerPlugin } from '@wordpress/plugins';
import { __ } from '@wordpress/i18n';
import classNames from 'classnames';
/**
* Internal dependencies
*/
import { SETTINGS_SLOT_FILL_CONSTANT } from '../../settings/settings-slots';
import { useLaunchYourStore } from '../use-launch-your-store';
import './style.scss';
const { Fill } = createSlotFill( SETTINGS_SLOT_FILL_CONSTANT );
const SiteVisibility = () => {
const {
isLoading,
comingSoon: initialComingSoon = false,
storePagesOnly: initialStorePagesOnly = false,
privateLink: initialPrivateLink = false,
} = useLaunchYourStore();
const [ comingSoon, setComingSoon ] = useState( initialComingSoon );
const [ storePagesOnly, setStorePagesOnly ] = useState(
initialStorePagesOnly
);
const [ privateLink, setPrivateLink ] = useState( initialPrivateLink );
useEffect( () => {
if ( ! isLoading ) {
setComingSoon( initialComingSoon );
setStorePagesOnly( initialStorePagesOnly );
setPrivateLink( initialPrivateLink );
}
}, [ isLoading ] );
return (
<div
className={ classNames( 'site-visibility-settings-slotfill', {
placeholder: isLoading,
} ) }
>
<input
type="hidden"
value={ comingSoon }
name="woocommerce_coming_soon"
/>
<input
type="hidden"
value={ storePagesOnly }
name="woocommerce_store_pages_only"
/>
<input
type="hidden"
value={ privateLink }
name="woocommerce_private_link"
/>
<h2>{ __( 'Site Visibility', 'woocommerce' ) }</h2>
<p className="site-visibility-settings-slotfill-description">
{ __(
"Set your site to coming soon or live you're ready to launch",
'woocommerce'
) }
</p>
<div className="site-visibility-settings-slotfill-section">
<RadioControl
onChange={ () => {
setComingSoon( 'yes' );
} }
options={ [
{
label: 'Coming soon',
value: 'yes',
},
] }
selected={ comingSoon }
/>
<p className="site-visibility-settings-slotfill-section-description">
{ __(
'Your site is hidden from visitors behind a “Coming soon” landing page until its ready for viewing. You can customize your “Coming soon” landing page via the Editor.',
'woocommerce'
) }
</p>
<div
className={ classNames(
'site-visibility-settings-slotfill-section-content',
{
'is-hidden': comingSoon !== 'yes',
}
) }
>
<ToggleControl
label={
<>
{ __(
'Restrict to store pages only',
'woocommerce'
) }
<p>
{ __(
'Hide store pages only behind a “Coming soon” page. The rest of your site will remain public.',
'woocommerce'
) }
</p>
</>
}
checked={ storePagesOnly === 'yes' }
onChange={ () => {
setStorePagesOnly(
storePagesOnly === 'yes' ? 'no' : 'yes'
);
} }
/>
<ToggleControl
label={
<>
{ __(
'Share your site with a private link',
'woocommerce'
) }
<p>
{ __(
'“Coming soon” sites are only visible to Admins and Shop managers. Enable “Share site” to let other users view your site.',
'woocommerce'
) }
</p>
</>
}
checked={ privateLink === 'yes' }
onChange={ () => {
setPrivateLink(
privateLink === 'yes' ? 'no' : 'yes'
);
} }
/>
</div>
</div>
<div className="site-visibility-settings-slotfill-section">
<RadioControl
onChange={ () => {
setComingSoon( 'no' );
} }
options={ [
{
label: 'Live',
value: 'no',
},
] }
selected={ comingSoon }
/>
<p className="site-visibility-settings-slotfill-section-description">
{ __( 'Your site is visible to everyone.', 'woocommerce' ) }
</p>
</div>
</div>
);
};
const SiteVisibilitySlotFill = () => {
return (
<Fill>
<SiteVisibility />
</Fill>
);
};
export const registerSiteVisibilitySlotFill = () => {
registerPlugin( 'woocommerce-admin-site-visibility-settings-slotfill', {
scope: 'woocommerce-settings',
render: SiteVisibilitySlotFill,
} );
};