Build React forms based on GraphQL APIs.
The library is currently under active rewriting, please see this ticket for updates
To get started more easily, please read Getting started: build a GraphQL Form in 5 minutes
apollo-codegen(globally)react@^15react-apollo@^15
Optionally
typescript@^2.8.4
- install
yarn add react-apollo-form
- add to your
package.json, at thescriptssection :
{
"scripts": {
"react-apollo-form": "react-apollo-form fetch-mutations <graphql_endpoint> <outpurDir>"
}
}
This script will generated 3 files needed by <ApolloForm>:
schema.json(GraphQL Introspection Query result as JSON)mutations.d.ts(all available mutations names as TypeScript type definition)apollo-form-json-schema.json(GraphQL Schema as JSON Schema)
Tips: you can change the output directory of theses with the second argument or -o option
Once the files generated, we can setup a Form.
import * as React from 'react';
import gql from 'graphql-tag';
import { configure } from 'react-apollo-form';
import { client } from './apollo';
import { applicationFormTheme } from './core/forms/themes/application';
const jsonSchema = require('./core/apollo-form-json-schema.json');
export const ApplicationForm = configure<ApolloFormMutationNames>({
// tslint:disable-next-line:no-any
client: client as any,
jsonSchema,
theme: applicationFormTheme
});
<ApplicationForm
config={{
mutation: {
name: 'create_todo',
document: gql`mutation {...}`
}
}}
data={{}}
/>ApolloForm is based on the amazing Mozilla library react-jsonschema-form.
Most of the questions regarding JSON Schema, validations or rendering are in react-jsonschema-form documentation
To get started more easily, please read Getting started: build a GraphQL Form in 5 minutes
The following subjects are specific to ApolloForm:
- configure your "Form component"
- Theming
- Build a form without mutation
- Add a form specific Widget (outside a theme)
- Conditional fields
- Form rendering customisation
- Add RegExp constraint to a field
- Error messages customization
- Can I make
ApolloFormworks with many GraphQL endpoints?
Yes, just setup multiple scripts in your project package.json with one output folder per endpoint,
then just configure a "component form" for each endpoint
- Where can I find some documentation about
widgets,fieldsor theming in general?
Please take a look at the react-jsonschema-form documentation that will answers 90% of the rendering questions. If not, please take a look at Theming
The idea is to build forms using mutations from the GraphQL API.
ApolloForm is "just" a wrapper around react-jsonschema-form.
It brings some "embed" features:
- JSON schema generation from GraphQL Schema
- conditionals forms
- form rendering customisation with
render props - build JSON Schema with functions (with functional-json-schema)
See graphql-2-json-schema package.
