git ssb

2+

mixmix / ticktack



Tree: 6a299d30ab8be23580551ca3eba6ee927e4790da

Files: 6a299d30ab8be23580551ca3eba6ee927e4790da / app / page / notifications.js

1776 bytesRaw
1const nest = require('depnest')
2const { h, onceTrue } = require('mutant')
3const defer = require('pull-defer')
4
5exports.gives = nest('app.page.notifications')
6
7exports.needs = nest({
8 'app.html.scroller': 'first',
9 'app.html.sideNav': 'first',
10 'message.html.comment': 'first',
11 'message.html.notification': 'first',
12 'sbot.obs.connection': 'first',
13 'translations.sync.strings': 'first'
14})
15
16const SOURCES = {
17 comments: 'readAllComments',
18 likes: 'readAllLikes',
19 shares: 'readAllShares'
20}
21
22exports.create = (api) => {
23 return nest('app.page.notifications', function (location) {
24 // location here can expected to be: { page: 'notifications', section: * }
25 if (!Object.keys(SOURCES).includes(location.section)) return
26
27 var scroller = api.app.html.scroller({
28 classList: ['content'],
29 stream: createCreateStream(location.section),
30 render: createRender(location.section)
31 })
32
33 return h('Page -notifications', [
34 api.app.html.sideNav(location),
35 scroller
36 ])
37
38 function createCreateStream (section) {
39 return function (opts) {
40 const source = defer.source()
41 var resolved = false
42
43 onceTrue(api.sbot.obs.connection, server => {
44 if (resolved) return
45
46 source.resolve(server.ticktack[SOURCES[section]](opts))
47 resolved = true
48 })
49
50 return source
51 }
52 }
53
54 function createRender (section) {
55 return function (msg) {
56 switch (section) {
57 case 'comments':
58 return api.message.html.comment({ comment: msg, showRootLink: true })
59
60 case 'likes':
61 return api.message.html.notification(msg)
62
63 case 'shares':
64 return api.message.html.notification(msg)
65 }
66 }
67 }
68 })
69}
70

Built with git-ssb-web