96 lines
3.2 KiB
TypeScript
96 lines
3.2 KiB
TypeScript
import { dateFields, numberFields, yearMonthFields, dateTimeFields } from "../../../(map-layout)/map/components/common/table";
|
|
import { formatDateString } from "./date";
|
|
|
|
// 🎯 데이터 객체 전체를 포맷팅하는 함수
|
|
export const formatDisplayData = (data: { [key: string]: any }): { [key: string]: string } => {
|
|
if (!data) return {};
|
|
|
|
const formattedData: { [key: string]: string } = {};
|
|
|
|
Object.keys(data).forEach(fieldId => {
|
|
const value = data[fieldId];
|
|
|
|
if (value === null || value === undefined || value === "") {
|
|
formattedData[fieldId] = "-";
|
|
return;
|
|
}
|
|
|
|
// 🎯 연월 포맷팅 (yyyymm -> yyyy년 m월)
|
|
if (yearMonthFields.includes(fieldId)) {
|
|
const dateStr = String(value).trim();
|
|
if (/^\d{6}$/.test(dateStr)) {
|
|
const year = dateStr.substring(0, 4);
|
|
const month = parseInt(dateStr.substring(4, 6));
|
|
formattedData[fieldId] = `${year}년 ${month}월`;
|
|
} else {
|
|
formattedData[fieldId] = String(value);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 🎯 날짜시간 포맷팅 (yyyy-mm-dd hh:mm:ss -> yyyy년 m월 d일 hh:mm)
|
|
if (dateTimeFields.includes(fieldId)) {
|
|
const dateTimeStr = String(value).trim();
|
|
// yyyy-mm-dd hh:mm:ss 형식 확인
|
|
const dateTimeRegex = /^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})$/;
|
|
const match = dateTimeStr.match(dateTimeRegex);
|
|
|
|
if (match && match.length >= 6) {
|
|
const year = match[1];
|
|
const month = match[2];
|
|
const day = match[3];
|
|
const hour = match[4];
|
|
const minute = match[5];
|
|
const second = match[6];
|
|
|
|
// 🎯 undefined 체크 후 parseInt 적용
|
|
if (year && month && day && hour && minute) {
|
|
const formattedMonth = parseInt(month);
|
|
const formattedDay = parseInt(day);
|
|
formattedData[fieldId] = `${year}년 ${formattedMonth}월 ${formattedDay}일 ${hour}시 ${minute}분 ${second}초`;
|
|
} else {
|
|
formattedData[fieldId] = String(value);
|
|
}
|
|
} else {
|
|
formattedData[fieldId] = String(value);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 🎯 기존 날짜 포맷팅 (yyyymmdd -> yyyy년 m월 d일)
|
|
if (dateFields.includes(fieldId)) {
|
|
const dateStr = String(value).trim();
|
|
|
|
// 숫자 타입이거나 숫자로만 구성된 문자열인지 확인
|
|
if (/^\d+$/.test(dateStr)) {
|
|
formattedData[fieldId] = formatDateString(dateStr);
|
|
} else {
|
|
formattedData[fieldId] = String(value);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 🎯 숫자 필드는 천 단위 구분자 추가
|
|
if (numberFields.includes(fieldId)) {
|
|
const numValue = Number(value);
|
|
if (!isNaN(numValue) && isFinite(numValue)) {
|
|
formattedData[fieldId] = numValue.toLocaleString('ko-KR');
|
|
} else {
|
|
formattedData[fieldId] = String(value);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 나머지는 문자열로 처리
|
|
formattedData[fieldId] = String(value);
|
|
});
|
|
|
|
return formattedData;
|
|
};
|
|
|
|
// 🎯 단일 값만 포맷팅하는 함수 (기존 호환성을 위해 유지)
|
|
export const formatDisplayValue = (value: any, fieldId: string): string => {
|
|
const tempData = { [fieldId]: value };
|
|
const formatted = formatDisplayData(tempData);
|
|
return formatted[fieldId] || String(value);
|
|
}; |