Fix 2916 - Reinstate prompt in list menus (#2940)

* Reinstate prompt in list menus

* Ruff
This commit is contained in:
Daniel Girtler 2024-11-26 21:10:48 +11:00 committed by GitHub
parent e51f7adf21
commit 198efb5f53
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 56 additions and 22 deletions

View File

@ -58,7 +58,12 @@ class PartitioningList(ListManager):
}
display_actions = list(self._actions.values())
super().__init__(prompt, device_partitions, display_actions[:2], display_actions[3:])
super().__init__(
device_partitions,
display_actions[:2],
display_actions[3:],
prompt
)
@override
def selected_action_display(self, selection: PartitionModification) -> str:
@ -186,8 +191,8 @@ class PartitioningList(ListManager):
def _set_btrfs_subvolumes(self, partition: PartitionModification) -> None:
partition.btrfs_subvols = SubvolumeMenu(
str(_("Manage btrfs subvolumes for current partition")),
partition.btrfs_subvols
partition.btrfs_subvols,
None
).run()
def _prompt_formatting(self, partition: PartitionModification) -> None:

View File

@ -16,13 +16,23 @@ if TYPE_CHECKING:
class SubvolumeMenu(ListManager):
def __init__(self, prompt: str, btrfs_subvols: list[SubvolumeModification]):
def __init__(
self,
btrfs_subvols: list[SubvolumeModification],
prompt: str | None = None
):
self._actions = [
str(_('Add subvolume')),
str(_('Edit subvolume')),
str(_('Delete subvolume'))
]
super().__init__(prompt, btrfs_subvols, [self._actions[0]], self._actions[1:])
super().__init__(
btrfs_subvols,
[self._actions[0]],
self._actions[1:],
prompt
)
@override
def selected_action_display(self, selection: SubvolumeModification) -> str:

View File

@ -26,7 +26,13 @@ class UserList(ListManager):
str(_('Promote/Demote user')),
str(_('Delete User'))
]
super().__init__(prompt, lusers, [self._actions[0]], self._actions[1:])
super().__init__(
lusers,
[self._actions[0]],
self._actions[1:],
prompt
)
@override
def selected_action_display(self, selection: User) -> str:

View File

@ -24,7 +24,13 @@ class ManualNetworkConfig(ListManager):
str(_('Edit interface')),
str(_('Delete interface'))
]
super().__init__(prompt, preset, [self._actions[0]], self._actions[1:])
super().__init__(
preset,
[self._actions[0]],
self._actions[1:],
prompt
)
@override
def selected_action_display(self, selection: Nic) -> str:

View File

@ -16,10 +16,10 @@ if TYPE_CHECKING:
class ListManager:
def __init__(
self,
prompt: str,
entries: list[Any],
base_actions: list[str],
sub_menu_actions: list[str]
sub_menu_actions: list[str],
prompt: str | None = None
):
"""
:param prompt: Text which will appear at the header
@ -38,8 +38,7 @@ class ListManager:
self._original_data = copy.deepcopy(entries)
self._data = copy.deepcopy(entries)
explainer = str(_('\n Choose an object from the list, and select one of the available actions for it to execute'))
self._prompt = prompt if prompt else explainer
self._prompt: str | None = prompt
self._separator = ''
self._confirm_action = str(_('Confirm and exit'))
@ -66,8 +65,12 @@ class ListManager:
# and the value is the original value from the self._data container
data_formatted = self.reformat(self._data)
options = self._prepare_selection(data_formatted)
header = self._get_header(data_formatted)
if self._prompt is not None:
header = f'{self._prompt}\n\n{header}'
items = [MenuItem(o[0], value=o[1]) for o in options]
group = MenuItemGroup(items, sort_items=False)
@ -76,7 +79,7 @@ class ListManager:
header=header,
search_enabled=False,
allow_skip=False,
alignment=Alignment.CENTER,
alignment=Alignment.CENTER
).run()
match result.type_:
@ -149,16 +152,19 @@ class ListManager:
Default implementation of the table to be displayed.
Override if any custom formatting is needed
"""
table = FormattedOutput.as_table(data)
rows = table.split('\n')
display_data: dict[str, Any | None] = {}
# these are the header rows of the table and do not map to any User obviously
# we're adding 2 spaces as prefix because the menu selector '> ' will be put before
# the selectable rows so the header has to be aligned
display_data: dict[str, Any | None] = {f'{rows[0]}': None, f'{rows[1]}': None}
if data:
table = FormattedOutput.as_table(data)
rows = table.split('\n')
for row, entry in zip(rows[2:], data):
display_data[row] = entry
# these are the header rows of the table and do not map to any User obviously
# we're adding 2 spaces as prefix because the menu selector '> ' will be put before
# the selectable rows so the header has to be aligned
display_data = {f'{rows[0]}': None, f'{rows[1]}': None}
for row, entry in zip(rows[2:], data):
display_data[row] = entry
return display_data

View File

@ -129,11 +129,12 @@ class CustomMirrorList(ListManager):
str(_('Change custom mirror')),
str(_('Delete custom mirror'))
]
super().__init__(
'',
custom_mirrors,
[self._actions[0]],
self._actions[1:]
self._actions[1:],
''
)
@override