Files
invyone/frontend/hooks/useSelectedCodeInfo.ts
T
DDD1542 2348800e68
Build & Deploy to K8s / build-and-deploy (push) Successful in 9m22s
refactor(common-code): 마스터-디테일 재설계 — code_info(그룹) + code_detail(재귀 트리)
카테고리/캐스케이딩 시스템 (B/C/D) 전부 폐기:
- BE: mapper/Service/Controller 9세트 삭제 (cascading*, categoryTree, tableCategoryValue, categoryValueCascading, codeMerge)
- FE: 페이지 3 + API 8 + hooks 2 + 폐기 컴포넌트 6 삭제, 14곳 의존성 정리
- DB: 12 테이블 DROP, TABLE_TYPE_COLUMNS.CODE_CATEGORY → CODE_INFO rename

신설 commonCode 마스터-디테일:
- code_info: 1레벨 그룹 마스터
- code_detail: 2~∞ depth 재귀 트리 (parent_detail_id self-FK, depth 자동 계산)
- API: /api/common-codes/{info,detail}
- CodeCategoryFormModal/Panel → CodeInfoFormModal/Panel rename
- code_category 컬럼명 전부 code_info 로 치환 (mapper/Java/FE)
- 옛 commonCode API URL (/categories/...) → getCodeOptions 어댑터 + /detail?code_info=... 전환

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:50:50 +09:00

39 lines
1.2 KiB
TypeScript

import { useCallback, useMemo, useState } from "react";
import { useQueryClient } from "@tanstack/react-query";
import { queryKeys } from "@/lib/queryKeys";
import type { CodeInfo } from "@/types/commonCode";
/**
* 선택된 그룹(code_info) 상태 관리 훅
*
* 좌측 패널에서 그룹을 클릭하면 selectedCodeInfo 가 갱신되고,
* 우측 디테일 트리 패널이 그 값을 받아 트리를 로드한다.
*/
export function useSelectedCodeInfo() {
const queryClient = useQueryClient();
const [selectedCode, setSelectedCode] = useState<string>("");
const selectedRow = useMemo<CodeInfo | null>(() => {
if (!selectedCode) return null;
const list = queryClient.getQueryData<CodeInfo[]>(queryKeys.codeInfo.list());
if (!list || !Array.isArray(list)) return null;
return list.find((row) => row.code_info === selectedCode) || null;
}, [selectedCode, queryClient]);
const selectCodeInfo = useCallback((codeInfo: string) => {
setSelectedCode(codeInfo);
}, []);
const clearSelection = useCallback(() => {
setSelectedCode("");
}, []);
return {
selectedCodeInfo: selectedCode,
selectedRow,
hasSelection: Boolean(selectedCode),
selectCodeInfo,
clearSelection,
};
}