From 8cf1d344a2b3e4eee90074504f3c2169dc75ef70 Mon Sep 17 00:00:00 2001 From: "Md. Almas Ali" Date: Sun, 3 Dec 2023 20:19:35 +0600 Subject: [PATCH 1/5] fix: user detail broken in demo (#59) --- python/demo/tables.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/python/demo/tables.py b/python/demo/tables.py index 0c6d699f..3997a8e3 100644 --- a/python/demo/tables.py +++ b/python/demo/tables.py @@ -3,7 +3,7 @@ from pathlib import Path import pydantic -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from fastui import AnyComponent, FastUI from fastui import components as c from fastui.components.display import DisplayLookup, DisplayMode @@ -107,7 +107,7 @@ def users_view() -> list[AnyComponent]: MyTableRow(id=3, name='Jack', dob=date(1992, 1, 1)), ], 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 +135,25 @@ 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]: + + users = [ + 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)), + ] + + try: + user = next(user for user in users if user.id == id) + except StopIteration: + raise HTTPException(status_code=404, detail="User not found") + + return demo_page( + *tabs(), + c.Link(components=[c.Text(text='Back')], on_click=BackEvent()), + c.Details(data=user), + title=user.name, + ) From 0cbc8663a09f648700f3008c0796254563d55b45 Mon Sep 17 00:00:00 2001 From: "Md. Almas Ali" Date: Sun, 3 Dec 2023 20:30:47 +0600 Subject: [PATCH 2/5] fix: linting issue checked. --- python/demo/tables.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/demo/tables.py b/python/demo/tables.py index 3997a8e3..5fe613de 100644 --- a/python/demo/tables.py +++ b/python/demo/tables.py @@ -137,7 +137,7 @@ def tabs() -> list[AnyComponent]: ] -@router.get("/users/{id}/", response_model=FastUI, response_model_exclude_none=True) +@router.get('/users/{id}/', response_model=FastUI, response_model_exclude_none=True) def user_profile(id: int) -> list[AnyComponent]: users = [ @@ -149,7 +149,7 @@ def user_profile(id: int) -> list[AnyComponent]: try: user = next(user for user in users if user.id == id) except StopIteration: - raise HTTPException(status_code=404, detail="User not found") + raise HTTPException(status_code=404, detail='User not found') return demo_page( *tabs(), From 907525401963bb18aee9f1a9ac85730a11b487d3 Mon Sep 17 00:00:00 2001 From: "Md. Almas Ali" Date: Sun, 3 Dec 2023 20:43:40 +0600 Subject: [PATCH 3/5] fix: linting issue. --- python/demo/tables.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/python/demo/tables.py b/python/demo/tables.py index 5fe613de..75676bc7 100644 --- a/python/demo/tables.py +++ b/python/demo/tables.py @@ -139,18 +139,15 @@ def tabs() -> list[AnyComponent]: @router.get('/users/{id}/', response_model=FastUI, response_model_exclude_none=True) def user_profile(id: int) -> list[AnyComponent]: - users = [ 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)), ] - try: user = next(user for user in users if user.id == id) except StopIteration: raise HTTPException(status_code=404, detail='User not found') - return demo_page( *tabs(), c.Link(components=[c.Text(text='Back')], on_click=BackEvent()), From 44aa94f2596e1e136f9e841c8aa5dbbfde347e86 Mon Sep 17 00:00:00 2001 From: "Md. Almas Ali" Date: Mon, 4 Dec 2023 23:00:32 +0600 Subject: [PATCH 4/5] fix: users multiple define, added fields to handle display fields explicitly. --- python/demo/tables.py | 56 ++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/python/demo/tables.py b/python/demo/tables.py index 75676bc7..c717900a 100644 --- a/python/demo/tables.py +++ b/python/demo/tables.py @@ -3,7 +3,7 @@ from pathlib import Path import pydantic -from fastapi import APIRouter, HTTPException +from fastapi import APIRouter from fastui import AnyComponent, FastUI from fastui import components as c from fastui.components.display import DisplayLookup, DisplayMode @@ -84,28 +84,46 @@ def city_view(city_id: int) -> list[AnyComponent]: return demo_page( *tabs(), c.Link(components=[c.Text(text='Back')], on_click=BackEvent()), - c.Details(data=city), + c.Details( + data=city, + fields=[ + DisplayLookup(field='id'), + DisplayLookup(field='city'), + DisplayLookup(field='city_ascii'), + DisplayLookup(field='lat'), + DisplayLookup(field='lng'), + DisplayLookup(field='country'), + DisplayLookup(field='iso2'), + DisplayLookup(field='iso3'), + DisplayLookup(field='admin_name'), + DisplayLookup(field='capital'), + DisplayLookup(field='population'), + ], + ), title=city.city, ) -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='/table/users/{id}/')), DisplayLookup(field='dob', mode=DisplayMode.date), @@ -139,18 +157,18 @@ def tabs() -> list[AnyComponent]: @router.get('/users/{id}/', response_model=FastUI, response_model_exclude_none=True) def user_profile(id: int) -> list[AnyComponent]: - users = [ - 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)), - ] - try: - user = next(user for user in users if user.id == id) - except StopIteration: - raise HTTPException(status_code=404, detail='User not found') + 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), + c.Details( + data=user, + fields=[ + DisplayLookup(field='id'), + DisplayLookup(field='name'), + DisplayLookup(field='dob', mode=DisplayMode.date), + DisplayLookup(field='enabled'), + ], + ), title=user.name, ) From 0819e38e119bcd7d024b09294e5b0bbc6005216e Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Tue, 5 Dec 2023 16:31:25 +0300 Subject: [PATCH 5/5] remove unnecessary fields --- demo/tables.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/demo/tables.py b/demo/tables.py index c717900a..96a77fab 100644 --- a/demo/tables.py +++ b/demo/tables.py @@ -84,22 +84,7 @@ def city_view(city_id: int) -> list[AnyComponent]: return demo_page( *tabs(), c.Link(components=[c.Text(text='Back')], on_click=BackEvent()), - c.Details( - data=city, - fields=[ - DisplayLookup(field='id'), - DisplayLookup(field='city'), - DisplayLookup(field='city_ascii'), - DisplayLookup(field='lat'), - DisplayLookup(field='lng'), - DisplayLookup(field='country'), - DisplayLookup(field='iso2'), - DisplayLookup(field='iso3'), - DisplayLookup(field='admin_name'), - DisplayLookup(field='capital'), - DisplayLookup(field='population'), - ], - ), + c.Details(data=city), title=city.city, ) @@ -164,7 +149,6 @@ def user_profile(id: int) -> list[AnyComponent]: c.Details( data=user, fields=[ - DisplayLookup(field='id'), DisplayLookup(field='name'), DisplayLookup(field='dob', mode=DisplayMode.date), DisplayLookup(field='enabled'),