'use client'
import { useState } from 'react'
import { useSortable } from '@dnd-kit/sortable'
import { CSS } from '@dnd-kit/utilities'
import { useUpdateKeyword, useDeleteKeyword } from '@/hooks/useKeywords'
import type { Keyword } from '@/lib/types'
interface Props { keyword: Keyword }
export default function KeywordRow({ keyword }: Props) {
const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: keyword.id })
const updateKw = useUpdateKeyword()
const deleteKw = useDeleteKeyword()
const [editTerm, setEditTerm] = useState(false)
const [editWeight, setEditWeight] = useState(false)
const [termVal, setTermVal] = useState(keyword.term)
const [weightVal, setWeightVal] = useState(String(keyword.weight))
const saveTerm = () => { updateKw.mutate({ id: keyword.id, data: { term: termVal } }); setEditTerm(false) }
const saveWeight = () => { updateKw.mutate({ id: keyword.id, data: { weight: parseFloat(weightVal) } }); setEditWeight(false) }
const style = { transform: CSS.Transform.toString(transform), transition }
return (
{/* Drag handle */}
|
⋮⋮
|
{/* Term */}
{editTerm ? (
setTermVal(e.target.value)}
onBlur={saveTerm}
onKeyDown={(e) => e.key === 'Enter' && saveTerm()}
className="g-input h-7 text-sm py-0 w-full"
/>
) : (
)}
|
{/* Weight */}
{editWeight ? (
setWeightVal(e.target.value)}
onBlur={saveWeight}
onKeyDown={(e) => e.key === 'Enter' && saveWeight()}
className="g-input h-7 text-sm py-0 w-16 text-center font-mono"
/>
) : (
)}
|
{/* AI description */}
{keyword.ai_target ? (
{keyword.ai_target.length > 48 ? keyword.ai_target.slice(0, 48) + '…' : keyword.ai_target}
) : (
Not set
)}
|
{/* Price range */}
{(keyword.min_price || keyword.max_price) ? (
{[keyword.min_price ? `≥$${keyword.min_price}` : '', keyword.max_price ? `≤$${keyword.max_price}` : ''].filter(Boolean).join(' ')}
) : (
—
)}
|
{/* Delete */}
|
)
}