-
Notifications
You must be signed in to change notification settings - Fork 382
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
union/interface type resolution not working/missing #15
Comments
@fosk06 For error handling you are not required to do something like unions. In your app.module or graphql.module you can simply just do this .apply(
graphqlExpress(async req => ({
schema: schema
rootValue: req,
context: req,
formatError: (error: GraphQLError) => {
return error.originalError instanceof BaseException ? error.originalError.serialize() : error;
}
}))
) @kamilmysliwiec But for real unions and interfaces it is not quite clear how to resolve those. # Schema
union SearchResult = Human | Droid | Starship
# Query
{
search(text: "an") {
... on Human {
name
height
}
... on Droid {
name
primaryFunction
}
... on Starship {
name
length
}
}
} A NestJS way could look somethin like @ResolveType('SearchResult')
async resolveType(obj) {
if(obj.height){
return 'Human';
}
if(obj.length){
return 'Starship';
}
} What do you think? |
This is something I am struggling with as well. |
Same here. There is workaround though - add it manually when creating schema (ugly one)
|
you can do this by defining it as a normal type @Resolver('LoginResponse')
export class LoginResponseResolver {
@ResolveProperty('__resolveType')
__resolveType(obj) {
if (obj.error) {
return 'LoginFailure';
}
return 'LoginSuccess';
}
} |
Yay, thanks |
Actually, this should be enough (you can omit @Resolver('LoginResponse')
export class LoginResponseResolver {
@ResolveProperty()
__resolveType(obj) {
if (obj.error) {
return 'LoginFailure';
}
return 'LoginSuccess';
}
} |
Hey guys @kamilmysliwiec @ph55 @obedm503 I faced a similar problem but a bit different: Let's say we have the following schema: type Component {
id: ID!
type: ComponentTypes!
order: Int!
properties: ComponentProps!
}
enum ComponentTypes {
TEXT
BUTTON
}
union ComponentProps = TextComponentProps | ButtonComponentProps
type TextComponentProps {
text: String
}
type ButtonComponentProps {
color: String
} How to resolve union |
Hey @kamilmysliwiec @ph55 @obedm503 |
Still unclear on how this is meant to work. @kamilmysliwiec, would you mind clarifying this use case? I have a resolver the way you have specified and yet still receive the warning. |
@igat64 it's not possible since |
Thank you for the answer @obedm503 |
Hey, great solution but i think it could be better, just using a ResolveProperty function instead using a Resolver, because it needs the creation a new class and file for each union type, it creates multiples scopes of one model that should be summed up in one general resolver file. What do you guys think about it? |
@yasserN What is your solution proposal? |
Anyone help me to demo union with nestjs + graphql ? |
This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
I'm submitting a...Bug report
Current behavior
Hello,
I'm using the graphql example( in the example directory of nest) with the Cat CRUD and i try to use a union type and interface but i didn't find a way to do it.
When i try to request my data with a fragment, i have the following error :
"Abstract type MutationResult must resolve to an Object type at runtime for field Mutation.createCat with value "[object Object]", received "undefined". Either the MutationResult type should provide a "resolveType" function or each possible types should provide an "isTypeOf" function."
There is nothing in the doc explaining how to use union / interface, and there is nothing in the graphql example.
In the apollo documentation, the type resolver ( here "Cat" Resolver") should implement a __resolveType function. I tried to set this function in the @resolver('Cat') class CatsResolvers
but it's not working.
I tried to add it on the cat resolvers class
Expected behavior
The request should return either a Cat item or GraphQLErrorItem from my schema definition.
Minimal reproduction of the problem with instructions
https://github.com/nestjs/nest/tree/master/examples/12-graphql-apollo
What is the motivation / use case for changing the behavior?
Environment
The text was updated successfully, but these errors were encountered: