User selection widget WIP, grooming.
parent
93fc0ac859
commit
e8546bbf5c
|
@ -7,6 +7,7 @@ Modal = require './modal.ls'
|
|||
bulma = require "./bulma.ls"
|
||||
|
||||
{field, control, label, button, tag, input, select} = bulma
|
||||
{icon} = require "./font-awesome.ls"
|
||||
|
||||
deep-copy = (object) ->
|
||||
JSON.parse JSON.stringify object
|
||||
|
@ -18,8 +19,58 @@ remove-permission = (project, uid) ->
|
|||
project.permissions[key] := value.filter (!= uid)
|
||||
|
||||
add-permission = (project, uid, perm) ->
|
||||
if perm == "none"
|
||||
return remove-permission project, uid
|
||||
|
||||
project.permissions[perm].push uid
|
||||
|
||||
UserInput = (users-cache) ->
|
||||
self = {}
|
||||
self.input = ""
|
||||
self.timer = void
|
||||
|
||||
timeout-handler = ->
|
||||
self.user = users-cache.get-user self.input
|
||||
|
||||
self.reset = ->
|
||||
self.input = ""
|
||||
window.clear-timeout self.timer
|
||||
self.user = void
|
||||
self.timer = void
|
||||
|
||||
self.render = ->
|
||||
control \.is-expanded.has-icons-right [
|
||||
# FIXME: Replace by a “user search input” as soon
|
||||
# as one is available.
|
||||
input {
|
||||
classes: {
|
||||
"is-danger": self.input.length > 0 && ! self.user
|
||||
}
|
||||
value: self.input
|
||||
oninput: (e) ->
|
||||
self.input := e.target.value
|
||||
|
||||
login = e.target.value
|
||||
uid = parse-int e.target.value
|
||||
|
||||
user = users-cache.get-user login, false
|
||||
|
||||
if user
|
||||
self.user = user
|
||||
else
|
||||
self.user = void
|
||||
|
||||
if timer = self.timer
|
||||
window.clear-timeout timer
|
||||
|
||||
self.timer := window.set-timeout timeout-handler, 200
|
||||
}
|
||||
|
||||
if self.user
|
||||
icon \.is-right, \check
|
||||
]
|
||||
self
|
||||
|
||||
ProjectCreationModal = (args) ->
|
||||
self = {
|
||||
project: if args.project
|
||||
|
@ -40,6 +91,8 @@ ProjectCreationModal = (args) ->
|
|||
users-cache: args.users-cache
|
||||
}
|
||||
|
||||
user-input = UserInput args.users-cache
|
||||
|
||||
self.project.tasks := void
|
||||
|
||||
unless self.project.extra_properties
|
||||
|
@ -105,21 +158,13 @@ ProjectCreationModal = (args) ->
|
|||
|
||||
if self.project.permissions
|
||||
field \.has-addons [
|
||||
control \.is-expanded [
|
||||
# FIXME: Replace by a “user search input” as soon
|
||||
# as one is available.
|
||||
input {
|
||||
value: self.input.new-user
|
||||
oninput: (e) ->
|
||||
self.input.new-user := e.target.value
|
||||
}
|
||||
]
|
||||
user-input.render!
|
||||
|
||||
control [
|
||||
select {
|
||||
onchange: (e) ->
|
||||
self.input.new-user-permission := e.target.value
|
||||
} PERMISSION_LEVELS.map (perm) ->
|
||||
} (PERMISSION_LEVELS ++ ["none"]).map (perm) ->
|
||||
h \option {
|
||||
selected: perm == \read
|
||||
} [ perm ]
|
||||
|
@ -128,12 +173,11 @@ ProjectCreationModal = (args) ->
|
|||
control [
|
||||
h \div.button.is-success.is-outlined {
|
||||
onclick: ->
|
||||
uid = (parse-int self.input.new-user) || self.input.new-user
|
||||
uid = user-input.user?.uid
|
||||
|
||||
perm = self.input.new-user-permission
|
||||
|
||||
self.input.new-user := ""
|
||||
# FIXME: Really? :thonk:
|
||||
#self.input.new-user-permission := \read
|
||||
user-input.reset!
|
||||
|
||||
console.log "Adding new perm? :/", uid, perm
|
||||
|
||||
|
|
|
@ -4,22 +4,37 @@ UsersCache = (authd-ws, on-user) ->
|
|||
|
||||
on-user ||= (user) ->
|
||||
|
||||
# uid => 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
|
||||
|
||||
self.get-user = (uid) ->
|
||||
if user = self.users[uid]
|
||||
user
|
||||
authd-ws.add-event-listener \error, (message) ->
|
||||
if message.reason == "user not found"
|
||||
console.log "warning: got a “user not found” error"
|
||||
|
||||
# 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
|
||||
console.log "Sending request for #{uid}"
|
||||
authd-ws.get-user uid
|
||||
user
|
||||
|
||||
self
|
||||
|
||||
|
|
Loading…
Reference in New Issue