|
25 | 25 | from .helpers import device_list_from_string, host_valid
|
26 | 26 |
|
27 | 27 |
|
| 28 | +def generate_config_schema(step_id: str, user_input: dict[str, Any]) -> vol.Schema: |
| 29 | + """Generate config flow or repair schema.""" |
| 30 | + schema: dict[vol.Marker, Any] = {} |
| 31 | + |
| 32 | + if step_id == "user": |
| 33 | + schema |= {vol.Required(CONF_NAME, default=user_input[CONF_NAME]): cv.string} |
| 34 | + |
| 35 | + if step_id in ["reconfigure", "confirm", "user"]: |
| 36 | + schema |= { |
| 37 | + vol.Required(CONF_HOST, default=user_input[CONF_HOST]): cv.string, |
| 38 | + vol.Required(CONF_PORT, default=user_input[CONF_PORT]): vol.Coerce(int), |
| 39 | + vol.Required( |
| 40 | + f"{ConfName.DEVICE_LIST}", |
| 41 | + default=user_input[ConfName.DEVICE_LIST], |
| 42 | + ): cv.string, |
| 43 | + } |
| 44 | + |
| 45 | + return vol.Schema(schema) |
| 46 | + |
| 47 | + |
28 | 48 | class SolaredgeModbusMultiConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
29 | 49 | """Handle a config flow for SolarEdge Modbus Multi."""
|
30 | 50 |
|
@@ -85,19 +105,7 @@ async def async_step_user(
|
85 | 105 |
|
86 | 106 | return self.async_show_form(
|
87 | 107 | step_id="user",
|
88 |
| - data_schema=vol.Schema( |
89 |
| - { |
90 |
| - vol.Optional(CONF_NAME, default=user_input[CONF_NAME]): cv.string, |
91 |
| - vol.Required(CONF_HOST, default=user_input[CONF_HOST]): cv.string, |
92 |
| - vol.Required(CONF_PORT, default=user_input[CONF_PORT]): vol.Coerce( |
93 |
| - int |
94 |
| - ), |
95 |
| - vol.Required( |
96 |
| - f"{ConfName.DEVICE_LIST}", |
97 |
| - default=user_input[ConfName.DEVICE_LIST], |
98 |
| - ): cv.string, |
99 |
| - }, |
100 |
| - ), |
| 108 | + data_schema=generate_config_schema("user", user_input), |
101 | 109 | errors=errors,
|
102 | 110 | )
|
103 | 111 |
|
@@ -158,18 +166,7 @@ async def async_step_reconfigure(
|
158 | 166 |
|
159 | 167 | return self.async_show_form(
|
160 | 168 | step_id="reconfigure",
|
161 |
| - data_schema=vol.Schema( |
162 |
| - { |
163 |
| - vol.Required(CONF_HOST, default=user_input[CONF_HOST]): cv.string, |
164 |
| - vol.Required(CONF_PORT, default=user_input[CONF_PORT]): vol.Coerce( |
165 |
| - int |
166 |
| - ), |
167 |
| - vol.Required( |
168 |
| - f"{ConfName.DEVICE_LIST}", |
169 |
| - default=user_input[ConfName.DEVICE_LIST], |
170 |
| - ): cv.string, |
171 |
| - }, |
172 |
| - ), |
| 169 | + data_schema=generate_config_schema("reconfigure", user_input), |
173 | 170 | errors=errors,
|
174 | 171 | )
|
175 | 172 |
|
|
0 commit comments