Files
goldenChart/frontend/src/components/DesktopUpdatePanel.tsx
T
2026-06-14 10:15:54 +09:00

63 lines
2.0 KiB
TypeScript

import React, { useCallback, useEffect, useState } from 'react';
import { isDesktop } from '../utils/platform';
import {
checkDesktopUpdates,
getDesktopAppVersion,
} from '../utils/desktopBridge';
/** PC(Tauri) 앱 — 버전 표시 및 업데이트 확인 */
const DesktopUpdatePanel: React.FC = () => {
const [version, setVersion] = useState<string>('—');
const [status, setStatus] = useState<string>('');
const [busy, setBusy] = useState(false);
useEffect(() => {
if (!isDesktop()) return;
void getDesktopAppVersion().then(v => {
if (v) setVersion(v);
});
}, []);
const handleCheck = useCallback(async () => {
setBusy(true);
setStatus('업데이트 확인 중…');
try {
const res = await checkDesktopUpdates();
setStatus(res.message ?? (res.available ? `새 버전 ${res.version}` : '최신 버전입니다.'));
} finally {
setBusy(false);
}
}, []);
if (!isDesktop()) return null;
return (
<div className="stg-section">
<h3 className="stg-section-title">PC (GoldenChart Desktop)</h3>
<div className="stg-row">
<div className="stg-row-label">
<strong>현재 버전</strong>
<p className="stg-row-desc">설치된 데스크톱 클라이언트 버전입니다.</p>
</div>
<div className="stg-row-control">
<span>{version}</span>
</div>
</div>
<div className="stg-row">
<div className="stg-row-label">
<strong>업데이트</strong>
<p className="stg-row-desc">서버에서 버전을 확인하고 다운로드합니다.</p>
</div>
<div className="stg-row-control">
<button type="button" className="stg-btn-secondary" disabled={busy} onClick={() => { void handleCheck(); }}>
{busy ? '확인 중…' : '업데이트 확인'}
</button>
{status && <span className="stg-hint" style={{ marginLeft: 8 }}>{status}</span>}
</div>
</div>
</div>
);
};
export default DesktopUpdatePanel;