40 lines
861 B
TypeScript
40 lines
861 B
TypeScript
|
import { styled } from '@mui/styles';
|
||
|
import React, { useEffect, useState } from 'react';
|
||
|
import { querySyncStatus, SyncStatus, triggerSync } from '../api/bbgo';
|
||
|
import useInterval from '../hooks/useInterval';
|
||
|
|
||
|
const ToolbarButton = styled('button')(({ theme }) => ({
|
||
|
padding: theme.spacing(1),
|
||
|
}));
|
||
|
|
||
|
export default function SyncButton() {
|
||
|
const [syncing, setSyncing] = useState(false);
|
||
|
|
||
|
const sync = async () => {
|
||
|
try {
|
||
|
setSyncing(true);
|
||
|
await triggerSync();
|
||
|
} catch {
|
||
|
setSyncing(false);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
useEffect(() => {
|
||
|
sync();
|
||
|
}, []);
|
||
|
|
||
|
useInterval(() => {
|
||
|
querySyncStatus().then((s) => {
|
||
|
if (s !== SyncStatus.Syncing) {
|
||
|
setSyncing(false);
|
||
|
}
|
||
|
});
|
||
|
}, 2000);
|
||
|
|
||
|
return (
|
||
|
<ToolbarButton disabled={syncing} onClick={sync}>
|
||
|
{syncing ? 'Syncing...' : 'Sync'}
|
||
|
</ToolbarButton>
|
||
|
);
|
||
|
}
|