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(runtime): slot name forwarding & attribute reset #4993

Merged
merged 4 commits into from
Oct 27, 2023

Conversation

tanner-reits
Copy link
Contributor

What is the current behavior?

There is a possible issue with slot relocation when moving nodes into nested components where slot names change along the path of relocation. Currently, Stencil will not execute the logic to change slot attributes on relocated elements unless they are being relocated into a Shadow element. This was causing issues with elements receiving the hidden attribute when relocated because we weren't resolving the slot reference node based on the correct slot name.

GitHub Issue Number: N/A

What is the new behavior?

We now perform the same slot name forwarding logic we do when moving from a non-shadow to shadow component. The putBackInOriginalLocation method was also updated to reset the slot attribute on re-relocated nodes back to their original value so relocation can work correctly on subsequent re-renders.

Does this introduce a breaking change?

  • Yes
  • No

Testing

All current e2e and unit tests continue to pass. Added a e2e test for the specific slot-name forwarding case this was located in.

Other information

This behavior is only available with the experimentalSlotFixes extras config flag active.

Copy link
Contributor Author

@tanner-reits tanner-reits left a comment

Choose a reason for hiding this comment

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

Noting one thing

childNode.hidden = true;
break;
// Don't check the node against itself
if (siblingNode !== childNode) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

All I did here was wrap the existing logic in a check so we aren't hiding slot fallback content when comparing the exact same node

@github-actions
Copy link
Contributor

--strictNullChecks error report

Typechecking with --strictNullChecks resulted in 1393 errors on this branch.

That's the same number of errors on main, so at least we're not creating new ones!

reports and statistics

Our most error-prone files
Path Error Count
src/dev-server/index.ts 37
src/mock-doc/serialize-node.ts 36
src/dev-server/server-process.ts 32
src/compiler/build/build-stats.ts 27
src/compiler/output-targets/dist-lazy/generate-lazy-module.ts 25
src/compiler/style/test/optimize-css.spec.ts 23
src/testing/puppeteer/puppeteer-element.ts 23
src/compiler/prerender/prerender-main.ts 22
src/runtime/vdom/vdom-render.ts 20
src/runtime/client-hydrate.ts 19
src/screenshot/connector-base.ts 19
src/compiler/config/test/validate-paths.spec.ts 16
src/dev-server/request-handler.ts 15
src/compiler/prerender/prerender-optimize.ts 14
src/compiler/sys/stencil-sys.ts 14
src/compiler/transpile/transpile-module.ts 14
src/runtime/vdom/vdom-annotations.ts 14
src/sys/node/node-sys.ts 14
src/compiler/build/build-finish.ts 13
src/compiler/prerender/prerender-queue.ts 13
Our most common errors
Typescript Error Code Count
TS2345 418
TS2322 398
TS18048 310
TS18047 100
TS2722 38
TS2532 34
TS2531 23
TS2454 14
TS2352 13
TS2769 10
TS2790 10
TS2538 8
TS2344 5
TS2416 4
TS2493 3
TS18046 2
TS2684 1
TS2488 1
TS2430 1

Unused exports report

There are 12 unused exports on this PR. That's the same number of errors on main, so at least we're not creating new ones!

Unused exports
File Line Identifier
src/runtime/bootstrap-lazy.ts 21 setNonce
src/screenshot/screenshot-fs.ts 18 readScreenshotData
src/testing/testing-utils.ts 198 withSilentWarn
src/utils/index.ts 145 CUSTOM
src/compiler/app-core/app-data.ts 25 BUILD
src/compiler/app-core/app-data.ts 115 Env
src/compiler/app-core/app-data.ts 117 NAMESPACE
src/compiler/fs-watch/fs-watch-rebuild.ts 123 updateCacheFromRebuild
src/compiler/types/validate-primary-package-output-target.ts 62 satisfies
src/compiler/types/validate-primary-package-output-target.ts 62 Record
src/testing/puppeteer/puppeteer-declarations.ts 485 WaitForEventOptions
src/compiler/sys/fetch/write-fetch-success.ts 7 writeFetchSuccessSync

@tanner-reits tanner-reits marked this pull request as ready for review October 26, 2023 15:17
@tanner-reits tanner-reits requested a review from a team as a code owner October 26, 2023 15:17
// When putting an element node back in it's original location,
// we need to reset the `slot` attribute back to the value it originally had
// so we can correctly relocate it again in the future
if (childNode.nodeType === NODE_TYPE.ElementNode && !childNode['s-sr']) {
Copy link
Contributor

Choose a reason for hiding this comment

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

For my own edification, why do we check that childNode['s-sr'] is falsy?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually, good catch. We don't need to since a slot ref node can only be a text node or comment node, so they'd never pass the first check anyway

Copy link
Contributor

Choose a reason for hiding this comment

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

Wooo!

tanner-reits and others added 2 commits October 26, 2023 15:42
Co-authored-by: Ryan Waskiewicz <ryanwaskiewicz@gmail.com>
@tanner-reits tanner-reits added this pull request to the merge queue Oct 27, 2023
Merged via the queue into main with commit ee60f3b Oct 27, 2023
@tanner-reits tanner-reits deleted the treits/fix/slot-name-forwarding branch October 27, 2023 14:37
@rwaskiewicz rwaskiewicz added the Resolution: Refine This PR is marked for Jira refinement. We're not working on it - we're talking it through. label Oct 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Resolution: Refine This PR is marked for Jira refinement. We're not working on it - we're talking it through.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants