# ngx-dexie-observable

Dexie module for Angular 2.0+ projects

This is a fork of [ngx-dexie](https://github.com/dart-wakar/ngx-dexie) with rxjs observable implementation


## Install

``` npm install ngx-dexie-observable --save ```

## How to use

### Import and configure DexieModule

```ts
//...
import { DexieModule, DexieConfig } from 'ngx-dexie';

const config: DexieConfig = {
    databaseName: 'AppDatabase',//your database name here
    schema: {
        friends: '++id, first_name, last_name',
        teachers: '++id, first_name, last_name'
    } // any schema of your choice
};

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        DexieModule.forRoot(config)
    ],
    providers: [

    ],
    bootstrap: [AppComponent]
})

export class AppModule { }
```

### Using your dexie instance

The ```DexieModule``` provides now a configured Dexie db instance and a Dexie db service, i.e. ```DexieService``` which can be injected anywhere inside the ```AppModule```.

```ts
import { Injectable } from '@angular/core';
import { DexieService } from 'ngx-dexie';

@Injectable()
export class IndexedDbService {

    constructor(private dexieService: DexieService) {}

    addOneFriend(friendObject: Object) {
        this.dexieService.addOne('friends', friendObject);
    }

}
```
## API

### `dexieService.addOne(table: string, object: Object)`
Adds the entry ```object``` to the dexie table ```table```
Returns a promise which when resolved gives the key of the object added, when rejected gives the error that occured.

### `dexieService.addMultiple(table: string, objects: Object[])`
Adds multiple ```objects``` to the dexie table ```table```
Returns a promise which works similar to Dexie ```bulkAdd()```

### `dexieService.count(table: string)`
Returns a promise which when resolved gives the number of objects in the table ```table```

### `dexieService.addOrUpdateOne(table: string, object: Object, key?: any)`
Works similar to Dexie ```put()```

### `dexieService.addOrUpdateMultiple(table: string, objects: Object[], keys?: any)`
Works similar to Dexie ```bulkPut()```

### `dexieService.deleteOne(table: string, primaryKey: any)`
Works similar to Dexie ```delete()```

### `dexieService.deleteMultiple(table: string, primaryKeys: any[])`
Works similar to Dexie ```bulkDelete()```

### `dexieService.clearAll(table: string)`
Works similar to Dexie ```clear()```

### `dexieService.operateOnEach(table: string, callback: (item: any, idbCursor: any) => any)`
Works similar to Dexie ```each()```

### `dexieService.filter(table: string, filterFunction: (value: any) => boolean)`
Works similar to Dexie ```filter()```

### `dexieService.getByPrimaryKey(table: string, primaryKey: any, callback?: (item: Object) => any)`
Works similar to Dexie ```get()```

### `dexieService.getByKeyToValueMap(table: string, keyValueMap: Object, callback?: (item: Object) => any)`
Works similar to Dexie ```get()```

### `dexieService.getFirstNItemsOfTable(table: string, num: number)`
Works similar to Dexie ```limit()```

### `dexieService.orderBy(table: string, index: string)`
Works similar to Dexie ```orderBy()```

### `dexieService.offset(table: string, ignoreUpto: number)`
Works similar to Dexie ```offset()```

### `dexieService.reverse(table: string)`
Works similar to Dexie ```reverse()```

### `dexieService.toArray(table: string, callback?: (objects: Object[]) => any)`
Works similar to Dexie ```toArray()```

### `dexieService.toCollection(table: string)`
Works similar to Dexie ```toCollection()```

### `dexieService.update(table: string, key: any, changes: Object)`
Works similar to Dexie ```update()```