- 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>
78 lines
2.5 KiB
Dart
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),
|
|
),
|
|
];
|
|
}
|