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

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