66 lines
1.4 KiB
Plaintext
66 lines
1.4 KiB
Plaintext
|
||
{h} = require "maquette"
|
||
|
||
UsersCache = (authd-ws, on-user) ->
|
||
self = {}
|
||
|
||
on-user ||= (user) ->
|
||
|
||
# uid => user | "request sent"
|
||
# FIXME: "request sent" stays forever that way on failure.
|
||
self.users = {}
|
||
|
||
# TODO: We’ll probably want to handle “no such user” errors.
|
||
authd-ws.add-event-listener \user, (message) ->
|
||
user = message.user
|
||
|
||
self.users[user.uid] := user
|
||
self.users[user.login] := user
|
||
|
||
on-user user
|
||
|
||
authd-ws.add-event-listener \error, (message) ->
|
||
if message.reason == "user not found"
|
||
console.log "warning: got a “user not found” error"
|
||
|
||
self.render-user = (uid) ->
|
||
if user = self.get-user uid
|
||
h \div.level.user {key: "user-#{uid}"} [
|
||
h \div.level-left [
|
||
console.log "#{user.login}", user.profile?.avatar
|
||
if avatar = user.profile?.avatar
|
||
h \div.level-item [
|
||
h \figure.image.is-32x32.is-rounded [
|
||
h \img {
|
||
src: avatar
|
||
alt: ""
|
||
}
|
||
]
|
||
]
|
||
|
||
h \div.level-item [
|
||
"@" + (user.profile?.full_name || user.login)
|
||
]
|
||
]
|
||
]
|
||
|
||
# Note: uid may also be a login.
|
||
self.get-user = (uid, request-if-missing = true) ->
|
||
switch user = self.users[uid]
|
||
when void
|
||
if request-if-missing
|
||
console.log "Sending request for #{uid}"
|
||
self.users[uid] = "request sent"
|
||
authd-ws.get-user uid
|
||
|
||
void
|
||
when "request sent"
|
||
void
|
||
else
|
||
user
|
||
|
||
self
|
||
|
||
module.exports = UsersCache
|
||
|