Code Monkey home page Code Monkey logo

Comments (12)

mickhansen avatar mickhansen commented on August 24, 2024

Relay does not currently have a way of solving connections on root, see: facebook/relay#112

Viewer exists as a workaround, which we definitely support by resolving for a relation to the viewer.
For anonymous viewers we don't currently support connections (yet).

from graphql-sequelize.

cdebotton avatar cdebotton commented on August 24, 2024

What I was hoping for was a solution to having connections on an anonymous viewer node, hoping to have some time later this week to fork and see what I can do!

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

I see, we don't support that at the moment but we definitely should.

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

There's increased support for connections in v0.11.3, please give it a go.

from graphql-sequelize.

cdebotton avatar cdebotton commented on August 24, 2024

I upgraded to 0.11.4 and it doesn't seem to convert relay connectionArgs to proper Postgres queries.

Example:

types/userType:

/* @flow */

import {
  GraphQLObjectType,
} from 'graphql';

import {
  connectionArgs,
  connectionDefinitions,
  globalIdField,
} from 'graphql-relay';

import {
  resolver,
  attributeFields,
} from 'graphql-sequelize';

import { User } from '../../models';

import type {
  ConnectionDefinition,
  RefsObject,
} from '../index';

export default (refs: RefsObject): ConnectionDefinition => {
  const type = new GraphQLObjectType({
    name: 'User',
    fields: () => ({
      ...attributeFields(User),
      id: globalIdField('User'),
      sessions: {
        type: refs.sessionConnection,
        args: connectionArgs,
        resolve: resolver(User.sessions),
      },
      stories: {
        type: refs.storyConnection,
        args: connectionArgs,
        resolve: resolver(User.stories),
      },
      storytellers: {
        type: refs.storytellerConnection,
        args: connectionArgs,
        resolve: resolver(User.storytellers),
      },
    }),
    interfaces: [refs.nodeInterface],
  });

  const defs = connectionDefinitions({
    name: 'User',
    nodeType: type,
  });

  return {
    type,
    connectionType: defs.connectionType,
    edgeType: defs.edgeType,
  };
};

queries/users:

import { connectionArgs } from 'graphql-relay';
import { resolver } from 'graphql-sequelize';
import { User } from '../../models';

import type {
  RefsObject,
  QueryType,
} from '../index';

export default (refs: RefsObject): QueryType => ({
  type: refs.userConnection,
  args: connectionArgs,
  resolve: resolver(User),
});

GraphQL query:

query getStories {
    viewer {
    users(first: 9999) {
      edges { node { id } },
    }
  },
}

This generates the SQL query, Executing (default): SELECT "id" FROM "Users" AS "User" LIMIT 1;

And I get this as a return:

{
  "data": {
    "viewer": {
      "users": {
        "edges": null
      }
    }
  }
}

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

connectionsArgs handling does not exist yet: #21
But it should definitely not be doing a LIMIT.

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

@cdebotton happy to fix but you'll likely have to provide a PR with a failing test.

from graphql-sequelize.

cdebotton avatar cdebotton commented on August 24, 2024

I'll try to provide a PR with a failing test this weekend, thanks!

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

I've written a more full-featured connection proposal here: https://github.com/mickhansen/graphql-sequelize/blob/master/docs/relay.md

I'd love to support in-database ordering, slicing and paging - aswell as both association and model connection support.

from graphql-sequelize.

cdebotton avatar cdebotton commented on August 24, 2024

Your proposal looks great, would be incredibly useful for a project I'm working on. I've hit a bit of a wall where I need to write a mutation that adds to a range of data (connection). I'm fine writing the server side mutation, but without connection support on the viewer node, I'm unable to really add that model to my dataset.

Do you still looking to have some tests written? Been struggling to find time but can hopefully take a crack at it later this week.

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

@cdebotton most of the stuff from the docs/relay proposal is now implemented.
I still need a good way to solve anonymous root nodes though, but i think we can solve it by having target possibly be a callback.

from graphql-sequelize.

mickhansen avatar mickhansen commented on August 24, 2024

Implemented in the latest version, follow https://github.com/mickhansen/graphql-sequelize/blob/master/docs/relay.md

Use a model as a target and add a before method to filter

from graphql-sequelize.

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.