/** * ๐Ÿ“„ Format Display Value Utility * ๋ฐ์ดํ„ฐ ํ‘œ์‹œ ํฌ๋งทํŒ… ์œ ํ‹ธ๋ฆฌํ‹ฐ * * - ๋‚ ์งœ ํฌ๋งทํŒ… (yyyymmdd -> yyyy๋…„ m์›” d์ผ) * - ์—ฐ์›” ํฌ๋งทํŒ… (yyyymm -> yyyy๋…„ m์›”) * - ๋‚ ์งœ์‹œ๊ฐ„ ํฌ๋งทํŒ… (yyyy-mm-dd hh:mm:ss -> yyyy๋…„ m์›” d์ผ hh:mm) * - ์ˆซ์ž ํฌ๋งทํŒ… (์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž ๋ฐ ์†Œ์ˆ˜์  ์ฒ˜๋ฆฌ) * - ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ์ „์ฒด ํฌ๋งทํŒ… ๋ฐ ๋‹จ์ผ ๊ฐ’ ํฌ๋งทํŒ… ์ง€์› * - null/undefined ๊ฐ’ ์ฒ˜๋ฆฌ ๋ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • * - ๋‹ค์–‘ํ•œ ํ•„๋“œ ํƒ€์ž…๋ณ„ ์กฐ๊ฑด๋ถ€ ํฌ๋งทํŒ… ๋กœ์ง */ 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}`; formattedData[fieldId] = `${year}-${month}-${day} ${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)) { // ์†Œ์ˆ˜์ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ 4์ž๋ฆฌ๊นŒ์ง€ ํ‘œ์‹œ if (!Number.isInteger(numValue)) { formattedData[fieldId] = numValue.toLocaleString('ko-KR', { maximumFractionDigits: 4 }); } else { 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); };