|
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