git ssb

16+

Dominic / patchbay



Tree: 298ca06a91c99764e114f8763b0b74d158093706

Files: 298ca06a91c99764e114f8763b0b74d158093706 / app / page / query.js

1994 bytesRaw
1const nest = require('depnest')
2const { h, Value, Array: MutantArray, Struct, computed, when, map } = require('mutant')
3const pull = require('pull-stream')
4const Scroller = require('mutant-scroll')
5const next = require('pull-next-query')
6const json5 = require('json5')
7
8exports.gives = nest({
9 'app.html.menuItem': true,
10 'app.page.query': true
11})
12
13exports.needs = nest({
14 'message.html.render': 'first',
15 'sbot.pull.stream': 'first'
16})
17
18exports.create = function (api) {
19 return nest({
20 'app.html.menuItem': menuItem,
21 'app.page.query': queryPage
22 })
23
24 function menuItem () {
25 return h('a', {
26 style: { order: 1 },
27 'ev-click': () => api.app.sync.goTo({ page: 'query' })
28 }, '/query')
29 }
30
31 function queryPage (location) {
32 const input = Value()
33 const error = computed(input, i => {
34 try {
35 var query = json5.parse(i)
36 } catch (err) {
37 console.error(err)
38 return err
39 }
40 if (!Array.isArray(query)) return
41 if (!query.map(q => Object.keys(q)[0]).every(q => ['$filter', '$map', '$reduce'].includes(q))) return
42 activateQuery()
43 })
44 const query = Value([])
45
46 const activateQuery = () => query.set(json5.parse(input()))
47
48 return h('Query', [
49 h('section.query', [
50 h('textarea', { 'ev-input': ev => input.set(ev.target.value) }),
51 h('button', {
52 className: when(error, '', '-primary'),
53 disabled: when(error, 'disabled'),
54 'ev-click': activateQuery
55 }, 'Go!')
56 ]),
57 h('section.output', [
58 computed(query, query => {
59 return Scroller({
60 streamToBottom: source(query),
61 render: msg => h('pre', JSON.stringify(msg, null, 2))
62 })
63 })
64 ])
65 ])
66 }
67
68 function source (query) {
69 const opts = {
70 query,
71 reverse: true,
72 limit: 100
73 }
74
75 return api.sbot.pull.stream(server => {
76 return next(server.query.read, opts, ['value', 'timestamp'])
77 })
78 }
79}
80

Built with git-ssb-web