Skip to content
Snippets Groups Projects

Refactor Cart into checkerboard table

Merged Mateusz Kudela requested to merge mkudela/issue-173 into develop
Compare and Show latest version
1 file
+ 36
19
Compare changes
  • Side-by-side
  • Inline
@@ -24,6 +24,13 @@ class CliveCheckerboardTableError(CliveDeveloperError):
pass
class InvalidContentUpdateError(CliveCheckerboardTableError):
_MESSAGE = "Cannot update cell with widget type. Use string only."
def __init__(self) -> None:
super().__init__(self._MESSAGE)
class InvalidDynamicDefinedError(CliveCheckerboardTableError):
_MESSAGE = """
You are trying to create a dynamic checkerboard table without overriding one of the mandatory properties or methods.
@@ -83,12 +90,22 @@ class CliveCheckerBoardTableCell(Container):
super().__init__(id=id_, classes=classes)
self._content = content
@property
def content(self) -> str | Widget:
return self._content
def compose(self) -> ComposeResult:
if isinstance(self._content, Widget):
yield self._content
else:
yield Static(self._content)
def update_content(self, content: str) -> None:
if isinstance(content, Widget):
raise InvalidContentUpdateError
self._content = content
self.query_one(Static).update(self._content)
class CliveCheckerboardTableRow(CliveWidget):
"""Row with checkerboard columns."""
@@ -216,7 +233,6 @@ class CliveCheckerboardTable(CliveWidget):
rows = self.create_dynamic_rows(content)
else:
rows = self.create_static_rows()
self._set_evenness_styles(rows)
if self._title is None:
@@ -272,15 +288,17 @@ class CliveCheckerboardTable(CliveWidget):
raise InvalidDynamicDefinedError
return True
def _set_evenness_styles(self, rows: Sequence[CliveCheckerboardTableRow]) -> None:
def _set_evenness_styles(self, rows: Sequence[CliveCheckerboardTableRow], starting_index: int = 0) -> None:
for row_index, row in enumerate(rows):
for cell_index, cell in enumerate(row.cells):
if not isinstance(cell, CliveCheckerBoardTableCell):
continue
is_even_row = row_index % 2 == 0
is_even_row = (row_index + starting_index) % 2 == 0
is_even_cell = cell_index % 2 == 0
cell.remove_class(EVEN_CLASS_NAME, ODD_CLASS_NAME)
if (is_even_row and is_even_cell) or (not is_even_row and not is_even_cell):
cell.add_class(EVEN_CLASS_NAME)
else:
Loading