git ssb

2+

mixmix / ticktack



Tree: 140bd2aa4c9baa0075ccea378b2376a4c90cf8fc

Files: 140bd2aa4c9baa0075ccea378b2376a4c90cf8fc / app / page / channelShow.js

2168 bytesRaw
1const nest = require('depnest')
2const { h } = require('mutant')
3const pull = require('pull-stream')
4
5exports.gives = nest('app.page.channelShow')
6
7exports.needs = nest({
8 'app.html.sideNav': 'first',
9 'app.html.topNav': 'first',
10 'app.html.scroller': 'first',
11 'app.html.blogCard': 'first',
12 'channel.html.subscribe': 'first',
13 'feed.pull.channel': 'first',
14 'history.sync.push': 'first',
15 'translations.sync.strings': 'first'
16})
17
18exports.create = (api) => {
19 return nest('app.page.channelShow', channelShow)
20
21 function channelShow (location) {
22 const strings = api.translations.sync.strings()
23 const { channel } = location
24
25 createStream = api.feed.pull.channel(channel)
26
27 const prepend = [
28 api.app.html.topNav(location),
29 h('section.about', [
30 h('h1', channel),
31 h('div.actions', [
32 api.channel.html.subscribe(channel)
33 ])
34 ])
35 ]
36
37 var channelPosts = api.app.html.scroller({
38 classList: ['content'],
39 prepend,
40 stream: createStream,
41 filter: () => pull(
42 pull.filter(msg => {
43 const type = msg.value.content.type
44 return type === 'post' || type === 'blog'
45 }),
46 pull.filter(msg => !msg.value.content.root) // show only root messages
47 ),
48 // FUTURE : if we need better perf, we can add a persistent cache. At the moment this page is fast enough though.
49 // See implementation of app.html.sideNav for example
50 // store: recentMsgCache,
51 // updateTop: updateRecentMsgCache,
52 // updateBottom: updateRecentMsgCache,
53 render
54 })
55
56 location.page = location.page || 'channelShow'
57 // covers case where router.sync.normalise delivers a loc = { channel: '#channelName' }
58 // HACK: helps sideNav
59
60 return h('Page -channelShow', { title: strings.home }, [
61 api.app.html.sideNav(location),
62 channelPosts
63 ])
64 }
65
66 function render (blog) {
67 const { recps, channel } = blog.value.content
68 var onClick
69 if (channel && !recps) { onClick = (ev) => api.history.sync.push(Object.assign({}, blog, { page: 'blogShow' })) }
70
71 return api.app.html.blogCard(blog, { onClick })
72 }
73}
74

Built with git-ssb-web