This repository has been archived by the owner on Sep 7, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27
/
app-pouchdb-index.html
91 lines (75 loc) · 2.51 KB
/
app-pouchdb-index.html
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<!--
@license
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="app-pouchdb-database-behavior.html">
<link rel="import" href="pouchdb.html">
<link rel="import" href="pouchdb.find.html">
<!--
`app-pouchdb-index` enables declarative, idempotent configuration of database
indexes. The semantics map to those of the pouchdb-find plugin. For more
information on creating PouchDB indexes with pouchdb-find, please refer to the
documentation
[here](https://github.com/nolanlawson/pouchdb-find#dbcreateindexindex--callback).
Note: at least one index must be created in order for `app-pouchdb-query` to
work.
-->
<script>
(function() {
'use strict';
Polymer({
is: 'app-pouchdb-index',
behaviors: [Polymer.AppPouchDBDatabaseBehavior],
properties: {
/**
* A list of fields to index.
*/
fields: {type: Array},
/**
* The name of the index, auto-generated if you don't include it.
*/
name: {type: String, value: null},
/**
* Design document name (i.e. the part after '_design/'), auto-generated
* if you don't include it.
*/
ddoc: {type: String, value: null},
/**
* The configuration object for the index, derived from `fields`, `name`
* and `ddoc` properties.
*/
index: {type: Object, computed: '__computeIndex(fields.*, name, ddoc)'}
},
observers: ['__createIndex(db, index)'],
__createIndex: function() {
if (this.index == null) {
throw new Error('Index not configured!');
}
this.db.createIndex({index: this.index}).catch(function(error) {
this._error(error);
}.bind(this));
},
__computeIndex: function() {
var index;
if (!this.fields || !this.fields.length) {
return null;
}
index = {};
index.fields = this.fields;
if (this.name != null) {
index.name = this.name;
}
if (this.ddoc != null) {
index.ddoc = this.ddoc;
}
return index;
}
});
})();
</script>