h = require 'maquette' .h Modal = require './modal.ls' UUID = require "uuid/v4" bulma = require "./bulma.ls" {field, control, label, button, tag, input, select} = bulma col-to-lines = (column, self) -> field \.has-addons { key: "column.#{column.id}" } [ control \.is-expanded [ input { key: "input" + column.id value: column.title oninput: (e) -> self.extra_properties.columns.find((.id == column.id)).title := e.target.value } ] control [ button \.is-danger.is-outlined { key: "button" + column.id onclick: -> self.extra_properties.columns := self.extra_properties.columns.filter((.id != column.id)) } [ "DELETE" ] ] ] user-form-selection = (self, user) -> h \option { value: user.uid } [ user.login ] permission-groups = "read" "post" "edit" "admin" permissions-add = (self, permission, user-id) -> perm-list = self.permissions[permission] if perm-list is-already-there = perm-list.find (e) -> (""+ e) == ("" + user-id) if is-already-there console.log "user #{user-id} already in #{perm-list}" else perm-list ++= [ parseInt(user-id) ] self.permissions[permission] := perm-list # console.log "adding user #{user-id} to #{perm-list[0]}: #{perm-list}" else console.log "Cannot find #{permission} permissions, creating it" self.permissions[permission] := user-id permission-to-form-selection = (self, permission) -> h \option { value: permission } [ permission ] ProjectCreationModal = (project, todod-ws, users) -> # work on a copy of the columns # in case of cancelled modifications, only the copies are changed columns-copy = [] for col in project.extra_properties.columns new-col = {} for k,v of col new-col[k] = v columns-copy ++= [ new-col ] self = { title: project.title || "" permissions: project.permissions || {admin: [], edit: [], post: [], read: []} tmp: new-user-permission: id: void permission: permission-groups[0] new-column-input: title: "New column !" users: users || [] extra_properties: columns: columns-copy } modal = Modal { +visible content-render: (self) -> h \div.form [ field [ label "Project title" input { value: self.title oninput: (e) -> self.title := e.target.value } ] # h \hr [] # bulma.field [ # bulma.label "Adding a user" # bulma.input { # value: self.new-user # oninput: (e) -> # self.new-user := e.target.value # name: \new-user # id: \user-add # } # ] h \hr [] field [ label "Permissions" h \table.table.is-fullwidth.is-striped [ h \tbody [ for permission, uids of self.permissions for uid in uids h \tr {key: uid.to-string!} [ h \td [ uid.to-string! ] h \td.is-narrow [ permission ] ] ] ] ] h \hr [] # FIXME: This is supposed to go in a .field, right? label "Adding new user" field \.has-addons { key: \new-user } [ control [ select { onchange: (e) -> self.tmp.new-user-permission.permission := e.target.value } permission-groups.map (permission) -> permission-to-form-selection self, permission ] control \.is-expanded [ select \.is-fullwidth { onchange: (e) -> self.tmp.new-user-permission.uid := e.target.value } [ user-form-selection self, { login: "Choose a user", uid: "-" } for user-id, user of self.tmp.users user-form-selection self, user ] ] control [ button \.is-success.is-outlined { onclick: -> if self.tmp.new-user-permission.uid == void || self.tmp.new-user-permission.uid == "-" console.log "adding an user permission on the kanban: failed, no user selected" else # TODO: # adding the permissions in self.permissions # then editing the project in the db via todod-ws permissions-add self, self.tmp.new-user-permission.permission, self.tmp.new-user-permission.uid } [ "+" ] ] ] h \hr [] label [ "Columns" ] for dom in (self.extra_properties.columns.map (column) -> col-to-lines column, self) dom h \hr [] field \.has-addons { key: \new-column } [ control \.is-expanded [ input { value: self.tmp.new-column-input.title oninput: (e) -> self.tmp.new-column-input.title := e.target.value } ] control [ button \.is-success.is-outlined { onclick: -> new-col = { id: UUID! title: self.tmp.new-column-input.title } self.extra_properties.columns ++= [ new-col ] self.tmp.new-column-input.title := "New column !" } [ "+" ] ] ] ] on-validation: -> tmp = delete self.tmp if project.id todod-ws.edit-list project.id, self else todod-ws.add-list self.title, self self.tmp := tmp }, self self.render = -> modal.render! self module.exports = ProjectCreationModal