Skip to content

Commit efda176

Browse files
aksOpsclaude
andcommitted
Fix critical bugs and polish NiceGUI Explorer UI to production grade
- Replace ui.link(on_click=...) crash with ui.button().props("flat dense no-caps") - Fix broken pagination: use .set_enabled() instead of invalid .props("flat 'disable'") - Eliminate modal memory leak: reuse singleton ui.dialog() instances - Add loading spinners during data fetches - Add proper empty-state cards with icon + message + hint - Replace hard-coded max-width pixels with Tailwind truncate class - Wrap all grids in max-w-7xl mx-auto responsive container - Guard all service calls with try/except and ui.notify() error toasts - Use opacity classes instead of text-gray-* for dark mode compatibility - Add page title and favicon to /ui page - Show fallback badge when stats fail instead of silent swallow - Move tab imports to module level - MCP console: disable Run button during execution, show spinner - MCP console: use ui.code() for JSON output with syntax highlighting - MCP console: deferred scroll with ui.timer(0.1) after render - Flow view: professional centered card placeholder Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 78135b0 commit efda176

4 files changed

Lines changed: 331 additions & 182 deletions

File tree

src/osscodeiq/server/ui/__init__.py

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
from nicegui import ui
88

9+
from osscodeiq.server.ui.explorer import create_explorer_page
10+
from osscodeiq.server.ui.flow_view import create_flow_page
11+
from osscodeiq.server.ui.mcp_console import create_mcp_console
912
from osscodeiq.server.ui.theme import BRAND_COLOR
1013

1114
if TYPE_CHECKING:
@@ -15,7 +18,7 @@
1518
def setup_ui(service: CodeIQService) -> None:
1619
"""Register NiceGUI pages on the existing FastAPI app."""
1720

18-
@ui.page("/ui")
21+
@ui.page("/ui", title="OSSCodeIQ Explorer", favicon="hub")
1922
def index():
2023
dark = ui.dark_mode(value=None)
2124

@@ -26,26 +29,40 @@ def index():
2629
with ui.row().classes("items-center gap-2"):
2730
try:
2831
stats = service.get_stats()
29-
ui.badge(f"{stats.get('total_nodes', 0):,} nodes").props("color=primary outline")
30-
ui.badge(f"{stats.get('total_edges', 0):,} edges").props("color=positive outline")
31-
except Exception:
32-
pass
33-
ui.button(icon="light_mode", on_click=lambda: dark.set_value(False)).props("flat dense round").tooltip("Light theme")
34-
ui.button(icon="dark_mode", on_click=lambda: dark.set_value(True)).props("flat dense round").tooltip("Dark theme")
35-
ui.button(icon="contrast", on_click=lambda: dark.set_value(None)).props("flat dense round").tooltip("System theme")
32+
ui.badge(
33+
f"{stats.get('total_nodes', 0):,} nodes"
34+
).props("color=primary outline")
35+
ui.badge(
36+
f"{stats.get('total_edges', 0):,} edges"
37+
).props("color=positive outline")
38+
except Exception: # noqa: BLE001
39+
ui.badge("stats unavailable").props(
40+
"color=warning outline"
41+
)
42+
ui.button(
43+
icon="light_mode",
44+
on_click=lambda: dark.set_value(False),
45+
).props("flat dense round").tooltip("Light theme")
46+
ui.button(
47+
icon="dark_mode",
48+
on_click=lambda: dark.set_value(True),
49+
).props("flat dense round").tooltip("Dark theme")
50+
ui.button(
51+
icon="contrast",
52+
on_click=lambda: dark.set_value(None),
53+
).props("flat dense round").tooltip("System theme")
3654

3755
with ui.tabs().classes("w-full") as tabs:
3856
explorer_tab = ui.tab("Explorer", icon="explore")
3957
flow_tab = ui.tab("Flow", icon="account_tree")
4058
console_tab = ui.tab("MCP Console", icon="terminal")
4159

42-
with ui.tab_panels(tabs, value=explorer_tab).classes("w-full flex-grow"):
60+
with ui.tab_panels(tabs, value=explorer_tab).classes(
61+
"w-full flex-grow"
62+
):
4363
with ui.tab_panel(explorer_tab):
44-
from osscodeiq.server.ui.explorer import create_explorer_page
4564
create_explorer_page(service)
4665
with ui.tab_panel(flow_tab):
47-
from osscodeiq.server.ui.flow_view import create_flow_page
4866
create_flow_page(service)
4967
with ui.tab_panel(console_tab):
50-
from osscodeiq.server.ui.mcp_console import create_mcp_console
5168
create_mcp_console(service)

0 commit comments

Comments
 (0)