diff --git a/src/components/AppVersionInfo.tsx b/src/components/AppVersionInfo.tsx index 5843abd..e93e613 100644 --- a/src/components/AppVersionInfo.tsx +++ b/src/components/AppVersionInfo.tsx @@ -1,17 +1,14 @@ - import React, { useCallback, useEffect, useState, useRef } from 'react'; import { getAppVersionInfo, isAndroidPlatform } from '@/utils/platform'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; - interface AppVersionInfoProps { className?: string; showDevInfo?: boolean; // 개발자 정보 표시 여부 editable?: boolean; // 편집 가능 여부 } - -const AppVersionInfo: React.FC = ({ +const AppVersionInfo: React.FC = ({ className, showDevInfo = true, editable = false @@ -24,38 +21,34 @@ const AppVersionInfo: React.FC = ({ versionName: '1.0.0', buildNumber: 1 }); - const [loading, setLoading] = useState(true); const [error, setError] = useState(false); const [retries, setRetries] = useState(0); - + // 편집 가능한 필드를 위한 상태 const [editableVersionName, setEditableVersionName] = useState('1.0.0'); const [editableBuildNumber, setEditableBuildNumber] = useState('1'); - + // 버전 정보 가져오기 const fetchVersionInfo = useCallback(async () => { if (!editable) { setLoading(true); setError(false); - try { console.log('앱 버전 정보 요청 시작... (retries:', retries, ')'); console.log('현재 플랫폼은', isAndroidPlatform() ? 'Android' : '기타'); - + // 재시도를 하는 경우 짤은 지연 추가 if (retries > 0) { await new Promise(resolve => setTimeout(resolve, 300)); } - const info = await getAppVersionInfo(); console.log('받은 앱 버전 정보:', info); - + // 데이터 검증 - 유효한 버전 정보인지 확인 if (!info || typeof info !== 'object') { throw new Error('유효하지 않은 응답 형식'); } - setVersionInfo({ versionName: info.versionName, buildNumber: info.buildNumber, @@ -65,7 +58,6 @@ const AppVersionInfo: React.FC = ({ // 편집 가능한 필드도 업데이트 setEditableVersionName(info.versionName); setEditableBuildNumber(String(info.buildNumber)); - setLoading(false); console.log('앱 버전 정보 표시 준비 완료'); } catch (error) { @@ -75,23 +67,23 @@ const AppVersionInfo: React.FC = ({ } } }, [retries, editable]); - + // 재시도 처리 const handleRetry = useCallback(() => { setRetries(prev => prev + 1); fetchVersionInfo(); }, [fetchVersionInfo]); - + // 초기화 완료 후 한번 더 시도하도록 설정 const initialLoadAttemptedRef = useRef(false); - + // 컴포넌트 마운트 시 즉시 실행 (IIFE) useEffect(() => { if (!editable) { (async () => { // 즉시 버전 정보 가져오기 시도 await fetchVersionInfo(); - + // 300ms 후에 한번 더 시도 (네이티브 플러그인이 완전히 로드되지 않았을 경우 대비) setTimeout(() => { if (error || loading) { @@ -100,21 +92,19 @@ const AppVersionInfo: React.FC = ({ } }, 1000); })(); - + // 개발 모드에서는 버전 정보 변경을 쉽게 확인하기 위해 주기적 갱신 if (process.env.NODE_ENV === 'development') { const interval = setInterval(() => { fetchVersionInfo(); }, 30000); // 30초마다 새로 가져오기 - + return () => clearInterval(interval); } } }, [fetchVersionInfo, error, loading, editable]); - if (editable) { - return ( -
+ return
@@ -131,44 +121,24 @@ const AppVersionInfo: React.FC = ({
- -