-
Notifications
You must be signed in to change notification settings - Fork 0
/
dal.js
59 lines (47 loc) · 1011 Bytes
/
dal.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import PouchDB from 'pouchdb-browser'
PouchDB.plugin(require('pouchdb-upsert'))
import store from './store'
import { not, merge, pluck } from 'ramda'
let db = null
let feed = null
let remote = null
let upstream = null
export const init = (dbName, token) => {
/**
prevent memory leakes ....
*/
if (db) {
db = null
}
if (remote) {
remote = null
}
if (feed) {
feed.cancel()
}
if (upstream) {
upstream.cancel()
}
db = PouchDB(dbName)
return watchChanges()
}
export const allDocs = () =>
db.allDocs({ include_docs: true }).then(res => pluck('doc', res.rows))
export const upsert = (id, data) => {
return db.upsert(id, doc => {
return merge(doc, data)
})
}
export const remove = async id => {
const doc = await db.get(id)
return await db.remove(doc)
}
const watchChanges = () => {
feed = db.changes({ live: true, limit: 1, include_docs: true })
feed.on('change', chg => {
if (chg.deleted) {
return undefined
}
})
return feed
}