81 lines
2.6 KiB
TypeScript
81 lines
2.6 KiB
TypeScript
/**
|
|
* 반복 필드 그룹(Repeater) 타입 정의
|
|
*/
|
|
|
|
/**
|
|
* 테이블 타입 관리(table_type_columns)에서 사용하는 input_type 값들
|
|
*/
|
|
export type RepeaterFieldType =
|
|
| "text" // 텍스트
|
|
| "number" // 숫자
|
|
| "textarea" // 텍스트영역
|
|
| "date" // 날짜
|
|
| "select" // 선택박스
|
|
| "checkbox" // 체크박스
|
|
| "radio" // 라디오
|
|
| "category" // 카테고리
|
|
| "entity" // 엔티티 참조
|
|
| "code" // 공통코드
|
|
| "image" // 이미지
|
|
| "direct" // 직접입력
|
|
| string; // 기타 커스텀 타입 허용
|
|
|
|
/**
|
|
* 필드 표시 모드
|
|
* - input: 입력 필드로 표시 (편집 가능)
|
|
* - readonly: 읽기 전용 텍스트로 표시
|
|
* - (카테고리 타입은 자동으로 배지로 표시됨)
|
|
*/
|
|
export type RepeaterFieldDisplayMode = "input" | "readonly";
|
|
|
|
/**
|
|
* 반복 그룹 내 개별 필드 정의
|
|
*/
|
|
export interface RepeaterFieldDefinition {
|
|
name: string; // 필드 이름 (키)
|
|
label: string; // 필드 라벨
|
|
type: RepeaterFieldType; // 입력 타입
|
|
placeholder?: string;
|
|
required?: boolean;
|
|
readonly?: boolean; // 읽기 전용 여부
|
|
options?: Array<{ label: string; value: string }>; // select용
|
|
width?: string; // 필드 너비 (예: "200px", "50%")
|
|
displayMode?: RepeaterFieldDisplayMode; // 표시 모드: input(입력), readonly(읽기전용)
|
|
categoryCode?: string; // category 타입일 때 사용할 카테고리 코드
|
|
validation?: {
|
|
minLength?: number;
|
|
maxLength?: number;
|
|
min?: number;
|
|
max?: number;
|
|
pattern?: string;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 반복 필드 그룹 설정
|
|
*/
|
|
export interface RepeaterFieldGroupConfig {
|
|
fields: RepeaterFieldDefinition[]; // 반복될 필드 정의
|
|
targetTable?: string; // 저장할 대상 테이블 (미지정 시 메인 화면 테이블)
|
|
minItems?: number; // 최소 항목 수
|
|
maxItems?: number; // 최대 항목 수
|
|
addButtonText?: string; // 추가 버튼 텍스트
|
|
removeButtonText?: string; // 제거 버튼 텍스트 (보통 아이콘)
|
|
allowReorder?: boolean; // 순서 변경 가능 여부
|
|
showIndex?: boolean; // 인덱스 번호 표시 여부
|
|
collapsible?: boolean; // 각 항목을 접을 수 있는지 (카드 모드일 때만)
|
|
layout?: "grid" | "card"; // 레이아웃 타입: grid(테이블 행) 또는 card(카드 형식)
|
|
showDivider?: boolean; // 항목 사이 구분선 표시 (카드 모드일 때만)
|
|
emptyMessage?: string; // 항목이 없을 때 메시지
|
|
}
|
|
|
|
/**
|
|
* 반복 그룹 항목 데이터
|
|
*/
|
|
export type RepeaterItemData = Record<string, any>;
|
|
|
|
/**
|
|
* 반복 그룹 전체 데이터 (배열)
|
|
*/
|
|
export type RepeaterData = RepeaterItemData[];
|