Cleaned book form
This commit is contained in:
+18
-21
@@ -1,4 +1,4 @@
|
|||||||
import { component, html, useState } from 'haunted';
|
import { component, html } from 'haunted';
|
||||||
import { spread } from '@open-wc/lit-helpers';
|
import { spread } from '@open-wc/lit-helpers';
|
||||||
import { useMutation } from '@apollo/react-hooks';
|
import { useMutation } from '@apollo/react-hooks';
|
||||||
|
|
||||||
@@ -7,45 +7,42 @@ import { AddBook, GetBooks } from './queries'
|
|||||||
import Css from './bookform.scss';
|
import Css from './bookform.scss';
|
||||||
|
|
||||||
const BookForm = () => {
|
const BookForm = () => {
|
||||||
const [titleProps, titleMeta] = useFormField("title");
|
const [titleProps, { reset: resetAuthor, isDirty: dirtyAuthor}] = useFormField("title");
|
||||||
const [authorProps, authorMeta] = useFormField("author");
|
const [authorProps, { reset: resetTitle, isDirty: dirtyTitle}] = useFormField("author");
|
||||||
const [addBook, { loading }] = useMutation(AddBook);
|
const [addBook, { loading }] = useMutation(AddBook, {
|
||||||
|
update: (cache, { data }) => {
|
||||||
|
const { books }: any = cache.readQuery({ query: GetBooks });
|
||||||
|
cache.writeQuery({
|
||||||
|
query: GetBooks,
|
||||||
|
data: { books: [...books, data.addBook] }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<style>${Css.toString()}</style>
|
<style>${Css.toString()}</style>
|
||||||
<form @submit=${async (e: Event) => {
|
<form @submit=${async (e: Event) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
try {
|
try {
|
||||||
const newBook = {
|
await addBook({ variables: {
|
||||||
author: authorProps[".value"],
|
author: authorProps[".value"],
|
||||||
title: titleProps[".value"]
|
title: titleProps[".value"]
|
||||||
};
|
}});
|
||||||
|
|
||||||
await addBook({
|
resetAuthor();
|
||||||
variables: newBook,
|
resetTitle();
|
||||||
update: (cache, { data }) => {
|
|
||||||
const { books }: any = cache.readQuery({ query: GetBooks });
|
|
||||||
cache.writeQuery({
|
|
||||||
query: GetBooks,
|
|
||||||
data: { books: [...books, data.addBook] }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
titleMeta.reset();
|
|
||||||
authorMeta.reset();
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
}}>
|
}}>
|
||||||
<input
|
<input
|
||||||
required
|
required
|
||||||
class=${titleMeta.isDirty ? "dirty" : ""}
|
class=${dirtyAuthor ? "dirty" : ""}
|
||||||
placeholder="book title"
|
placeholder="book title"
|
||||||
...=${spread(titleProps)}>
|
...=${spread(titleProps)}>
|
||||||
<input
|
<input
|
||||||
required
|
required
|
||||||
class=${authorMeta.isDirty ? "dirty" : ""}
|
class=${dirtyTitle ? "dirty" : ""}
|
||||||
placeholder="author name"
|
placeholder="author name"
|
||||||
...=${spread(authorProps)}>
|
...=${spread(authorProps)}>
|
||||||
<button ?disabled=${loading}>+ Add book</button>
|
<button ?disabled=${loading}>+ Add book</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user