지도 위젯 팝업 수정 및 폴리곤 매핑 추가

This commit is contained in:
dohyeons
2025-11-17 12:10:29 +09:00
parent ff23aa7d1d
commit 3e9c566834
2 changed files with 250 additions and 113 deletions

View File

@@ -26,8 +26,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
const [sampleData, setSampleData] = useState<any[]>([]); // 샘플 데이터 (최대 3개)
const [columnSearchTerm, setColumnSearchTerm] = useState(""); // 컬럼 검색어
console.log("🔧 MultiApiConfig - dataSource:", dataSource);
// 외부 API 커넥션 목록 로드
useEffect(() => {
const loadApiConnections = async () => {
@@ -51,14 +49,12 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
return;
}
console.log("불러온 커넥션:", connection);
// base_url과 endpoint_path를 조합하여 전체 URL 생성
const fullEndpoint = connection.endpoint_path
? `${connection.base_url}${connection.endpoint_path}`
: connection.base_url;
console.log("전체 엔드포인트:", fullEndpoint);
const updates: Partial<ChartDataSource> = {
endpoint: fullEndpoint,
@@ -76,7 +72,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
value,
});
});
console.log("기본 헤더 적용:", headers);
}
// 인증 설정이 있으면 헤더 또는 쿼리 파라미터에 추가
@@ -91,7 +86,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
key: authConfig.keyName,
value: authConfig.keyValue,
});
console.log("API Key 헤더 추가:", authConfig.keyName);
} else if (authConfig.keyLocation === "query" && authConfig.keyName && authConfig.keyValue) {
// UTIC API는 'key'를 사용하므로, 'apiKey'를 'key'로 변환
const actualKeyName = authConfig.keyName === "apiKey" ? "key" : authConfig.keyName;
@@ -100,7 +94,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
key: actualKeyName,
value: authConfig.keyValue,
});
console.log("API Key 쿼리 파라미터 추가:", actualKeyName, "(원본:", authConfig.keyName, ")");
}
break;
@@ -111,7 +104,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
key: "Authorization",
value: `Bearer ${authConfig.token}`,
});
console.log("Bearer Token 헤더 추가");
}
break;
@@ -123,7 +115,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
key: "Authorization",
value: `Basic ${credentials}`,
});
console.log("Basic Auth 헤더 추가");
}
break;
@@ -134,7 +125,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
key: "Authorization",
value: `Bearer ${authConfig.accessToken}`,
});
console.log("OAuth2 Token 헤더 추가");
}
break;
}
@@ -148,7 +138,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
updates.queryParams = queryParams;
}
console.log("최종 업데이트:", updates);
onChange(updates);
};
@@ -235,12 +224,12 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
const result = await response.json();
console.log("🌐 [API 테스트 결과]", result.data);
if (result.success) {
// 텍스트 데이터 파싱 함수 (MapTestWidgetV2와 동일)
const parseTextData = (text: string): any[] => {
try {
console.log("🔍 텍스트 파싱 시작 (처음 500자):", text.substring(0, 500));
const lines = text.split('\n').filter(line => {
const trimmed = line.trim();
return trimmed &&
@@ -249,8 +238,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
!trimmed.startsWith('---');
});
console.log(`📝 유효한 라인: ${lines.length}`);
if (lines.length === 0) return [];
const result: any[] = [];
@@ -278,7 +265,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
}
}
console.log("📊 파싱 결과:", result.length, "개");
return result;
} catch (error) {
console.error("❌ 텍스트 파싱 오류:", error);
@@ -291,10 +277,8 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
// 텍스트 데이터 체크 (기상청 API 등)
if (data && typeof data === 'object' && data.text && typeof data.text === 'string') {
console.log("📄 텍스트 형식 데이터 감지, CSV 파싱 시도");
const parsedData = parseTextData(data.text);
if (parsedData.length > 0) {
console.log(`✅ CSV 파싱 성공: ${parsedData.length}개 행`);
data = parsedData;
}
} else if (dataSource.jsonPath) {
@@ -306,6 +290,8 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
const rows = Array.isArray(data) ? data : [data];
console.log("📊 [최종 파싱된 데이터]", rows);
// 컬럼 목록 및 타입 추출
if (rows.length > 0) {
const columns = Object.keys(rows[0]);
@@ -336,9 +322,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
// 샘플 데이터 저장 (최대 3개)
setSampleData(rows.slice(0, 3));
console.log("📊 발견된 컬럼:", columns);
console.log("📊 컬럼 타입:", types);
}
// 위도/경도 또는 coordinates 필드 또는 지역 코드 체크
@@ -422,7 +405,6 @@ export default function MultiApiConfig({ dataSource, onChange, onTestResult }: M
id={`endpoint-${dataSource.id}`}
value={dataSource.endpoint || ""}
onChange={(e) => {
console.log("📝 API URL 변경:", e.target.value);
onChange({ endpoint: e.target.value });
}}
placeholder="https://api.example.com/data"