File "index.js"

Full Path: /home/warrior1/public_html/wp-content/plugins/astra-sites/inc/lib/onboarding/assets/src/steps/congrats/index.js
File size: 4.94 KB
MIME-type: text/x-java
Charset: utf-8

import React, { useState } from 'react';
import { __, sprintf } from '@wordpress/i18n';
import confetti from 'canvas-confetti';
import DefaultStep from '../../components/default-step/index';
import { useStateValue } from '../../store/store';
import './style.scss';
import ICONS from '../../../icons';
import { whiteLabelEnabled } from '../../utils/functions';
import { Button } from '../../components';
const { siteUrl } = starterTemplates;

const getTotalTime = ( value ) => {
	const hours = Math.floor( value / 60 / 60 );
	const minutes = Math.floor( value / 60 ) - hours * 60;
	const seconds = value % 60;

	if ( minutes ) {
		return minutes + '.' + seconds;
	}

	return '0.' + seconds;
};

const Congrats = () => {
	const [ { confettiDone, builder }, dispatch ] = useStateValue();

	const istConfetti = confetti.create(
		document.getElementById( 'ist-bashcanvas' ),
		{ resize: true }
	);

	if ( ! confettiDone ) {
		setTimeout( function () {
			istConfetti( {
				particleCount: 250,
				origin: { x: 1, y: 1.4 },
				gravity: 0.4,
				spread: 80,
				ticks: 300,
				angle: 120,
				startVelocity: 100,
				colors: [
					'#0e6ef1',
					'#f5b800',
					'#ff344c',
					'#98e027',
					'#9900f1',
				],
			} );
		}, 100 );

		setTimeout( function () {
			istConfetti( {
				particleCount: 250,
				origin: { x: 0, y: 1.4 },
				gravity: 0.4,
				spread: 80,
				ticks: 300,
				angle: 60,
				startVelocity: 100,
				colors: [
					'#0e6ef1',
					'#f5b800',
					'#ff344c',
					'#98e027',
					'#9900f1',
				],
			} );
			dispatch( {
				type: 'set',
				confettiDone: true,
			} );
		}, 500 );
	}

	const [ {} ] = useStateValue();
	const [ showClickToPlay, setShowClickToPlay ] = useState( true );

	const start = localStorage.getItem( 'st-import-start' );
	const end = localStorage.getItem( 'st-import-end' );
	const diff = end - start;
	const unixTimeInSeconds = Math.floor( diff / 1000 );

	const totalTime = start && end ? getTotalTime( unixTimeInSeconds ) : 0;
	const typeOfTime = totalTime > 1 ? 'minutes' : 'seconds';

	let timeTaken = totalTime;

	let descMessage;
	let tweetMessage;
	const threshold = 5; // Max 5 mins threshold.

	if ( timeTaken > 0 && timeTaken <= threshold ) {
		timeTaken = timeTaken < 1 ? timeTaken.split( '.' )[ 1 ] : timeTaken;

		descMessage = sprintf(
			//translators: %1$s Time taken %2$s Time Type %3$s Website Url.
			__(
				`Your Website is ready and it took just %1$s %2$s to build.`,
				'astra-sites'
			),
			timeTaken,
			typeOfTime
		);
		tweetMessage = `I just built my website in ${ timeTaken } ${ typeOfTime } with Starter Templates by @AstraWP. Can't believe how easy it is! 😍`;
	} else {
		descMessage = __( 'Your Website is up and ready!.', 'astra-sites' );
		tweetMessage = `I just built my website with Starter Templates by @AstraWP in minutes. Can't believe how easy it is! 😍`;
	}

	const handleClick = () => {
		const target = document.getElementById( 'st-information-video' );
		const youtubeLink = target.src.replace(
			'&mute=1&controls=0',
			'&mute=0&controls=1'
		);
		target.src = youtubeLink;
		setShowClickToPlay( false );
	};

	const ytId = builder === 'gutenberg' ? 'Zb2DU4vzNWE' : '3dARpNLcL30';

	return (
		<DefaultStep
			content={
				<div className="congrats-screen">
					<h1 className="d-flex-center-align">
						{ __( 'Congratulations!', 'astra-sites' ) }
						{ ICONS.tada }
					</h1>
					<p className="screen-description p-bold">{ descMessage }</p>
					<Button
						className="view-website-btn"
						after
						onClick={ () => {
							window.open( siteUrl, '_blank' );
						} }
					>
						{ __( 'View Your Website', 'astra-sites' ) }
					</Button>
					{ ! whiteLabelEnabled() && (
						<>
							<div
								className="video-showcase"
								onClick={ handleClick }
							>
								{ showClickToPlay && (
									<div className="click-to-play-wrap">
										<span className="click-btn-text">
											{ ICONS.clickToPlay }
										</span>
										<span className="youtube-btn middle-content">
											{ ICONS.youtube }
										</span>
									</div>
								) }
								<iframe
									src={ `https://www.youtube-nocookie.com/embed/${ ytId }?rel=0&autoplay=1&mute=1&controls=0&showinfo=0&loop=1&modestbranding=1&loop=1` }
									frameBorder="0"
									allow="autoplay; encrypted-media"
									allowFullScreen
									title="st-information-video"
									height="415"
									width="740"
									id="st-information-video"
								/>
							</div>
							<div className="tweet-import-success">
								<p className="tweet-text">{ tweetMessage }</p>
								<a
									href={ `https://twitter.com/intent/tweet?text=${ tweetMessage }` }
									target="_blank"
									className="twitter-btn-wrap"
									rel="noreferrer"
								>
									<p className="tweet-btn">
										{ __(
											'CLICK TO TWEET',
											'astra-sites'
										) }
									</p>
									{ ICONS.twitter }
								</a>
							</div>
						</>
					) }
				</div>
			}
			actions={ null }
		/>
	);
};

export default Congrats;