docs: 다음 세션 todos — 리팩토링 본체 + 잔여 V2 마이그 가이드
useDbTables hook / TableConnectSection / DenseListRow 추출 우선순위와 주의사항 (Codex 권장) + dead code 정리 방식 + IconPicker 공용 마이그. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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<any[]>([]);
|
||||
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 톤
|
||||
Reference in New Issue
Block a user