import { PanelBody, PanelRow, Spinner, SearchControl, } from '@wordpress/components'; import { useEffect, useState, useRef } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; import { useSiteTypes } from '@library/hooks/useSiteTypes'; import { useSiteSettingsStore } from '@library/state/site'; export const SiteTypeControl = () => { const { siteType, setSiteType } = useSiteSettingsStore(); const hasSiteType = !!siteType?.name; const [isOpen, setIsOpen] = useState(!hasSiteType); const [search, setSearch] = useState(''); const [searchDebounced, setSearchDebounced] = useState(''); const [searching, setSearching] = useState(false); const { data, loading } = useSiteTypes(searchDebounced); const searchRef = useRef(); useEffect(() => { if (!isOpen) return; setSearch(''); searchRef.current?.focus(); }, [isOpen]); useEffect(() => { if (!data && !loading) return setSearching(false); setSearching(loading); }, [loading, data]); useEffect(() => { if (!search) return setSearching(false); setSearching(true); const id = setTimeout(() => setSearchDebounced(search), 300); return () => clearTimeout(id); }, [search]); return ( {searching && (
{__('Fetching...', 'extendify-local')}
)} {data?.siteTypes?.length > 0 && !searching && (
    {data.siteTypes.slice(0, 5).map((siteType) => (
  • ))}
)}
); };