diff --git a/demo/tables.py b/demo/tables.py index 0c6d699f..96a77fab 100644 --- a/demo/tables.py +++ b/demo/tables.py @@ -89,25 +89,28 @@ def city_view(city_id: int) -> list[AnyComponent]: ) -class MyTableRow(BaseModel): +class User(BaseModel): id: int = Field(title='ID') name: str = Field(title='Name') dob: date = Field(title='Date of Birth') enabled: bool | None = None +users: list[User] = [ + User(id=1, name='John', dob=date(1990, 1, 1), enabled=True), + User(id=2, name='Jane', dob=date(1991, 1, 1), enabled=False), + User(id=3, name='Jack', dob=date(1992, 1, 1)), +] + + @router.get('/users', response_model=FastUI, response_model_exclude_none=True) def users_view() -> list[AnyComponent]: return demo_page( *tabs(), - c.Table[MyTableRow]( - data=[ - MyTableRow(id=1, name='John', dob=date(1990, 1, 1), enabled=True), - MyTableRow(id=2, name='Jane', dob=date(1991, 1, 1), enabled=False), - MyTableRow(id=3, name='Jack', dob=date(1992, 1, 1)), - ], + c.Table[User]( + data=users, columns=[ - DisplayLookup(field='name', on_click=GoToEvent(url='/more/{id}/')), + DisplayLookup(field='name', on_click=GoToEvent(url='/table/users/{id}/')), DisplayLookup(field='dob', mode=DisplayMode.date), DisplayLookup(field='enabled'), ], @@ -135,3 +138,21 @@ def tabs() -> list[AnyComponent]: class_name='+ mb-4', ), ] + + +@router.get('/users/{id}/', response_model=FastUI, response_model_exclude_none=True) +def user_profile(id: int) -> list[AnyComponent]: + user: User | None = users[id - 1] if id <= len(users) else None + return demo_page( + *tabs(), + c.Link(components=[c.Text(text='Back')], on_click=BackEvent()), + c.Details( + data=user, + fields=[ + DisplayLookup(field='name'), + DisplayLookup(field='dob', mode=DisplayMode.date), + DisplayLookup(field='enabled'), + ], + ), + title=user.name, + )