Files
tatlock-ui/lib/features/control_room/router.dart
T
Jeroen SchweitzerandClaude Opus 4.5 b189c3518b feat: add Nav Panel with URL-routed section navigation
- Add NavPanel widget for room-level section navigation
- Add Control Room feature router with URL routes:
  - /control-room/containers
  - /control-room/networks
  - /control-room/volumes
  - /control-room/images
- Sections: Containers, Networks, Volumes, Images
- Navigation updates URL and vice versa (deep-linkable)
- Remove redundant Stacks section (handled by filter panel)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 16:28:01 +01:00

78 lines
2.5 KiB
Dart

import 'package:go_router/go_router.dart';
import 'package:tatlock_ui/features/control_room/presentation/pages/control_room_page.dart';
/// Route paths for Control Room.
abstract class ControlRoomRoutes {
static const base = '/control-room';
static const containers = '/control-room/containers';
static const networks = '/control-room/networks';
static const volumes = '/control-room/volumes';
static const images = '/control-room/images';
}
/// Control Room section from route.
ControlRoomSection? sectionFromPath(String path) {
if (path.startsWith(ControlRoomRoutes.networks)) {
return ControlRoomSection.networks;
} else if (path.startsWith(ControlRoomRoutes.volumes)) {
return ControlRoomSection.volumes;
} else if (path.startsWith(ControlRoomRoutes.images)) {
return ControlRoomSection.images;
} else if (path.startsWith(ControlRoomRoutes.containers) ||
path == ControlRoomRoutes.base) {
return ControlRoomSection.containers;
}
return null;
}
/// Get route path for a section.
String pathForSection(ControlRoomSection section) {
switch (section) {
case ControlRoomSection.containers:
return ControlRoomRoutes.containers;
case ControlRoomSection.networks:
return ControlRoomRoutes.networks;
case ControlRoomSection.volumes:
return ControlRoomRoutes.volumes;
case ControlRoomSection.images:
return ControlRoomRoutes.images;
}
}
/// Control Room routes for go_router.
List<RouteBase> controlRoomRoutes() {
return [
// Redirect /control-room to /control-room/containers
GoRoute(
path: ControlRoomRoutes.base,
name: 'controlRoom',
redirect: (context, state) => ControlRoomRoutes.containers,
),
// Section routes
GoRoute(
path: ControlRoomRoutes.containers,
name: 'controlRoomContainers',
builder: (context, state) =>
const ControlRoomPage(section: ControlRoomSection.containers),
),
GoRoute(
path: ControlRoomRoutes.networks,
name: 'controlRoomNetworks',
builder: (context, state) =>
const ControlRoomPage(section: ControlRoomSection.networks),
),
GoRoute(
path: ControlRoomRoutes.volumes,
name: 'controlRoomVolumes',
builder: (context, state) =>
const ControlRoomPage(section: ControlRoomSection.volumes),
),
GoRoute(
path: ControlRoomRoutes.images,
name: 'controlRoomImages',
builder: (context, state) =>
const ControlRoomPage(section: ControlRoomSection.images),
),
];
}