const TabSearchPattern = () => {
const [mode, setMode] = useState('AI'); // 'AI' | 'GENERAL'
const [query, setQuery] = useState('');
const [products, setProducts] = useState([]);
const [requestId, setRequestId] = useState(null); // 検索リクエストIDを保存
// 表示(DI)ログ送信
// 商品一覧(products)が更新されて画面レンダリングが完了した時点で呼び出します。
useEffect(() => {
if (products.length > 0 && requestId) {
window.genser.call('DI', {
instance: { key: 'YOUR_INSTANCE_KEY' },
goods: products.map(p => ({ code: p.code, name: p.name })),
requestId: requestId
});
// console.log('DI 送信完了');
}
}, [products, requestId]);
// クリック(CL)ログ送信
const handleProductClick = (product) => {
if (!requestId) return;
window.genser.call('CL', {
instance: { key: 'YOUR_INSTANCE_KEY' },
goods: [{ code: product.code, name: product.name }],
requestId: requestId
});
// その後商品詳細ページへ遷移
console.log('CL 送信完了、ページ移動:', product.name);
};
const handleSearch = (e) => {
e.preventDefault();
if (mode === 'AI') {
// genser AI 検索呼び出し
window.genser.call('searchProducts', {
instanceKey: 'YOUR_INSTANCE_KEY',
queryText: query
}).success((res) => {
if (res.type === 'SEARCH') {
// 状態更新 -> 再レンダリング発生 -> useEffect 実行 -> DI 送信
setProducts(res.products);
setRequestId(res.requestId);
}
});
} else {
console.log('通常のキーワード検索実行:', query);
}
};
return (
<div>
<div className="tabs">
<button onClick={() => setMode('AI')} className={mode === 'AI' ? 'active' : ''}>AI 検索</button>
<button onClick={() => setMode('GENERAL')} className={mode === 'GENERAL' ? 'active' : ''}>通常検索</button>
</div>
<form onSubmit={handleSearch}>
<input
type="text"
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder={mode === 'AI' ? "結婚式に着ていく30代女性向けネイビージャケットをおすすめして!" : "検索語を入力してください"}
/>
<button type="submit">検索</button>
</form>
{/* 結果リスト例 */}
<ul>
{products.map(p => (
<li key={p.code} onClick={() => handleProductClick(p)}>
{p.name}
</li>
))}
</ul>
</div>
);
};