git ssb

2+

mixmix / ticktack



Tree: 354bcc491180e33154ea042ff61d5912ae2d95ab

Files: 354bcc491180e33154ea042ff61d5912ae2d95ab / app / page / userShow.js

2714 bytesRaw
1const nest = require('depnest')
2const { h, Array: MutantArray, computed, when, map } = require('mutant')
3const pull = require('pull-stream')
4const get = require('lodash/get')
5
6exports.gives = nest('app.page.userShow')
7
8exports.needs = nest({
9 'about.html.avatar': 'first',
10 'about.obs.name': 'first',
11 'about.obs.description': 'first',
12 'app.html.context': 'first',
13 'app.html.link': 'first',
14 'app.html.blogCard': 'first',
15 'app.html.blogNav': 'first',
16 'app.html.scroller': 'first',
17 'contact.html.follow': 'first',
18 'feed.pull.profile': 'first',
19 'feed.pull.rollup': 'first',
20 'message.html.markdown': 'first',
21 'keys.sync.id': 'first',
22 'translations.sync.strings': 'first',
23 'unread.sync.isUnread': 'first'
24})
25
26exports.create = (api) => {
27 var isUnread = api.unread.sync.isUnread
28 return nest('app.page.userShow', userShow)
29
30 function userShow (location) {
31 const { feed } = location
32 const myId = api.keys.sync.id()
33
34 const strings = api.translations.sync.strings()
35
36 const Link = api.app.html.link
37 const userEditButton = Link({ page: 'userEdit', feed }, h('i.fa.fa-pencil'))
38 const directMessageButton = Link({ page: 'threadNew', feed }, h('Button', strings.userShow.action.directMessage))
39
40 const BLOG_TYPES = ['blog', 'post']
41
42 // TODO return some of this ?
43 // but maybe this shouldn't be done here ?
44 // pull.through(function (blog) {
45 // if(isUnread(blog))
46 // blog.unread = true
47 // blog.replies.forEach(function (data) { // this was fed rollups
48 // if(isUnread(data))
49 // blog.unread = data.unread = true
50 // })
51 // }),
52
53 const prepend = [
54 api.app.html.blogNav(location),
55 h('section.about', [
56 api.about.html.avatar(feed, 'large'),
57 h('h1', [
58 api.about.obs.name(feed),
59 feed === myId // Only expose own profile editing right now
60 ? userEditButton
61 : ''
62 ]),
63 h('div.introduction', computed(api.about.obs.description(feed), d => api.message.html.markdown(d || ''))),
64 feed !== myId
65 ? h('div.actions', [
66 api.contact.html.follow(feed),
67 h('div.directMessage', directMessageButton)
68 ])
69 : '',
70 ]),
71 ]
72
73 return h('Page -userShow', [
74 api.app.html.context(location),
75 api.app.html.scroller({
76 classList: ['content'],
77 prepend,
78 stream: api.feed.pull.profile(feed),
79 filter: () => pull(
80 pull.filter(msg => get(msg, 'value.content.root') === undefined),
81 pull.filter(msg => BLOG_TYPES.includes(get(msg, 'value.content.type')))
82 ),
83 render: api.app.html.blogCard
84 })
85 ])
86 }
87}
88
89

Built with git-ssb-web