feat: 지붕재 데이터 선택 기능 추가

This commit is contained in:
Daseul Kim 2025-04-29 10:49:58 +09:00
parent d36084add5
commit bfbbdc01b8

View File

@ -1,16 +1,25 @@
'use client' 'use client'
import { useSuitableStore } from '@/store/useSuitableStore' import { useSuitableStore } from '@/store/useSuitableStore'
import { useQuery } from '@tanstack/react-query' import { useQuery, useQueryClient } from '@tanstack/react-query'
import { useRouter } from 'next/navigation' import { useRouter } from 'next/navigation'
import type { Suitable as SuitableType } from '@/api/suitable' import type { Suitable as SuitableType } from '@/api/suitable'
export default function Suitable() { export default function Suitable() {
const router = useRouter() const router = useRouter()
const { selectedItems, addSelectedItem } = useSuitableStore() const queryClient = useQueryClient()
const { selectedItems, addSelectedItem, removeSelectedItem } = useSuitableStore()
const handleItemClick = (item: SuitableType) => {
if (!item.id) return // 초기 데이터 import 때문에 Suitable.id가 optional 타입이라서 방어 처리 추가
selectedItems.some((selected) => selected.id === item.id) ? removeSelectedItem(item.id) : addSelectedItem(item)
}
const { data: suitableList, isLoading } = useQuery<SuitableType[]>({ const { data: suitableList, isLoading } = useQuery<SuitableType[]>({
queryKey: ['suitables', 'search'], queryKey: ['suitables', 'search'],
queryFn: async () => {
const data = queryClient.getQueryData(['suitables', 'search']) as SuitableType[]
return data ?? []
},
enabled: false, enabled: false,
}) })
@ -31,14 +40,22 @@ export default function Suitable() {
</button> </button>
<div> <div>
<h2 className="text-lg font-semibold mb-2"> </h2> <h2 className="text-lg font-semibold mb-2"> </h2>
{selectedItems.length > 0 ? selectedItems.map((item) => <div key={item.id}>{item.product_name}</div>) : <div> .</div>} {selectedItems.length > 0 ? (
selectedItems.map((item) => (
<div key={item.id} onClick={() => handleItemClick(item)}>
{item.product_name}
</div>
))
) : (
<div> .</div>
)}
</div> </div>
<br /> <br />
<div> <div>
<h2 className="text-lg font-semibold mb-2"> </h2> <h2 className="text-lg font-semibold mb-2"> </h2>
{suitableList ? ( {suitableList ? (
suitableList.map((item: SuitableType) => ( suitableList.map((item: SuitableType) => (
<div key={item.id} className="p-2 border rounded cursor-pointer hover:bg-gray-100" onClick={() => addSelectedItem(item)}> <div key={item.id} className="p-2 border rounded cursor-pointer hover:bg-gray-100" onClick={() => handleItemClick(item)}>
{item.product_name} {item.product_name}
</div> </div>
)) ))