Visual edit in Lovable

Edited UI in Lovable
This commit is contained in:
gpt-engineer-app[bot]
2025-03-18 14:28:52 +00:00
parent 43b1f700b5
commit e0c2bbb345

View File

@@ -1,16 +1,13 @@
import React, { useCallback, useEffect, useState, useRef } from 'react'; import React, { useCallback, useEffect, useState, useRef } from 'react';
import { getAppVersionInfo, isAndroidPlatform } from '@/utils/platform'; import { getAppVersionInfo, isAndroidPlatform } from '@/utils/platform';
import { Input } from '@/components/ui/input'; import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label'; import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea'; import { Textarea } from '@/components/ui/textarea';
interface AppVersionInfoProps { interface AppVersionInfoProps {
className?: string; className?: string;
showDevInfo?: boolean; // 개발자 정보 표시 여부 showDevInfo?: boolean; // 개발자 정보 표시 여부
editable?: boolean; // 편집 가능 여부 editable?: boolean; // 편집 가능 여부
} }
const AppVersionInfo: React.FC<AppVersionInfoProps> = ({ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
className, className,
showDevInfo = true, showDevInfo = true,
@@ -24,7 +21,6 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
versionName: '1.0.0', versionName: '1.0.0',
buildNumber: 1 buildNumber: 1
}); });
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [error, setError] = useState(false); const [error, setError] = useState(false);
const [retries, setRetries] = useState(0); const [retries, setRetries] = useState(0);
@@ -38,7 +34,6 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
if (!editable) { if (!editable) {
setLoading(true); setLoading(true);
setError(false); setError(false);
try { try {
console.log('앱 버전 정보 요청 시작... (retries:', retries, ')'); console.log('앱 버전 정보 요청 시작... (retries:', retries, ')');
console.log('현재 플랫폼은', isAndroidPlatform() ? 'Android' : '기타'); console.log('현재 플랫폼은', isAndroidPlatform() ? 'Android' : '기타');
@@ -47,7 +42,6 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
if (retries > 0) { if (retries > 0) {
await new Promise(resolve => setTimeout(resolve, 300)); await new Promise(resolve => setTimeout(resolve, 300));
} }
const info = await getAppVersionInfo(); const info = await getAppVersionInfo();
console.log('받은 앱 버전 정보:', info); console.log('받은 앱 버전 정보:', info);
@@ -55,7 +49,6 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
if (!info || typeof info !== 'object') { if (!info || typeof info !== 'object') {
throw new Error('유효하지 않은 응답 형식'); throw new Error('유효하지 않은 응답 형식');
} }
setVersionInfo({ setVersionInfo({
versionName: info.versionName, versionName: info.versionName,
buildNumber: info.buildNumber, buildNumber: info.buildNumber,
@@ -65,7 +58,6 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
// 편집 가능한 필드도 업데이트 // 편집 가능한 필드도 업데이트
setEditableVersionName(info.versionName); setEditableVersionName(info.versionName);
setEditableBuildNumber(String(info.buildNumber)); setEditableBuildNumber(String(info.buildNumber));
setLoading(false); setLoading(false);
console.log('앱 버전 정보 표시 준비 완료'); console.log('앱 버전 정보 표시 준비 완료');
} catch (error) { } catch (error) {
@@ -111,10 +103,8 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
} }
} }
}, [fetchVersionInfo, error, loading, editable]); }, [fetchVersionInfo, error, loading, editable]);
if (editable) { if (editable) {
return ( return <div className={className}>
<div className={className}>
<div className="space-y-3"> <div className="space-y-3">
<div> <div>
<Label htmlFor="versionName"> </Label> <Label htmlFor="versionName"> </Label>
@@ -131,44 +121,24 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
</div> </div>
<div> <div>
<Label htmlFor="notes"></Label> <Label htmlFor="notes"> </Label>
<Textarea <Textarea id="notes" placeholder="추가 정보를 입력하세요" className="h-20" />
id="notes"
placeholder="추가 정보를 입력하세요"
className="h-20"
/>
</div> </div>
</div> </div>
</div> </div>;
);
} }
return <div className={className}>
return ( {loading ? <div className="py-1 text-center">
<div className={className}>
{loading ? (
<div className="py-1 text-center">
<p className="text-sm text-gray-400 animate-pulse"> ...</p> <p className="text-sm text-gray-400 animate-pulse"> ...</p>
</div> </div> : error ? <div className="py-1 text-center">
) : error ? (
<div className="py-1 text-center">
<p className="text-sm text-red-500"> </p> <p className="text-sm text-red-500"> </p>
<button <button onClick={handleRetry} className="text-xs text-blue-500 underline mt-1 px-2 py-0.5 rounded hover:bg-blue-50">
onClick={handleRetry}
className="text-xs text-blue-500 underline mt-1 px-2 py-0.5 rounded hover:bg-blue-50"
>
</button> </button>
</div> </div> : <div className="py-1 text-center">
) : (
<div className="py-1 text-center">
<p className="text-sm"> {versionInfo.versionName} <span className="font-mono">( {versionInfo.buildNumber})</span></p> <p className="text-sm"> {versionInfo.versionName} <span className="font-mono">( {versionInfo.buildNumber})</span></p>
{showDevInfo && versionInfo.versionCode && ( {showDevInfo && versionInfo.versionCode && <p className="text-xs text-gray-400 mt-1 font-mono">versionCode: {versionInfo.versionCode}</p>}
<p className="text-xs text-gray-400 mt-1 font-mono">versionCode: {versionInfo.versionCode}</p> </div>}
)} </div>;
</div>
)}
</div>
);
}; };
export default AppVersionInfo; export default AppVersionInfo;