|
from fastapi import FastAPI |
|
from fastapi.responses import HTMLResponse |
|
from xue import HTML, Head, Body, Div, xue_initialize, Script |
|
from xue.components import dropdown, sheet, button, form, input |
|
|
|
xue_initialize(tailwind=True) |
|
app = FastAPI() |
|
|
|
@app.get("/", response_class=HTMLResponse) |
|
async def root(): |
|
result = HTML( |
|
Head( |
|
title="Dropdown with Edit Sheet Example", |
|
), |
|
Body( |
|
Div( |
|
dropdown.dropdown_menu("Actions"), |
|
Div(id="sheet-container"), |
|
class_="container mx-auto p-4" |
|
) |
|
) |
|
).render() |
|
print(result) |
|
return result |
|
|
|
@app.get("/dropdown-menu/{menu_id}", response_class=HTMLResponse) |
|
async def get_dropdown_menu_content(menu_id: str): |
|
items = [ |
|
{ |
|
"icon": "pencil", |
|
"label": "Edit", |
|
"hx-get": "/edit-sheet", |
|
"hx-target": "#sheet-container", |
|
"hx-swap": "innerHTML" |
|
}, |
|
{"icon": "trash", "label": "Delete"}, |
|
{"icon": "copy", "label": "Duplicate"}, |
|
] |
|
result = dropdown.dropdown_menu_content(menu_id, items).render() |
|
print("dropdown-menu result", result) |
|
return result |
|
|
|
@app.get("/edit-sheet", response_class=HTMLResponse) |
|
async def get_edit_sheet(): |
|
edit_sheet_content = sheet.SheetContent( |
|
sheet.SheetHeader( |
|
sheet.SheetTitle("Edit Item"), |
|
sheet.SheetDescription("Make changes to your item here.") |
|
), |
|
sheet.SheetBody( |
|
form.Form( |
|
form.FormField("Name", "name", placeholder="Enter item name"), |
|
form.FormField("Description", "description", placeholder="Enter item description"), |
|
Div( |
|
button.button("Save", class_="bg-blue-500 text-white"), |
|
button.button("Cancel", class_="bg-gray-300 text-gray-700 ml-2", data_close_sheet="true"), |
|
class_="flex justify-end mt-4" |
|
), |
|
class_="space-y-4" |
|
) |
|
) |
|
) |
|
|
|
result = sheet.Sheet( |
|
"edit-sheet", |
|
Div(), |
|
edit_sheet_content, |
|
width="80%", |
|
max_width="800px" |
|
).render() |
|
return result |
|
|
|
if __name__ == "__main__": |
|
import uvicorn |
|
uvicorn.run("__main__:app", host="0.0.0.0", port=8000, reload=True) |