4.1 KiB
UI Technology Implementation
This document maps the PM's UX vision (as defined in the UX update) to concrete React components and modern frontend technologies. The goal is to deliver a slick, modern user experience that is fast, context-aware, and built on robust industry standards.
1. Command Palette ('Cmd+K')
Vision: A fast, keyboard-centric way to navigate, search for specific business entities (e.g., order IDs), or trigger actions without navigating through deep menu structures.
Implementation:
- Library: cmdk (often wrapped by shadcn/ui's
<Command>component). - Structure:
- A global listener binds to
Cmd+K(macOS) andCtrl+K(Windows/Linux). - An overlay/modal opens with a search input focused by default.
- Results are grouped logically: Recent Searches, Business Entities (Orders, Customers), Actions (Restart Flow, View Logs), and Navigation (Go to Settings).
- A global listener binds to
- Integration: Hooked into the global state and router (e.g., React Router or Next.js App Router) to perform instant client-side navigation.
2. Visual Flow Diagrams
Vision: Business-Entity First visual representation of Apache Camel integration flows, allowing users to see the path of a message, bottlenecks, and failure points at a glance.
Implementation:
- Library: React Flow (xyflow).
- Structure:
- Custom Nodes: Implement custom node types for different Camel components (Endpoints, Processors, Splitters, Choice blocks). These nodes will display status icons (success, error, processing) and metrics (processing time, message count).
- Custom Edges: Animated edges to simulate message flow or highlight specific paths taken by a specific business entity (e.g., tracing a specific Order ID).
- Interactivity: Clicking a node triggers a contextual slide-out (see below) to show detailed logs, payload data, or configuration for that specific step in the flow.
3. Contextual Slide-outs
Vision: Keep the user in the context of their primary task (e.g., viewing a flow) while providing deep-dive details. Avoid full page reloads and context switching.
Implementation:
- Library: Radix UI Dialog/Sheet or shadcn/ui Sheet.
- Structure:
- Rendered as an overlay that slides in from the right side of the screen.
- Can be stacked or replaced depending on the user's drill-down path.
- Usage: Clicking a node in the React Flow diagram, or a row in a data table, opens the slide-out displaying detailed metadata, logs, and payload traces for that specific element.
4. State Management and Data Fetching (SaaS Proxy to Local Runner)
Vision: The UI must feel snappy and responsive, fetching data from local Runners via the SaaS proxy without causing full page reloads or blocking the UI.
Implementation:
- Library: React Query (@tanstack/react-query) combined with a robust global state solution like Zustand for client UI state.
- Architecture:
- React Query: Handles all asynchronous data fetching, caching, synchronization, and background updates.
- When a user opens a slide-out for a specific node, React Query fetches the logs/data for that node. If they close and reopen it, the cached data is shown instantly while a background re-fetch occurs (stale-while-revalidate).
- Polling or WebSockets/Server-Sent Events (SSE) can be integrated with React Query to provide real-time updates of flow statuses from the Runners.
- Zustand: Manages transient UI state, such as which slide-out is currently open, the state of the Cmd+K palette, or the current zoom/pan level of the React Flow diagram.
- SaaS Proxy Communication: API calls are made from the frontend to the SaaS backend, which securely proxies the request down to the specific local Runner. React Query manages the loading states (spinners/skeletons) while waiting for the proxy response, ensuring the rest of the application remains interactive.
- React Query: Handles all asynchronous data fetching, caching, synchronization, and background updates.