package navigation import ( "git.flowmade.one/flowmade-one/iris/reactive" "git.flowmade.one/flowmade-one/iris/ui" ) var globalRouter *Router var globalHistory *HistoryManager func SetGlobalRouter(router *Router) { globalRouter = router globalHistory = NewHistoryManager(router) globalHistory.Start() } func GetGlobalRouter() *Router { return globalRouter } // RouterView renders the current route's view func RouterView() ui.View { if globalRouter == nil { return ui.TextFromString("Router not initialized").Color("#ff4444") } // Create a view that updates when the route changes view := ui.NewView() reactive.NewEffect(func() { currentView := globalRouter.GetCurrentView() // Clear previous content and add new view // Note: This is a simplified approach - in a real implementation // we'd need better DOM diffing view = currentView }) return view } // Link creates a navigational link that updates the route func Link(path string, content ui.View) ui.View { if globalHistory == nil { return content } // Create a simple clickable element that navigates with proper styling for horizontal layout button := ui.Button(func() { globalHistory.PushState(path) }, content) // Style the button to look like a link and work in horizontal layouts return button.Padding("8px 12px").Background("transparent").Border("none") } // Navigate programmatically navigates to a path func Navigate(path string) { if globalHistory != nil { globalHistory.PushState(path) } } // Replace programmatically replaces current path func Replace(path string) { if globalHistory != nil { globalHistory.ReplaceState(path) } } // Back navigates back in history func Back() { if globalHistory != nil { globalHistory.Back() } } // Forward navigates forward in history func Forward() { if globalHistory != nil { globalHistory.Forward() } } // GetCurrentPath returns the current route path func GetCurrentPath() string { if globalRouter != nil { return globalRouter.GetCurrentPath() } return "" }