todo-webclient/client/users-cache.ls

66 lines
1.4 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{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