0.1.1 • Published 2 years ago

@steelbrain/apollo-link-firestore v0.1.1

Weekly downloads
140
License
MIT
Repository
github
Last release
2 years ago

Apollo Link Firestore

Query Google Firebase Firestore with GraphQL in Apollo. Allows doing joins in Firebase via GQL syntax.

Installation

yarn add @apollo/client @steelbrain/apollo-link-firestore
# or
npm install @apollo/client @steelbrain/apollo-link-firestore

To use this Apollo Link adapter, modify your Apollo client creation like so

import { ApolloClient, InMemoryCache, from } from '@apollo/client'
import createFirestoreLink from '@steelbrain/apollo-link-firestore'

const client = new ApolloClient({
  link: from([
    createFirestoreLink({
      firestore: firebase.firestore(),
    }),
  ]),
  cache: new InMemoryCache(),
})

Usage

To activate Firestore link on a GraphQL node, simply add the @firestore directive with the relevant arguments. This package supports both Query and Subscription in GQL.

Here is an example query that showcases the API

const query = gql`
  subscription Test {
    conversation @firestore(collection: "conversations", where: [["$id", "==", "NMI01qpXobQwd4HtKhgU"]]) {
      title
    }
    conversations2 @firestore(collection: "conversations", where: [["id", ">", 0]]) {
      title
    }
    conversations @firestore(collection: "conversations") {
      title
      type
      fancyMembers {
        user: id @firestore(collection: "users") {
          id
          display_name
          z
        }
      }
      members @firestore(collection: "users") {
        id
        user: id @firestore(collection: "users") {
          id
          display_name
        }
        display_name
        y
      }
      messages @firestore(subcollection: "messages", limit: 20, order: ["id", "desc"]) {
        id
        user: userId @firestore(collection: "users") {
          id
          display_name
          x
        }
      }
    }
  }
`,
{
  "conversations2": [],
  "conversations": {
    "__type": "collection",
    "NMI01qpXobQwd4HtKhgU": {
      "fancyMessages": [{"id": 1}, {"id": 2}],
      "members": [1,2],
      "title": "Joe & Jane",
      "type": "group",
      "messages": {
        "__type": "collection",
        "uFBuo6CJu1knYqlzjzWl": {
          "userId": 3
        },
        "3PUKrbtpEGe14cmanKVy": {
          "userId": 2
        }
      }
    }
  },
  "users": {
    "2": {
      "display_name": "John Doe"
    }
  }
}
[
  {
    "title": "Drew & Anees",
    "type": "group",
    "__typename": "conversations",
    "members": [
      {
        "id": "2",
        "display_name": "Anees B",
        "y": null,
        "__typename": "users",
        "user": {
          "id": "2",
          "display_name": "Anees B",
          "__typename": "users"
        }
      },
      null
    ],
    "fancyMembers": [
      {
        "__typename": null,
        "user": {
          "id": "2",
          "display_name": "Anees B",
          "z": null,
          "__typename": "users"
        }
      },
      {
        "__typename": null,
        "user": null
      }
    ],
    "messages": [
      {
        "id": "3PUKrbtpEGe14cmanKVy",
        "__typename": "messages",
        "user": {
          "id": "2",
          "display_name": "Anees B",
          "x": null,
          "__typename": "users"
        }
      },
      {
        "id": "uFBuo6CJu1knYqlzjzWl",
        "__typename": "messages",
        "user": null
      }
    ]
  }
]

License

This project is licensed under the terms of MIT License. See the License file for more info.

0.1.2-beta.1

2 years ago

0.1.0

2 years ago

0.1.1

2 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago