remove boilerplate from settings
This commit is contained in:
		@@ -1,6 +1,13 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import {withNotifier} from '../components/SnackbarNotification';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
* It is unlikely this application will grow complex enough to require redux.
 | 
			
		||||
*
 | 
			
		||||
* This HOC acts as an interface to a REST service, providing data and change
 | 
			
		||||
* event callbacks to the wrapped components along with a function to persist the
 | 
			
		||||
* changes.
 | 
			
		||||
*/
 | 
			
		||||
export const restComponent = (endpointUrl, FormComponent) => {
 | 
			
		||||
 | 
			
		||||
  return withNotifier(
 | 
			
		||||
@@ -9,6 +16,12 @@ export const restComponent = (endpointUrl, FormComponent) => {
 | 
			
		||||
      constructor(props) {
 | 
			
		||||
        super(props);
 | 
			
		||||
 | 
			
		||||
        this.state={
 | 
			
		||||
                 data:null,
 | 
			
		||||
                 fetched: false,
 | 
			
		||||
                 errorMessage:null
 | 
			
		||||
               };
 | 
			
		||||
 | 
			
		||||
        this.setState = this.setState.bind(this);
 | 
			
		||||
        this.loadData = this.loadData.bind(this);
 | 
			
		||||
        this.saveData = this.saveData.bind(this);
 | 
			
		||||
@@ -47,7 +60,7 @@ export const restComponent = (endpointUrl, FormComponent) => {
 | 
			
		||||
        this.setState({fetched: false});
 | 
			
		||||
        fetch(endpointUrl, {
 | 
			
		||||
          method: 'POST',
 | 
			
		||||
          body: JSON.stringify(this.statedata),
 | 
			
		||||
          body: JSON.stringify(this.state.data),
 | 
			
		||||
          headers: new Headers({
 | 
			
		||||
            'Content-Type': 'application/json'
 | 
			
		||||
          })
 | 
			
		||||
@@ -67,13 +80,13 @@ export const restComponent = (endpointUrl, FormComponent) => {
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      valueChange = name => event => {
 | 
			
		||||
      handleValueChange = name => event => {
 | 
			
		||||
        const { data } = this.state;
 | 
			
		||||
        data[name] = event.target.value;
 | 
			
		||||
        this.setState({data});
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      checkboxChange = name => event => {
 | 
			
		||||
      handleCheckboxChange = name => event => {
 | 
			
		||||
        const { data } = this.state;
 | 
			
		||||
        data[name] = event.target.checked;
 | 
			
		||||
        this.setState({data});
 | 
			
		||||
@@ -81,8 +94,8 @@ export const restComponent = (endpointUrl, FormComponent) => {
 | 
			
		||||
 | 
			
		||||
      render() {
 | 
			
		||||
        return <FormComponent
 | 
			
		||||
                  valueChange={this.valueChange}
 | 
			
		||||
                  checkboxChange={this.checkboxChange}
 | 
			
		||||
                  handleValueChange={this.handleValueChange}
 | 
			
		||||
                  handleCheckboxChange={this.handleCheckboxChange}
 | 
			
		||||
                  setData={this.setData}
 | 
			
		||||
                  saveData={this.saveData}
 | 
			
		||||
                  loadData={this.loadData}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,69 +1,32 @@
 | 
			
		||||
import React, { Component } from 'react';
 | 
			
		||||
 | 
			
		||||
import { AP_SETTINGS_ENDPOINT }  from  '../constants/Endpoints';
 | 
			
		||||
import {withNotifier} from '../components/SnackbarNotification';
 | 
			
		||||
import { restComponent } from '../components/RestComponent';
 | 
			
		||||
import SectionContent from '../components/SectionContent';
 | 
			
		||||
import APSettingsForm from '../forms/APSettingsForm';
 | 
			
		||||
import { simpleGet } from  '../helpers/SimpleGet';
 | 
			
		||||
import { simplePost } from '../helpers/SimplePost';
 | 
			
		||||
 | 
			
		||||
class APSettings extends Component {
 | 
			
		||||
 | 
			
		||||
  constructor(props) {
 | 
			
		||||
    super(props);
 | 
			
		||||
 | 
			
		||||
    this.state = {
 | 
			
		||||
             apSettings:null,
 | 
			
		||||
             apSettingsFetched: false,
 | 
			
		||||
             errorMessage:null
 | 
			
		||||
           };
 | 
			
		||||
 | 
			
		||||
    this.setState = this.setState.bind(this);
 | 
			
		||||
    this.loadAPSettings = this.loadAPSettings.bind(this);
 | 
			
		||||
    this.saveAPSettings = this.saveAPSettings.bind(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentDidMount() {
 | 
			
		||||
    this.loadAPSettings();
 | 
			
		||||
    this.props.loadData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  loadAPSettings() {
 | 
			
		||||
    simpleGet(
 | 
			
		||||
      AP_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "apSettings",
 | 
			
		||||
      "apSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  saveAPSettings(e) {
 | 
			
		||||
    simplePost(
 | 
			
		||||
      AP_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.state,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "apSettings",
 | 
			
		||||
      "apSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  wifiSettingValueChange = name => event => {
 | 
			
		||||
    const { apSettings } = this.state;
 | 
			
		||||
    apSettings[name] = event.target.value;
 | 
			
		||||
    this.setState({apSettings});
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  render() {
 | 
			
		||||
    const { apSettingsFetched, apSettings, errorMessage } = this.state;
 | 
			
		||||
    const { data, fetched, errorMessage } = this.props;
 | 
			
		||||
    return (
 | 
			
		||||
      <SectionContent title="AP Settings">
 | 
			
		||||
      	<APSettingsForm  apSettingsFetched={apSettingsFetched} apSettings={apSettings} errorMessage={errorMessage}
 | 
			
		||||
          onSubmit={this.saveAPSettings} onReset={this.loadAPSettings} handleValueChange={this.wifiSettingValueChange} />
 | 
			
		||||
      	<APSettingsForm          
 | 
			
		||||
          apSettings={data}
 | 
			
		||||
          apSettingsFetched={fetched}
 | 
			
		||||
          errorMessage={errorMessage}
 | 
			
		||||
          onSubmit={this.props.saveData}
 | 
			
		||||
          onReset={this.props.loadData}
 | 
			
		||||
          handleValueChange={this.props.handleValueChange}
 | 
			
		||||
        />
 | 
			
		||||
      </SectionContent>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default withNotifier(APSettings);
 | 
			
		||||
export default restComponent(AP_SETTINGS_ENDPOINT, APSettings);
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,6 @@ import SectionContent from '../components/SectionContent'
 | 
			
		||||
 | 
			
		||||
import * as Highlight from '../constants/Highlight';
 | 
			
		||||
import { AP_STATUS_ENDPOINT }  from  '../constants/Endpoints';
 | 
			
		||||
import { simpleGet }  from  '../helpers/SimpleGet';
 | 
			
		||||
 | 
			
		||||
const styles = theme => ({
 | 
			
		||||
  ["apStatus_" + Highlight.SUCCESS]: {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import React, { Component } from 'react';
 | 
			
		||||
 | 
			
		||||
import { NTP_SETTINGS_ENDPOINT }  from  '../constants/Endpoints';
 | 
			
		||||
import {withNotifier} from '../components/SnackbarNotification';
 | 
			
		||||
import {restComponent} from '../components/RestComponent';
 | 
			
		||||
import SectionContent from '../components/SectionContent';
 | 
			
		||||
import NTPSettingsForm from '../forms/NTPSettingsForm';
 | 
			
		||||
import { simpleGet }  from  '../helpers/SimpleGet';
 | 
			
		||||
@@ -9,61 +9,26 @@ import { simplePost } from '../helpers/SimplePost';
 | 
			
		||||
 | 
			
		||||
class NTPSettings extends Component {
 | 
			
		||||
 | 
			
		||||
  constructor(props) {
 | 
			
		||||
    super(props);
 | 
			
		||||
 | 
			
		||||
    this.state = {
 | 
			
		||||
             ntpSettings:{},
 | 
			
		||||
             ntpSettingsFetched: false,
 | 
			
		||||
             errorMessage:null
 | 
			
		||||
           };
 | 
			
		||||
 | 
			
		||||
    this.setState = this.setState.bind(this);
 | 
			
		||||
    this.loadNTPSettings = this.loadNTPSettings.bind(this);
 | 
			
		||||
    this.saveNTPSettings = this.saveNTPSettings.bind(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentDidMount() {
 | 
			
		||||
      this.loadNTPSettings();
 | 
			
		||||
      this.props.loadData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  loadNTPSettings() {
 | 
			
		||||
    simpleGet(
 | 
			
		||||
      NTP_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "ntpSettings",
 | 
			
		||||
      "ntpSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  saveNTPSettings(e) {
 | 
			
		||||
    simplePost(
 | 
			
		||||
      NTP_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.state,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "ntpSettings",
 | 
			
		||||
      "ntpSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ntpSettingValueChange = name => event => {
 | 
			
		||||
    const { ntpSettings } = this.state;
 | 
			
		||||
    ntpSettings[name] = event.target.value;
 | 
			
		||||
    this.setState({ntpSettings});
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  render() {
 | 
			
		||||
    const { ntpSettingsFetched, ntpSettings, errorMessage } = this.state;
 | 
			
		||||
    const { data, fetched, errorMessage } = this.props;
 | 
			
		||||
    return (
 | 
			
		||||
      <SectionContent title="NTP Settings">
 | 
			
		||||
      	<NTPSettingsForm ntpSettingsFetched={ntpSettingsFetched} ntpSettings={ntpSettings} errorMessage={errorMessage}
 | 
			
		||||
          onSubmit={this.saveNTPSettings} onReset={this.loadNTPSettings} handleValueChange={this.ntpSettingValueChange} />
 | 
			
		||||
      	<NTPSettingsForm
 | 
			
		||||
          ntpSettings={data}
 | 
			
		||||
          ntpSettingsFetched={fetched}
 | 
			
		||||
          errorMessage={errorMessage}
 | 
			
		||||
          onSubmit={this.props.saveData}
 | 
			
		||||
          onReset={this.props.loadData}
 | 
			
		||||
          handleValueChange={this.props.handleValueChange}
 | 
			
		||||
        />
 | 
			
		||||
      </SectionContent>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default withNotifier(NTPSettings);
 | 
			
		||||
export default restComponent(NTP_SETTINGS_ENDPOINT, NTPSettings);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import React, { Component } from 'react';
 | 
			
		||||
 | 
			
		||||
import { OTA_SETTINGS_ENDPOINT }  from  '../constants/Endpoints';
 | 
			
		||||
import {withNotifier} from '../components/SnackbarNotification';
 | 
			
		||||
import {restComponent} from '../components/RestComponent';
 | 
			
		||||
import SectionContent from '../components/SectionContent';
 | 
			
		||||
import OTASettingsForm from '../forms/OTASettingsForm';
 | 
			
		||||
import { simpleGet }  from  '../helpers/SimpleGet';
 | 
			
		||||
@@ -9,68 +9,27 @@ import { simplePost } from '../helpers/SimplePost';
 | 
			
		||||
 | 
			
		||||
class OTASettings extends Component {
 | 
			
		||||
 | 
			
		||||
  constructor(props) {
 | 
			
		||||
    super(props);
 | 
			
		||||
 | 
			
		||||
    this.state = {
 | 
			
		||||
             otaSettings:null,
 | 
			
		||||
             otaSettingsFetched: false,
 | 
			
		||||
             errorMessage:null
 | 
			
		||||
           };
 | 
			
		||||
 | 
			
		||||
    this.setState = this.setState.bind(this);
 | 
			
		||||
    this.loadOTASettings = this.loadOTASettings.bind(this);
 | 
			
		||||
    this.saveOTASettings = this.saveOTASettings.bind(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentDidMount() {
 | 
			
		||||
      this.loadOTASettings();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  loadOTASettings() {
 | 
			
		||||
    simpleGet(
 | 
			
		||||
      OTA_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "otaSettings",
 | 
			
		||||
      "otaSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  saveOTASettings(e) {
 | 
			
		||||
    simplePost(
 | 
			
		||||
      OTA_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.state,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "otaSettings",
 | 
			
		||||
      "otaSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  otaSettingValueChange = name => event => {
 | 
			
		||||
    const { otaSettings } = this.state;
 | 
			
		||||
    otaSettings[name] = event.target.value;
 | 
			
		||||
    this.setState({otaSettings});
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  otaSettingCheckboxChange = name => event => {
 | 
			
		||||
    const { otaSettings } = this.state;
 | 
			
		||||
    otaSettings[name] = event.target.checked;
 | 
			
		||||
    this.setState({otaSettings});
 | 
			
		||||
      this.props.loadData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render() {
 | 
			
		||||
    const { otaSettingsFetched, otaSettings, errorMessage } = this.state;
 | 
			
		||||
    const { data, fetched, errorMessage } = this.props;
 | 
			
		||||
    return (
 | 
			
		||||
      <SectionContent title="OTA Settings">
 | 
			
		||||
      	<OTASettingsForm otaSettingsFetched={otaSettingsFetched} otaSettings={otaSettings} errorMessage={errorMessage}
 | 
			
		||||
          onSubmit={this.saveOTASettings} onReset={this.loadOTASettings} handleValueChange={this.otaSettingValueChange}
 | 
			
		||||
          handleCheckboxChange={this.otaSettingCheckboxChange} />
 | 
			
		||||
      	<OTASettingsForm
 | 
			
		||||
          otaSettings={data}
 | 
			
		||||
          otaSettingsFetched={fetched}
 | 
			
		||||
          errorMessage={errorMessage}
 | 
			
		||||
          onSubmit={this.props.saveData}
 | 
			
		||||
          onReset={this.props.loadData}
 | 
			
		||||
          handleValueChange={this.props.handleValueChange}
 | 
			
		||||
          handleCheckboxChange={this.props.handleCheckboxChange}
 | 
			
		||||
        />
 | 
			
		||||
      </SectionContent>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default withNotifier(OTASettings);
 | 
			
		||||
export default restComponent(OTA_SETTINGS_ENDPOINT, OTASettings);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
 | 
			
		||||
import { WIFI_SETTINGS_ENDPOINT }  from  '../constants/Endpoints';
 | 
			
		||||
import {withNotifier} from '../components/SnackbarNotification';
 | 
			
		||||
import { restComponent } from '../components/RestComponent';
 | 
			
		||||
import SectionContent from '../components/SectionContent';
 | 
			
		||||
import WiFiSettingsForm from '../forms/WiFiSettingsForm';
 | 
			
		||||
import { simpleGet }  from  '../helpers/SimpleGet';
 | 
			
		||||
@@ -14,15 +14,8 @@ class WiFiSettings extends Component {
 | 
			
		||||
    super(props);
 | 
			
		||||
 | 
			
		||||
    this.state = {
 | 
			
		||||
             wifiSettingsFetched: false,
 | 
			
		||||
             wifiSettings:{},
 | 
			
		||||
             selectedNetwork: null,
 | 
			
		||||
             errorMessage:null
 | 
			
		||||
           };
 | 
			
		||||
 | 
			
		||||
    this.setState = this.setState.bind(this);
 | 
			
		||||
    this.loadWiFiSettings = this.loadWiFiSettings.bind(this);
 | 
			
		||||
    this.saveWiFiSettings = this.saveWiFiSettings.bind(this);
 | 
			
		||||
    this.deselectNetwork = this.deselectNetwork.bind(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -35,58 +28,39 @@ class WiFiSettings extends Component {
 | 
			
		||||
        hostname:"esp8266-react",
 | 
			
		||||
        static_ip_config:false,
 | 
			
		||||
      }
 | 
			
		||||
      this.setState({wifiSettingsFetched:true, wifiSettings, selectedNetwork, errorMessage:null});
 | 
			
		||||
      this.props.setData(wifiSettings);
 | 
			
		||||
      this.setState({ selectedNetwork });
 | 
			
		||||
      deselectNetwork();
 | 
			
		||||
    }else {
 | 
			
		||||
      this.loadWiFiSettings();
 | 
			
		||||
      this.props.loadData();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  loadWiFiSettings() {
 | 
			
		||||
  deselectNetworkAndLoadData() {
 | 
			
		||||
    this.deselectNetwork();
 | 
			
		||||
 | 
			
		||||
    simpleGet(
 | 
			
		||||
      WIFI_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "wifiSettings",
 | 
			
		||||
      "wifiSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
    this.props.loadData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  saveWiFiSettings(e) {
 | 
			
		||||
    simplePost(
 | 
			
		||||
      WIFI_SETTINGS_ENDPOINT,
 | 
			
		||||
      this.state,
 | 
			
		||||
      this.setState,
 | 
			
		||||
      this.props.raiseNotification,
 | 
			
		||||
      "wifiSettings",
 | 
			
		||||
      "wifiSettingsFetched"
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  deselectNetwork(nextNetwork) {
 | 
			
		||||
    this.setState({selectedNetwork:null});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  wifiSettingValueChange = name => event => {
 | 
			
		||||
    const { wifiSettings } = this.state;
 | 
			
		||||
    wifiSettings[name] = event.target.value;
 | 
			
		||||
    this.setState({wifiSettings});
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  wifiSettingCheckboxChange = name => event => {
 | 
			
		||||
    const { wifiSettings } = this.state;
 | 
			
		||||
    wifiSettings[name] = event.target.checked;
 | 
			
		||||
    this.setState({wifiSettings});
 | 
			
		||||
  deselectNetwork() {
 | 
			
		||||
    this.setState({ selectedNetwork:null });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render() {
 | 
			
		||||
    const { wifiSettingsFetched, wifiSettings, errorMessage, selectedNetwork } = this.state;
 | 
			
		||||
    const { selectedNetwork } = this.state;
 | 
			
		||||
    const { data, fetched, errorMessage } = this.props;
 | 
			
		||||
    return (
 | 
			
		||||
      <SectionContent title="WiFi Settings">
 | 
			
		||||
      	<WiFiSettingsForm wifiSettingsFetched={wifiSettingsFetched} wifiSettings={wifiSettings} errorMessage={errorMessage} selectedNetwork={selectedNetwork} deselectNetwork={this.deselectNetwork}
 | 
			
		||||
          onSubmit={this.saveWiFiSettings} onReset={this.loadWiFiSettings} handleValueChange={this.wifiSettingValueChange} handleCheckboxChange={this.wifiSettingCheckboxChange} />
 | 
			
		||||
      	<WiFiSettingsForm
 | 
			
		||||
          wifiSettings={data}
 | 
			
		||||
          wifiSettingsFetched={fetched}
 | 
			
		||||
          errorMessage={errorMessage}
 | 
			
		||||
          selectedNetwork={selectedNetwork}
 | 
			
		||||
          deselectNetwork={this.deselectNetwork}
 | 
			
		||||
          onSubmit={this.props.saveData}
 | 
			
		||||
          onReset={this.deselectNetworkAndLoadData}
 | 
			
		||||
          handleValueChange={this.props.handleValueChange}
 | 
			
		||||
          handleCheckboxChange={this.props.handleCheckboxChange}
 | 
			
		||||
        />
 | 
			
		||||
      </SectionContent>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
@@ -98,4 +72,4 @@ WiFiSettings.propTypes = {
 | 
			
		||||
  selectedNetwork: PropTypes.object
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default withNotifier(WiFiSettings);
 | 
			
		||||
export default restComponent(WIFI_SETTINGS_ENDPOINT, WiFiSettings);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user