const LoadingToggle = () => {
const [loading, setLoading] = React.useState(false)
const [isOn, setIsOn] = React.useState(false)
async function switchSlowly(currentOn) {
await new Promise(resolve => setTimeout(resolve, 1500))
return await !currentOn
}
async function onClick() {
setLoading(!loading)
const newSwitchState = await switchSlowly(isOn)
setIsOn(newSwitchState)
}
const handleSwitchChange = React.useCallback(
on => {
setLoading(false)
},
[setLoading]
)
return (
<>
<Box display="flex" maxWidth="300px">
<Box flexGrow={1} fontSize={2} fontWeight="bold" id="switchLabel">
Notifications
</Box>
<ToggleSwitch
aria-labelledby="switchLabel"
loading={loading}
checked={isOn}
onClick={onClick}
onChange={handleSwitchChange}
/>
</Box>
<p>The switch is {isOn ? 'on' : 'off'}</p>
</>
)
}
render(LoadingToggle)