# ionic-coreo

Ionic2 module for integrating with Coreo

## Installation
```
npm install ionic-coreo --save
```

Update your Ionic `app.module.ts`:
```
import { CoreoModule } from 'ionic-coreo';
...
@NgModule({
    imports: [CoreoModule]
    ...
})
export class AppModule {}
```
### With Configuration

Currently not working!

```
import { CoreoModule, CoreoConfig } from 'ionic-coreo';
...
const coreoConfig = new CoreoConfig({
    baseUrl: 'https://coreo-dev.herokuapp.com'
});


@NgModule({
    imports: [
        CoreoModule.forRoot(coreoConfig)
    ]
    ...
})
export class AppModule {}
```

## API

The following services are provided as `@Injectable()`s
### CoreoAuth - Authentication

A thin wrapper around Ionic Native's GooglePlus and Facebook authentication.
Ensure you have installed the relevant plugins and followed the configuration steps in the following documentation:

- Google : https://ionicframework.com/docs/v2/native/google-plus/
- Facebook : https://ionicframework.com/docs/v2/native/facebook/

**NOTE** You must configure your OAuth credentials within Coreo.
Go to Surveys > Your Survey > Credentials and add the relevant data.

```
import { CoreoAuth, CoreoAuthResult } from 'ionic-coreo';

@Component({
...
})
export class MyLoginComponent {
    constructor(
        private auth: CoreoAuth
    ) {}

    login(): Promise<CoreoAuthResult> {
        return this.auth.login('basic', { email: 'bob@mail.com', password: 'bob});
        // OR
        // const surveyId = 12;
        // return this.auth.login('google', surveyId);
    }
}
```

#### Methods: 
- `login(method: 'basic' | 'google' | 'facebook', params: CoreoAuthLoginOptions)`
- `logout(): void`

#### Types:
- CoreoAuthLoginOptions - If the method is 'basic' then this is an `{email, password}` object, else it is the surveyId you are logging in to.

### CoreoUser - User

#### Properties:
- `isLoggedIn: boolean` - Flag indicating whether the user is logged in or not.
- `id: number` - User ID
- `email: string` - Email
- `role: string` - Role
- `displayName: string` - Display Name 
- `imageUrl: string` - Users' profile image URL

### Client

An HTTP client for sending queries and posting data to Coreo. Handles all authentication (if the user is logged in)

```
import { CoreoClient } from 'ionic-coreo';

@Injectable()
export class MyDataService {
    constructor(
        private client: CoreoClient
    ) {}

    getData(): Observable<any> {
        return this.client.request('/records?q=surveyId:12');
    }
}
```

### Methods:
- request(path: string, options: CoreoClientRequestOptions = {}) : Observable<any>
- post(path: string, body?: FormData | any, options: CoreoClientRequestOptions = {}) : Observable<any>

### Types:
- CoreoClientRequestOptions
  - `method: string` - HTTP method. Defaults to 'get'
  - `headers?: any` - An Object of HTTP headers
  - `body?: string | FormData | null`
  - `authentication?: CoreoAuthToken | false` - If false, then no authentication header is set (even if the user is logged in). 
  If set to a CoreoAuthToken, this token will be used again regardless of the user's logged in token. If `authentication` is not supplied
  then the user's logged in token will be used, if logged in.