/** * 렉 구조 컴포넌트 기본 설정 */ import { RackStructureComponentConfig, FormatSegment, FormatSegmentType, LocationFormatConfig, } from "./types"; // 세그먼트 타입별 한글 표시명 export const SEGMENT_TYPE_LABELS: Record = { warehouseCode: "창고코드", floor: "층", zone: "구역", row: "열", level: "단", }; // 위치코드 기본 세그먼트 (현재 하드코딩과 동일한 결과) export const defaultCodeSegments: FormatSegment[] = [ { type: "warehouseCode", enabled: true, showLabel: false, label: "", separatorAfter: "-", pad: 0 }, { type: "floor", enabled: true, showLabel: true, label: "층", separatorAfter: "", pad: 0 }, { type: "zone", enabled: true, showLabel: true, label: "구역", separatorAfter: "-", pad: 0 }, { type: "row", enabled: true, showLabel: false, label: "", separatorAfter: "-", pad: 2 }, { type: "level", enabled: true, showLabel: false, label: "", separatorAfter: "", pad: 0 }, ]; // 위치명 기본 세그먼트 (현재 하드코딩과 동일한 결과) export const defaultNameSegments: FormatSegment[] = [ { type: "zone", enabled: true, showLabel: true, label: "구역", separatorAfter: "-", pad: 0 }, { type: "row", enabled: true, showLabel: true, label: "열", separatorAfter: "-", pad: 2 }, { type: "level", enabled: true, showLabel: true, label: "단", separatorAfter: "", pad: 0 }, ]; export const defaultFormatConfig: LocationFormatConfig = { codeSegments: defaultCodeSegments, nameSegments: defaultNameSegments, }; // 세그먼트 타입별 기본 한글 접미사 (context 값에 포함되어 있는 한글) const KNOWN_SUFFIXES: Partial> = { floor: "층", zone: "구역", }; // 값에서 알려진 한글 접미사를 제거하여 순수 값만 추출 function stripKnownSuffix(type: FormatSegmentType, val: string): string { const suffix = KNOWN_SUFFIXES[type]; if (suffix && val.endsWith(suffix)) { return val.slice(0, -suffix.length); } return val; } // 세그먼트 배열로 포맷된 문자열 생성 export function buildFormattedString( segments: FormatSegment[], values: Record, ): string { const activeSegments = segments.filter( (seg) => seg.enabled && values[seg.type], ); return activeSegments .map((seg, idx) => { // 1) 원본 값에서 한글 접미사를 먼저 벗겨냄 ("A구역" → "A", "1층" → "1") let val = stripKnownSuffix(seg.type, values[seg.type]); // 2) showLabel이 켜져 있고 label이 있으면 붙임 if (seg.showLabel && seg.label) { val += seg.label; } if (seg.pad > 0 && !isNaN(Number(val))) { val = val.padStart(seg.pad, "0"); } if (idx < activeSegments.length - 1) { val += seg.separatorAfter; } return val; }) .join(""); } // 미리보기용 샘플 값 export const SAMPLE_VALUES: Record = { warehouseCode: "WH001", floor: "1층", zone: "A구역", row: "1", level: "1", }; export const defaultConfig: RackStructureComponentConfig = { maxConditions: 10, maxRows: 99, maxLevels: 20, codePattern: "{warehouseCode}-{floor}{zone}-{row:02d}-{level}", namePattern: "{zone}구역-{row:02d}열-{level}단", showTemplates: true, showPreview: true, showStatistics: true, readonly: false, initialConditions: [], };