forked from PolymerElements/app-pouchdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
app-pouchdb-index.html
108 lines (92 loc) · 2.77 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<!--
@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>