feat(front-hall): implement three-mode layout with quick links panel
Phase 2 of Organizr Migration - Front Hall restructure: - Add FrontHallState provider with three modes (dashboard, iframe, settings) - Create QuickLinksPanel widget with categorized links and overflow menus - Add IframeView with platform-aware implementation (web iframe, mobile fallback) - Extract DashboardContent from FrontHallPage - Add QuickLinkSettingsContent placeholder for Phase 4 link editor - Implement QuickLink entity and data layer with Core API datasource - Add default quick links fallback when API unavailable - Update UI_LAYOUT.md with Front Hall panel configurations 🤖 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
4f8d0f521f
commit
40db92d9d5
@@ -0,0 +1,53 @@
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
part 'quick_link.freezed.dart';
|
||||
|
||||
/// Quick link type for navigation behavior.
|
||||
enum QuickLinkType {
|
||||
/// Opens in embedded iframe within the app.
|
||||
iframe,
|
||||
|
||||
/// Opens in a new browser tab.
|
||||
newTab,
|
||||
}
|
||||
|
||||
/// Quick link entity for Front Hall navigation.
|
||||
///
|
||||
/// Represents a shortcut link that can either open embedded content
|
||||
/// in an iframe or navigate to an external URL in a new tab.
|
||||
@freezed
|
||||
sealed class QuickLink with _$QuickLink {
|
||||
const factory QuickLink({
|
||||
/// Unique identifier.
|
||||
required String id,
|
||||
|
||||
/// Display name.
|
||||
required String name,
|
||||
|
||||
/// Target URL.
|
||||
required String url,
|
||||
|
||||
/// Material icon name (e.g., 'home', 'settings', 'movie').
|
||||
required String iconName,
|
||||
|
||||
/// Category for grouping (e.g., 'Home', 'AMP', 'Coding', 'Infrastructure').
|
||||
String? category,
|
||||
|
||||
/// Navigation behavior type.
|
||||
@Default(QuickLinkType.iframe) QuickLinkType type,
|
||||
|
||||
/// Sort order within category.
|
||||
@Default(0) int sortOrder,
|
||||
|
||||
/// Whether the link is active/visible.
|
||||
@Default(true) bool isActive,
|
||||
}) = _QuickLink;
|
||||
|
||||
const QuickLink._();
|
||||
|
||||
/// Whether this link opens in an iframe.
|
||||
bool get isIframe => type == QuickLinkType.iframe;
|
||||
|
||||
/// Whether this link opens in a new tab.
|
||||
bool get isNewTab => type == QuickLinkType.newTab;
|
||||
}
|
||||
Reference in New Issue
Block a user