Change PreviewResult to hold a list of message-level pairs
PreviewResult.messages is now list[tuple[str, MsgLevelType]], allowing a single result to carry multiple sections with different levels. The preview_action signature drops list[PreviewResult] since the dataclass itself handles multiple sections. Existing str-returning previews still work and will be converted in follow-up PRs.
This commit is contained in:
parent
139bd105e6
commit
a44edabf2f
|
|
@ -502,12 +502,12 @@ class GlobalMenu(AbstractMenu[None]):
|
|||
|
||||
return warnings
|
||||
|
||||
def _prev_install_invalid_config(self, item: MenuItem) -> str | PreviewResult | list[PreviewResult] | None:
|
||||
def _prev_install_invalid_config(self, item: MenuItem) -> PreviewResult | None:
|
||||
self.sync_all_to_config()
|
||||
config_output = ConfigurationOutput(self._arch_config)
|
||||
|
||||
warnings = self._get_install_warnings()
|
||||
sections: list[PreviewResult] = []
|
||||
messages: list[tuple[str, MsgLevelType]] = []
|
||||
|
||||
errors = ''
|
||||
if missing := self._missing_configs():
|
||||
|
|
@ -522,20 +522,20 @@ class GlobalMenu(AbstractMenu[None]):
|
|||
errors += f'{tr("Invalid configuration:")}\n- {error}'
|
||||
|
||||
if errors:
|
||||
sections.append(PreviewResult(errors, MsgLevelType.MsgError))
|
||||
messages.append((errors, MsgLevelType.MsgError))
|
||||
else:
|
||||
sections.append(PreviewResult(tr('Ready to install'), MsgLevelType.MsgInfo))
|
||||
messages.append((tr('Ready to install'), MsgLevelType.MsgInfo))
|
||||
|
||||
if warnings:
|
||||
text = f'{tr("Warnings:")}\n' + '\n'.join(f'- {w}' for w in warnings)
|
||||
sections.append(PreviewResult(text, MsgLevelType.MsgWarning))
|
||||
messages.append((text, MsgLevelType.MsgWarning))
|
||||
|
||||
if not errors:
|
||||
summary = config_output.as_summary()
|
||||
if summary:
|
||||
sections.append(PreviewResult(summary, MsgLevelType.MsgNone))
|
||||
messages.append((summary, MsgLevelType.MsgNone))
|
||||
|
||||
return sections
|
||||
return PreviewResult(messages)
|
||||
|
||||
def _prev_profile(self, item: MenuItem) -> str | None:
|
||||
profile_config: ProfileConfiguration | None = item.value
|
||||
|
|
|
|||
|
|
@ -27,22 +27,19 @@ from archinstall.tui.result import Result, ResultType
|
|||
ValueT = TypeVar('ValueT')
|
||||
|
||||
|
||||
def _update_preview(widget: Label, result: str | PreviewResult | list[PreviewResult] | None) -> None:
|
||||
def _update_preview(widget: Label, result: str | PreviewResult | None) -> None:
|
||||
if result is None:
|
||||
widget.update('')
|
||||
return
|
||||
|
||||
if isinstance(result, str):
|
||||
widget.update(result)
|
||||
elif isinstance(result, PreviewResult):
|
||||
text = Text(result.message, style=result.msg_level.style())
|
||||
widget.update(text)
|
||||
else:
|
||||
text = Text()
|
||||
for i, section in enumerate(result):
|
||||
for i, (message, level) in enumerate(result.messages):
|
||||
if i > 0:
|
||||
text.append('\n\n')
|
||||
text.append(section.message, style=section.msg_level.style())
|
||||
text.append(message, style=level.style())
|
||||
widget.update(text)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@ class MsgLevelType(Enum):
|
|||
|
||||
@dataclass
|
||||
class PreviewResult:
|
||||
message: str
|
||||
msg_level: MsgLevelType
|
||||
messages: list[tuple[str, MsgLevelType]]
|
||||
|
||||
|
||||
@dataclass
|
||||
|
|
@ -44,7 +43,7 @@ class MenuItem:
|
|||
dependencies: list[str | Callable[[], bool]] = field(default_factory=list)
|
||||
dependencies_not: list[str] = field(default_factory=list)
|
||||
display_action: Callable[[Any], str] | None = None
|
||||
preview_action: Callable[[Self], str | PreviewResult | list[PreviewResult] | None] | None = None
|
||||
preview_action: Callable[[Self], str | PreviewResult | None] | None = None
|
||||
key: str | None = None
|
||||
|
||||
_id: str = ''
|
||||
|
|
|
|||
Loading…
Reference in New Issue