File "controls.js"

Full Path: /home/warrior1/public_html/wp-content/plugins/astra-sites/inc/lib/onboarding/assets/src/steps/customize-site/customize-steps/license-validation/controls.js
File size: 4.71 KB
MIME-type: text/html
Charset: utf-8

import React, { useEffect, useState } from 'react';
import { __, sprintf } from '@wordpress/i18n';
import apiFetch from '@wordpress/api-fetch';
import { Toaster } from '@brainstormforce/starter-templates-components';
import Button from '../../../../components/button/button';
import { useStateValue } from '../../../../store/store';
import PreviousStepLink from '../../../../components/util/previous-step-link/index';
import ICONS from '../../../../../icons';
import { whiteLabelEnabled } from '../../../../utils/functions';
import {
	checkRequiredPlugins,
	getDemo,
} from '../../../import-site/import-utils';
const { restNonce } = starterTemplates;

const LicenseValidationControls = () => {
	const storedState = useStateValue();
	const [
		{
			templateId,
			templateResponse,
			currentCustomizeIndex,
			importError,
			currentIndex,
			validateLicenseStatus,
		},
		dispatch,
	] = storedState;
	const [ error, setError ] = useState( '' );
	const [ processing, setProcessing ] = useState( false );
	const [ licenseKey, setLicenseKey ] = useState( '' );
	const premiumTemplate = false;

	// Start the pre import process.
	useEffect( () => {
		if ( importError ) {
			dispatch( {
				type: 'set',
				currentIndex: currentIndex + 2, // Skip 2 steps.
			} );
		}
	}, [ importError ] );

	const validateKey = () => {
		if ( licenseKey === '' ) {
			setError( __( 'Please Enter License Key', 'astra-sites' ) );
			return;
		}

		setProcessing( true );

		apiFetch.use( apiFetch.createNonceMiddleware( restNonce ) );
		apiFetch( {
			path: '/bsf-core/v1/license/activate',
			method: 'POST',
			data: {
				'license-key': licenseKey,
				'product-id': 'astra-pro-sites',
			},
		} ).then( async ( response ) => {
			if ( response.success ) {
				await getDemo( templateId, storedState );
				await checkRequiredPlugins( storedState );
				dispatch( {
					type: 'set',
					licenseStatus: true,
					currentIndex: currentIndex + 1,
				} );
			} else {
				setError( response.message );
			}
			setProcessing( false );
		} );
	};

	if (
		premiumTemplate &&
		'' !== astraSitesVars.license_page_builder &&
		templateResponse[ 'astra-site-page-builder' ] !==
			astraSitesVars.license_page_builder &&
		'brizy' !== templateResponse[ 'astra-site-page-builder' ] &&
		'gutenberg' !== templateResponse[ 'astra-site-page-builder' ]
	) {
		return <p>{ __( 'Not Valid License', 'astra-sites' ) }</p>;
	}

	const processingClass = processing ? 'processing' : '';

	const supportLink = sprintf(
		//translators: %1$s Support page URL.
		__(
			`<b> Questions? </b> Get in touch with our %1$ssupport team%2$s.`,
			'astra-sites'
		),
		`<a href="https://wpastra.com/support/free-support/" target="_blank">`,
		'</a>'
	);

	const lastStep = () => {
		dispatch( {
			type: 'set',
			currentCustomizeIndex: currentCustomizeIndex - 1,
		} );
	};

	const downloadLink = sprintf(
		//translators: %1$s Store page URL.
		__(
			`If you have purchased our Essential or Growth Bundle, please install the premium version of the plugin that you can %1$sdownload%2$s from our store.`,
			'astra-sites'
		),
		'<a href="https://store.brainstormforce.com/login/" target="_blank">',
		'</a>'
	);

	return (
		<>
			{ ! whiteLabelEnabled() && (
				<>
				<h4>{ __( 'Already a customer?', 'astra-sites' ) }</h4>

				{ validateLicenseStatus && (
					<p className="customer-notices">
						{ __(
							'If you have purchased our Essential or Growth Bundle, just enter your license key below to import this template.',
							'astra-sites'
						) }
					</p>
				) }

				{ ! validateLicenseStatus && (
					<>
						<p
							className="customer-notices"
							dangerouslySetInnerHTML={ { __html: downloadLink } }
						/>
						<p className="customer-notices">
							{ __(
								'Currently the free version is installed.',
								'astra-sites'
							) }
						</p>
					</>
				) }
				<p
					className="support-link"
					dangerouslySetInnerHTML={ { __html: supportLink } }
				/>
				{ validateLicenseStatus && (
					<div className="license-wrap">
						<input
							type="text"
							className="license-key-input"
							name="license-key"
							placeholder={ __( 'License key', 'astra-sites' ) }
							required
							onChange={ ( e ) => {
								setLicenseKey( e.target.value );
								setError( '' );
							} }
						/>
						<Button
							className={ `validate-btn ${ processingClass }` }
							onClick={ validateKey }
						>
							{ ICONS.arrowRightBold }
						</Button>
					</div>
				) }
				</>
			) }
			<PreviousStepLink onClick={ lastStep } customizeStep={ true }>
				{ __( 'Back', 'astra-sites' ) }
			</PreviousStepLink>

			{ error && ! processing && (
				<Toaster
					type="error"
					message={ error }
					autoHideDuration={ 5 }
				/>
			) }
		</>
	);
};

export default LicenseValidationControls;