Data Browser App
Features & Capabilities
Data Browser App - Features & Capabilities Report
Template Version: 1.0.0 Generated: 2026-01-22 Package:
@epicdm/flowstate-app-data-browserApp ID:data-browser
Table of Contents
- Overview
- App Identity
- Feature Categories
- Capabilities
- Data Models
- User Workflows
- Integration Points
- Commands & Keybindings
- Architecture Summary
Overview
Purpose
The Data Browser App is a developer tool for browsing, querying, and managing RxDB database collections. It provides a Parse Dashboard-inspired interface for viewing collection contents, performing advanced queries with filters, inline editing of documents, and full CRUD operations through schema-aware forms.
Target Users
| User Type | Description | Primary Use Cases |
|---|---|---|
| Developers | Build and debug FlowState applications | Inspect data, test queries, debug issues |
| Administrators | Manage production data | Edit records, clean up data, verify integrity |
| Support Engineers | Investigate issues | View user data, trace entity relationships |
| QA Engineers | Validate functionality | Verify data persistence, test schema compliance |
Value Proposition
- Parse Dashboard Experience: Familiar filter UI for querying collections
- Dual Connection Modes: Local database or REST API access
- Schema-Aware Editing: Forms auto-generated from collection schemas
- Inline Cell Editing: Quick edits without opening modals
- Batch Operations: Select and operate on multiple documents
- Type-Aware Controls: Automatic enum dropdowns and boolean switches
App Identity
| Property | Value |
|---|---|
| ID | data-browser |
| Display Name | Data Browser |
| Package Name | @epicdm/flowstate-app-data-browser |
| Version | 1.0.0 |
| Category | developer |
| Icon | database |
| Color | #06B6D4 |
| Base Path | /data-browser |
| Permissions | storage |
Entry Points
| Entry Point | Path | Description |
|---|---|---|
| Main Export | src/index.ts | Primary package export |
| Standalone | src/standalone.tsx | Standalone app entry |
| App Component | src/App.tsx | Main React component with routing |
| Plugin | src/plugin.ts | FlowState plugin registration |
Feature Categories
Category 1: Collection Browsing
Core collection viewing and navigation
Feature: Collection Selector Sidebar
| Property | Details |
|---|---|
| ID | collection-sidebar |
| Status | Implemented |
| Priority | High |
Description: Sidebar listing all available RxDB collections with active state highlighting. Collections are loaded from the connected database or schema definitions.
User Story: As a developer, I want to browse available collections so that I can inspect the data I need.
Acceptance Criteria:
- [x] Display list of all collections
- [x] Highlight currently selected collection
- [x] Show loading state while fetching
- [x] Handle empty collection list gracefully
- [x] Reset filters when switching collections
Implementation:
| Component | Path | Purpose |
|---|---|---|
| CollectionsPage | src/pages/CollectionsPage.tsx | Main collections view |
| useCollections | src/hooks/useRxDB.ts | Collections loading hook |
Routes:
/collections- Collection browser
Feature: Data Table Display
| Property | Details |
|---|---|
| ID | data-table |
| Status | Implemented |
| Priority | High |
Description: TanStack Table-powered data grid displaying collection documents with sortable columns, pagination, and row selection for batch operations.
User Story: As a developer, I want to view collection data in a table so that I can quickly scan and analyze records.
Acceptance Criteria:
- [x] Auto-generate columns from data and schema
- [x] Sortable column headers
- [x] Sticky header with horizontal scrolling
- [x] Row selection checkboxes
- [x] Pagination controls
- [x] Configurable page size (10, 25, 50, 100, 250, 500)
- [x] Empty state handling
Implementation:
| Component | Path | Purpose |
|---|---|---|
| DataTable | src/components/DataTable.tsx | Main table component |
| useCollectionData | src/hooks/useRxDB.ts | Data loading hook |
Category 2: Filtering & Querying
Advanced data filtering capabilities
Feature: Filter Bar
| Property | Details |
|---|---|
| ID | filter-bar |
| Status | Implemented |
| Priority | High |
Description: Parse Dashboard-style filter interface allowing multiple filter conditions with field selection, operators, and values. Supports enum dropdowns for fields with defined values.
User Story: As a developer, I want to filter data with complex conditions so that I can find specific records quickly.
Acceptance Criteria:
- [x] Add multiple filter conditions
- [x] Field selector with nested field support
- [x] Multiple operators (equals, contains, greater than, etc.)
- [x] Enum dropdown for fields with defined values
- [x] Clear individual filters or all at once
- [x] Reset pagination on filter change
Implementation:
| Component | Path | Purpose |
|---|---|---|
| FilterBar | src/components/FilterBar.tsx | Filter UI component |
| CollectionsPage | src/pages/CollectionsPage.tsx | Filter state management |
Supported Operators:
| Operator | Label | RxDB Selector |
|---|---|---|
equals | Equals | $eq |
notEquals | Not Equals | $ne |
contains | Contains | $regex |
notContains | Not Contains | $not: $regex |
greaterThan | Greater Than | $gt |
lessThan | Less Than | $lt |
greaterOrEqual | Greater or Equal | $gte |
lessOrEqual | Less or Equal | $lte |
exists | Exists | $exists: true |
notExists | Not Exists | $exists: false |
Category 3: Inline Editing
Direct document modification in the table
Feature: Editable Cells
| Property | Details |
|---|---|
| ID | editable-cells |
| Status | Implemented |
| Priority | High |
Description: Click-to-edit functionality for table cells with automatic type detection, enum dropdowns, boolean toggles, and keyboard shortcuts for saving/canceling.
User Story: As a developer, I want to edit values directly in the table so that I can make quick fixes without opening forms.
Acceptance Criteria:
- [x] Click to enter edit mode
- [x] Type-appropriate input controls
- [x] Enum fields show dropdown selector
- [x] Boolean fields show toggle switch
- [x] Enter to save, Escape to cancel
- [x] Visual feedback during save
- [x] System fields (id, createdAt, etc.) are read-only
Implementation:
| Component | Path | Purpose |
|---|---|---|
| EditableCell | src/components/DataTable.tsx | Inline cell editor |
| DataTable | src/components/DataTable.tsx | Edit coordination |
Feature: Content Modal
| Property | Details |
|---|---|
| ID | content-modal |
| Status | Implemented |
| Priority | Medium |
Description: Modal dialog for viewing full content of large text fields or complex object/array values that cannot be displayed inline.
User Story: As a developer, I want to view full content of large fields so that I can inspect complex data.
Acceptance Criteria:
- [x] Expand icon on truncated content
- [x] Modal shows formatted JSON for objects
- [x] Modal shows full text for strings
- [x] Scrollable content area
Implementation:
| Component | Path | Purpose |
|---|---|---|
| DataTable | src/components/DataTable.tsx | Modal integration |
| Dialog | src/components/ui/dialog.tsx | Modal UI |
Category 4: Document Management
Create, update, and delete operations
Feature: Document Form Modal
| Property | Details |
|---|---|
| ID | document-form |
| Status | Implemented |
| Priority | High |
Description: Schema-driven form for creating and editing documents using react-jsonschema-form. Automatically generates form fields from collection schemas with appropriate widgets.
User Story: As a developer, I want to create documents through a form so that I can add valid data to collections.
Acceptance Criteria:
- [x] Auto-generate form from collection schema
- [x] Custom widgets for text, textarea, select, checkbox
- [x] Collection reference fields show related documents
- [x] Tag array fields with add/remove functionality
- [x] System fields auto-populated (id, timestamps)
- [x] Validation based on schema
- [x] Create and edit modes
Implementation:
| Component | Path | Purpose |
|---|---|---|
| DocumentFormModal | src/components/DocumentFormModal.tsx | Form modal |
| useCollectionOptions | src/components/DocumentFormModal.tsx | Related collection loading |
Feature: Document Deletion
| Property | Details |
|---|---|
| ID | document-delete |
| Status | Implemented |
| Priority | High |
Description: Single and batch document deletion with confirmation dialogs. Selected documents show in a floating toolbar with delete action.
User Story: As a developer, I want to delete documents so that I can clean up test data.
Acceptance Criteria:
- [x] Delete button on each row
- [x] Confirmation dialog before delete
- [x] Row selection for batch operations
- [x] Floating toolbar shows selection count
- [x] Batch delete with single confirmation
- [x] Clear selection after delete
Implementation:
| Component | Path | Purpose |
|---|---|---|
| DataTable | src/components/DataTable.tsx | Delete UI |
| CollectionsPage | src/pages/CollectionsPage.tsx | Delete handlers |
Category 5: Connection Management
Database connection configuration
Feature: Connection Mode Toggle
| Property | Details |
|---|---|
| ID | connection-mode |
| Status | Implemented |
| Priority | High |
Description: Toggle between local database mode (direct RxDB access with replication) and REST API mode (remote server connection) from the navbar.
User Story: As a developer, I want to switch between local and remote databases so that I can work with different data sources.
Acceptance Criteria:
- [x] Mode toggle in navbar
- [x] Local mode uses app framework database
- [x] REST mode uses configured server
- [x] Visual indicator of current mode
- [x] Error handling for unavailable modes
Implementation:
| Component | Path | Purpose |
|---|---|---|
| Navbar | src/components/Navbar.tsx | Mode toggle UI |
| DataBrowserModeContext | src/contexts/DataBrowserModeContext.tsx | Mode state |
| useRxDB | src/hooks/useRxDB.ts | Mode-aware service creation |
Feature: Server Management
| Property | Details |
|---|---|
| ID | server-management |
| Status | Implemented |
| Priority | High |
Description: Server configuration page for managing RxDB server connections. Supports multiple servers with one active at a time.
User Story: As a developer, I want to manage server configurations so that I can connect to different RxDB instances.
Acceptance Criteria:
- [x] Add new server configuration
- [x] Edit existing server settings
- [x] Delete server configurations
- [x] Set active server (star icon)
- [x] Display server details in table
- [x] Validation of server configuration
Implementation:
| Component | Path | Purpose |
|---|---|---|
| ServersPage | src/pages/ServersPage.tsx | Server management |
| ServerConfigDialog | Framework component | Server form |
| useServerConfig | Framework hook | Server state |
Routes:
/servers- Server management
Capabilities
Core Capabilities
| Capability | Description | Implementation |
|---|---|---|
| Collection Browsing | View and navigate all collections | Sidebar with collection list |
| Advanced Querying | Filter with multiple conditions | Filter bar with RxDB selectors |
| Inline Editing | Edit cells directly in table | Type-aware editable cells |
| Document CRUD | Full create/read/update/delete | Schema-driven forms |
| Dual Connections | Local or REST API access | Mode toggle with service abstraction |
Technical Capabilities
| Capability | Status | Notes |
|---|---|---|
| CRUD Operations | Yes | Full CRUD on all collections |
| Real-time Updates | Partial | Manual refresh after edits |
| Offline Support | Yes | Via local mode with replication |
| Search & Filter | Yes | Multiple filter conditions |
| Sorting | Yes | Column header sorting |
| Pagination | Yes | Server-side with configurable page size |
| Export | No | Not currently implemented |
| Import | No | Not currently implemented |
Integration Capabilities
| Integration | Type | Description |
|---|---|---|
| FlowState Framework | internal | Auth, database, layout |
| FlowState Collections | internal | Schema definitions |
| RxDB Server | internal | REST API communication |
Data Models
Service Types
| Service | Mode | Description |
|---|---|---|
RxDBService | REST | HTTP client for RxDB REST API |
LocalRxDBService | Local | Direct RxDB database access |
Server Configuration
ServerConfig
├── id: string
├── name: string
├── url: string
├── token: string
├── domainId: string
├── userId: string
├── orgId: string
└── isActive: boolean
Query Options
QueryOptions
├── selector?: Record<string, any> # RxDB query selector
├── limit?: number # Max results
├── skip?: number # Offset for pagination
└── sort?: Array<{field: direction}> # Sort criteria
Key Data Flows
User Action --> Component --> Hook --> Service --> Database/API
|
+--> Local (RxDB)
|
+--> REST (HTTP)
User Workflows
Workflow 1: Browse and Filter Data
Find specific records in a collection
Trigger: Navigate to Collections page
Steps:
| Step | Action | Component | Outcome |
|---|---|---|---|
| 1 | Select collection | Sidebar | Collection data loads |
| 2 | Click "Add Filter" | FilterBar | Filter row appears |
| 3 | Select field | FilterBar | Field dropdown |
| 4 | Choose operator | FilterBar | Operator dropdown |
| 5 | Enter value | FilterBar | Value input/dropdown |
| 6 | View results | DataTable | Filtered data shown |
Success Outcome: Matching records displayed in table Failure Handling: Error message if query fails
Workflow 2: Edit Document Inline
Quick edit a field value
Trigger: Click on editable cell
Steps:
| Step | Action | Component | Outcome |
|---|---|---|---|
| 1 | Click cell | DataTable | Edit mode activates |
| 2 | Modify value | EditableCell | Input/select shown |
| 3 | Press Enter | EditableCell | Value saved |
| 4 | Data refreshes | DataTable | Updated value shown |
Success Outcome: Document updated, change visible Failure Handling: Error shown, original value restored
Workflow 3: Create New Document
Add a record to a collection
Trigger: Click "Add New" button
Steps:
| Step | Action | Component | Outcome |
|---|---|---|---|
| 1 | Click Add New | CollectionsPage | Form modal opens |
| 2 | Fill form fields | DocumentFormModal | Schema-driven form |
| 3 | Click Save | DocumentFormModal | Document created |
| 4 | Modal closes | CollectionsPage | Data refreshes |
Success Outcome: New document in collection Failure Handling: Validation errors displayed
Workflow 4: Configure REST Server
Set up remote database connection
Trigger: Navigate to Servers page
Steps:
| Step | Action | Component | Outcome |
|---|---|---|---|
| 1 | Click Add Server | ServersPage | Dialog opens |
| 2 | Enter server details | ServerConfigDialog | Form filled |
| 3 | Save configuration | ServerConfigDialog | Server added |
| 4 | Set as active | ServersPage | Star icon clicked |
| 5 | Switch to REST mode | Navbar | Mode toggled |
Success Outcome: Connected to remote server Failure Handling: Connection error displayed
Integration Points
Internal Integrations
| Integration | Package | Purpose |
|---|---|---|
| FlowState Framework | @epicdm/flowstate-app-framework | App container, auth, database |
| Collections | @epicdm/flowstate-collections | Schema definitions |
| UI Components | @epicdm/flowstate-ui | Shared UI components |
External Integrations
| Integration | Type | Configuration |
|---|---|---|
| TanStack Table | Library | Data table functionality |
| react-jsonschema-form | Library | Schema-driven forms |
| Lucide React | Library | Icon components |
Commands & Keybindings
Registered Commands
| Command ID | Title | Category |
|---|---|---|
dataBrowser.browse | Browse Collections | Data Browser |
dataBrowser.query | Query Data | Data Browser |
dataBrowser.export | Export Data | Data Browser |
dataBrowser.import | Import Data | Data Browser |
dataBrowser.refresh | Refresh Data | Data Browser |
dataBrowser.filter | Filter Results | Data Browser |
Keybindings
| Command | Windows/Linux | macOS | Context |
|---|---|---|---|
| Refresh Data | Ctrl+R | Cmd+R | activeApp == dataBrowser |
| Filter Results | Ctrl+F | Cmd+F | activeApp == dataBrowser |
| Query Data | Ctrl+Q | Cmd+Q | activeApp == dataBrowser |
Architecture Summary
Directory Structure
src/
├── components/ # UI components
│ ├── ui/ # Base UI components (button, input, dialog)
│ ├── DataTable.tsx # Main data table with editing
│ ├── FilterBar.tsx # Filter builder UI
│ ├── DocumentFormModal.tsx # Schema-driven form
│ └── Navbar.tsx # App navigation
├── contexts/ # React contexts
│ └── DataBrowserModeContext.tsx # Connection mode state
├── hooks/ # Custom React hooks
│ └── useRxDB.ts # Database hooks
├── lib/ # Utility libraries
│ ├── utils.ts # General utilities
│ └── cellEditors.ts # Cell editor utilities
├── pages/ # Page components
│ ├── CollectionsPage.tsx # Main collection browser
│ └── ServersPage.tsx # Server management
├── services/ # Business logic services
│ └── rxdb.ts # RxDB service classes
├── types.ts # TypeScript definitions
├── plugin.ts # FlowState plugin registration
├── App.tsx # Main app with routing
├── DataBrowserApp.tsx # App wrapper
├── index.ts # Package exports
└── standalone.tsx # Standalone entry
Key Architectural Patterns
| Pattern | Usage | Example |
|---|---|---|
| Service Abstraction | Dual connection modes | RxDBService / LocalRxDBService |
| Context + Hook | State management | DataBrowserModeContext + useRxDB |
| Schema-Driven UI | Form generation | DocumentFormModal with rjsf |
| Component Composition | Reusable UI | DataTable with EditableCell |
Services Overview
| Service | Responsibility | Key Methods |
|---|---|---|
RxDBService | REST API communication | query(), createDocument(), updateDocument() |
LocalRxDBService | Local database access | query(), createDocument(), updateDocument() |
Hooks Overview
| Hook | Purpose | Returns |
|---|---|---|
useRxDB | Service creation | { service, mode, error, testConnection } |
useCollections | Load collection list | { collections, isLoading, refresh } |
useCollectionData | Query collection data | { data, isLoading, error, refresh } |
useDataBrowserMode | Connection mode state | { preferredMode, toggleMode } |
Appendix
Related Documentation
| Document | Location | Purpose |
|---|---|---|
| FLOWSTATE.md | .flowstate/docs/FLOWSTATE.md | Development workflow |
| TDD.md | .flowstate/steering/TDD.md | Testing standards |
| QUALITY.md | .flowstate/steering/QUALITY.md | Code quality |
Version History
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0.0 | 2026-01-22 | Claude | Initial documentation |