From d0978f93986541477ea6d7b7c3c1f8211e23a8e9 Mon Sep 17 00:00:00 2001 From: DDD1542 Date: Tue, 28 Apr 2026 17:58:42 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EB=8B=A4=EC=9D=8C=20=EC=84=B8=EC=85=98?= =?UTF-8?q?=20todos=20=E2=80=94=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=EB=B3=B8=EC=B2=B4=20+=20=EC=9E=94=EC=97=AC=20V2=20=EB=A7=88?= =?UTF-8?q?=EC=9D=B4=EA=B7=B8=20=EA=B0=80=EC=9D=B4=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit useDbTables hook / TableConnectSection / DenseListRow 추출 우선순위와 주의사항 (Codex 권장) + dead code 정리 방식 + IconPicker 공용 마이그. Co-Authored-By: Claude Opus 4.7 (1M context) --- notes/gbpark/2026-04-28-next-session-todos.md | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 notes/gbpark/2026-04-28-next-session-todos.md diff --git a/notes/gbpark/2026-04-28-next-session-todos.md b/notes/gbpark/2026-04-28-next-session-todos.md new file mode 100644 index 00000000..f794a9da --- /dev/null +++ b/notes/gbpark/2026-04-28-next-session-todos.md @@ -0,0 +1,134 @@ +# 다음 세션 — ConfigPanel 리팩토링 + 잔여 마이그 todos + +날짜: 2026-04-28 +컨텍스트: 직전 세션에서 좌측 팔레트 11 컴포넌트 cp 톤 마이그 + Inv* 일괄 네이밍 통합 완료. 안전 복귀점: commit 이후 (git log 확인). + +--- + +## 1순위: 리팩토링 본체 (Codex 권장) + +### 1.1 useDbTables() hook 추출 ★ 가장 안전 + +**현재 중복 위치**: +- `lib/registry/components/search/InvSearchConfigPanel.tsx` +- `lib/registry/components/table/InvTableConfigPanel.tsx` +- `lib/registry/components/stats/InvStatsConfigPanel.tsx` +- `lib/registry/components/input/InvInputConfigPanel.tsx` (필요 시) + +**중복 패턴**: +```tsx +const [allDbTables, setAllDbTables] = useState([]); +useEffect(() => { + let cancelled = false; + (async () => { + const { tableManagementApi } = await import("@/lib/api/tableManagement"); + const res = await tableManagementApi.getTableList(); + if (!cancelled && res.success && res.data) setAllDbTables(res.data); + })(); + return () => { cancelled = true; }; +}, []); + +const tableOptions = useMemo(() => allDbTables.map(...), [allDbTables]); +``` + +**추출 위치**: `frontend/lib/registry/components/common/hooks/useDbTables.ts` + +**hook 시그니처 (Codex 권장)**: +```ts +export function useDbTables(opts?: { + fallback?: any[]; // search/table 의 props.tables fallback + normalize?: (t: any) => { value: string; label: string }; // 기본 normalize +}): { + tables: any[]; + options: { value: string; label: string }[]; + loading: boolean; +}; +``` + +**주의 (Codex)**: +- `tableName/table_name`, `display_name/tableLabel/table_label` normalization 을 hook 안에 고정 +- table 의 connected column loading / autoload 로직은 **hook 에 섞지 말 것** (별개) + +### 1.2 TableConnectSection 추출 (1.1 다음) + +**현재 중복**: +- search / table 의 "테이블 연결 + 자동 로드 버튼" 섹션 +- stats 는 자동 로드 X (테이블 선택만) + +**추출 시 주의**: +- search: `[자동 로드]` = 검색 필드 8개 자동 추출 +- table: `[자동 로드]` = 컬럼 N개 자동 추출 +- → autoload 콜백을 prop 으로 받음. label 도 prop. + +### 1.3 DenseListRow / ExpandableRow 추출 (1.1, 1.2 다음) + +**현재 중복**: +- search 의 SearchFieldRow +- table 의 ColumnEditRow (펼침 있음) +- stats 의 ItemEditRow (펼침 있음) +- input 의 select options row (단순) + +→ 패턴 안정화 후 추출. 너무 일찍 하면 over-abstraction. + +--- + +## 2순위: 잔여 V2* cp 마이그 (좌측 팔레트 외) + +### 2.1 V2DateConfigPanel cp 마이그 (좌측 더보기 9) +- 위치: `frontend/components/v2/config-panels/V2DateConfigPanel.tsx` + +### 2.2 V2BomTreeConfigPanel / V2BomItemEditorConfigPanel (좌측 BOM 트리/편집) + +### 2.3 InvDataConfigPanel 의 list/table 분기 +- 현재: V2ListConfigPanel / V2TableListConfigPanel(1497줄) 옛 디자인 그대로 위임 +- 신규 배치는 v2-repeater 만 (InvRepeaterConfigPanel) — 옛 화면 호환용 +- 우선순위 낮음 (사용자 신규 배치 X) + +--- + +## 3순위: dead code 정리 (Codex 권장 방식) + +`frontend/components/v2/config-panels/V2*ConfigPanel.tsx` 33개 중 실제 사용/미사용 식별: +- basename-driven `rg` (ripgrep) 스캔: `rg -l "V2XxxConfigPanel" frontend/` +- register/barrel 노이즈 구분 (config_panel: 매핑이 살아있는 것 = 사용 중) +- 파일명만으로 삭제 금지 — 호출처 확인 필수 + +--- + +## 4순위: IconPicker 공용 cp 톤 마이그 (사용자 지적) + +**문제**: button / stats 등 패널의 "아이콘 선택" 셀렉트가 다른 select 와 사이즈 다름 (Image #9 참고). IconPicker 컴포넌트 자체 디자인이 cp 톤 아님. + +**위치**: `frontend/lib/registry/components/common/IconPicker.tsx` + +**한 번 마이그하면 button / stats / 기타 IconPicker 사용 패널 일관성 회복.** + +--- + +## 안전 가이드 + +- **Codex 검토 필수**: 리팩토링 / 큰 rename 은 Codex 에게 검증받음 (silent breakage 방지) +- **commit 자주**: 각 1.x / 2.x 단계마다 commit (안전 복귀점) +- **dev 서버 재시작**: rename 후 ssh park@100.126.230.80 'docker restart invyone-frontend' +- **smoke test**: 좌측 팔레트 11 컴포넌트 + 옛 hidden 화면 (있다면) 1개씩 클릭 확인 + +--- + +## 진행 상황 요약 (2026-04-28 직전 세션 기준) + +### 완료 +- ✅ 좌측 팔레트 11 컴포넌트 cp 톤 마이그 +- ✅ Inv* 일괄 네이밍 통합 (11 패널) +- ✅ 옛 호환 3 → InvLegacy* 분리 +- ✅ getComponentConfigPanel.tsx stats key 중복 버그 수정 +- ✅ ALIAS 충돌 수정 (옛 hidden 컴포넌트 → InvLegacy) +- ✅ input 통합 cp 톤 신규 (InvInputConfigPanel) + +### 미완 (위 1~4 순위) +- ❌ useDbTables hook 추출 +- ❌ TableConnectSection 추출 +- ❌ DenseListRow 추출 +- ❌ V2DateConfigPanel / V2BomTree / V2BomItemEditor cp +- ❌ InvDataConfigPanel 의 list/table 분기 cp (옛 화면 호환용) +- ❌ V2* 33개 dead code 정리 +- ❌ IconPicker 공용 cp 톤