Bug 1427959 - Add some basic styling for the error text on the address-form. r?mattn draft
authorJared Wein <jwein@mozilla.com>
Wed, 23 May 2018 15:19:46 -0400
changeset 800074 c195cbde194bbfe1cf084ccf73bdae4a3fc77be1
parent 800073 33b3e8717b78a5e24fc13292f9a70f696a0af498
push id111257
push userbmo:jaws@mozilla.com
push dateFri, 25 May 2018 20:34:14 +0000
reviewersmattn
bugs1427959
milestone62.0a1
Bug 1427959 - Add some basic styling for the error text on the address-form. r?mattn MozReview-Commit-ID: 6ZLm53aJj6P
browser/components/payments/res/containers/address-form.css
browser/components/payments/res/containers/address-form.js
browser/components/payments/res/debugging.html
browser/components/payments/res/debugging.js
--- a/browser/components/payments/res/containers/address-form.css
+++ b/browser/components/payments/res/containers/address-form.css
@@ -18,8 +18,22 @@ address-form[address-fields] #address-le
 address-form[address-fields] #postal-code-container,
 address-form[address-fields] #country-container,
 address-form[address-fields]:not([address-fields~='email']) #email-container,
 address-form[address-fields]:not([address-fields~='tel']) #tel-container {
   /* !important is needed because autofillEditForms.js sets
      inline styles on the form fields with display: flex; */
   display: none !important;
 }
+
+address-form .error input,
+address-form .error select,
+address-form .error textarea {
+  border: 1px solid #ce001a;
+}
+
+.error-text:not(:empty) {
+  border-radius: 2px;
+  background-color: #ce001a;
+  color: #f9e6e9;
+  padding: .1em .5em;
+  margin-inline-start: .1em;
+}
--- a/browser/components/payments/res/containers/address-form.js
+++ b/browser/components/payments/res/containers/address-form.js
@@ -147,16 +147,17 @@ export default class AddressForm extends
       let container = document.querySelector(errorSelector);
       let span = container.querySelector(".error-text");
       if (!span) {
         span = document.createElement("span");
         span.className = "error-text";
         container.appendChild(span);
       }
       span.textContent = shippingAddressErrors[errorName];
+      container.classList.toggle("error", !!shippingAddressErrors[errorName]);
     }
   }
 
   handleEvent(event) {
     switch (event.type) {
       case "click": {
         this.onClick(event);
         break;
--- a/browser/components/payments/res/debugging.html
+++ b/browser/components/payments/res/debugging.html
@@ -31,16 +31,17 @@
       <button id="delete1Address">Delete 1 Address</button>
       <h1>Payment Methods</h1>
       <button id="setBasicCards1">Set Basic Cards 1</button>
       <button id="delete1Card">Delete 1 Card</button>
       <h1>States</h1>
       <button id="setChangesPrevented">Prevent changes</button>
       <button id="setChangesAllowed">Allow changes</button>
       <button id="setShippingError">Shipping Error</button>
+      <button id="setAddressErrors">Address Errors</button>
       <button id="setStateDefault">Default</button>
       <button id="setStateProcessing">Processing</button>
       <button id="setStateSuccess">Success</button>
       <button id="setStateFail">Fail</button>
       <button id="setStateUnknown">Unknown</button>
     </div>
   </body>
 </html>
--- a/browser/components/payments/res/debugging.js
+++ b/browser/components/payments/res/debugging.js
@@ -381,16 +381,34 @@ let buttonActions = {
     request.paymentDetails = Object.assign({}, requestStore.getState().request.paymentDetails);
     request.paymentDetails.error = "Error!";
     request.paymentDetails.shippingOptions = [];
     requestStore.setState({
       request,
     });
   },
 
+  setAddressErrors() {
+    let request = Object.assign({}, requestStore.getState().request);
+    request.paymentDetails = Object.assign({}, requestStore.getState().request.paymentDetails);
+    request.paymentDetails.shippingAddressErrors = {
+      addressLine: "Can only ship to ROADS, not DRIVES, BOULEVARDS, or STREETS",
+      city: "Can only ship to CITIES, not TOWNSHIPS or VILLAGES",
+      country: "Can only ship to USA, not CA",
+      organization: "Can only ship to CORPORATIONS, not CONSORTIUMS",
+      phone: "Only allowed to ship to area codes that start with 9",
+      postalCode: "Only allowed to ship to postalCodes that start with 0",
+      recipient: "Can only ship to names that start with J",
+      region: "Can only ship to regions that start with M",
+    };
+    requestStore.setState({
+      request,
+    });
+  },
+
   setStateDefault() {
     requestStore.setState({
       completionState: "initial",
     });
   },
 
   setStateProcessing() {
     requestStore.setState({