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