refactor: DynamicItemForm 훅/컴포넌트 분리 리팩토링
대규모 코드 구조 개선: - useFieldDetection: 필드 감지 로직 분리 - useFileHandling: 파일 업로드 로직 분리 - useItemCodeGeneration: 품목코드 자동생성 로직 분리 - usePartTypeHandling: 파트타입 처리 로직 분리 - FormHeader, ValidationAlert, FileUploadFields 컴포넌트 분리 - DuplicateCodeDialog 컴포넌트 분리 - index.tsx 1300줄+ 감소로 가독성 및 유지보수성 향상 - BOM 검색 최적화 (검색어 입력 시에만 API 호출) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -91,17 +91,14 @@ export const fieldService = {
|
||||
/**
|
||||
* 필드 키 유효성 검사
|
||||
* - 필수 입력
|
||||
* - 영문자로 시작
|
||||
* - 영문, 숫자, 언더스코어만 허용
|
||||
* 2025-12-16: 숫자로 시작하는 키도 허용 (예: 105_state)
|
||||
*/
|
||||
validateFieldKey: (key: string): SingleFieldValidation => {
|
||||
if (!key || !key.trim()) {
|
||||
return { valid: false, error: '필드 키를 입력해주세요' };
|
||||
}
|
||||
if (!/^[a-zA-Z]/.test(key)) {
|
||||
return { valid: false, error: '영문자로 시작해야 합니다' };
|
||||
}
|
||||
if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(key)) {
|
||||
if (!/^[a-zA-Z0-9_]+$/.test(key)) {
|
||||
return { valid: false, error: '영문, 숫자, 언더스코어만 사용 가능합니다' };
|
||||
}
|
||||
return { valid: true };
|
||||
@@ -110,8 +107,9 @@ export const fieldService = {
|
||||
/**
|
||||
* 필드 키 패턴 정규식
|
||||
* UI에서 직접 사용 가능
|
||||
* 2025-12-16: 숫자로 시작하는 키도 허용
|
||||
*/
|
||||
fieldKeyPattern: /^[a-zA-Z][a-zA-Z0-9_]*$/,
|
||||
fieldKeyPattern: /^[a-zA-Z0-9_]+$/,
|
||||
|
||||
/**
|
||||
* 필드 키가 유효한지 간단 체크 (boolean 반환)
|
||||
@@ -124,20 +122,11 @@ export const fieldService = {
|
||||
// ===== Parsing =====
|
||||
|
||||
/**
|
||||
* field_key에서 사용자 입력 부분 추출
|
||||
* 형식: {ID}_{사용자입력} → 사용자입력 반환
|
||||
* 예: "123_itemCode" → "itemCode"
|
||||
* field_key 반환 (전체 키 그대로 반환)
|
||||
* 2025-12-16: 전체 field_key 표시로 변경 (예: "105_state" 그대로 표시)
|
||||
*/
|
||||
extractUserInputFromFieldKey: (fieldKey: string | null | undefined): string => {
|
||||
if (!fieldKey) return '';
|
||||
|
||||
// 언더스코어가 포함된 경우 첫 번째 언더스코어 이후 부분 반환
|
||||
const underscoreIndex = fieldKey.indexOf('_');
|
||||
if (underscoreIndex !== -1) {
|
||||
return fieldKey.substring(underscoreIndex + 1);
|
||||
}
|
||||
|
||||
// 언더스코어가 없으면 전체 반환
|
||||
return fieldKey;
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user