29
loading...
This website collects cookies to deliver better user experience
import {ApolloServer,gql} from 'apollo-server';
const typeDefs=gql`
type Book{
id:ID!
title:String!
author:String!
}
type Mutation{
createBook(title:String!,author:String!):Book!
updateBook(id:String!,title:String!,author:String!):Book!
deleteBook(id:String!):Boolean!
}
type Query{
books:[Book!]!
searchBook(searchKey:String!):[Book!]!
}
`;
const resolvers={
Mutation:{
createBook:(_,{title,author})=>{
const book={id:`${books.length+1}`,title,author}
books.push(book);
return book;
},
updateBook:(_,Book){
books=books.map(x=>x.id===book.id?book:x)
return book;
},
deleteBook:(_,{id}){
books=books.filter(x=>x.id!==id);
return true;
}
},
Query:{
books:()=>books,
searchBooks:(_,{searchKey})=>{
const searchedBooks=books.filter((book)=>{
return book.title.includes(searchey)
}
return searchBooks;
}
}
createBook({
variables: {
title: "Megastructures",
author: "Discovery",
},
refetchQueries:[{query:Q_FETCH_BOOKS}]
});
createBook({
variables: {
title: "Malaysian Dreams",
author: "travel and living",
},
update: (store, { data }) => { //data is response from api
const bookData = store.readQuery({ query: Q_FETCH_BOOKS });
store.writeQuery({
query: Q_FETCH_BOOKS,
data: {
books: [...bookData.books, data.createBook],
},
});
},
});
updateBook({
variables: {
id: "1",
title: "Banged up abroad",
author: "National Geographic",
},
});
const [searchBook, { loading, data, error }] = useLazyQuery(Q_SEARCH_BOOKS, {
onCompleted: (data) => {
console.log(" search books onCompleted", data);
},
fetchPolicy: "cache-and-network",
});