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

Angular: Fix template props not able to use dot notation #28588

Merged

Conversation

Marklb
Copy link
Member

@Marklb Marklb commented Jul 13, 2024

Closes #28577

What I did

In an Angular template, if the left side of an input is wrapped in brackets or output in parenthesis, then the right side is typescript-like. (ex. [input]="<typescript-like>", [output]="<typescript-like>") That code segment is in a context primarily consisting of the component instance's public properties. I haven't looked at how the compiler translates that code exactly, in a while, but it should be something like the following. (Template: [input]="myValue", Compiled: component.input = this.myValue)

In javascript, you can have a property named 'my-value', but you can't access that value like this.my-value. The same is true for the code segments of an Angular template.

This change checks the name to see if it is valid for accessing with dot notation. If it isn't then it is formatted the following way: [input]="this['my-value']"

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

I can add this to a story, but it is just formatting of an uncommon scenario. I think running the unit test should be enough.

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

🦋 Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>

name before after diff z %
createSize 0 B 0 B 0 B - -
generateSize 76.5 MB 76.5 MB 0 B 1.21 0%
initSize 198 MB 198 MB 0 B -0.46 0%
diffSize 121 MB 121 MB 0 B -0.48 0%
buildSize 7.59 MB 7.59 MB 0 B 2.9 0%
buildSbAddonsSize 1.63 MB 1.63 MB 0 B 2.91 0%
buildSbCommonSize 195 kB 195 kB 0 B - 0%
buildSbManagerSize 2.3 MB 2.3 MB 0 B 2 0%
buildSbPreviewSize 349 kB 349 kB 0 B 3 0%
buildStaticSize 0 B 0 B 0 B - -
buildPrebuildSize 4.47 MB 4.47 MB 0 B 2.95 0%
buildPreviewSize 3.12 MB 3.12 MB 0 B 2.38 0%
testBuildSize 0 B 0 B 0 B - -
testBuildSbAddonsSize 0 B 0 B 0 B - -
testBuildSbCommonSize 0 B 0 B 0 B - -
testBuildSbManagerSize 0 B 0 B 0 B - -
testBuildSbPreviewSize 0 B 0 B 0 B - -
testBuildStaticSize 0 B 0 B 0 B - -
testBuildPrebuildSize 0 B 0 B 0 B - -
testBuildPreviewSize 0 B 0 B 0 B - -
name before after diff z %
createTime 9.1s 21.2s 12s 1.21 56.7%
generateTime 21.8s 23s 1.2s 0.26 5.5%
initTime 23.5s 23.6s 91ms 0.08 0.4%
buildTime 14.6s 13.3s -1s -334ms -1 -10%
testBuildTime 0ms 0ms 0ms - -
devPreviewResponsive 8s 8s -34ms -0.63 -0.4%
devManagerResponsive 5.5s 5.7s 121ms 0.28 2.1%
devManagerHeaderVisible 874ms 823ms -51ms 0.59 -6.2%
devManagerIndexVisible 898ms 857ms -41ms 0.68 -4.8%
devStoryVisibleUncached 1.1s 1.8s 727ms 4.48 🔺38.8%
devStoryVisible 914ms 881ms -33ms 0.68 -3.7%
devAutodocsVisible 809ms 745ms -64ms 0.14 -8.6%
devMDXVisible 706ms 694ms -12ms -0.83 -1.7%
buildManagerHeaderVisible 1.1s 766ms -353ms -0.24 -46.1%
buildManagerIndexVisible 1.1s 800ms -342ms 0.05 -42.7%
buildStoryVisible 1.1s 809ms -389ms -0.34 -48.1%
buildAutodocsVisible 1s 694ms -384ms -0.33 -55.3%
buildMDXVisible 786ms 670ms -116ms -0.26 -17.3%

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

PR Summary

  • Added tests in /code/frameworks/angular/src/client/angular-beta/ComputesTemplateFromComponent.test.ts to verify correct handling of non-dot notation properties.
  • Introduced formatPropInTemplate function in /code/frameworks/angular/src/client/angular-beta/ComputesTemplateFromComponent.ts to handle invalid dot notation property names.
  • Updated /code/frameworks/angular/src/client/angular-beta/__testfixtures__/input.component.ts with new @input and @output properties for non-dot notation cases.
  • Enhanced /code/frameworks/angular/src/client/argsToTemplate.test.ts with a test case for non-dot notation property handling.
  • Modified /code/frameworks/angular/src/client/argsToTemplate.ts to use formatPropInTemplate for formatting property names correctly.

5 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

Copy link

nx-cloud bot commented Jul 13, 2024

☁️ Nx Cloud Report

CI is running/has finished running commands for commit d40abaa. As they complete they will appear below. Click to see the status, the terminal output, and the build insights.

📂 See all runs for this CI Pipeline Execution


✅ Successfully ran 1 target

Sent with 💌 from NxCloud.

Copy link
Contributor

@valentinpalkovic valentinpalkovic left a comment

Choose a reason for hiding this comment

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

LGTM!
Thank you for also adding some tests. It is much appreciated

@valentinpalkovic valentinpalkovic merged commit 1b2d50a into storybookjs:next Jul 24, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

3 participants