Skip to content

Commit

Permalink
Enable filtering on linked nodes
Browse files Browse the repository at this point in the history
Add support to filter on linked nodes.

Close #3190
  • Loading branch information
alvinthen committed Jan 19, 2018
1 parent 7572e0d commit c73ee68
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -482,4 +482,33 @@ describe(`GraphQL Input args`, () => {

expect(result).toMatchSnapshot()
})

it(`filters on linked fields`, async () => {
const { store, getNodes } = require(`../../redux`)
const linkedNodeType = new GraphQLObjectType({
name: `Bar`,
fields: {
id: { type: GraphQLString },
},
})
let types = [{ name: `Bar`, nodeObjectType: linkedNodeType }]

store.dispatch({
type: `CREATE_NODE`,
payload: { id: `baz`, internal: { type: `Bar` } },
})

let result = await queryResult(
[...getNodes(), { linked___NODE: `baz`, foo: `bar` }],
`
{
allNode(filter: { linked: { id: { eq: "baz" } } }) {
edges { node { linked { id } } }
}
}
`,
{ types }
)
expect(result.data.allNode.edges[0].node.linked.id).toEqual(`baz`)
})
})
7 changes: 6 additions & 1 deletion packages/gatsby/src/schema/infer-graphql-input-fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ const {
isEmptyObjectOrArray,
} = require(`./data-tree-utils`)

const { findLinkedNode } = require(`./infer-graphql-type`)

import type {
GraphQLInputFieldConfig,
GraphQLInputFieldConfigMap,
Expand Down Expand Up @@ -202,7 +204,10 @@ export function inferInputObjectStructureFromNodes({
if (isRoot && EXCLUDE_KEYS[key]) return

// Input arguments on linked fields aren't currently supported
if (_.includes(key, `___NODE`)) return
if (_.includes(key, `___NODE`)) {
value = findLinkedNode(value)
;[key] = key.split(`___`)
}

let field = inferGraphQLInputFields({
nodes,
Expand Down
2 changes: 1 addition & 1 deletion packages/gatsby/src/schema/infer-graphql-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ function inferFromMapping(
}
}

function findLinkedNode(value, linkedField, path) {
export function findLinkedNode(value, linkedField, path) {
let linkedNode
// If the field doesn't link to the id, use that for searching.
if (linkedField) {
Expand Down

0 comments on commit c73ee68

Please sign in to comment.