Giter Club home page Giter Club logo

Comments (15)

cschroeter avatar cschroeter commented on March 28, 2024 7

@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?

from graphql.

igat64 avatar igat64 commented on March 28, 2024 7

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 ComponentProps as it depend on Component.type value?

from graphql.

kamilmysliwiec avatar kamilmysliwiec commented on March 28, 2024 6

Actually, this should be enough (you can omit __resolveType inside parenthesis):

@Resolver('LoginResponse')
export class LoginResponseResolver {
  @ResolveProperty()
  __resolveType(obj) {
    if (obj.error) {
      return 'LoginFailure';
   }
   return 'LoginSuccess';
  }
}

from graphql.

obedm503 avatar obedm503 commented on March 28, 2024 5

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';
  }
}

from graphql.

chnirt avatar chnirt commented on March 28, 2024 1

Anyone help me to demo union with nestjs + graphql ?

from graphql.

triedal avatar triedal commented on March 28, 2024

This is something I am struggling with as well.

from graphql.

ph55 avatar ph55 commented on March 28, 2024

Same here.

There is workaround though - add it manually when creating schema (ugly one)

    const typeDefs = this.graphQLFactory.mergeTypesByPaths('./**/*.graphqls');

    const resolvers = {
      LoginResponse: {
        __resolveType(obj, context, info) {
          if (obj.error) {
            return 'LoginFailure';
          }

          return 'LoginSuccess';
        }
      }
    };

    const schema = this.graphQLFactory.createSchema({ typeDefs, resolvers });

from graphql.

ph55 avatar ph55 commented on March 28, 2024

Yay, thanks

from graphql.

jurStv avatar jurStv commented on March 28, 2024

Hey @kamilmysliwiec @ph55 @obedm503
Can you help with some advice on this ⬆️ please

from graphql.

dkushner avatar dkushner commented on March 28, 2024

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.

from graphql.

obedm503 avatar obedm503 commented on March 28, 2024

@igat64 it's not possible since TextComponentProps or ButtonComponentProps doesn't have a way to relate back to the component type. the code would just have to know the relationships

from graphql.

igat64 avatar igat64 commented on March 28, 2024

Thank you for the answer @obedm503

from graphql.

yassernasc avatar yassernasc commented on March 28, 2024

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?

from graphql.

coderdiaz avatar coderdiaz commented on March 28, 2024

@yasserN What is your solution proposal?

from graphql.

lock avatar lock commented on March 28, 2024

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.

from graphql.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.