view libervia/pages/lists/_browser/__init__.py @ 1388:68ffd60a58a5

pages (lists): specify when item is coming from config
author Goffi <goffi@goffi.org>
date Sat, 27 Feb 2021 20:55:35 +0100
parents a84383c659b4
children 72f9639594b2
line wrap: on
line source

from browser import bind, DOMNode
from javascript import JSON
from bridge import Bridge
import dialog

bridge = Bridge()


def list_delete_cb(item_elt, item):
    dialog.notification.show(f"{item['name']!r} has been deleted")


def list_delete_eb(failure_, item_elt, item):
    dialog.notification.show(
        f"Error while deleting {item['name']!r}: {failure_['message']}",
        "error"
    )


def interest_retract_cb(item_elt, item):
    print(f"{item['name']!r} removed successfuly from list of interests")
    item_elt.classList.add("state_deleted")
    item_elt.bind("transitionend", lambda evt: item_elt.remove())
    bridge.psNodeDelete(
        item['service'],
        item['node'],
        callback=lambda: list_delete_cb(item_elt, item),
        errback=lambda failure: list_delete_eb(failure, item_elt, item),
    )


def interest_retract_eb(failure_, item_elt, item):
    dialog.notification.show(
        f"Can't remove list {item['name']!r} from personal interests: "
        f"{failure_['message']}",
        "error"
    )


def delete_ok(evt, notif_elt, item_elt, item):
    bridge.interestRetract(
        "", item['id'],
        callback=lambda: interest_retract_cb(item_elt, item),
        errback=lambda failure:interest_retract_eb(failure, item_elt, item))


def delete_cancel(evt, notif_elt, item_elt, item):
    notif_elt.remove()
    item_elt.classList.remove("selected_for_deletion")


@bind(".action_delete", "click")
def on_delete(evt):
    evt.stopPropagation()
    evt.preventDefault()
    target = evt.currentTarget
    item_elt = DOMNode(target.closest('.item'))
    item_elt.classList.add("selected_for_deletion")
    item = JSON.parse(item_elt.dataset.item)
    dialog.Confirm(
        f"List {item['name']!r} will be deleted, are you sure?",
        ok_label="delete",
    ).show(
        ok_cb=lambda evt, notif_elt: delete_ok(evt, notif_elt, item_elt, item),
        cancel_cb=lambda evt, notif_elt: delete_cancel(evt, notif_elt, item_elt, item),
    )