2.0.0-alpha.10 • Published 3 years ago

@ejez/quasar-app-extension-apollo v2.0.0-alpha.10

Weekly downloads
55
License
MIT
Repository
github
Last release
3 years ago

app-extension-apollo

Introduction

This is the official Quasar app extension for adding GraphQL to your Quasar project.

It uses Apollo Client and Vue Apollo.

Installation

quasar ext add @quasar/apollo

Quasar CLI will retrieve the extension from NPM (@quasar/quasar-app-extension-apollo)

The extension will add a directory src/extensions/apollo.

Prompts

You will be prompted if your app has typescript support, if you answer yes, *.ts files will be added instead of *.js.

App.vue

Modify src/App.vue as shown below:

<template>
  <router-view />
</template>
<script lang="ts">
  import { defineComponent, provide } from 'vue'
  import { ApolloClients } from '@vue/apollo-composable'
  import { apolloClients } from 'src/extensions/apollo/boot'

  export default defineComponent({
    name: 'App',
    setup() {
      provide(ApolloClients, apolloClients)
    },
  })
</script>

Uninstall

quasar ext remove @quasar/apollo

You might also wish to remove the added directory src/extensions/apollo.

Apollo client options

Apollo client options can be customized in src/extensions/apollo/conf/index.(ts|js).

You will need either to set the GraphQL endpoint in it, or set it as an environment variable before running Quasar:

GRAPHQL_URI=https://prod.example.com/graphql quasar build
GRAPHQL_URI=https://dev.example.com/graphql quasar dev

If you don't have a GraphQL endpoint yet, you can create one to experiment with at FakeQL or other similar services.

Usage

Check the guide in Vue Apollo docs.

Example usage:

src/pages/Index.vue

<template>
  <q-page class="row items-center justify-evenly">
    <div v-if="loading">Loading...</div>
    <div v-else-if="error">Error: {{ error.message }}</div>
    <div v-else-if="result && result.post">
      <div>id: {{ result.post.id }}</div>
      <div>title: {{ result.post.title }}</div>
    </div>

    ...
  </q-page>
</template>

<script lang="ts">
  ...
  import { useQuery } from '@vue/apollo-composable'
  import gql from 'graphql-tag'

  export default defineComponent({
    ...
    setup () {
       ...
      const { result, loading, error } = useQuery(gql`
        query getPosts {
          post(id: "3") {
            id
            title
          }
        }
      `)

      return { /* your other items, */ result, loading, error }
    }
  })
</script>

Multiple apollo clients setup

Un-comment the relevant code in src/extensions/apollo/boot.(ts|js)

The following is an example using clientA instead of the default client:

    ...
    const { result, loading, error } = useQuery(gql`
      query getPosts {
        post(id: "3") {
          id
          title
        }
      }
    `, null, { clientId: 'clientA' })
    ...