Haunted: useMutation
Apollo useMutation
hook for web components.
Read the mutation component guides for examples and tips.
Live Demo
import { useMutation, useState, component, html } from '@apollo-elements/haunted';
import { AddUserMutation } from './AddUser.mutation.graphql.js';
import '@power-elements/card';
import '@material/mwc-button';
import '@material/mwc-textfield';
const format = isoString => new Date(isoString).toDateString()
function AddUser() {
const [addUser, { called, data, loading }] = useMutation(AddUserMutation);
const [variables, setVariables] = useState({ });
const onInput = event => setVariables({ name: event.target.value });
const [{ name, timestamp } = {}] = data?.insertUsers?.returning ?? [];
return html`
<p-card>
<h2 slot="heading">Add User</h2>
${!called || !data ? '' : html`
<dl>
<dt>Name</dt> <dd>${name}</dd>
<dt>Added</dt> <dd>${format(timestamp)}</dd>
</dl>
`}
<mwc-textfield slot="actions"
label="User Name"
outlined
?disabled="${loading}"
@input="${onInput}"></mwc-textfield>
<mwc-button slot="actions"
label="Add User"
?disabled="${loading}"
@click="${() => addUser({ variables })}"></mwc-button>
</p-card>
`;
}
customElements.define('add-user', component(AddUser));
import { gql, TypedDocumentNode } from '@apollo/client/core';
interface Data {
insertUsers: {
returning: {
name: string;
id: string;
timestamp: string;
}
}
}
export const AddUserMutation: TypedDocumentNode<Data, { name: string }> = gql`
mutation InsertUser($name: String!) {
insertUsers: insert_users(objects: {name: $name}) {
returning {
name
id
timestamp
}
}
}
`;
<script type="module" src="client.js"></script>
<script type="module" src="AddUser.js"></script>
<add-user></add-user>
import { ApolloClient, HttpLink, InMemoryCache } from '@apollo/client/core';
window.__APOLLO_CLIENT__ = new ApolloClient({
cache: new InMemoryCache(),
link: new HttpLink({ uri: 'https://api.spacex.land/graphql' }),
});
Read the mutation component guides for examples and tips.
useMutation
Parameters
mutation
ComponentDocument<D, V>
options
ApolloMutationControllerOptions<D, V>
Option | Type | Description |
---|---|---|
variables | Variables<D, V> |
Operation variables. See variables. |
optimisticResponse | OptimisticResponseType<D, V> |
See optimisticResponse |
fetchPolicy | ErrorPolicy |
See fetchPolicy |
refetchQueries | RefetchQueriesType<D> | null |
See refetchQueries |
awaitRefetchQueries | boolean |
See awaitRefetchQueries |
update | MutationUpdaterFn<Data<D>> |
Function used to update the client cache following the mutation. See updater. |
Inherits from ApolloControllerOptions
Returns
MutationHookTuple<D, V>
Exports
import { useMutation } from '@apollo-elements/haunted/useMutation';