Retain configured hostname (#173)
Retain configured hostname when selecting new network from network scanner
This commit is contained in:
		| @@ -1,8 +1,7 @@ | |||||||
| import React, { Component } from 'react'; | import React, { Component } from 'react'; | ||||||
|  |  | ||||||
| import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; | import { restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; | ||||||
| import WiFiSettingsForm from './WiFiSettingsForm'; | import WiFiSettingsForm from './WiFiSettingsForm'; | ||||||
| import { WiFiConnectionContext } from './WiFiConnectionContext'; |  | ||||||
| import { WIFI_SETTINGS_ENDPOINT } from '../api'; | import { WIFI_SETTINGS_ENDPOINT } from '../api'; | ||||||
| import { WiFiSettings } from './types'; | import { WiFiSettings } from './types'; | ||||||
|  |  | ||||||
| @@ -10,39 +9,15 @@ type WiFiSettingsControllerProps = RestControllerProps<WiFiSettings>; | |||||||
|  |  | ||||||
| class WiFiSettingsController extends Component<WiFiSettingsControllerProps> { | class WiFiSettingsController extends Component<WiFiSettingsControllerProps> { | ||||||
|  |  | ||||||
|   static contextType = WiFiConnectionContext; |  | ||||||
|   context!: React.ContextType<typeof WiFiConnectionContext>; |  | ||||||
|  |  | ||||||
|   componentDidMount() { |   componentDidMount() { | ||||||
|     const { selectedNetwork } = this.context; |  | ||||||
|     if (selectedNetwork) { |  | ||||||
|       const wifiSettings: WiFiSettings = { |  | ||||||
|         ssid: selectedNetwork.ssid, |  | ||||||
|         password: "", |  | ||||||
|         hostname: "esp8266-react", |  | ||||||
|         static_ip_config: false, |  | ||||||
|       } |  | ||||||
|       this.props.setData(wifiSettings); |  | ||||||
|     } else { |  | ||||||
|       this.props.loadData(); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   deselectNetworkAndLoadData = () => { |  | ||||||
|     this.context.deselectNetwork(); |  | ||||||
|     this.props.loadData(); |     this.props.loadData(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   componentWillUnmount() { |  | ||||||
|     this.context.deselectNetwork(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   render() { |   render() { | ||||||
|     return ( |     return ( | ||||||
|       <SectionContent title="WiFi Settings"> |       <SectionContent title="WiFi Settings"> | ||||||
|         <RestFormLoader |         <RestFormLoader | ||||||
|           {...this.props} |           {...this.props} | ||||||
|           loadData={this.deselectNetworkAndLoadData} |  | ||||||
|           render={formProps => <WiFiSettingsForm {...formProps} />} |           render={formProps => <WiFiSettingsForm {...formProps} />} | ||||||
|         /> |         /> | ||||||
|       </SectionContent> |       </SectionContent> | ||||||
|   | |||||||
| @@ -24,15 +24,39 @@ class WiFiSettingsForm extends React.Component<WiFiStatusFormProps> { | |||||||
|   static contextType = WiFiConnectionContext; |   static contextType = WiFiConnectionContext; | ||||||
|   context!: React.ContextType<typeof WiFiConnectionContext>; |   context!: React.ContextType<typeof WiFiConnectionContext>; | ||||||
|  |  | ||||||
|  |   constructor(props: WiFiStatusFormProps, context: WiFiConnectionContext) { | ||||||
|  |     super(props); | ||||||
|  |  | ||||||
|  |     const { selectedNetwork } = context; | ||||||
|  |     if (selectedNetwork) { | ||||||
|  |       const wifiSettings: WiFiSettings = { | ||||||
|  |         ssid: selectedNetwork.ssid, | ||||||
|  |         password: "", | ||||||
|  |         hostname: props.data.hostname, | ||||||
|  |         static_ip_config: false, | ||||||
|  |       } | ||||||
|  |       props.setData(wifiSettings); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   componentWillMount() { |   componentWillMount() { | ||||||
|     ValidatorForm.addValidationRule('isIP', isIP); |     ValidatorForm.addValidationRule('isIP', isIP); | ||||||
|     ValidatorForm.addValidationRule('isHostname', isHostname); |     ValidatorForm.addValidationRule('isHostname', isHostname); | ||||||
|     ValidatorForm.addValidationRule('isOptionalIP', optional(isIP)); |     ValidatorForm.addValidationRule('isOptionalIP', optional(isIP)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   deselectNetworkAndLoadData = () => { | ||||||
|  |     this.context.deselectNetwork(); | ||||||
|  |     this.props.loadData(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   componentWillUnmount() { | ||||||
|  |     this.context.deselectNetwork(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   render() { |   render() { | ||||||
|     const { selectedNetwork, deselectNetwork } = this.context; |     const { selectedNetwork, deselectNetwork } = this.context; | ||||||
|     const { data, handleValueChange, saveData, loadData } = this.props; |     const { data, handleValueChange, saveData } = this.props; | ||||||
|     return ( |     return ( | ||||||
|       <ValidatorForm onSubmit={saveData} ref="WiFiSettingsForm"> |       <ValidatorForm onSubmit={saveData} ref="WiFiSettingsForm"> | ||||||
|         { |         { | ||||||
| @@ -167,7 +191,7 @@ class WiFiSettingsForm extends React.Component<WiFiStatusFormProps> { | |||||||
|           <FormButton startIcon={<SaveIcon />} variant="contained" color="primary" type="submit"> |           <FormButton startIcon={<SaveIcon />} variant="contained" color="primary" type="submit"> | ||||||
|             Save |             Save | ||||||
|           </FormButton> |           </FormButton> | ||||||
|           <FormButton variant="contained" color="secondary" onClick={loadData}> |           <FormButton variant="contained" color="secondary" onClick={this.deselectNetworkAndLoadData}> | ||||||
|             Reset |             Reset | ||||||
|           </FormButton> |           </FormButton> | ||||||
|         </FormActions> |         </FormActions> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user