Bug 1338599 - Default custom devices to enabled in RDM. r=gl draft
authorJ. Ryan Stinnett <jryans@gmail.com>
Wed, 01 Mar 2017 17:57:24 -0600
changeset 491622 27e12cdb7e37407d1a9bd95100bdb091536d7937
parent 490976 e150eaff1f83e4e4a97d1e30c57d233859efe9cb
child 547493 c9e167fdb5b02233384d7a4285dea9dca5b721d6
push id47354
push userbmo:jryans@gmail.com
push dateWed, 01 Mar 2017 23:58:08 +0000
reviewersgl
bugs1338599
milestone54.0a1
Bug 1338599 - Default custom devices to enabled in RDM. r=gl MozReview-Commit-ID: HAkhcKZhLVt
devtools/client/responsive.html/components/device-modal.js
devtools/client/responsive.html/test/browser/browser_device_custom.js
--- a/devtools/client/responsive.html/components/device-modal.js
+++ b/devtools/client/responsive.html/components/device-modal.js
@@ -33,32 +33,46 @@ module.exports = createClass({
   },
 
   componentDidMount() {
     window.addEventListener("keydown", this.onKeyDown, true);
   },
 
   componentWillReceiveProps(nextProps) {
     let {
+      devices: oldDevices,
+    } = this.props;
+    let {
       devices,
     } = nextProps;
 
-    for (let type of devices.types) {
-      for (let device of devices[type]) {
-        this.setState({
-          [device.name]: device.displayed,
-        });
+    // Refresh component state only when model transitions from closed to open
+    if (!oldDevices.isModalOpen && devices.isModalOpen) {
+      for (let type of devices.types) {
+        for (let device of devices[type]) {
+          this.setState({
+            [device.name]: device.displayed,
+          });
+        }
       }
     }
   },
 
   componentWillUnmount() {
     window.removeEventListener("keydown", this.onKeyDown, true);
   },
 
+  onAddCustomDevice(device) {
+    this.props.onAddCustomDevice(device);
+    // Default custom devices to enabled
+    this.setState({
+      [device.name]: true,
+    });
+  },
+
   onDeviceCheckboxChange({ nativeEvent: { button }, target }) {
     if (button !== 0) {
       return;
     }
     this.setState({
       [target.value]: !this.state[target.value]
     });
   },
@@ -108,21 +122,24 @@ module.exports = createClass({
       onUpdateDeviceModal(false);
     }
   },
 
   render() {
     let {
       deviceAdderViewportTemplate,
       devices,
-      onAddCustomDevice,
       onRemoveCustomDevice,
       onUpdateDeviceModal,
     } = this.props;
 
+    let {
+      onAddCustomDevice,
+    } = this;
+
     const sortedDevices = {};
     for (let type of devices.types) {
       sortedDevices[type] = Object.assign([], devices[type])
         .sort((a, b) => a.name.localeCompare(b.name));
     }
 
     return dom.div(
       {
--- a/devtools/client/responsive.html/test/browser/browser_device_custom.js
+++ b/devtools/client/responsive.html/test/browser/browser_device_custom.js
@@ -48,22 +48,22 @@ addRDMTask(TEST_URL, function* ({ ui }) 
 
   info("Fill out device adder form and save");
   setDeviceAdder(ui, device);
   let adderSave = document.querySelector("#device-adder-save");
   let saved = waitUntilState(store, state => state.devices.custom.length == 1);
   Simulate.click(adderSave);
   yield saved;
 
-  info("Enable device in modal");
+  info("Verify device defaults to enabled in modal");
   let deviceCb = [...document.querySelectorAll(".device-input-checkbox")].find(cb => {
     return cb.value == device.name;
   });
   ok(deviceCb, "Custom device checkbox added to modal");
-  deviceCb.click();
+  ok(deviceCb.checked, "Custom device enabled");
   Simulate.click(submitButton);
 
   info("Look for custom device in device selector");
   let selectorOption = [...deviceSelector.options].find(opt => opt.value == device.name);
   ok(selectorOption, "Custom device option added to device selector");
 });
 
 addRDMTask(TEST_URL, function* ({ ui }) {