Как использовать внутренние ссылки в sanity.io и gatsby с gatsby-source-sanity?

Я создал тип internalLink, следуя документации по работоспособности, и в соответствии с примечанием об использовании internalLinks с api graphql я создал его как отдельный тип следующим образом:

export default {
    name: 'internalLink',
    type: 'object',
    title: 'Internal link',
    fields: [
      {
        name: 'reference',
        type: 'reference',
        title: 'Reference',
        to: [
          { type: 'helpTopic' },
          // other types you may want to link to
        ]
      }
    ]
  }

Я добавил schema.js следующим образом:

import internalLink from './internalLink'

export default createSchema({
  name: 'default',
  types: schemaTypes.concat([
    internalLink,
    helpTopic,
    blockContent,
    figure,
    slideshow,
  ])
})

и добавил его в аннотации следующим образом:

annotations: [
          {
            type: 'internalLink'
          }
        ]

Когда я использую graphiql в Gatsby, если я не использую resolveReferences, я правильно получаю неразрешенные ссылки:

"markDefs": [
                {
                  "_key": "00a07e239d3d",
                  "_type": "internalLink",
                  "reference": {
                    "_ref": "7c635eee-0d98-5335-a376-4101922ca4b7",
                    "_type": "reference"
                  }
                }
              ]

однако, когда я использую _rawBody(resolveReferences:{maxDepth:1000}), ссылка не разрешается и возвращается как null:

"markDefs": [
                {
                  "_key": "00a07e239d3d",
                  "_type": "internalLink",
                  "reference": null
                }
              ]

Это ошибка или я что-то делаю не так? Я пробовал просмотреть документацию, но не могу понять этого, а в примере комбо-проекта gatsby sanity нет примера internalLinks.

Спасибо за помощь заранее.


person aks94    schedule 16.03.2020    source источник
comment
Вы развернули конечную точку GraphQL после изменения схемы? Вам придется запускать sanity graphql deploy каждый раз, когда вы меняете схему. Может быть какое-то несоответствие, которое приведет к null. Просто хочу убедиться в этом, прежде чем углубляться в это.   -  person Anders Stensaas    schedule 19.03.2020
comment
Да, я запускал sanity graphql deploy, и я также проверил на игровой площадке, что у него есть ссылочное свойство с правильным идентификатором. Это просто ссылки на разрешение, которые, кажется, выдают мне ошибку. Спасибо за ответ, надеюсь, вы сможете понять, в чем может заключаться ошибка.   -  person aks94    schedule 19.03.2020
comment
Эй, тебе удалось найти способ?   -  person damnitrahul    schedule 05.05.2020
comment
Я разместил на странице github проблему для gatsby-source-sanity, и они ответили о потенциальном исправлении в бета-версии (github.com/sanity-io/gatsby-source-sanity/issues/60). Я был отвлечен другими проектами, поэтому у меня еще не было возможности проверить, но, пожалуйста, попробуйте [email protected] и поделитесь с ними своими отзывами, если это важно для вас   -  person aks94    schedule 05.05.2020


Ответы (1)


На данный момент аннотации не могут принимать такие типы схем. Вам нужно будет поместить туда весь блок схемы. Немного странное ограничение. Я думаю, что кто-то уже разместил тикет / запрос функции по этой проблеме в репозитории Sanity.io на Github.

person Sharon C    schedule 20.03.2020
comment
Спасибо, Шэрон. Однако на самом деле я сначала сделал это именно так - поместил весь блок схемы в аннотацию как анонимный тип. У меня такая же проблема. Затем я перешел по этой ссылке в документации по разумности (sanity.io/docs/configuration) и попробовал это с типом схемы, как я показал выше. Примечание из документации: если вы планируете использовать Sanity's GraphQL API, вы должны поднять internalLink как тип схемы и использовать type: 'internalLink' в качестве аннотации вместо анонимного объекта в приведенном выше примере. - person aks94; 23.03.2020