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): nested multiple default slot relocation #5403

Conversation

yigityuce
Copy link
Contributor

What is the current behavior?

  1. getHostSlotNode method was getting the first found slot node. However, the same slot name or even another custom component's default slot can be placed before the searching host element's slot node.
  2. within the nested component structure, already relocated nodes were getting re-ordered by updating the anchor node which is used by insertBefore

GitHub Issue Number: #5335

What is the new behavior?

Documentation

Does this introduce a breaking change?

  • Yes
  • No

Testing

Other information

expected hostname is added to the getHostSlotNode method to retrieve the correct host's slot node since it was getting the first found slot node. However, same slot name or even another custom component's default slot can be placed before the searching host element's slot node

fixes one of the issues raised in ionic-team#5335
Copy link
Contributor

github-actions bot commented Feb 24, 2024

--strictNullChecks error report

Typechecking with --strictNullChecks resulted in 1138 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/dev-server/server-process.ts 32
src/compiler/prerender/prerender-main.ts 22
src/testing/puppeteer/puppeteer-element.ts 21
src/runtime/client-hydrate.ts 20
src/screenshot/connector-base.ts 19
src/runtime/vdom/vdom-render.ts 17
src/dev-server/request-handler.ts 15
src/compiler/prerender/prerender-optimize.ts 14
src/compiler/sys/stencil-sys.ts 14
src/sys/node/node-sys.ts 14
src/compiler/prerender/prerender-queue.ts 13
src/compiler/sys/in-memory-fs.ts 13
src/runtime/connected-callback.ts 13
src/runtime/set-value.ts 13
src/compiler/output-targets/output-www.ts 12
src/compiler/transformers/test/parse-vdom.spec.ts 12
src/compiler/transformers/transform-utils.ts 12
src/compiler/transpile/transpile-module.ts 12
src/mock-doc/test/attribute.spec.ts 12
Our most common errors
Typescript Error Code Count
TS2322 361
TS2345 345
TS18048 204
TS18047 82
TS2722 37
TS2532 24
TS2531 21
TS2454 14
TS2790 11
TS2352 9
TS2769 8
TS2538 8
TS2416 7
TS2493 3
TS18046 2
TS2684 1
TS2430 1

Unused exports report

There are 14 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/utils/index.ts 269 normalize
src/utils/index.ts 7 escapeRegExpSpecialCharacters
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 61 satisfies
src/compiler/types/validate-primary-package-output-target.ts 61 Record
src/testing/puppeteer/puppeteer-declarations.ts 485 WaitForEventOptions
src/compiler/sys/fetch/write-fetch-success.ts 7 writeFetchSuccessSync

Copy link
Contributor

github-actions bot commented Feb 24, 2024

PR built and packed!

Download the tarball here: https://github.com/ionic-team/stencil/actions/runs/8513010369/artifacts/1375372983

If your browser saves files to ~/Downloads you can install it like so:

unzip -d ~/Downloads ~/Downloads/stencil-core-4.14.0-dev.1712001663.e53d20f.tgz.zip && npm install ~/Downloads/stencil-core-4.14.0-dev.1712001663.e53d20f.tgz

@yigityuce yigityuce mentioned this pull request Feb 24, 2024
3 tasks
@christian-bromann
Copy link
Member

@yigityuce it seems like the end-to-end tests are failing due to this patch. The order of element fails when a component is conditionally rendered, e.g.: the following Stencil component:

@Component({
  tag: 'conditional-rerender-root',
})
export class ConditionalRerenderRoot {
  @State() showContent = false;
  @State() showFooter = false;

  componentDidLoad() {
    this.showFooter = true;
    setTimeout(() => (this.showContent = true), 20);
  }

  render() {
    return (
      <conditional-rerender>
        <header>Header</header>
        {this.showContent ? <section>Content</section> : null}
        {this.showFooter ? <footer>Footer</footer> : null}
      </conditional-rerender>
    );
  }
}

Results in the following:

Screenshot 2024-03-05 at 3 48 23 PM

Mind taking a look?

another check is added to avoid changing already relocated nodes order by updating the anchor node which is used by insertBefore

fixes one of the issues raised in ionic-team#5335
@yigityuce yigityuce force-pushed the fix/nested-multiple-default-slot-relocation branch from 5e4e780 to f2d7cdd Compare March 13, 2024 13:05
@yigityuce
Copy link
Contributor Author

hey @christian-bromann & @rwaskiewicz

I just pushed the fix for the regression issue that we were facing with the first implementation. Also, added the e2e tests. Please let me know if you want me to add anything else

@yigityuce
Copy link
Contributor Author

did you have a chance to check this out? @christian-bromann @rwaskiewicz

@christian-bromann
Copy link
Member

@yigityuce thanks for updating the PR and adding tests. Unfortunately since the PR was raised we started a migration process away from Karma to WebdriverIO. Can you do me a favor and migrate the tests you've written in Karma to WebdriverIO? It should be straightforward (copy&paste) and you can find a step by step description in our migration trackker issue. Please let me know if you have any questions along the way and apology for throwing this at you 😝

@yigityuce
Copy link
Contributor Author

hahah no worries @christian-bromann if this helps you in a way, I would do it right away. It will be ready at most 30 mins 🕺

@yigityuce
Copy link
Contributor Author

@christian-bromann done for this fix and also migrated the previous two PR's tests:

Copy link
Member

@christian-bromann christian-bromann left a comment

Choose a reason for hiding this comment

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

Thanks a lot, I think this PR is good to 🚢

I will let the @ionic-team/stencil team to have a another look at it

@yigityuce yigityuce changed the title Fix/nested multiple default slot relocation fix: nested multiple default slot relocation Mar 18, 2024
@yigityuce
Copy link
Contributor Author

anything I can do? @christian-bromann @rwaskiewicz

@rwaskiewicz
Copy link
Member

I'll make sure we get some time allocated to this next sprint. At the moment, we have our hands full with other initiatives

@rwaskiewicz rwaskiewicz self-assigned this Mar 21, 2024
@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 Mar 21, 2024
@rwaskiewicz rwaskiewicz mentioned this pull request Mar 22, 2024
93 tasks
@rwaskiewicz
Copy link
Member

@yigityuce Can you do me a favor and rebase this when you get a chance? We landed the migration of the slot-conditional-rendering suite in #5578 and the slot-ref suite in #5579, which I think we can safely drop from this PR.

@yigityuce
Copy link
Contributor Author

@yigityuce Can you do me a favor and rebase this when you get a chance? We landed the migration of the slot-conditional-rendering suite in #5578 and the slot-ref suite in #5579, which I think we can safely drop from this PR.

sure will be ready in 10 mins!

@yigityuce
Copy link
Contributor Author

@yigityuce Can you do me a favor and rebase this when you get a chance? We landed the migration of the slot-conditional-rendering suite in #5578 and the slot-ref suite in #5579, which I think we can safely drop from this PR.

@rwaskiewicz done 🚀

@yigityuce
Copy link
Contributor Author

hey @rwaskiewicz it's been a month since this PR was created and did what you asked for. Could you pls prioritize this one since we are blocked? Please feel free to reach me for any additional requests or questions. I will get back to you ASAP.

@tanner-reits
Copy link
Member

@yigityuce Thanks for your patience over the last couple weeks as the team's been tied up with other initiatives! Code changes look good so I went ahead and rebased this so all of CI could run. Everything passed so gonna hit that magic green button and get this landed. It'll be included in our next Stencil release (slated for 4/8)!

Thanks for your contribution!

@tanner-reits tanner-reits added this pull request to the merge queue Apr 1, 2024
@tanner-reits tanner-reits removed this pull request from the merge queue due to a manual request Apr 1, 2024
@tanner-reits tanner-reits changed the title fix: nested multiple default slot relocation fix(runtime): nested multiple default slot relocation Apr 1, 2024
@tanner-reits tanner-reits added this pull request to the merge queue Apr 1, 2024
Merged via the queue into ionic-team:main with commit 363c07b Apr 1, 2024
121 checks passed
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.

None yet

4 participants