jenniferkshields
jenniferkshields

Reputation: 221

Custom schema, interface, @fileByRelativePath and gatsby-image

I'm trying to get an interface working with the new @fileByRelativePath resolver extension, to keep compatible with v3.

I'm using Prismic for my content, and gatsby-source-prismic v2. I have two content types in Prismic, and created the interface to be able to more easily query and map over both for a home page index.

Here's the functioning (but with deprecated inferred resolvers) schema:

exports.createSchemaCustomization = ({ actions }) => {
  const { createTypes } = actions
  const typeDefs = `
        interface indexPosts @nodeInterface {
            id: ID!
            uid: String!
            data: Data!
            type: String!
        }

        type Data {
            title: Title!
            date: Date!
            featured: String!
            featured_image: Featured_image!
            body: Body!
        }

        type Title {
            text: String!
        }

        type Featured_image {
            localFile: File!
        }

        type Body {
            html: String!
        }

        type PrismicGallery implements Node & indexPosts {
            uid: String!
            data: Data!
            type: String!
        }

        type PrismicEssay implements Node & indexPosts {
            uid: String!
            data: Data!
            type: String!
        }
    `
  createTypes(typeDefs)
}

The problem comes after adding @fileByRelativePath to the Featured_image type definition. Doing so gives me an error during build:

"The "path" argument must be of type string. Received type undefined"

I'm unsure how to provide the necessary path argument, considering my images are third-party hosted. I'm trying to follow the brief guide at the end of this page and suspect the way to do it might be with a resolver or type builder and using 'source' to access the url field provided by both localFile and its parent, featured_image, but I can't figure it out!

I'm using gatsby-image and the childImageSharp convenience field to present the images, if that makes a difference at all!

Upvotes: 2

Views: 824

Answers (1)

MisterGreen
MisterGreen

Reputation: 151

I had exactly the same problem when I tried to use @fileByRelativePath. I managed to solve my problem by using @infer on the type that contained the File.

Try this:

type Featured_image @infer {
  localFile: File!
}

Upvotes: 1

Related Questions