Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(material-experimental/mdc-chips): don't use button element if chip row isn't editable #25327

Merged
merged 1 commit into from
Jul 25, 2022

Conversation

crisbeto
Copy link
Member

Currently we always use a button element inside the mat-chip-row which can be confusing for users if the row isn't editable, because the button won't do anything.

These changes switch to using a span whose role we toggle based on whether it's editable.

The change ended up trickier than expected, because:

  1. The focus behavior of the span is slightly different from the button we had before.
  2. The focus restoration after an edit is finished is currently working by accident. When editing starts, we set isInteractive = false on the primary action which clears its tabindex. When editing is finished, we reset the flag, but change detection hasn't had the chance to run so the element won't actually have a tabindex at the moment when we try to restore focus. It worked by accident because a button is still focusable even without a tabindex.

An alternative approach I was testing out was to swap between a span and button element based on the editable input, but that didn't work, because we have a ViewChild query for the primary action which wasn't being updated by the framework.

@crisbeto crisbeto added P2 The issue is important to a large percentage of users, with a workaround G This is is related to a Google internal issue target: patch This PR is targeted for the next patch release labels Jul 22, 2022
@crisbeto crisbeto requested a review from mmalerba as a code owner July 22, 2022 08:24
…p row isn't editable

Currently we always use a `button` element inside the `mat-chip-row` which can be confusing for users if the row isn't editable, because the button won't do anything.

These changes switch to using a `span` whose `role` we toggle based on whether it's editable.

The change ended up trickier than expected, because:
1. The focus behavior of the `span` is slightly different from the button we had before.
2. The focus restoration after an edit is finished is currently working by accident. When editing starts, we set `isInteractive = false` on the primary action which clears its `tabindex`. When editing is finished, we reset the flag, but change detection hasn't had the chance to run so the element won't actually have a `tabindex` at the moment when we try to restore focus. It worked by accident because a `button` is still focusable even without a `tabindex`.

An alternative approach I was testing out was to swap between a `span` and `button` element based on the `editable` input, but that didn't work, because we have a `ViewChild` query for the primary action which wasn't being updated by the framework.
@crisbeto crisbeto added the action: merge The PR is ready for merge by the caretaker label Jul 25, 2022
@crisbeto crisbeto merged commit e383efd into angular:main Jul 25, 2022
crisbeto added a commit that referenced this pull request Jul 25, 2022
…p row isn't editable (#25327)

Currently we always use a `button` element inside the `mat-chip-row` which can be confusing for users if the row isn't editable, because the button won't do anything.

These changes switch to using a `span` whose `role` we toggle based on whether it's editable.

The change ended up trickier than expected, because:
1. The focus behavior of the `span` is slightly different from the button we had before.
2. The focus restoration after an edit is finished is currently working by accident. When editing starts, we set `isInteractive = false` on the primary action which clears its `tabindex`. When editing is finished, we reset the flag, but change detection hasn't had the chance to run so the element won't actually have a `tabindex` at the moment when we try to restore focus. It worked by accident because a `button` is still focusable even without a `tabindex`.

An alternative approach I was testing out was to swap between a `span` and `button` element based on the `editable` input, but that didn't work, because we have a `ViewChild` query for the primary action which wasn't being updated by the framework.

(cherry picked from commit e383efd)
crisbeto added a commit that referenced this pull request Jul 25, 2022
…p row isn't editable (#25327)

Currently we always use a `button` element inside the `mat-chip-row` which can be confusing for users if the row isn't editable, because the button won't do anything.

These changes switch to using a `span` whose `role` we toggle based on whether it's editable.

The change ended up trickier than expected, because:
1. The focus behavior of the `span` is slightly different from the button we had before.
2. The focus restoration after an edit is finished is currently working by accident. When editing starts, we set `isInteractive = false` on the primary action which clears its `tabindex`. When editing is finished, we reset the flag, but change detection hasn't had the chance to run so the element won't actually have a `tabindex` at the moment when we try to restore focus. It worked by accident because a `button` is still focusable even without a `tabindex`.

An alternative approach I was testing out was to swap between a `span` and `button` element based on the `editable` input, but that didn't work, because we have a `ViewChild` query for the primary action which wasn't being updated by the framework.

(cherry picked from commit e383efd)
crapStone pushed a commit to Calciumdibromid/CaBr2 that referenced this pull request Aug 9, 2022
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@angular/cdk](https://github.com/angular/components) | dependencies | patch | [`14.1.0` -> `14.1.1`](https://renovatebot.com/diffs/npm/@angular%2fcdk/14.1.0/14.1.1) |
| [@angular/material](https://github.com/angular/components) | dependencies | patch | [`14.1.0` -> `14.1.1`](https://renovatebot.com/diffs/npm/@angular%2fmaterial/14.1.0/14.1.1) |

---

### Release Notes

<details>
<summary>angular/components</summary>

### [`v14.1.1`](https://github.com/angular/components/blob/HEAD/CHANGELOG.md#&#8203;1411-moissanite-mango-2022-08-03)

[Compare Source](angular/components@14.1.0...14.1.1)

##### cdk

| Commit | Type | Description |
| -- | -- | -- |
| [251c9abdf](angular/components@251c9ab) | fix | **dialog:** use config injector if provided ([#&#8203;25332](angular/components#25332)) |
| [636dd60ee](angular/components@636dd60) | fix | **drag-drop:** expose pickup position in constrainPosition callback ([#&#8203;25341](angular/components#25341)) |
| [aea1a5d67](angular/components@aea1a5d) | fix | **overlay:** detach overlay when portal is destroyed from the outside ([#&#8203;25212](angular/components#25212)) |
| [63ca33bc8](angular/components@63ca33b) | fix | **schematics:** strip bom from sass files ([#&#8203;25364](angular/components#25364)) |

##### material-experimental

| Commit | Type | Description |
| -- | -- | -- |
| [e045e8d49](angular/components@e045e8d) | fix | **mdc-chips:** don't use button element if chip row isn't editable ([#&#8203;25327](angular/components#25327)) |
| [394b93f18](angular/components@394b93f) | fix | **mdc-slider:** skip resizing while the user is dragging ([#&#8203;25318](angular/components#25318)) |

#### Special Thanks

Amadou Sall, Kristiyan Kostadinov, Paul Gschwendtner and Serge

<!-- CHANGELOG SPLIT MARKER -->

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xNDEuMCIsInVwZGF0ZWRJblZlciI6IjMyLjE0MS4wIn0=-->

Co-authored-by: cabr2-bot <cabr2.help@gmail.com>
Co-authored-by: Epsilon_02 <epsilon_02@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1491
Reviewed-by: Epsilon_02 <epsilon_02@noreply.codeberg.org>
Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Aug 25, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
action: merge The PR is ready for merge by the caretaker G This is is related to a Google internal issue P2 The issue is important to a large percentage of users, with a workaround target: patch This PR is targeted for the next patch release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants