You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
1 month ago
|
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,
|
||
|
)
|
||
|
|