ERP-node/frontend/types/data-transfer.ts

175 lines
4.4 KiB
TypeScript
Raw Normal View History

2025-11-27 12:08:32 +09:00
/**
*
* ,
*/
/**
*
*/
export type DataReceivableComponentType =
| "table"
| "form"
| "input"
| "select"
| "repeater"
| "form-group"
| "hidden";
/**
*
*/
export type DataReceiveMode =
| "append" // 기존 데이터에 추가
| "replace" // 기존 데이터를 완전히 교체
| "merge"; // 기존 데이터와 병합 (키 기준)
/**
*
*/
export type TransformFunction =
| "sum" // 합계
| "average" // 평균
| "concat" // 문자열 결합
| "first" // 첫 번째 값
| "last" // 마지막 값
| "count" // 개수
| "custom"; // 커스텀 함수
/**
*
*/
export type ConditionOperator =
| "equals"
| "contains"
| "greaterThan"
| "lessThan"
| "notEquals";
/**
*
*
*/
export interface MappingRule {
sourceField: string; // 소스 필드명
targetField: string; // 타겟 필드명
transform?: TransformFunction; // 변환 함수
defaultValue?: any; // 기본값
required?: boolean; // 필수 여부
}
/**
*
*
*/
export interface DataReceiverConfig {
targetComponentId: string; // 타겟 컴포넌트 ID
targetComponentType: DataReceivableComponentType; // 타겟 컴포넌트 타입
mode: DataReceiveMode; // 수신 모드
mappingRules: MappingRule[]; // 매핑 규칙 배열
// 조건부 전달
condition?: {
field: string;
operator: ConditionOperator;
value: any;
};
// 검증 규칙
validation?: {
required?: boolean;
minRows?: number;
maxRows?: number;
};
}
/**
*
*
*/
export interface DataTransferConfig {
// 소스 설정
sourceComponentId: string; // 데이터를 가져올 컴포넌트 ID (테이블 등)
sourceComponentType?: string; // 소스 컴포넌트 타입
// 타겟 설정
targetType: "component" | "screen"; // 타겟 타입 (같은 화면의 컴포넌트 or 다른 화면)
// 타겟이 컴포넌트인 경우
targetComponentId?: string; // 타겟 컴포넌트 ID
targetComponentType?: DataReceivableComponentType; // 타겟 컴포넌트 타입
// 타겟이 화면인 경우
targetScreenId?: number; // 타겟 화면 ID
// 데이터 수신자 (여러 개 가능)
dataReceivers: DataReceiverConfig[];
// 전달 옵션
clearAfterTransfer?: boolean; // 전달 후 소스 데이터 초기화
confirmBeforeTransfer?: boolean; // 전달 전 확인 메시지
confirmMessage?: string; // 확인 메시지 내용
// 검증
validation?: {
requireSelection?: boolean; // 선택 필수
minSelection?: number; // 최소 선택 개수
maxSelection?: number; // 최대 선택 개수
};
}
/**
*
*/
export interface DataTransferResult {
success: boolean;
transferredCount: number;
errors?: string[];
message?: string;
}
/**
*
*
*/
export interface DataReceivable {
componentId: string;
componentType: DataReceivableComponentType;
/**
*
* @param data
* @param config
*/
receiveData(data: any[], config: DataReceiverConfig): Promise<void>;
/**
*
*/
getData(): any;
}
/**
*
*
*/
export interface DataProvidable {
componentId: string;
componentType: string;
/**
*
*/
getSelectedData(): any[];
/**
*
*/
getAllData(): any[];
/**
*
*/
clearSelection(): void;
}