화면 분할 패널 기능
This commit is contained in:
@@ -12,28 +12,56 @@ import { logger } from "./logger";
|
||||
|
||||
/**
|
||||
* 매핑 규칙 적용
|
||||
* @param data 배열 또는 단일 객체
|
||||
* @param rules 매핑 규칙 배열
|
||||
* @returns 매핑된 배열
|
||||
*/
|
||||
export function applyMappingRules(data: any[], rules: MappingRule[]): any[] {
|
||||
if (!data || data.length === 0) {
|
||||
export function applyMappingRules(data: any[] | any, rules: MappingRule[]): any[] {
|
||||
// 빈 데이터 처리
|
||||
if (!data) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// 🆕 배열이 아닌 경우 배열로 변환
|
||||
const dataArray = Array.isArray(data) ? data : [data];
|
||||
|
||||
if (dataArray.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// 규칙이 없으면 원본 데이터 반환
|
||||
if (!rules || rules.length === 0) {
|
||||
return dataArray;
|
||||
}
|
||||
|
||||
// 변환 함수가 있는 규칙 확인
|
||||
const hasTransform = rules.some((rule) => rule.transform && rule.transform !== "none");
|
||||
|
||||
if (hasTransform) {
|
||||
// 변환 함수가 있으면 단일 값 또는 집계 결과 반환
|
||||
return [applyTransformRules(data, rules)];
|
||||
return [applyTransformRules(dataArray, rules)];
|
||||
}
|
||||
|
||||
// 일반 매핑 (각 행에 대해 매핑)
|
||||
return data.map((row) => {
|
||||
const mappedRow: any = {};
|
||||
// 🆕 원본 데이터를 복사한 후 매핑 규칙 적용 (매핑되지 않은 필드도 유지)
|
||||
return dataArray.map((row) => {
|
||||
// 원본 데이터 복사
|
||||
const mappedRow: any = { ...row };
|
||||
|
||||
for (const rule of rules) {
|
||||
// sourceField와 targetField가 모두 있어야 매핑 적용
|
||||
if (!rule.sourceField || !rule.targetField) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const sourceValue = getNestedValue(row, rule.sourceField);
|
||||
const targetValue = sourceValue ?? rule.defaultValue;
|
||||
|
||||
// 소스 필드와 타겟 필드가 다르면 소스 필드 제거 후 타겟 필드에 설정
|
||||
if (rule.sourceField !== rule.targetField) {
|
||||
delete mappedRow[rule.sourceField];
|
||||
}
|
||||
|
||||
setNestedValue(mappedRow, rule.targetField, targetValue);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user