# [맥락노트] 카테고리 트리 대분류 추가 모달 - 연속 등록 모드 수정 > 관련 문서: [계획서](./CCA[계획]-카테고리-연속등록모드.md) | [체크리스트](./CCA[체크]-카테고리-연속등록모드.md) --- ## 왜 이 작업을 하는가 - 기준정보 - 옵션설정에서 트리 구조 카테고리(품목정보 > 재고단위 등)의 "대분류 추가" 모달이 저장 후 닫히지 않음 - 연속 등록 모드가 하드코딩되어 항상 ON 상태이고, 끌 수 있는 UI가 없음 - 같은 폴더의 평면 목록 모달(`CategoryValueAddDialog.tsx`)은 이미 올바르게 구현되어 있음 - 동일 패턴을 적용하여 일관성 확보 --- ## 핵심 결정 사항과 근거 ### 1. 기본값: 연속 등록 OFF (모달 닫힘) - **결정**: `continuousAdd` 초기값을 `false`로 설정 - **근거**: 대부분의 사용자는 한 건 추가 후 결과를 확인하려 함. 연속 입력은 선택적 기능 ### 2. 체크박스 위치: DialogFooter 아래, border-t 구분선 별도 영역 - **결정**: `ScreenModal.tsx` (1287~1303행) 패턴 그대로 적용 - **근거**: "기준정보 - 부서관리" 추가 모달과 동일한 디자인. 프로젝트 관행 준수 - **대안 검토**: `CategoryValueAddDialog.tsx`는 DialogFooter 안에 체크박스 배치 → 부서 모달과 다른 디자인이므로 기각 ### 3. 라벨: "저장 후 계속 입력 (연속 등록 모드)" - **결정**: `ScreenModal.tsx`와 동일한 라벨 텍스트 사용 - **근거**: 부서 추가 모달과 동일한 문구로 사용자 혼란 방지 ### 4. localStorage 미사용 - **결정**: 컴포넌트 state만 사용, localStorage 영속화 안 함 - **근거**: `CategoryValueAddDialog.tsx`(같은 폴더 형제 컴포넌트)가 localStorage를 쓰지 않음. `ScreenModal.tsx`는 사용하지만 동적 화면 모달 전용 기능이므로 범위가 다름 ### 5. 수정 대상: handleAdd 함수만 - **결정**: 저장 성공 분기에서만 `continuousAdd` 체크 - **근거**: 실패 시에는 원래대로 모달 유지 + 에러 표시. 분기가 필요한 건 성공 시뿐 --- ## 관련 파일 위치 | 구분 | 파일 경로 | 설명 | |------|----------|------| | 수정 대상 | `frontend/components/table-category/CategoryValueManagerTree.tsx` | 트리형 카테고리 값 관리 (대분류/중분류/소분류) | | 참고 패턴 (로직) | `frontend/components/table-category/CategoryValueAddDialog.tsx` | 평면 목록 추가 모달 - continuousAdd 분기 로직 | | 참고 패턴 (UI) | `frontend/components/common/ScreenModal.tsx` | 동적 화면 모달 - 체크박스 위치/라벨/스타일 | --- ## 기술 참고 ### 현재 handleAdd 흐름 ``` handleAdd() → API 호출 → 성공 시: 1. toast.success 2. 폼 초기화 (모달 유지 - 하드코딩) 3. addNameRef 포커스 4. loadTree(true) - 펼침 상태 유지 5. parentValue 있으면 해당 노드 펼침 ``` ### 변경 후 handleAdd 흐름 ``` handleAdd() → API 호출 → 성공 시: 1. toast.success 2. loadTree(true) + parentValue 펼침 3. continuousAdd 체크: - true: 폼 초기화 + addNameRef 포커스 (모달 유지) - false: 폼 초기화 + setIsAddModalOpen(false) (모달 닫힘) ``` ### import 현황 - `Checkbox`: 24행에서 이미 import (`@/components/ui/checkbox`) - `Label`: 53행에서 이미 import (`@/components/ui/label`) - 추가 import 불필요