Commit 6cb84aba2381bcf455d2e027b15ffd31dcacc28b
speed up likes with presumptuous observeables
mixmix committed on 5/28/2019, 12:25:35 AMParent: cf1df9edd4ee65bb572646c70380d08b9ea312f5
Files changed
message/html/like.js | changed |
message/html/like.js | ||
---|---|---|
@@ -1,5 +1,5 @@ | ||
1 | -const { h, computed, map } = require('mutant') | |
1 | +const { h, computed, map, Value } = require('mutant') | |
2 | 2 | const nest = require('depnest') |
3 | 3 | const Scuttle = require('scuttle-thread') |
4 | 4 | const { isLink } = require('ssb-ref') |
5 | 5 | |
@@ -24,30 +24,44 @@ | ||
24 | 24 | |
25 | 25 | if (!isLink(msg.key)) return |
26 | 26 | |
27 | 27 | const likes = api.message.obs.likes(msg.key) |
28 | + const iLikeHack = Value() | |
28 | 29 | const names = map(likes, id => api.about.obs.name(id)) |
29 | 30 | // TODO should really just calculate this on hover ... |
30 | 31 | |
31 | - return computed([likes, names], (likes, names) => { | |
32 | - const iLike = likes.includes(id) | |
32 | + return computed([likes, iLikeHack, names], (likes, iLikeHack, names) => { | |
33 | + const iLike = (iLikeHack !== null) ? iLikeHack : likes.includes(id) | |
34 | + var count = likes.length | |
35 | + if (iLikeHack === true && !likes.includes(id)) count++ | |
36 | + else if (iLikeHack === false && likes.includes(id)) count-- | |
33 | 37 | |
34 | 38 | return h('MessageLike', |
35 | 39 | { |
36 | 40 | className: iLike ? '-liked' : '', |
37 | 41 | title: names.join('\n'), |
38 | 42 | 'ev-click': () => publishLike(msg, !iLike) |
39 | 43 | }, |
40 | 44 | [ |
41 | - h('span.count', likes.length ? likes.length : ''), | |
45 | + h('span.count', count || ''), | |
42 | 46 | h('i.fa', { className: iLike ? 'fa-heart' : 'fa-heart-o' }) |
43 | 47 | ] |
44 | 48 | ) |
45 | 49 | }) |
46 | - } | |
47 | 50 | |
48 | - function publishLike (msg, value = true) { | |
49 | - const scuttle = Scuttle(api.sbot.obs.connection) | |
51 | + function publishLike (msg, value = true) { | |
52 | + const _val = iLikeHack() | |
53 | + iLikeHack.set(value) | |
54 | + const scuttle = Scuttle(api.sbot.obs.connection) | |
50 | 55 | |
51 | - scuttle.like(msg, { value }, console.log) | |
56 | + scuttle.like(msg, { value }, (err, data) => { | |
57 | + if (err) { | |
58 | + iLikeHack.set(_val) | |
59 | + console.error(err) | |
60 | + return | |
61 | + } | |
62 | + | |
63 | + console.log(data) | |
64 | + }) | |
65 | + } | |
52 | 66 | } |
53 | 67 | } |
Built with git-ssb-web