import { useState } from 'react';
import type { FormEvent } from 'react';
import { CloudHeader } from '../components/CloudHeader';
import { FloatingSearchDock } from '../components/FloatingSearchDock';
import { WordCloudCanvas } from '../components/WordCloudCanvas';
import { CloudLoadingState } from '../components/CloudLoadingState';
import { CloudUnavailableState } from '../components/CloudUnavailableState';
import { TitleFrost } from '../components/TitleFrost';
import { useCloud } from '../hooks/useCloud';
import { useWordCloudFocus } from '../hooks/useWordCloudFocus';
import styles from './PersonalSearchPage.module.css';
interface PersonalSearchPageProps {
productId: string;
}
export function PersonalSearchPage({ productId }: PersonalSearchPageProps) {
const cloudState = useCloud(productId);
const cloud = cloudState.cloud;
const [query, setQuery] = useState('');
const [hasNotFound, setHasNotFound] = useState(false);
const focus = useWordCloudFocus({ words: cloud?.words ?? [] });
if (cloudState.status === 'loading') {
return ;
}
if (!cloud) {
return ;
}
const handleSubmit = (event: FormEvent) => {
event.preventDefault();
if (!query.trim()) {
setHasNotFound(false);
return;
}
const found = focus.focusName(query);
setHasNotFound(!found);
};
const handleReset = () => {
focus.reset();
setQuery('');
setHasNotFound(false);
};
return (
{
setQuery(name);
setHasNotFound(false);
}}
onSubmit={handleSubmit}
onReset={handleReset}
onSelectTarget={focus.selectTarget}
/>
);
}