index.tsx 1.24 KB
import Component from "./Component";
import * as React from "react";
import { Query, Mutation } from "react-apollo";
import { withRouter, RouteComponentProps } from "react-router";

const FETCH_ALL_DATASETS = require("./fetchAllDatasets.gql");
const BUY_DATASET = require("./buyDataset.gql");

class FetchAllDatasetsQuery extends Query<{
  datasets: any;
}> {}

class CreateContractMutation extends Mutation<{}> {}

const update = (history: any) => (cache, result) => history.push("/buy");

const QueryComponent: React.SFC<RouteComponentProps<{}>> = ({ history }) => (
  <FetchAllDatasetsQuery query={FETCH_ALL_DATASETS} fetchPolicy="network-only">
    {({ loading, error, data }) => {
      if (loading) return <p>Loading...</p>;
      else if (error) return <p>Error :(</p>;
      else
        return (
          <CreateContractMutation
            mutation={BUY_DATASET}
            update={update(history)}
          >
            {mutate => {
              const buyDataset = id => mutate({ variables: { id } });
              return (
                <Component datasets={data!.datasets} buyDataset={buyDataset} />
              );
            }}
          </CreateContractMutation>
        );
    }}
  </FetchAllDatasetsQuery>
);

export default QueryComponent;