Запрос Apollo, который зависит от результата другого запроса - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь создать запрос Apollo (в Vue / Nuxt), который зависит от результата другого запроса.

sessions требуется person для использования this.person.id.Как я могу убедиться, что person существует до получения данных для sessions?

Мой скрипт и запросы приведены ниже.Оба запроса отлично работают в GraphiQL.Спасибо!

JS

  import gql from 'graphql-tag'
  import Photo from '~/components/Photo.vue'
  import Session from '~/components/Session.vue'
  import {Route} from 'vue-router'
  import { currentPerson, currentPersonSessions } from '~/apollo/queries.js'

  export default {
    name: 'Speaker',
    props: ['slug', 'id', 'person'],
    data() {
      return {
        title: 'Speaker',
        routeParam: this.$route.params.slug
      }
    },
    apollo: {
      person: {
        query: currentPerson,
        loadingKey: 'loading',
        variables() {
          return {
            slug: this.routeParam
          }
        }
      },
      sessions: {
        query: currentPersonSessions,
        loadingKey: 'loading',
        variables() {
          return {
            itemId: this.person.id
          }
        }
      }
    },
    components: {
      Photo,
      Session
    }
  }

Запросы

export const currentPerson = gql `query ($slug: String!) {
  person(filter: { slug: { eq: $slug }}) {
    name
    bio
    affiliation
    id
    photo {
      url
    }
  }
}`

export const currentPersonSessions = gql `query($itemId: ItemId!) {
  allSessions (filter: { speakers: { anyIn: [$itemId] }}) {
    title
    slug
    start
    end
  }
}`

1 Ответ

0 голосов
/ 24 июня 2019

Мне удалось решить эту проблему, разбив часть сеансов на отдельный компонент.

Это подходящий способ для обработки такого случая, или есть лучший способ, связав здесь запросы?Если есть способ сделать это, я все равно не буду против услышать другие ответы.

...