view libervia/web/pages/chat/select/_browser/__init__.py @ 1547:383e1fee29f6

browser (chat/select): update dynamically JID items when search box is used
author Goffi <goffi@goffi.org>
date Thu, 06 Jul 2023 12:12:07 +0200
parents
children 66aa6e140ebb
line wrap: on
line source

from bridge import AsyncBridge as Bridge
from browser import aio, bind, console as log, document, window
from urllib.parse import urljoin, quote
from jid_search import JidSearch
from template import Template
from cache import cache
from pprint import pp

log.warning = log.warn
profile = window.profile or ""
bridge = Bridge()


class ChatSelect:

    def __init__(self):
        self.search_item_tpl = Template("chat/search_item.html")
        self.chat_items_elt = document["chat_items"]

    def show_items(self, items) -> None:
        for item in items:
            search_item_elt = self.search_item_tpl.get_elt({
                "url": urljoin(f"{window.location.href}/", quote(item["entity"])),
                "item": item,
                "identities": cache.identities
            })
            self.chat_items_elt <= search_item_elt

    def on_empty_search(self):
        items = [
            {
                "entity": jid_,
                "groups": data["groups"]
            }
            for jid_, data in cache.roster.items()
        ]
        self.chat_items_elt.clear()
        self.show_items(items)

    def on_search_filter(self, search_items):
        self.chat_items_elt.clear()
        pp(search_items)
        self.show_items(search_items)


chat_select = ChatSelect()
jid_search = JidSearch(
    document["search"],
    chat_select.on_search_filter,
    chat_select.on_empty_search
)