view libervia/web/pages/lists/_browser/__init__.py @ 1618:5d9889f14012 default tip @

server: start major redesign - Add icons to menu items - Switch menu items representation from tuple to dictionary for future extensibility: - Include icon information - Prepare for additional data - Remove "login" from main menu, add login page URL to template data, as it is now a separate right-aligned item
author Goffi <goffi@goffi.org>
date Sat, 26 Oct 2024 23:07:01 +0200
parents c1c1d68d063e
children
line wrap: on
line source

import json

from bridge import AsyncBridge as Bridge, BridgeException
from browser import document, aio
import dialog

bridge = Bridge()


async def on_delete(evt):
    evt.stopPropagation()
    evt.preventDefault()
    target = evt.currentTarget
    item_elt = target.closest('.item')
    item_elt.classList.add("selected_for_deletion")
    item = json.loads(item_elt.dataset.item)

    confirmed = await dialog.Confirm(
        f"List {item['name']!r} will be deleted, are you sure?",
        ok_label="delete",
    ).ashow()

    if not confirmed:
        item_elt.classList.remove("selected_for_deletion")
        return

    try:
        await bridge.interest_retract("", item['id'])
    except BridgeException as e:
        dialog.notification.show(
            f"Can't remove list {item['name']!r} from personal interests: {e}",
            "error"
        )
    else:
        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())
        if item.get("creator", False):
            try:
                await bridge.ps_node_delete(
                    item['service'],
                    item['node'],
                )
            except BridgeException as e:
                dialog.notification.show(
                    f"Error while deleting {item['name']!r}: {e}",
                    "error"
                )
            else:
                dialog.notification.show(f"{item['name']!r} has been deleted")


for elt in document.select('.action_delete'):
    elt.bind("click", lambda evt: aio.run(on_delete(evt)))