44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Any, Callable
|
|
|
|
from nicegui import Client, background_tasks
|
|
from nicegui.element import Element
|
|
from nicegui.functions.navigate import Navigate
|
|
|
|
if TYPE_CHECKING:
|
|
from .user import User
|
|
|
|
|
|
class UserNavigate(Navigate):
|
|
|
|
def __init__(self, user: User) -> None:
|
|
super().__init__()
|
|
self.user = user
|
|
|
|
def to(self, target: Callable[..., Any] | str | Element, new_tab: bool = False) -> None:
|
|
if isinstance(target, Element):
|
|
# NOTE navigation to an element does not do anything in the user simulation (the whole content is always visible)
|
|
return
|
|
path = Client.page_routes[target] if callable(target) else target
|
|
background_tasks.create(self.user.open(path), name=f'navigate to {path}')
|
|
|
|
def back(self) -> None:
|
|
current = self.user.back_history.pop()
|
|
self.user.forward_history.append(current)
|
|
target = self.user.back_history.pop()
|
|
background_tasks.create(self.user.open(target, clear_forward_history=False), name=f'navigate back to {target}')
|
|
|
|
def forward(self) -> None:
|
|
if not self.user.forward_history:
|
|
return
|
|
target = self.user.forward_history[0]
|
|
del self.user.forward_history[0]
|
|
background_tasks.create(self.user.open(target, clear_forward_history=False),
|
|
name=f'navigate forward to {target}')
|
|
|
|
def reload(self) -> None:
|
|
target = self.user.back_history.pop()
|
|
background_tasks.create(self.user.open(target, clear_forward_history=False),
|
|
name=f'navigate reload to {target}')
|