fix: prevent multiple run triggers from button clicks

- add isTriggering state to Dashboard
- disable button immediately upon click
- update isLoading prop to include trigger state
This commit is contained in:
Ahmet Guzererler 2026-03-22 22:51:35 +01:00
parent 7dd7a5c0b6
commit 2116c14d07
1 changed files with 7 additions and 1 deletions

View File

@ -26,12 +26,16 @@ const API_BASE = 'http://127.0.0.1:8088/api';
export const Dashboard: React.FC = () => {
const [activeRunId, setActiveRunId] = useState<string | null>(null);
const [isTriggering, setIsTriggering] = useState(false);
const [portfolioId, setPortfolioId] = useState<string>("main_portfolio");
const { events, status, clearEvents } = useAgentStream(activeRunId);
const { isOpen, onOpen, onClose } = useDisclosure();
const [selectedNode, setSelectedNode] = useState<any>(null);
const startRun = async (type: string) => {
if (isTriggering || status === 'streaming' || status === 'connecting') return;
setIsTriggering(true);
try {
clearEvents();
const res = await axios.post(`${API_BASE}/run/${type}`, {
@ -41,6 +45,8 @@ export const Dashboard: React.FC = () => {
setActiveRunId(res.data.run_id);
} catch (err) {
console.error("Failed to start run:", err);
} finally {
setIsTriggering(false);
}
};
@ -73,7 +79,7 @@ export const Dashboard: React.FC = () => {
colorScheme="cyan"
variant="solid"
onClick={() => startRun('scan')}
isLoading={status === 'connecting' || status === 'streaming'}
isLoading={isTriggering || status === 'connecting' || status === 'streaming'}
>
Start Market Scan
</Button>