Closed
Bug 1422164
Opened 7 years ago
Closed 7 years ago
Create a rich-select Custom Element
Categories
(Firefox :: WebPayments UI, enhancement, P1)
Firefox
WebPayments UI
Tracking
()
RESOLVED
FIXED
Firefox 59
Tracking | Status | |
---|---|---|
firefox59 | --- | fixed |
People
(Reporter: jaws, Assigned: jaws)
References
(Depends on 1 open bug)
Details
(Whiteboard: [webpayments])
User Story
Markup TBD
Attachments
(1 file)
No description provided.
Assignee | ||
Updated•7 years ago
|
Priority: -- → P1
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment 4•7 years ago
|
||
mozreview-review |
Comment on attachment 8937754 [details]
Bug 1422164 - Create a rich-select, address-option, and basic-card-option custom elements.
https://reviewboard.mozilla.org/r/208466/#review217004
Thanks
::: commit-message-55724:1
(Diff revision 2)
> +Bug 1422164 - WIP, create a rich-select Custom Element.
Remove WIP from the commit message
::: toolkit/components/payments/res/components/rich-select.js:24
(Diff revision 2)
> +
> +/* global ObservedPropertiesMixin */
> +
> +class RichSelect extends ObservedPropertiesMixin(HTMLElement) {
> + static get observedAttributes() {
> + return ["open", "disabled", "hidden"];
Nit: one per line with a trailing comma would be better for tracking blame. Apologies if I didn't follow this myself. I thought we actually had an eslint rule for that for the case where the array contains more than one value.
::: toolkit/components/payments/res/components/rich-select.js:76
(Diff revision 2)
> + if (next) {
> + next.selected = true;
> + selectedChild.selected = false;
> + }
We'll eventually need to distinguish the option that is selected from the option that the user is highlighting while the dropdown is open. At least on macOS I think the selectedness doesn't change until the user hits enter on the highlighted row.
Consider: We wouldn't want to tell the merchant that a new shipping address was chosen each time the arrow key was pressed until the popup closed on the dropdown. We can deal with that when we hook this up to the state object.
::: toolkit/components/payments/res/components/rich-select.js:192
(Diff revision 2)
> + fragment.appendChild(element);
> + return element;
> + }
> +}
> +
> +customElements.define("rich-option", RichOption);
You don't need to register this element if it's only being used for inheritance.
::: toolkit/components/payments/res/components/rich-select.js:194
(Diff revision 2)
> + }
> +}
> +
> +customElements.define("rich-option", RichOption);
> +
> +class AddressOption extends ObservedPropertiesMixin(RichOption) {
Please move `AddressOption` and `BasicCardOption` each to their own files.
::: toolkit/components/payments/res/components/rich-select.js:212
(Diff revision 2)
> + constructor() {
> + super();
> + }
IIRC the default constructor already does this so this can be omitted.
::: toolkit/components/payments/res/components/rich-select.js:217
(Diff revision 2)
> + for (let child of this.children) {
> + child.remove();
> + }
> +
> + let fragment = document.createDocumentFragment();
It would be more performant if both of the Option classes only created the elements in the `constructor` or `connectedCallback` and assigned the elements references to a private variable and then have render just set `element.textContent` on the references. That would mean that a render would only affect the `textContent` and wouldn't have the overhead of document fragments and creating elements and setting classes.
For example, see line 78 of https://reviewboard.mozilla.org/r/196014/diff/4#file5723914
It's not strictly necessary at this point since we won't re-render often yet but it may be good to get into the practice of reducing overhead. You can file this as a follow-up if you'd like.
::: toolkit/components/payments/res/components/rich-select.js:245
(Diff revision 2)
> + constructor() {
> + super();
> + }
IIRC the default constructor already does this so this can be omitted.
::: toolkit/components/payments/res/paymentRequest.xhtml:12
(Diff revision 2)
> <head>
> <meta http-equiv="Content-Security-Policy" content="default-src 'self'"/>
> <title></title>
> <link rel="stylesheet" href="paymentRequest.css"/>
> + <link rel="stylesheet" href="rich-select.css"/>
> - <script src="vendor/custom-elements.min.js"></script>
> + <script src="vendor/custom-elements.min.js"></script>
I think there is accidental indentation here
::: toolkit/components/payments/res/paymentRequest.xhtml:42
(Diff revision 2)
> </head>
> <body>
> <iframe id="debugging-console" hidden="hidden" src="debugging.html"></iframe>
>
> + <rich-select>
> + <address-option email="emzembrano92@email.com"
Nit: please don't use real third-party domains for examples, use RFC2606 TLDs or second level domain names: https://tools.ietf.org/html/rfc2606#section-2
::: toolkit/components/payments/test/mochitest/mochitest.ini:5
(Diff revision 2)
> [DEFAULT]
> support-files =
> ../../../../../testing/modules/sinon-2.3.2.js
> ../../res/PaymentsStore.js
> + ../../res/rich-select.css
I think the stylesheet should stay beside the component JS file in the same directory.
::: toolkit/components/payments/test/mochitest/test_rich_select.html:66
(Diff revision 2)
> +function is_visible(element, message) {
> + let rect = element.getBoundingClientRect();
> + return !rect.width && !rect.height;
> +}
> +
> +function is_hidden(element, message) {
> + return !is_visible(element, message);
> +}
You can use `isHidden` from EventUtils.js instead: https://dxr.mozilla.org/mozilla-central/rev/ca379fcca95b1f4a3744242ea8647004b99b3507/testing/mochitest/tests/SimpleTest/EventUtils.js#158
Add ```html
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
```
after the SpawnTask.js line.
::: toolkit/components/payments/test/mochitest/test_rich_select.html:170
(Diff revision 2)
> +
> + dispatchKeyPress("ArrowUp", 38);
> + ok(option1.selected, "option 1 should remain selected");
> + ok(!option3.selected, "option 3 should not be selected");
> +
> + // Wait for any mutation observer notifications to come apply before exiting.
Nit: "to come apply" is confusing to read
Attachment #8937754 -
Flags: review?(MattN+bmo) → review+
Comment hidden (mozreview-request) |
Assignee | ||
Comment 6•7 years ago
|
||
mozreview-review-reply |
Comment on attachment 8937754 [details]
Bug 1422164 - Create a rich-select, address-option, and basic-card-option custom elements.
https://reviewboard.mozilla.org/r/208466/#review217004
> Remove WIP from the commit message
It looks like somehow my last revision never got published. I've just published it now (where this is fixed) and the behavior of opening the select is better in the latest revision. Fixing the other issues now.
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment 12•7 years ago
|
||
Pushed by jwein@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/90da1b24e686
Create a rich-select, address-option, and basic-card-option custom elements. r=MattN
Comment 13•7 years ago
|
||
Failure push: https://treeherder.mozilla.org/#/jobs?repo=autoland&revision=90da1b24e686f5350c9ab09720e1745eb2bdb286&filter-resultStatus=usercancel&filter-resultStatus=runnable&filter-resultStatus=testfailed&filter-resultStatus=busted&filter-resultStatus=exception
Failure log: https://treeherder.mozilla.org/logviewer.html#?job_id=155149524&repo=autoland&lineNumber=24534
Backout: https://hg.mozilla.org/integration/autoland/rev/5786d2b246ee6cb20309b41cc1fba25c33953bcf
Flags: needinfo?(jaws)
Assignee | ||
Updated•7 years ago
|
Flags: needinfo?(jaws)
Comment hidden (mozreview-request) |
Assignee | ||
Comment 15•7 years ago
|
||
Comment 16•7 years ago
|
||
Pushed by jwein@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/ee57508c6e70
Create a rich-select, address-option, and basic-card-option custom elements. r=MattN
Comment 17•7 years ago
|
||
bugherder |
Status: ASSIGNED → RESOLVED
Closed: 7 years ago
status-firefox59:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla59
Updated•7 years ago
|
Whiteboard: [webpayments]
Updated•7 years ago
|
Product: Toolkit → Firefox
Target Milestone: mozilla59 → Firefox 59
Version: unspecified → Trunk
You need to log in
before you can comment on or make changes to this bug.
Description
•