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>
);
};