fix: 앱 버전 정보 표시 개선 - editable 속성에 관계없이 버전 정보 표시

This commit is contained in:
hansoo
2025-03-23 07:09:31 +09:00
parent 89f4d052b2
commit f286f23842

View File

@@ -1,12 +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 { Label } from '@/components/ui/label'; import { Label } from '@/components/ui/label';
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,
@@ -26,7 +27,6 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
// 버전 정보 가져오기 // 버전 정보 가져오기
const fetchVersionInfo = useCallback(async () => { const fetchVersionInfo = useCallback(async () => {
if (!editable) {
setLoading(true); setLoading(true);
setError(false); setError(false);
try { try {
@@ -57,8 +57,7 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
setError(true); setError(true);
setLoading(false); setLoading(false);
} }
} }, [retries]);
}, [retries, editable]);
// 재시도 처리 // 재시도 처리
const handleRetry = useCallback(() => { const handleRetry = useCallback(() => {
@@ -71,12 +70,11 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
// 컴포넌트 마운트 시 즉시 실행 (IIFE) // 컴포넌트 마운트 시 즉시 실행 (IIFE)
useEffect(() => { useEffect(() => {
if (!editable) {
(async () => { (async () => {
// 즉시 버전 정보 가져오기 시도 // 즉시 버전 정보 가져오기 시도
await fetchVersionInfo(); await fetchVersionInfo();
// 300ms 후에 한번 더 시도 (네이티브 플러그인이 완전히 로드되지 않았을 경우 대비) // 1000ms 후에 한번 더 시도 (네이티브 플러그인이 완전히 로드되지 않았을 경우 대비)
setTimeout(() => { setTimeout(() => {
if (error || loading) { if (error || loading) {
fetchVersionInfo(); fetchVersionInfo();
@@ -93,28 +91,44 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
return () => clearInterval(interval); return () => clearInterval(interval);
} }
} }, [fetchVersionInfo, error, loading]);
}, [fetchVersionInfo, error, loading, editable]);
if (editable) { return (
return <div className={className}> <div className={className}>
<div className="space-y-3"> {loading ? (
<div className="mt-[70px] text-center"> <div className="py-1 text-center">
<p className="text-gray-400 font-semibold text-lg my-[50px]">ZELLYY CLOUD</p>
</div>
</div>
</div>;
}
return <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> : error ? <div className="py-1 text-center"> </div>
) : error ? (
<div className="py-1 text-center">
<p className="text-sm text-red-500"> </p> <p className="text-sm text-red-500"> </p>
<button onClick={handleRetry} className="text-xs text-blue-500 underline mt-1 px-2 py-0.5 rounded hover:bg-blue-50"> <button
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 className="py-1 text-center"> </div>
{showDevInfo && versionInfo.versionCode && <p className="text-xs text-gray-400 mt-1 font-mono">versionCode: {versionInfo.versionCode}</p>} ) : (
</div>} <div className="py-2 text-center neuro-flat px-4 rounded-md">
</div>; <p className="text-sm text-gray-600">
: <span className="font-semibold">{versionInfo.versionName}</span>
</p>
<p className="text-xs text-gray-500 mt-1">
: <span className="font-mono">{versionInfo.buildNumber}</span>
</p>
{showDevInfo && versionInfo.versionCode && (
<p className="text-xs text-gray-400 mt-1 font-mono">
versionCode: {versionInfo.versionCode}
</p>
)}
{editable && (
<p className="text-gray-400 font-semibold text-sm mt-2">ZELLYY CLOUD</p>
)}
</div>
)}
</div>
);
}; };
export default AppVersionInfo; export default AppVersionInfo;