diff --git a/src/aiidalab_qe/app/configuration/workflow.py b/src/aiidalab_qe/app/configuration/workflow.py index 6a34f727f..9fc2f0159 100644 --- a/src/aiidalab_qe/app/configuration/workflow.py +++ b/src/aiidalab_qe/app/configuration/workflow.py @@ -89,6 +89,7 @@ def __init__(self, **kwargs): value="moderate", ) self.properties = {} + self.reminder_info = {} self.property_children = [ self.properties_title, ipw.HTML("Select which properties to calculate:"), @@ -97,22 +98,24 @@ def __init__(self, **kwargs): setting_entries = get_entry_items("aiidalab_qe.properties", "setting") for name, entry_point in entries.items(): self.properties[name] = entry_point() - if name in setting_entries: - reminder_text = ipw.HTML() + self.reminder_info[name] = ipw.HTML() self.property_children.append( - ipw.HBox([self.properties[name], reminder_text]) + ipw.HBox([self.properties[name], self.reminder_info[name]]) ) # observer change to update the reminder text - def update_reminder_text(change, reminder_text=reminder_text, name=name): + def update_reminder_info(change, name=name): if change["new"]: - reminder_text.value = ( + self.reminder_info[ + name + ].value = ( f"""Customize {name} settings in the panel above if needed.""" ) else: - reminder_text.value = "" + self.reminder_info[name].value = "" - self.properties[name].run.observe(update_reminder_text, "value") + if name in setting_entries: + self.properties[name].run.observe(update_reminder_info, "value") self.property_children.append(self.properties_help) self.children = [ diff --git a/tests/test_configure.py b/tests/test_configure.py index 5f6135e4f..0af35c976 100644 --- a/tests/test_configure.py +++ b/tests/test_configure.py @@ -59,3 +59,25 @@ def test_panel(): assert len(wg.tab.children) == 3 parameters = wg.get_configuration_parameters() assert "bands" in parameters + + +def test_reminder_info(): + """Dynamic add/remove the reminder text based on the workchain settings.""" + from aiidalab_qe.app.configuration import ConfigureQeAppWorkChainStep + + wg = ConfigureQeAppWorkChainStep() + assert wg.workchain_settings.reminder_info["bands"].value == "" + # select bands + wg.workchain_settings.properties["bands"].run.value = True + for name in wg.workchain_settings.reminder_info: + if name == "bands": + assert ( + wg.workchain_settings.reminder_info["bands"].value + == "Customize bands settings in the panel above if needed." + ) + else: + # all other reminder texts should be empty + assert wg.workchain_settings.reminder_info[name].value == "" + # unselect bands + wg.workchain_settings.properties["bands"].run.value = False + assert wg.workchain_settings.reminder_info["bands"].value == ""