todo-webclient/client/users-cache.ls

66 lines
1.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{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: Well 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