from __future__ import annotations from dataclasses import KW_ONLY, field from typing import * # type: ignore import rio from .. import components as comps from db_classes import * import functools class BrowsePage(rio.Component): searchtext: str = "" items: dict = {} office: str = "" filters: dict = {} @rio.event.on_populate async def _search(self, query=searchtext): self.office = self.session[comps.Settings].office self.filters['office'] = self.office self.items = search_item(query, self.filters) await self.force_refresh() @rio.event.periodic(1) async def set_office_init(self): if self.office != self.session[comps.Settings].office: self.office = self.session[comps.Settings].office #print(self.office) await self._search() async def _search_trigger(self, event: rio.TextInputChangeEvent): await self._search(event.text) def click_item(self, code): self.session[comps.Settings].selected_item = code self.session.attach(self.session[comps.Settings]) self.session.navigate_to("/item") def build(self) -> rio.Component: searchview: rio.ListView = rio.ListView(height='grow') for item in self.items: if item["loc"] is not None: loc = item["loc"]["name"] else: loc = "" if item["checkout"]: checkout = item["checkout_user"] + " - " + loc else: checkout = loc searchview.add(rio.SimpleListItem(text=item["fullname"],secondary_text=(item["manufacturer"] + " - Serial: " + item["serial"] + "\n" + checkout), on_press=functools.partial( self.click_item, code=item["barcode"]))) return rio.Column( rio.Row( rio.TextInput( text=self.bind().searchtext, on_change=self._search_trigger, label="Search" ) ), searchview, spacing=2, width=60, align_x=0.5, align_y=0, )