feat: add Control Room with containers and stacks management
- Add Control Room page with stacks sidebar and containers list - Implement container actions (start/stop/restart) with snackbars - Add container logs viewer dialog - Add search/filter for both stacks and containers lists - Add external links for Portainer and Netdata (url_launcher) - Add VS Code launch configuration for Flutter web debugging 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.5
parent
dd6bcbdbda
commit
3b89ed8c18
@@ -0,0 +1,85 @@
|
||||
/// DataGrid component for displaying tabular data.
|
||||
///
|
||||
/// This library provides a configurable, feature-rich data grid widget
|
||||
/// for Flutter applications using Riverpod for state management.
|
||||
///
|
||||
/// Features:
|
||||
/// - Sortable columns
|
||||
/// - Row selection (single and bulk)
|
||||
/// - Per-row and bulk actions with confirmations
|
||||
/// - Search/filtering
|
||||
/// - Pagination or infinite scroll
|
||||
/// - Custom cell rendering
|
||||
/// - Empty, loading, and error states
|
||||
/// - Responsive column widths
|
||||
///
|
||||
/// Example:
|
||||
/// ```dart
|
||||
/// // Define your data source
|
||||
/// final usersSource = InMemoryDataSource<User>(
|
||||
/// items: users,
|
||||
/// searchMatcher: (user, query) =>
|
||||
/// user.name.toLowerCase().contains(query.toLowerCase()),
|
||||
/// );
|
||||
///
|
||||
/// // Define grid configuration
|
||||
/// final usersConfig = DataGridConfig<User>(
|
||||
/// columns: [
|
||||
/// DataGridColumn(
|
||||
/// header: 'Name',
|
||||
/// valueBuilder: (u) => u.name,
|
||||
/// sortable: true,
|
||||
/// searchable: true,
|
||||
/// ),
|
||||
/// DataGridColumn(
|
||||
/// header: 'Email',
|
||||
/// valueBuilder: (u) => u.email,
|
||||
/// ),
|
||||
/// DataGridColumn(
|
||||
/// header: 'Status',
|
||||
/// valueBuilder: (u) => u.status,
|
||||
/// cellBuilder: (context, u) => StatusBadge(status: u.status),
|
||||
/// ),
|
||||
/// ],
|
||||
/// actions: [
|
||||
/// DataGridAction(
|
||||
/// icon: Icons.edit,
|
||||
/// label: 'Edit',
|
||||
/// onTap: (user) async => editUser(user),
|
||||
/// ),
|
||||
/// DataGridAction(
|
||||
/// icon: Icons.delete,
|
||||
/// label: 'Delete',
|
||||
/// onTap: (user) async => deleteUser(user),
|
||||
/// destructive: true,
|
||||
/// requiresConfirmation: true,
|
||||
/// ),
|
||||
/// ],
|
||||
/// rowsSelectable: true,
|
||||
/// enableSearch: true,
|
||||
/// );
|
||||
///
|
||||
/// // Create the provider
|
||||
/// final usersGridProvider = dataGridProvider<User>(
|
||||
/// source: usersSource,
|
||||
/// config: usersConfig,
|
||||
/// idSelector: (u) => u.id,
|
||||
/// );
|
||||
///
|
||||
/// // Use in widget
|
||||
/// DataGrid<User>(
|
||||
/// provider: usersGridProvider,
|
||||
/// config: usersConfig,
|
||||
/// idSelector: (u) => u.id,
|
||||
/// )
|
||||
/// ```
|
||||
library;
|
||||
|
||||
export 'data_grid.dart';
|
||||
export 'data_grid_action.dart';
|
||||
export 'data_grid_column.dart';
|
||||
export 'data_grid_config.dart';
|
||||
export 'data_grid_provider.dart';
|
||||
export 'data_grid_source.dart';
|
||||
export 'data_grid_state.dart';
|
||||
export 'widgets/data_grid_empty_state.dart';
|
||||
Reference in New Issue
Block a user