Verified Commit d0979275 authored by Jakob Moser's avatar Jakob Moser
Browse files

Create Todo, rebase it and Agenda on (yet to be reviewed) TaskList

parent ca12b1cf
Loading
Loading
Loading
Loading
+8 −64
Changes for portal/static/js/components/pieces/Agenda.mjs: 8 added lines, 64 removed lines.
Original line number Diff line number Diff line
import { agenda } from "../../model/Agenda.mjs"
import { StatusPill } from "./StatusPill.mjs"
import { createTaskList } from "./TaskList.mjs"

let isAgendaEditable = false
let isSaving = false
const TaskList = createTaskList()

export const Agenda = {
    view(vnode) {
        return m(
            "section.agenda.fancy.box",
            m("section.content", [
                m("h2", "Tagesordnung"),
                vnode.attrs.items
                    ? m(
                          "ol",
                          vnode.attrs.items.map(item =>
                              m(
                                  "li",
                                  isAgendaEditable
                                      ? m(
                                            "div",
                                            item.name,
                                            item.taiga &&
                                                m(StatusPill, {
                                                    item,
                                                    disabled: isSaving,
                                                }),
                                        )
                                      : item.name,
                              ),
                          ),
                      )
                    : m("span.message", vnode.attrs.message),
            ]),
            getAction(),
        )
        return m(TaskList, {
            title: "Tagesordnung",
            model: agenda,
            listTag: "ol",
            onSaved: vnode.attrs.onSaved,
        })
    },
}

function getAction() {
    if (isSaving) {
        return m(
            ".action.disabled",
            m("i.fa-solid.fa-circle-notch.fa-spin"),
            "Wird gespeichert...",
        )
    } else if (isAgendaEditable) {
        return m(
            "a.action",
            {
                onclick: async () => {
                    isSaving = true
                    await agenda.save()
                    isSaving = false
                    isAgendaEditable = false
                },
            },
            m("i.fa-solid.fa-floppy-disk"),
            agenda.changes.length > 0
                ? "Speichern"
                : "Ohne Änderungen speichern",
        )
    } else {
        return m(
            "a.action",
            { onclick: () => (isAgendaEditable = true) },
            m("i.fa-solid.fa-pen-to-square"),
            "Bearbeiten",
        )
    }
}
+15 −0
Changes for portal/static/js/components/pieces/Todo.mjs: 15 added lines, 0 removed lines.
Original line number Diff line number Diff line
import { todo } from "../../model/Todo.mjs"
import { createTaskList } from "./TaskList.mjs"

const TaskList = createTaskList()

export const Todo = {
    view(vnode) {
        return m(TaskList, {
            title: "To Do",
            model: todo,
            listTag: "ul",
            onSaved: vnode.attrs.onSaved,
        })
    },
}