Browse Source

Cleaned book form

master
Anthony Hinsinger 6 years ago
parent
commit
ab9f6a2c3a
  1. 39
      src/web/bookform.ts

39
src/web/bookform.ts

@ -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>

Loading…
Cancel
Save