Files: e2fb4d766af3a45d510a0558e410b04dd3366e13 / app / page / channelSubscriptions.js
2373 bytesRaw
1 | const nest = require('depnest') |
2 | const { h, watch, when, computed, Value, Set: MutantSet } = require('mutant') |
3 | const pull = require('pull-stream') |
4 | const Pushable = require('pull-pushable') |
5 | const ref = require('ssb-ref') |
6 | const throttle = require('mutant/throttle') |
7 | const MutantPullReduce = require('mutant-pull-reduce') |
8 | |
9 | |
10 | exports.gives = nest('app.page.channelSubscriptions') |
11 | |
12 | exports.needs = nest({ |
13 | 'app.html.sideNav': 'first', |
14 | 'app.html.topNav': 'first', |
15 | 'app.html.scroller': 'first', |
16 | 'app.html.channelCard': 'first', |
17 | |
18 | 'history.sync.push': 'first', |
19 | 'keys.sync.id': 'first', |
20 | 'channel.obs.subscribed': 'first', |
21 | 'channel.html.link': 'first', |
22 | 'translations.sync.strings': 'first', |
23 | 'sbot.async.friendsGet': 'first', |
24 | 'sbot.pull.userFeed': 'first' |
25 | }) |
26 | |
27 | exports.create = (api) => { |
28 | return nest('app.page.channelSubscriptions', function (location) { |
29 | const strings = api.translations.sync.strings() |
30 | const myId = api.keys.sync.id() |
31 | const { subscribed } = api.channel.obs |
32 | let myChannels, displaySubscriptions |
33 | |
34 | if (location.scope === "user") { |
35 | myChannels = subscribed(myId) |
36 | displaySubscriptions = () => [...myChannels().values()].map(c => api.app.html.channelCard(c)) |
37 | |
38 | return h('Page -channelSubscriptions', { title: strings.home }, [ |
39 | api.app.html.sideNav(location), |
40 | h('div.content', [ |
41 | //api.app.html.topNav(location), |
42 | when(myChannels, displaySubscriptions, h("p", "Loading...")) |
43 | ]) |
44 | ]) |
45 | |
46 | } |
47 | |
48 | if (location.scope === "friends") { |
49 | |
50 | function createStream() { |
51 | var p = Pushable(true) // optionally pass `onDone` after it |
52 | |
53 | api.sbot.async.friendsGet({ dest: myId }, (err, friends) => { |
54 | for (f in friends) { |
55 | var s = subscribed(f) |
56 | s(c => [...c].map(x => p.push(x))) |
57 | } |
58 | }) |
59 | |
60 | return p.source |
61 | } |
62 | |
63 | var stream = createStream() |
64 | var opts = { |
65 | startValue: new Set(), |
66 | nextTick: true |
67 | } |
68 | |
69 | var channelList = api.app.html.scroller({ |
70 | classList: ['content'], |
71 | stream: createStream, |
72 | render |
73 | }) |
74 | |
75 | function render(channel) { |
76 | return api.app.html.channelCard(channel) |
77 | } |
78 | |
79 | return h('Page -channelSubscriptions', { title: strings.home }, [ |
80 | api.app.html.sideNav(location), |
81 | channelList |
82 | ]) |
83 | } |
84 | }) |
85 | } |
86 | |
87 | |
88 | |
89 | |
90 |
Built with git-ssb-web