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(animations): enable shadowElements to leave when their parent does #46459

Closed

Conversation

dario-piotrowicz
Copy link
Contributor

when a component uses the shadowDom view encapsulation its children are
not rendered as normal HTML children of the element but they are
insterted in the element's shadowRoot, this causes the leave of the
element not to be normally propagated to the shadow child elements, fix
such issue

resolves #46450

PR Checklist

Please check if your PR fulfills the following requirements:

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • angular.io application / infrastructure changes
  • Other... Please describe:

What is the current behavior?

If I have a component with ShadowDom view encapsulation and that component leaves the dom, its child elements won't receive a leave event (thus will not animate)

Issue Number: #46450

What is the new behavior?

The child elements of the component with ShadowDom view encapsulation receive the leave event as usual and can therefore animate their leave animations

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

  • interestingly this does not make the minimal reproduction I provided in the issue work 100% correctly, it makes it better by propagating the leave event but the parent gets removed without waiting for the child animation to finish, I will look into that next 🙂
  • I've found a very similar issue, the query function does not seem to take the shadowDom into account, so if you query for some elements inside a shadowRoot (from outside the shadowRoot) the query call will fail, another thing that I'll look into 🙂 (let me know if it's worth opening an issue explaining it better)
  • I get the feeling there may be more issues related to not drilling inside shadowDoms 🤔

when a component uses the shadowDom view encapsulation its children are
not rendered as normal HTML children of the element but they are
insterted in the element's shadowRoot, this causes the leave of the
element not to be normally propagated to the shadow child elements, fix
such issue

resolves angular#46450
@@ -2832,6 +2832,64 @@ describe('animation query tests', function() {
]);
}));

it(`should emulate a leave animation on a child elements when a parent component using shadowDom leaves the DOM`,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems like a too straightforward test but it does indeed not pass without the changes 🙂
Screenshot at 2022-06-22 21-12-23

Copy link
Contributor

@jessicajaniuk jessicajaniuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🍪

As usual, thanks @dario-piotrowicz. This seems like a reasonable fix to me.

reviewed-for: fw-core, fw-animations

@ngbot ngbot bot added this to the Backlog milestone Jun 22, 2022
@jessicajaniuk jessicajaniuk added target: patch This PR is targeted for the next patch release action: presubmit The PR is in need of a google3 presubmit labels Jun 22, 2022
@@ -314,11 +314,13 @@ export class AnimationTransitionNamespace {

private _signalRemovalForInnerTriggers(rootElement: any, context: any) {
const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);

const shadowElements = rootElement.shadowRoot ?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A bit of an edge case, but this won't handle nested shadow roots.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah yeah, you're totally right, as I mentioned in the PR's description I already saw that querying does not work with shadowDom, I'll look into improving the query function to also take shadowDom into account, so I think that should fix the case you're mentioning

So if you prefer I extend this PR with the query improvement or we can try to merge it now and look into the querying issue as a separate task, please let me know whatever works best for you 🙂

(I think I'd go with extending the query function as a separate PR, but I'll need to make extra sure that this piece of code is cleaned up)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine with merging it as it is, but I wanted to flag it as a potential issue.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

awesome thanks 🙂 , I'll make sure to address it! 👍

@AndrewKushnir AndrewKushnir added action: merge The PR is ready for merge by the caretaker and removed action: presubmit The PR is in need of a google3 presubmit labels Jun 23, 2022
@dylhunn
Copy link
Contributor

dylhunn commented Jun 23, 2022

This PR was merged into the repository by commit b417370.

@dylhunn dylhunn closed this in b417370 Jun 23, 2022
dylhunn pushed a commit that referenced this pull request Jun 23, 2022
#46459)

when a component uses the shadowDom view encapsulation its children are
not rendered as normal HTML children of the element but they are
insterted in the element's shadowRoot, this causes the leave of the
element not to be normally propagated to the shadow child elements, fix
such issue

resolves #46450

PR Close #46459
@dario-piotrowicz dario-piotrowicz deleted the animations-shadow-bug branch June 23, 2022 21:13
crapStone pushed a commit to Calciumdibromid/CaBr2 that referenced this pull request Jul 4, 2022
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@angular/animations](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fanimations/14.0.3/14.0.4) |
| [@angular/common](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fcommon/14.0.3/14.0.4) |
| [@angular/compiler](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fcompiler/14.0.3/14.0.4) |
| [@angular/compiler-cli](https://github.com/angular/angular) | devDependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fcompiler-cli/14.0.3/14.0.4) |
| [@angular/core](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fcore/14.0.3/14.0.4) |
| [@angular/forms](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fforms/14.0.3/14.0.4) |
| [@angular/platform-browser](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fplatform-browser/14.0.3/14.0.4) |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular) | dependencies | patch | [`14.0.3` -> `14.0.4`](https://renovatebot.com/diffs/npm/@angular%2fplatform-browser-dynamic/14.0.3/14.0.4) |

---

### Release Notes

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

### [`v14.0.4`](https://github.com/angular/angular/blob/HEAD/CHANGELOG.md#&#8203;1404-2022-06-29)

[Compare Source](angular/angular@14.0.3...14.0.4)

##### animations

| Commit | Type | Description |
| -- | -- | -- |
| [51be9bbe29](angular/angular@51be9bb) | fix | cleanup DOM elements when the root view is removed ([#&#8203;45143](angular/angular#45143)) |
| [999aca86c8](angular/angular@999aca8) | fix | enable shadowElements to leave when their parent does ([#&#8203;46459](angular/angular#46459)) |

##### common

| Commit | Type | Description |
| -- | -- | -- |
| [42aed6b13e](angular/angular@42aed6b) | fix | handle CSS custom properties in NgStyle ([#&#8203;46451](angular/angular#46451)) |

##### core

| Commit | Type | Description |
| -- | -- | -- |
| [1e7f22f00a](angular/angular@1e7f22f) | fix | trigger `ApplicationRef.destroy` when Platform is destroyed ([#&#8203;46497](angular/angular#46497)) |
| [8bde2dbc71](angular/angular@8bde2db) | fix | Update ngfor error code to be negative ([#&#8203;46555](angular/angular#46555)) |
| [57e8fc00eb](angular/angular@57e8fc0) | fix | Updates error to use RuntimeError code ([#&#8203;46526](angular/angular#46526)) |

##### forms

| Commit | Type | Description |
| -- | -- | -- |
| [74a26d870e](angular/angular@74a26d8) | fix | Convert existing reactive errors to use RuntimeErrorCode. ([#&#8203;46560](angular/angular#46560)) |
| [747872212d](angular/angular@7478722) | fix | Update a Forms validator error to use RuntimeError ([#&#8203;46537](angular/angular#46537)) |

##### router

| Commit | Type | Description |
| -- | -- | -- |
| [d6fac9e914](angular/angular@d6fac9e) | fix | Ensure that new `RouterOutlet` instances work after old ones are destroyed ([#&#8203;46554](angular/angular#46554)) |

#### Special Thanks

Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Bezael, Chad Ramos, Chellappan, Cédric Exbrayat, Dylan Hunn, George Kalpakas, Jeremy Meiss, Jessica Janiuk, Joey Perrott, KMathy, Kristiyan Kostadinov, Paul Gschwendtner, Pawel Kozlowski, Ramesh Thiruchelvam, Vaibhav Kumar, arturovt, dario-piotrowicz and renovate\[bot]

<!-- 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).

Co-authored-by: cabr2-bot <cabr2.help@gmail.com>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1437
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>
dario-piotrowicz added a commit to dario-piotrowicz/angular that referenced this pull request Jul 7, 2022
…rent does (angular#46459)"

This reverts commit b417370.

The change applied is no longer appropriate since the use of animations
and shadow dom components is discouraged (as of angular#46738)
alxhub pushed a commit that referenced this pull request Jul 7, 2022
…rent does (#46459)" (#46739)

This reverts commit b417370.

The change applied is no longer appropriate since the use of animations
and shadow dom components is discouraged (as of #46738)

PR Close #46739
alxhub pushed a commit that referenced this pull request Jul 7, 2022
…rent does (#46459)" (#46739)

This reverts commit b417370.

The change applied is no longer appropriate since the use of animations
and shadow dom components is discouraged (as of #46738)

PR Close #46739
@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 Jul 24, 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 area: animations target: patch This PR is targeted for the next patch release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Leave animation not propagated on shadow dom components
5 participants