I cannot find anywhere in the graphql-tools documentation how one should go about utilizing enum types in schemas that are fed to makeExecutableSchema. Anyone have a clue how this done?
Example code:
enum Color {
RED
GREEN
BLUE
}
type Car {
color: Color!
}
What would the resolver for Color look like?
You wouldn't write a resolver for Color. Here's a simple, runnable example:
const bodyParser = require('body-parser');
const { graphqlExpress, graphiqlExpress } = require('graphql-server-express');
const { makeExecutableSchema } = require('graphql-tools');
const app = require('express')();
const carsData = [
{color: 'RED'},
{color: 'GREEN'},
{color: 'BLUE'},
];
const typeDefs = `
enum Color {
RED
GREEN
BLUE
}
type Car {
color: Color!
}
type Query {
cars: [Car!]!
}
`;
const resolvers = {
Query: {
cars: () => carsData,
}
};
const schema = makeExecutableSchema({
typeDefs,
resolvers,
});
app.use('/graphql', bodyParser.json(), graphqlExpress({ schema }));
app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));
app.listen(3000);
Run a cars query ({cars {color}}) in GraphiQL and you will see a color returned for each car in our data. Now, change one of the values in the data (not the Enum definition) to a color you didn't define, like PINK. Run the query again and you will see an error message like:
"Expected a value of type \"Color\" but received: PINK"
This works with resolvers too, so if I override the data by adding a resolver for Car like this:
Car: {
color: () => 'RED'
}
The query will show all the cars with RED as their color. If you change the value returned by the resolver to BLACK, the query will error out again.
Enums are just a way of enforcing that whatever value a particular field resolves to is within the set of values you define.
By default, the enum is represented with the same string : enum Color { RED } is 'RED'.
You can override this by adding a resolver to the enum:
Color: {
RED: '#ff0000',
GREEN: '#00ff00'
},
Query {...
More info: https://www.apollographql.com/docs/graphql-tools/scalars.html#internal-values
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With