Skip to content

Commit

Permalink
fixing different configuration option for navigation
Browse files Browse the repository at this point in the history
  • Loading branch information
nadijagraca committed Oct 27, 2023
1 parent 388a93b commit 656491a
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 10 deletions.
11 changes: 7 additions & 4 deletions vizro-core/src/vizro/models/_navigation/_navigation_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ def _validate_pages(pages):
from vizro.models import Page

pages_as_list = list(itertools.chain(*pages.values())) if isinstance(pages, dict) else pages

if not pages_as_list:
raise ValueError("Ensure this value has at least 1 item.")

# Ideally we would use dash.page_registry or maybe dashboard.pages here, but we only register pages in
# dashboard.pre_build and model manager cannot find a Dashboard at validation time.
# page[0] gives the page model ID.
registered_pages = [page[0] for page in model_manager._items_with_type(Page)]

if pages is None:
return registered_pages

if not pages_as_list:
raise ValueError("Ensure this value has at least 1 item.")

if unknown_pages := [page for page in pages_as_list if page not in registered_pages]:
raise ValueError(f"Unknown page ID {unknown_pages} provided to argument 'pages'.")
return pages
4 changes: 4 additions & 0 deletions vizro-core/src/vizro/models/_navigation/nav_bar.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

from vizro.models import VizroBaseModel
from vizro.models._models_utils import _log_call
from vizro.models._navigation._navigation_utils import _validate_pages
from vizro.models._navigation.nav_item import NavItem
from vizro.models.types import NavPagesType

Expand All @@ -24,6 +25,9 @@ class NavBar(VizroBaseModel):
pages: Optional[NavPagesType] = None
items: List[NavItem] = []

# validators
_validate_pages = validator("pages", allow_reuse=True, pre=True, always=True)(_validate_pages)

@validator("items", always=True)
def validate_items(cls, items, values):
if not items:
Expand Down
6 changes: 2 additions & 4 deletions vizro-core/src/vizro/models/_navigation/nav_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def pre_build(self):
if self.tooltip is None:
if self.text and len(self.text) > self.max_text_length:
self.tooltip = self.text
self.text = self.text[:self.max_text_length]
self.text = self.text[: self.max_text_length]

@validator("text", always=True)
def set_text(cls, text, values):
Expand All @@ -69,9 +69,7 @@ def build(self, active_page_id):
list(itertools.chain(*self.pages.values()))[0] if isinstance(self.pages, dict) else self.pages[0]
)
icon_div = (
html.Span(self.icon, className="material-symbols-outlined")
if self.icon
else html.Div(className="hidden")
html.Span(self.icon, className="material-symbols-outlined") if self.icon else html.Div(className="hidden")
)
text_div = html.Div(children=[self.text], className="icon-text") if self.text else html.Div(className="hidden")

Expand Down
4 changes: 2 additions & 2 deletions vizro-core/src/vizro/models/_navigation/navigation.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ class Navigation(VizroBaseModel):
selector: Optional[NavSelectorType] = None

# validators
_validate_pages = validator("pages", allow_reuse=True)(_validate_pages)
_validate_pages = validator("pages", allow_reuse=True, pre=True, always=True)(_validate_pages)

@validator("selector", pre=True, always=True)
@validator("selector", always=True)
def set_selector(cls, selector, values):
if selector is None:
return Accordion(pages=values.get("pages"))
Expand Down

0 comments on commit 656491a

Please sign in to comment.