타입 관리 개선 및 화면 비율조정 중간커밋

This commit is contained in:
kjs
2025-09-19 18:43:55 +09:00
parent baa656dee5
commit 4b28530fec
47 changed files with 13149 additions and 1230 deletions

View File

@@ -351,71 +351,12 @@ const DataTableConfigPanelComponent: React.FC<DataTableConfigPanelProps> = ({
[tables, onUpdateComponent, localValues.tableName],
);
// 컬럼 타입 추론
// 컬럼 타입 추론 (통합 매핑 시스템 사용)
const getWidgetTypeFromColumn = (column: ColumnInfo): WebType => {
const type = column.dataType?.toLowerCase() || "";
const name = column.columnName.toLowerCase();
// 통합 자동 매핑 유틸리티 사용
const { inferWebTypeFromColumn } = require("@/lib/utils/dbTypeMapping");
console.log("🔍 웹타입 추론:", {
columnName: column.columnName,
dataType: column.dataType,
type,
name,
});
// 숫자 타입
if (type.includes("int") || type.includes("integer") || type.includes("bigint") || type.includes("smallint")) {
return "number";
}
if (
type.includes("decimal") ||
type.includes("numeric") ||
type.includes("float") ||
type.includes("double") ||
type.includes("real")
) {
return "decimal";
}
// 날짜/시간 타입
if (type.includes("timestamp") || type.includes("datetime")) {
return "datetime";
}
if (type.includes("date")) {
return "date";
}
if (type.includes("time")) {
return "datetime";
}
// 불린 타입
if (type.includes("bool") || type.includes("boolean")) {
return "checkbox";
}
// 컬럼명 기반 추론
if (name.includes("email") || name.includes("mail")) return "email";
if (name.includes("phone") || name.includes("tel") || name.includes("mobile")) return "tel";
if (name.includes("url") || name.includes("link")) return "text";
if (name.includes("password") || name.includes("pwd")) return "text";
// 파일 타입 추론
if (
name.includes("file") ||
name.includes("attach") ||
name.includes("upload") ||
name.includes("document") ||
name.includes("docs") ||
name.includes("image") ||
name.includes("photo") ||
name.includes("picture") ||
name.includes("media")
) {
return "file";
}
// 텍스트 타입 (기본값)
return "text";
return inferWebTypeFromColumn(column.dataType || "text", column.columnName);
};
// 컬럼 업데이트