# Apollo

A fully-featured, production ready caching GraphQL client for every server or UI framework.

* [Github Repo](http://dev.apollodata.com/react/)

## Usage

Run the following command in the plugin directoy:

```
npm i --save @blueeast/bluerain-plugin-apollo
```

Then in your boot function, pass the plugin like this:

```javascript
import BR from '@blueeast/bluerain-os';
import ApolloPlugin from '@blueeast/bluerain-plugin-apollo';

BR.boot({
    plugins: [ApolloPlugin]
})
```

## Components

None.

## Filters

This plugin provides complete flexibility to modify the apollo client. This is done by providing various filter hooks at different stages of store initialization.

### plugin.apollo.config

This hook gives the ability to modify the plugin configurations.

**Parameters:**

| Name   | Type   | Description           |
| ------ | ------ | --------------------- |
| config | Object | Plugin configurations |

**Returns:**

| Name   | Type   | Description           |
| ------ | ------ | --------------------- |
| config | Object | Plugin configurations |

**Example:**

This example activates subscriptions in apollo client.

```javascript
import BR from '@blueeast/bluerain-os';

BR.Filters.add(
    'plugin.apollo.config',
    function ActivateApolloSubscriptions(configs) {
        return Object.assign({}, configs, {
            subscriptions: true
        })
    }
);
```

### plugin.apollo.networkInterface

This hook gives the ability to hook into Apollo's network interface. A usecase can be to apply middlewares to it.

**Parameters:**

| Name             | Type   | Description                      |
| ---------------- | ------ | -------------------------------- |
| networkInterface | Object | Apollo's networkInterface object |

**Returns:**

| Name             | Type   | Description                      |
| ---------------- | ------ | -------------------------------- |
| networkInterface | Object | Apollo's networkInterface object |

## API

### ApolloPluginConfigs

This is the default configuration set that is used at boot time.

**Properties**

* `subscriptions` [**boolean**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean) \[default: false]                Activate subscriptions
* `wsUri` [**string**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) URI of websocket server
* `subscriptionClient` **SubscriptionClientOptions** SubscriptionClient params, if subscriptions are activated
* `networkInterface` **NetworkInterfaceOptions** NetworkInterface params
* `client` **ApolloClientOptions** Apollo client params

### ApolloPlugin

**Extends Plugin**

Main Apollo Plugin class.

**Properties**

* `pluginName` [**string**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) "ApolloPlugin"
* `slug` [**string**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) "apollo"

#### getClient

Returns Apollo client

Returns **ApolloClient**

#### getSubscriptionClient

Returns Apollo's Subscription Client

Returns **SubscriptionClient**
