File transfer

This commit is contained in:
2026-06-11 20:33:44 -05:00
parent 2cb1d58264
commit b362357bcb
58 changed files with 5096 additions and 4 deletions

View File

@@ -0,0 +1,52 @@
/**
* Restore Modal — confirmation before overwriting current file
* Ball Studios <https://git.balls.studio>
*/
import React, { useState } from 'react';
import http from '@/api/http';
interface Props {
serverUuid: string;
revision: { id: number; revision_number: number; change_summary: string };
onClose: () => void;
onRestored: () => void;
}
export default function RestoreModal({ serverUuid, revision, onClose, onRestored }: Props) {
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const handleRestore = async () => {
setLoading(true);
setError(null);
try {
await http.post(`/api/client/servers/${serverUuid}/addons/files/revisions/${revision.id}/restore`);
onRestored();
} catch (e: any) {
setError(e?.response?.data?.errors?.[0]?.detail ?? 'Restore failed.');
} finally {
setLoading(false);
}
};
return (
<div className='addon-modal-overlay' role='dialog' aria-modal='true'>
<div className='addon-modal'>
<div className='addon-modal-icon'>🔄</div>
<h3 className='addon-modal-title'>Restore Revision #{revision.revision_number}?</h3>
<p className='addon-modal-body'>
This will overwrite the current file with revision #{revision.revision_number}.<br />
<em>{revision.change_summary}</em>
</p>
{error && <p className='addon-error'>{error}</p>}
<div className='addon-modal-actions'>
<button className='addon-btn addon-btn-secondary' onClick={onClose} disabled={loading}>Cancel</button>
<button className='addon-btn addon-btn-primary' onClick={handleRestore} disabled={loading}>
{loading ? 'Restoring…' : 'Restore'}
</button>
</div>
</div>
</div>
);
}