Uname: Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
Software: LiteSpeed
PHP version: 8.1.32 [ PHP INFO ] PHP os: Linux
Server Ip: 162.213.251.212
Your Ip: 18.218.54.178
User: allssztx (535) | Group: allssztx (533)
Safe Mode: OFF
Disable Function:
NONE

name : SiteInformation.jsx
import { Tooltip } from '@wordpress/components';
import { useEffect, useState } from '@wordpress/element';
import { decodeEntities } from '@wordpress/html-entities';
import { __ } from '@wordpress/i18n';
import { Icon, info } from '@wordpress/icons';
import { updateOption, getOption } from '@launch/api/WPApi';
import { AcceptTerms } from '@launch/components/BusinessInformation/AcceptTerms';
import { SiteTones } from '@launch/components/BusinessInformation/Tones';
import { LoadingIndicator } from '@launch/components/LoadingIndicator';
import { Title } from '@launch/components/Title';
import { useFetch } from '@launch/hooks/useFetch';
import { PageLayout } from '@launch/layouts/PageLayout';
import { usePagesStore } from '@launch/state/Pages';
import { pageState } from '@launch/state/factory';
import { useUserSelectionStore } from '@launch/state/user-selections';

const fetcher = async () => ({ title: await getOption('blogname') });
const fetchData = () => ({ key: 'site-info' });
export const state = pageState('Site Information', () => ({
	ready: false,
	canSkip: false,
	useNav: true,
	onRemove: () => {},
}));

export const SiteInformation = () => {
	const { loading } = useFetch(fetchData, fetcher);
	const nextPage = usePagesStore((state) => state.nextPage);
	const {
		businessInformation,
		setBusinessInformation,
		siteInformation,
		setSiteInformation,
		setSiteProfile,
		siteObjective,
		setCTALink,
		CTALink,
	} = useUserSelectionStore();
	const isLandingPage = siteObjective === 'landing-page';

	const [title, setTitle] = useState(
		decodeEntities(siteInformation.title || ''),
	);
	const [description, setDescription] = useState(
		businessInformation.description || '',
	);
	const [callToActionLink, setCallToActionLink] = useState(CTALink || '');

	useEffect(() => {
		state.setState({ ready: false });
		const timer = setTimeout(() => {
			setSiteInformation('title', title);
			setBusinessInformation('description', description);
			if (isLandingPage && callToActionLink) {
				setCTALink(callToActionLink);
			}
			state.setState({ ready: !!title.length });
		}, 1000);
		return () => clearTimeout(timer);
	}, [
		title,
		description,
		setSiteInformation,
		setBusinessInformation,
		isLandingPage,
		setCTALink,
		callToActionLink,
	]);

	useEffect(() => {
		setSiteProfile(undefined); // this also resets SOME state
		updateOption('extendify_site_profile', null);
	}, [setSiteProfile, description, title]);

	const pageTitle = isLandingPage
		? __('Tell Us About Your Landing Page', 'extendify-local')
		: __('Tell Us About Your Website', 'extendify-local');

	const pageTitleDescription = isLandingPage
		? __(
				"Share your vision, and we'll craft a landing page that's perfectly tailored to your needs, ready to launch in no time. Let's begin by learning more about what you're building.",
				'extendify-local',
			)
		: __(
				"Share your vision, and we'll craft a website that's perfectly tailored to your needs, ready to launch in no time. Let's begin by learning more about what you're building.",
				'extendify-local',
			);

	return (
		<PageLayout>
			<div className="grow overflow-y-auto px-6 py-8 md:p-12 3xl:p-16">
				<Title title={pageTitle} description={pageTitleDescription} />
				<div className="relative mx-auto w-full max-w-xl">
					{loading ? (
						<LoadingIndicator />
					) : (
						<form
							className="flex w-full flex-col gap-4"
							onSubmit={(e) => {
								e.preventDefault();
								if (!state.getState().ready) return;
								nextPage();
							}}>
							<SiteTitle
								title={title}
								setTitle={setTitle}
								isLandingPage={isLandingPage}
							/>
							<BusinessInfo
								description={description}
								setDescription={setDescription}
								siteObjective={siteObjective}
							/>
							{isLandingPage && (
								<SiteCTA
									title={callToActionLink}
									setCTA={setCallToActionLink}
								/>
							)}
							<SiteTones />
							<AcceptTerms />
						</form>
					)}
				</div>
			</div>
		</PageLayout>
	);
};

const SiteTitle = ({ title, setTitle, isLandingPage }) => {
	return (
		<div>
			<label
				htmlFor="extendify-site-title-input"
				className="m-0 text-lg font-medium leading-8 text-gray-900 md:text-base md:leading-10">
				{isLandingPage
					? __('Landing Page title (required)', 'extendify-local')
					: __('Website title (required)', 'extendify-local')}
			</label>
			<input
				data-test="site-title-input"
				autoComplete="off"
				autoFocus={true}
				type="text"
				name="site-title-input"
				id="extendify-site-title-input"
				className="input-focus h-12 w-full rounded border border-gray-200 px-4 py-6 ring-offset-0"
				value={title}
				onChange={(e) => setTitle(e.target.value)}
				placeholder={__('Enter your website name', 'extendify-local')}
			/>
		</div>
	);
};

const objectivePlaceholders = {
	business: __(
		'E.g., We are a yoga studio in London with professionally trained instructors with focus on hot yoga for therapeutic purposes.',
		'extendify-local',
	),
	ecommerce: __(
		'E.g., We are an online store specializing in eco-friendly home goods, offering sustainably sourced products to help you live a greener lifestyle.',
		'extendify-local',
	),
	blog: __(
		'E.g., A personal finance blog sharing expert tips on budgeting, investing, and achieving financial freedom for young professionals.',
		'extendify-local',
	),
	'landing-page': __(
		'E.g., A free ebook packed with actionable productivity tips and strategies to help you stay focused, manage your time effectively, and achieve your goals.',
		'extendify-local',
	),
	other: __(
		'E.g., A personal photography portfolio featuring a collection of landscape, portrait, and street photography, capturing moments from around the world.',
		'extendify-local',
	),
};
const objectiveLabels = {
	business: __('Describe your business', 'extendify-local'),
	ecommerce: __('Describe your eCommerce website', 'extendify-local'),
	blog: __('Describe your blog', 'extendify-local'),
	'landing-page': __('Describe your Landing Page', 'extendify-local'),
	other: __('Describe your website', 'extendify-local'),
};

const BusinessInfo = ({ description, setDescription, siteObjective }) => {
	return (
		<div>
			<label
				htmlFor="extendify-site-info-input"
				className="m-0 text-lg font-medium leading-8 text-gray-900 md:text-base md:leading-10">
				{objectiveLabels[siteObjective] ?? objectiveLabels.business}
			</label>
			<textarea
				data-test="site-info-input"
				autoComplete="off"
				rows="4"
				name="site-info-input"
				id="extendify-site-info-input"
				className={
					'input-focus placeholder:text-md h-40 w-full rounded-lg border border-gray-300 p-2 ring-offset-0 placeholder:italic placeholder:opacity-50'
				}
				value={description}
				onChange={(e) => setDescription(e.target.value)}
				placeholder={
					objectivePlaceholders[siteObjective] ?? objectivePlaceholders.business
				}
			/>
		</div>
	);
};

const SiteCTA = ({ title, setCTA }) => {
	return (
		<div>
			<div className="flex items-center space-x-1">
				<label
					htmlFor="extendify-site-cta-input"
					className="m-0 text-lg font-medium leading-8 text-gray-900 md:text-base md:leading-10">
					{__('Call-To-Action Link', 'extendify-local')}
				</label>
				<Tooltip
					delay={100}
					text={__(
						'This link will be used in all Call-to-Action buttons, directing visitors to your chosen destination.',
						'extendify-local',
					)}>
					<Icon icon={info} size="16" className="fill-current text-gray-600" />
				</Tooltip>
			</div>
			<input
				data-test="site-cta-input"
				autoComplete="off"
				type="text"
				name="site-cta-input"
				id="extendify-site-cta-input"
				className="input-focus h-12 w-full rounded border border-gray-200 px-4 py-6 ring-offset-0 placeholder:italic placeholder:opacity-50"
				value={title}
				onChange={(e) => setCTA(e.target.value)}
				placeholder=""
			/>
		</div>
	);
};
© 2025 GrazzMean-Shell