add spinner to button

This commit is contained in:
Thomas Ruoff
2022-12-26 00:00:09 +01:00
parent b8c1d9e557
commit 0f7b7ddb1a
2 changed files with 17 additions and 3 deletions

View File

@@ -3,6 +3,7 @@ import Contact from './contact'
import BookProvider, { BookContext } from '../../context/book'
import DateSelect from './dateSelect'
import Reason from './reason'
import Button from '../button'
function BookForm() {
const { onSubmit, state, forgetData } = useContext(BookContext)
@@ -32,9 +33,9 @@ function BookForm() {
)}
<Contact />
<div className="flex items-end">
<button type="submit" disabled={postData} className="btn btn-blue">
<Button type="submit" loading={!!postData} disabled={postData}>
{postData ? 'Speichern...' : 'Absenden'}
</button>
</Button>
{postDataError && (
<div className="error-message flex-grow">{postDataError}</div>
)}
@@ -50,4 +51,4 @@ export default function Book() {
<BookForm />
</BookProvider>
)
}
}

13
components/button.tsx Normal file
View File

@@ -0,0 +1,13 @@
const Button = ({ children, loading = false, ...rest }) => {
return (<button className="btn btn-blue" {...rest}>
{loading &&
<svg className="inline animate-spin -ml-1 mr-3 h-4 w-4 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
}
{children}
</button>);
}
export default Button;