import { useState, useCallback, useMemo } from "react"; import { useQueryClient } from "@tanstack/react-query"; import { queryKeys } from "@/lib/queryKeys"; import type { CategoryInfo } from "@/types/commonCode"; /** * 선택된 카테고리 상태를 관리하는 커스텀 훅 * React Query 캐시를 활용하여 전역 상태 관리 */ export function useSelectedCategory() { const queryClient = useQueryClient(); const [selectedCategoryCode, setSelectedCategoryCode] = useState(""); // 현재 선택된 카테고리 정보를 React Query 캐시에서 가져오기 const selectedCategory = useMemo(() => { if (!selectedCategoryCode) { return null; } const categories = queryClient.getQueryData(queryKeys.categories.list()); if (!categories || !Array.isArray(categories)) { return null; } return categories.find((category) => category.category_code === selectedCategoryCode) || null; }, [selectedCategoryCode, queryClient]); // 카테고리 선택 함수 const selectCategory = useCallback((categoryCode: string) => { setSelectedCategoryCode(categoryCode); }, []); // 카테고리 선택 해제 함수 const clearSelection = useCallback(() => { setSelectedCategoryCode(""); }, []); // 선택된 카테고리가 있는지 확인 const hasSelection = Boolean(selectedCategoryCode); return { // 상태 selectedCategoryCode, selectedCategory, hasSelection, // 액션 selectCategory, clearSelection, }; }