From 7cfe50489034dba81488f4dbb9d64f56e3304bb6 Mon Sep 17 00:00:00 2001
From: Philippe PITTOLI
Date: Sat, 7 Dec 2019 00:44:02 +0100
Subject: [PATCH] new project navbar
---
client/index.ls | 46 ++++++++++++++++++++++++++++-------
client/project.ls | 62 +++++++++++++++++++++--------------------------
2 files changed, 64 insertions(+), 44 deletions(-)
diff --git a/client/index.ls b/client/index.ls
index 55100ad..a24a5e7 100644
--- a/client/index.ls
+++ b/client/index.ls
@@ -164,13 +164,21 @@ model.todod-ws.user-on-socket-close ++= [ on-websocket-close ]
model.todod-ws.add-event-listener \lists-list, (message) ->
console.log "Project list received", message
+
model.project-list := message.lists.map (x) ->
- Project x, model.todod-ws
+ old-project = model.project-list.find((.id == x.id))
+ new-project = Project x, model.todod-ws
+
+ if old-project && new-project.id == old-project.id
+ new-project.tasks = old-project.tasks
+
+ new-project
projector.schedule-render!
model.todod-ws.add-event-listener \new-list, (message) ->
console.log "New project", message
+
model.project-list := model.project-list ++ [ (Project message.list, model.todod-ws) ]
projector.schedule-render!
@@ -186,18 +194,14 @@ model.todod-ws.add-event-listener \list-updated, (message) ->
project
if model.viewed-project && model.viewed-project.id == message.list.id
+ new-project.tasks = model.viewed-project.tasks
model.viewed-project = new-project
projector.schedule-render!
-model.todod-ws.add-event-listener \tasks, (message) ->
- console.log "Tasks received", message
- project = model.project-list.find((.id == message.list))
- model.project-list.find((.id == message.list)).tasks := message.tasks.map (e) -> Task e, project, model.todod-ws
- projector.schedule-render!
-
model.todod-ws.add-event-listener \list-removed, (message) ->
console.log "A list has been removed", message
+
if model.current-view == "project" && model.viewed-project.id == message.list
model.current-view := "project-list"
model.viewed-project := void
@@ -205,12 +209,27 @@ model.todod-ws.add-event-listener \list-removed, (message) ->
model.project-list := model.project-list.filter((.id != message.list))
+
+# tasks
+
+model.todod-ws.add-event-listener \tasks, (message) ->
+ console.log "Tasks received", message
+
+ project = model.project-list.find((.id == message.list))
+ project.tasks := message.tasks.map (e) -> Task e, project, model.todod-ws
+
+ if model.viewed-project.id == project.id
+ model.viewed-project := project
+
+ projector.schedule-render!
+
model.todod-ws.add-event-listener \task-created, (message) ->
console.log "A task has been created", message
task = message.task
list = model.project-list.find((.id == task.list))
- # console.log task, list
+ if list.id == model.viewed-project.id
+ model.viewed-project := list
if list
list.tasks ++= [ Task task, list, model.todod-ws ]
@@ -222,7 +241,6 @@ model.todod-ws.add-event-listener \task-updated, (message) ->
task = message.task
list = model.project-list.find((.id == task.list))
- # console.log task, list
if list
list.tasks = list.tasks.map (e) ->
@@ -242,7 +260,9 @@ model.todod-ws.add-event-listener \task-removed, (message) ->
projector.schedule-render!
+
render-navbar = ->
+
h \div.navbar [
h \div.navbar-start [
h \a.navbar-item.is-size-2 {
@@ -253,7 +273,15 @@ render-navbar = ->
model.current-view := "project-list"
} [ "⌂" ]
]
+
+ if model.viewed-project
+ model.viewed-project.inner-nav-render!
+
h \div.navbar-end [
+
+ if model.viewed-project
+ model.viewed-project.right-nav-render!
+
h \a.navbar-item {
onclick: ->
model.current-view := "login"
diff --git a/client/project.ls b/client/project.ls
index 4314a93..0590ffb 100644
--- a/client/project.ls
+++ b/client/project.ls
@@ -13,6 +13,7 @@ Project = (self, todod-ws) ->
modal = void
self.render-column = (column, first) ->
+
tasks-to-display = self.tasks.filter (task) ->
task.extra_properties && task.extra_properties.column && task.extra_properties.column == column.id
|| ((! task.extra_properties || ! task.extra_properties.column) && first)
@@ -29,43 +30,36 @@ Project = (self, todod-ws) ->
]
]
- self.render-navbar = ->
- h \div.navbar [
+ self.inner-nav-render = ->
+ h \div.navbar-item [ h \a.subtitle.is-3 [ self.title ] ]
- h \div.navbar-brand [
- h \div.navbar-item [
- self.title
- ]
+ self.right-nav-render = ->
+ [
+ h \div.navbar-item [
+ h \div.button.is-outlined {
+ onclick: ->
+ modal := ProjectCreationModal self, self.todod-ws
+ } [ "Edit this project" ]
]
- h \div.navbar-end [
+ h \div.navbar-item [
+ h \div.button.is-success.is-outlined {
+ onclick: ->
+ modal := TaskCreationModal self, self.todod-ws
+ } [ "New task" ]
+ ]
- h \div.navbar-item [
- h \div.button.is-danger.is-outlined {
- onclick: ->
- modal := ProjectCreationModal self, self.todod-ws
- } [ "EDIT" ]
- ]
-
- h \div.navbar-item [
- h \div.button.is-success.is-outlined {
- onclick: ->
- modal := TaskCreationModal self, self.todod-ws
- } [ "+" ]
- ]
-
- h \div.navbar-item [
- h \div.button.is-danger.is-outlined {
- onclick: ->
- modal := Modal {
- +visible
- content:
- h \p [ "Are you sure you want to remove board #{self.title}?" ]
- on-validation: ->
- self.todod-ws.remove-list self.id
- }
- } [ "X" ]
- ]
+ h \div.navbar-item [
+ h \div.button.is-danger.is-outlined {
+ onclick: ->
+ modal := Modal {
+ +visible
+ content:
+ h \p [ "Are you sure you want to remove board #{self.title}?" ]
+ on-validation: ->
+ self.todod-ws.remove-list self.id
+ }
+ } [ "Delete this project" ]
]
]
@@ -74,8 +68,6 @@ Project = (self, todod-ws) ->
# console.log "Project to render: ", self
h \div.project {} [
- self.render-navbar!
-
h \div.columns [
if columns = self.extra_properties.columns
for dom in columns.map((column, index) -> self.render-column(column, index == 0))