Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 'use client' import {useRouter} from 'next/navigation' import {useState} from 'react' export default function RestoreButton({ songId, number, }: { songId: string number: number }) { const router = useRouter() const [state, setState] = useState<'idle' | 'confirm' | 'busy' | 'error'>( 'idle', ) async function restore() { setState('busy') const r = await fetch(`/api/songs/${songId}/versions/${number}/restore`, { method: 'POST', }) if (!r.ok) return setState('error') const {number: n} = await r.json() router.push(`?v=${n}`) router.refresh() setState('idle') } if (state === 'confirm' || state === 'busy') return ( <span className="flex items-center gap-2"> <span className="text-sm text-muted"> Save version {number} as the current chart? </span> <button type="button" onClick={restore} disabled={state === 'busy'} className="min-h-11 rounded-lg bg-accent px-4 font-bold text-on-accent" > Restore </button> <button type="button" onClick={() => setState('idle')} className="min-h-11 px-2 text-muted" > Cancel </button> </span> ) return ( <button type="button" onClick={() => setState('confirm')} className="min-h-11 rounded-lg border border-amber px-4 font-semibold text-amber" > {state === 'error' ? 'Restore failed — try again' : `Restore version ${number}`} </button> ) } |