mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
replay feedback
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -11,7 +11,7 @@
|
|||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
<meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" />
|
<meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" />
|
||||||
<title>Multi Roomba Rover</title>
|
<title>Multi Roomba Rover</title>
|
||||||
<script type="module" crossorigin src="/assets/index-CCZGd9x8.js"></script>
|
<script type="module" crossorigin src="/assets/index-Bidge1Zf.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/assets/index-DPKQJjsh.css">
|
<link rel="stylesheet" crossorigin href="/assets/index-DPKQJjsh.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ export default function ReplaySourcesPanel({ panelId = 'replay-sources' }) {
|
|||||||
const [selected, setSelected] = useState([]);
|
const [selected, setSelected] = useState([]);
|
||||||
const [busy, setBusy] = useState(false);
|
const [busy, setBusy] = useState(false);
|
||||||
const [error, setError] = useState(null);
|
const [error, setError] = useState(null);
|
||||||
|
const [success, setSuccess] = useState(null);
|
||||||
const replayState = session?.replay || null;
|
const replayState = session?.replay || null;
|
||||||
const [remainingMs, setRemainingMs] = useState(0);
|
const [remainingMs, setRemainingMs] = useState(0);
|
||||||
|
|
||||||
@@ -77,18 +78,21 @@ export default function ReplaySourcesPanel({ panelId = 'replay-sources' }) {
|
|||||||
saveSettings((current) => ({ ...(current || {}), [panelId]: next }));
|
saveSettings((current) => ({ ...(current || {}), [panelId]: next }));
|
||||||
return next;
|
return next;
|
||||||
});
|
});
|
||||||
|
setSuccess(null);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReplay = async () => {
|
const handleReplay = async () => {
|
||||||
if (replayDisabled) return;
|
if (replayDisabled) return;
|
||||||
setBusy(true);
|
setBusy(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
|
setSuccess(null);
|
||||||
try {
|
try {
|
||||||
const payload = selected.map((key) => {
|
const payload = selected.map((key) => {
|
||||||
const [type, id] = key.split(':');
|
const [type, id] = key.split(':');
|
||||||
return { type, id };
|
return { type, id };
|
||||||
});
|
});
|
||||||
await triggerReplay(payload);
|
await triggerReplay(payload);
|
||||||
|
setSuccess('Replay sent. Check the Discord replay channel.');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setError(err.message);
|
setError(err.message);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -116,6 +120,7 @@ export default function ReplaySourcesPanel({ panelId = 'replay-sources' }) {
|
|||||||
{remainingMs > 0 ? `Replay (${Math.ceil(remainingMs / 1000)}s)` : busy ? 'Replay…' : 'Replay'}
|
{remainingMs > 0 ? `Replay (${Math.ceil(remainingMs / 1000)}s)` : busy ? 'Replay…' : 'Replay'}
|
||||||
</button>
|
</button>
|
||||||
{error ? <div className="text-xs text-amber-400">{error}</div> : null}
|
{error ? <div className="text-xs text-amber-400">{error}</div> : null}
|
||||||
|
{success ? <div className="text-xs text-emerald-300">{success}</div> : null}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user