bind settings methods to class

This commit is contained in:
Natan Keddem
2024-05-12 14:15:52 -04:00
parent edc5987293
commit bba6410bbd

View File

@ -14,10 +14,9 @@ class Setting(Tab):
super().__init__(answer, type=type) super().__init__(answer, type=type)
def _build(self): def _build(self):
self.key_picker() self.keys_controls()
def key_picker(self): def keys_controls(self):
def keys_controls():
with ui.column() as col: with ui.column() as col:
col.tailwind.width("[560px]").align_items("center") col.tailwind.width("[560px]").align_items("center")
with ui.card() as card: with ui.card() as card:
@ -29,11 +28,11 @@ class Setting(Tab):
with ui.row() as row: with ui.row() as row:
row.tailwind.align_items("center") row.tailwind.align_items("center")
self.help = None self.help = None
key = el.FInput(label="key", on_change=lambda e: key_changed(e), read_only=True) key = el.FInput(label="key", on_change=lambda e: self.key_changed(e.value), read_only=True)
key.bind_value_from(key_select) key.bind_value_from(key_select)
with ui.button(icon="help"): with ui.button(icon="help"):
self.help = ui.tooltip("NA") self.help = ui.tooltip("NA")
ui.button(icon="add", on_click=lambda key=key: add_key(key.value)) ui.button(icon="add", on_click=lambda key=key: self.add_key(key.value))
ui.separator() ui.separator()
self._scroll = ui.scroll_area() self._scroll = ui.scroll_area()
self._scroll.tailwind.width("full").height("[480px]") self._scroll.tailwind.width("full").height("[480px]")
@ -41,12 +40,12 @@ class Setting(Tab):
if self.type is not None and self.type in items: if self.type is not None and self.type in items:
for key, value in items[self.type].items(): for key, value in items[self.type].items():
if isinstance(value, list): if isinstance(value, list):
add_key(key, "[" + ",".join(str(v) for v in value) + "]") self.add_key(key, "[" + ",".join(str(v) for v in value) + "]")
else: else:
add_key(key, str(value)) self.add_key(key, str(value))
def add_key(key: str, value: str = ""): def add_key(self, key: str, value: str = ""):
if key is not None and key != "" and key not in self._elements.keys(): if self.key_valid(key) is True:
with self._scroll: with self._scroll:
with ui.row() as key_row: with ui.row() as key_row:
key_row.tailwind.width("full").align_items("center").justify_content("between") key_row.tailwind.width("full").align_items("center").justify_content("between")
@ -57,7 +56,7 @@ class Setting(Tab):
key, key,
password=True if key == "root_password" else False, password=True if key == "root_password" else False,
autocomplete=self.keys[key]["options"] if key in self.keys and "options" in self.keys[key] else None, autocomplete=self.keys[key]["options"] if key in self.keys and "options" in self.keys[key] else None,
on_change=lambda e, key=key: set_key(key, e.value), on_change=lambda e, key=key: self.set_key(key, e.value),
), ),
"row": key_row, "row": key_row,
} }
@ -65,16 +64,21 @@ class Setting(Tab):
if key in self.keys: if key in self.keys:
with ui.button(icon="help"): with ui.button(icon="help"):
ui.tooltip(self.keys[key]["description"]) ui.tooltip(self.keys[key]["description"])
ui.button(icon="remove", on_click=lambda _, key=key: remove_key(key)) ui.button(icon="remove", on_click=lambda _, key=key: self.remove_key(key))
def remove_key(key): def key_valid(self, key: str) -> bool:
if key is not None and key != "" and key not in self._elements.keys():
return True
return False
def remove_key(self, key: str):
self._scroll.remove(self._elements[key]["row"]) self._scroll.remove(self._elements[key]["row"])
del self._elements[key] del self._elements[key]
if key in storage.answer(self.answer)[self.type]: if key in storage.answer(self.answer)[self.type]:
del storage.answer(self.answer)[self.type][key] del storage.answer(self.answer)[self.type][key]
def set_key(key, value: str): def set_key(self, key: str, value: str):
v: Any = None v: Any = ""
if len(value) > 0: if len(value) > 0:
if key in self.keys and "type" in self.keys[key]: if key in self.keys and "type" in self.keys[key]:
if self.keys[key]["type"] == "list": if self.keys[key]["type"] == "list":
@ -94,15 +98,13 @@ class Setting(Tab):
storage.answer(self.answer)[self.type] = {} storage.answer(self.answer)[self.type] = {}
storage.answer(self.answer)[self.type][key] = v storage.answer(self.answer)[self.type][key] = v
def key_changed(e): def key_changed(self, value: str):
if self.help is not None: if self.help is not None:
if e.value in self.keys: if value in self.keys:
self.help.text = self.keys[e.value]["description"] self.help.text = self.keys[value]["description"]
else: else:
self.help.text = "NA" self.help.text = "NA"
keys_controls()
class Global(Setting): class Global(Setting):
def __init__(self, answer: str) -> None: def __init__(self, answer: str) -> None: