Commit d2fc6470c2fee9649507c15c3061c53c9fcfa47d
/query : add an example query to get people started!
mix irving committed on 7/14/2018, 1:33:07 AMParent: 99e3e200407b1301e0075446b91def9b0ff643eb
Files changed
app/page/query.js | changed |
app/page/query.mcss | changed |
app/page/query.js | |||
---|---|---|---|
@@ -40,15 +40,15 @@ | |||
40 | 40 … | if (!Array.isArray(query)) return | |
41 | 41 … | if (!query.map(q => Object.keys(q)[0]).every(q => ['$filter', '$map', '$reduce'].includes(q))) return | |
42 | 42 … | activateQuery() | |
43 | 43 … | }) | |
44 | - const query = Value([]) | ||
44 … | + const query = Value(json5.parse(initial())) | ||
45 | 45 … | ||
46 | 46 … | const activateQuery = () => query.set(json5.parse(input())) | |
47 | 47 … | ||
48 | - return h('Query', [ | ||
48 … | + return h('Query', { title: '/query' }, [ | ||
49 | 49 … | h('section.query', [ | |
50 | - h('textarea', { 'ev-input': ev => input.set(ev.target.value) }), | ||
50 … | + h('textarea', { 'ev-input': ev => input.set(ev.target.value), value: initial() }), | ||
51 | 51 … | h('button', { | |
52 | 52 … | className: when(error, '', '-primary'), | |
53 | 53 … | disabled: when(error, 'disabled'), | |
54 | 54 … | 'ev-click': activateQuery | |
@@ -57,9 +57,13 @@ | |||
57 | 57 … | h('section.output', [ | |
58 | 58 … | computed(query, query => { | |
59 | 59 … | return Scroller({ | |
60 | 60 … | streamToBottom: source(query), | |
61 | - render: msg => h('pre', JSON.stringify(msg, null, 2)) | ||
61 … | + render: msg => h('pre', JSON.stringify(msg, null, 2)), | ||
62 … | + comparer: (a, b) => { | ||
63 … | + if (a && b && a.key && b.key) return a.key === b.key | ||
64 … | + return a === b | ||
65 … | + } | ||
62 | 66 … | }) | |
63 | 67 … | }) | |
64 | 68 … | ]) | |
65 | 69 … | ]) | |
@@ -68,12 +72,33 @@ | |||
68 | 72 … | function source (query) { | |
69 | 73 … | const opts = { | |
70 | 74 … | query, | |
71 | 75 … | reverse: true, | |
72 | - limit: 100 | ||
76 … | + limit: 50 | ||
73 | 77 … | } | |
74 | 78 … | ||
75 | 79 … | return api.sbot.pull.stream(server => { | |
76 | 80 … | return next(server.query.read, opts, ['value', 'timestamp']) | |
77 | 81 … | }) | |
78 | 82 … | } | |
79 | 83 … | } | |
84 … | + | ||
85 … | +function initial () { | ||
86 … | + return `[{ | ||
87 … | + $filter: { | ||
88 … | + value: { | ||
89 … | + timestamp: {$gt: 0}, | ||
90 … | + content: { | ||
91 … | + type: 'post' | ||
92 … | + } | ||
93 … | + } | ||
94 … | + } | ||
95 … | +}, { | ||
96 … | + $map: { | ||
97 … | + receivedTimestamp: ['timestamp'], | ||
98 … | + assertedTimestamp: ['value', 'timestamp'], | ||
99 … | + author: ['value', 'author'], | ||
100 … | + content: ['value', 'content'] | ||
101 … | + } | ||
102 … | +}] | ||
103 … | +` | ||
104 … | +} |
Built with git-ssb-web