import * as React from "react"; import { graphql, QueryProps, MutationFunc } from "react-apollo"; import { withRouter, RouteComponentProps } from "react-router-dom"; import * as AddPetMutationGql from "./AddPetMutation.graphql"; import * as OwnerQueryGql from "../../owner/OwnerQuery.graphql"; import { GetAddPetFormDataQuery, AddPetInput, AddPetMutation, PetData } from "../../types"; import PetForm from "../PetForm"; import withAddPetFormDataLoader from "./withAddPetFormDataLoader"; type AddPetPageOwnProps = RouteComponentProps<{}> & { data: QueryProps & GetAddPetFormDataQuery; }; type AddPetPageProps = AddPetPageOwnProps & { mutate: MutationFunc<AddPetMutation>; }; const emptyPet = (): PetData => ({ name: "", birthDate: "", type: -1 }); const AddPetPage = ({ mutate, history, data }: AddPetPageProps) => <div> <PetForm formTitle={`Add Pet for ${data.owner.firstName} ${data.owner.lastName}`} initialPet={emptyPet()} pettypes={data.pettypes} onFormSubmit={(pet: PetData) => { const input: AddPetInput = { name: pet.name, birthDate: pet.birthDate, typeId: pet.type, ownerId: data.owner.id }; return mutate({ variables: { input }, refetchQueries: [ { query: OwnerQueryGql, variables: { ownerId: data.owner.id } } ] }) .then(() => { history.push(`/owners/${data.owner.id}`); }) .catch(error => { console.log("there was an error sending the query", error); return Promise.reject(`Could not save owner: ${error}`); }); }} /> </div>; export default withAddPetFormDataLoader(graphql<AddPetMutation, AddPetPageOwnProps>(AddPetMutationGql)(AddPetPage));