You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
1 month ago
|
from __future__ import annotations
|
||
|
|
||
|
from dataclasses import KW_ONLY, field
|
||
|
from typing import * # type: ignore
|
||
|
|
||
|
import rio
|
||
|
|
||
|
from .. import components as comps
|
||
|
|
||
|
class RootPage(rio.Component):
|
||
|
"""
|
||
|
This page will be used as the root component for the app. This means, that
|
||
|
it will always be visible, regardless of which page is currently active.
|
||
|
|
||
|
This makes it the perfect place to put components that should be visible on
|
||
|
all pages, such as a navbar or a footer.
|
||
|
|
||
|
Additionally, the root page will contain a `rio.PageView`. Page views don't
|
||
|
have any appearance on their own, but they are used to display the content
|
||
|
of the currently active page. Thus, we'll always see the navbar and footer,
|
||
|
with the content of the current page in between.
|
||
|
"""
|
||
|
|
||
|
def build(self) -> rio.Component:
|
||
|
return rio.Column(
|
||
|
# The navbar contains a `rio.Overlay`, so it will always be on top
|
||
|
# of all other components.
|
||
|
comps.Navbar(),
|
||
|
# Add some empty space so the navbar doesn't cover the content.
|
||
|
rio.Spacer(height=10),
|
||
|
# The page view will display the content of the current page.
|
||
|
rio.PageView(
|
||
|
# Make sure the page view takes up all available space.
|
||
|
height="grow",
|
||
|
),
|
||
|
# The footer is also common to all pages, so place it here.
|
||
|
comps.Footer(),
|
||
|
)
|
||
|
|