Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Migrate Storybook to 6.4.0 and enable auto-detection of controls (#5249) #5264

Merged
merged 3 commits into from
Dec 1, 2021

Conversation

sunyatasattva
Copy link
Contributor

Previously our Babel configuration conflicted with the one provided by default by Storybook, making us unable to leverage the automatic detection of properties from both JS and TS components to create controls (formerly known as knobs).

Upgrading to 6.4.0 fixes a bug that makes it easier to work with Babel configurations. Also done here:

  • Removed a few deprecated addons in favor of the replacement ones bundled within Storybook Essentials.
  • Add auto-detection of certain control types depending on the property names
  • Add support for TS stories

More context: storybookjs/storybook#12292

Fixes #5249

Screenshots

Screen Shot 2021-11-26 at 20 21 51

Testing

Manual Testing

How to test the changes in this Pull Request:

  1. Run npm run storybook
  2. …be patient 😬
  3. Open Storybook at localhost:6006, in particular, you can look at this component.
  4. Notice there is a new Controls tab, where the properties of the components are auto-detected and documented along with the description

⚠️  Please note: This PR is only addressing the migration and the detection and not touching any stories. As such, I am temporarily keeping the legacy knobs, until each story is properly migrated to the controls paradigm.

User Facing Testing

N/A (internal)

Changelog

Migrated to Storybook 6.4.0 with auto-detection of Controls

@sunyatasattva sunyatasattva added focus: components Work that introduces new or updates existing components. type: task The issue is an internally driven task (e.g. from another A8c team). type: technical debt This issue/PR represents/solves the technical debt of the project. labels Nov 26, 2021
@sunyatasattva sunyatasattva self-assigned this Nov 26, 2021
@rubikuserbot rubikuserbot requested review from a team and Aljullu and removed request for a team November 26, 2021 19:28
Previously our Babel configuration conflicted with the one provided by
default by Storybook, making us unable to leverage the automatic
detection of properties from both JS and TS components to create
controls (formerly known as knobs).

Upgrading to 6.4.0 fixes a bug that makes it easier to work with
Babel configurations. Also done here:

* Removed a few deprecated addons in favor of the replacement ones
bundled within Storybook Essentials.
* Add auto-detection of certain control types depending on the property names
* Add support for TS stories

More context: storybookjs/storybook#12292
@sunyatasattva sunyatasattva force-pushed the update/5249-migrate-storybook-config branch from 339083e to 3331016 Compare November 26, 2021 19:34
@github-actions
Copy link
Contributor

github-actions bot commented Nov 26, 2021

Size Change: 0 B

Total Size: 1.04 MB

ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 6.23 kB
build/active-filters.js 7.09 kB
build/all-products-frontend.js 22.1 kB
build/all-products.js 32.9 kB
build/all-reviews.js 8.31 kB
build/atomic-block-components/add-to-cart--atomic-block-components/button--atomic-block-components/image---a7e2bb9b.js 2.77 kB
build/atomic-block-components/add-to-cart--atomic-block-components/button.js 1.49 kB
build/atomic-block-components/add-to-cart-frontend.js 6.87 kB
build/atomic-block-components/add-to-cart.js 6.44 kB
build/atomic-block-components/button-frontend.js 1.48 kB
build/atomic-block-components/button.js 851 B
build/atomic-block-components/category-list-frontend.js 457 B
build/atomic-block-components/category-list.js 457 B
build/atomic-block-components/image-frontend.js 1.38 kB
build/atomic-block-components/image.js 1.05 kB
build/atomic-block-components/price-frontend.js 1.74 kB
build/atomic-block-components/price.js 1.69 kB
build/atomic-block-components/rating-frontend.js 553 B
build/atomic-block-components/rating.js 554 B
build/atomic-block-components/sale-badge-frontend.js 626 B
build/atomic-block-components/sale-badge.js 624 B
build/atomic-block-components/sku-frontend.js 385 B
build/atomic-block-components/sku.js 385 B
build/atomic-block-components/stock-indicator-frontend.js 583 B
build/atomic-block-components/stock-indicator.js 586 B
build/atomic-block-components/summary-frontend.js 874 B
build/atomic-block-components/summary.js 874 B
build/atomic-block-components/tag-list-frontend.js 458 B
build/atomic-block-components/tag-list.js 457 B
build/atomic-block-components/title-frontend.js 1.11 kB
build/atomic-block-components/title.js 1.11 kB
build/attribute-filter-frontend.js 16.6 kB
build/attribute-filter.js 10.8 kB
build/blocks-checkout.js 20.8 kB
build/cart-blocks/accepted-payment-methods-frontend.js 1.14 kB
build/cart-blocks/checkout-button-frontend.js 1.14 kB
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/express-payment-frontend.js 4.82 kB
build/cart-blocks/filled-cart-frontend.js 768 B
build/cart-blocks/items-frontend.js 298 B
build/cart-blocks/line-items-frontend.js 5.12 kB
build/cart-blocks/order-summary-frontend.js 8.95 kB
build/cart-blocks/totals-frontend.js 320 B
build/cart-frontend.js 49.1 kB
build/cart.js 44.8 kB
build/checkout-blocks/actions-frontend.js 1.44 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.24 kB
build/checkout-blocks/billing-address-frontend.js 890 B
build/checkout-blocks/contact-information-frontend.js 2.94 kB
build/checkout-blocks/express-payment-frontend.js 5.11 kB
build/checkout-blocks/fields-frontend.js 343 B
build/checkout-blocks/order-note-frontend.js 1.13 kB
build/checkout-blocks/order-summary-frontend.js 11.4 kB
build/checkout-blocks/payment-frontend.js 7.49 kB
build/checkout-blocks/shipping-address-frontend.js 976 B
build/checkout-blocks/shipping-methods-frontend.js 4.89 kB
build/checkout-blocks/terms-frontend.js 1.22 kB
build/checkout-blocks/totals-frontend.js 323 B
build/checkout-frontend.js 51.3 kB
build/checkout.js 47.9 kB
build/featured-category.js 6.67 kB
build/featured-product.js 8.02 kB
build/handpicked-products.js 5.37 kB
build/legacy-template.js 2.05 kB
build/mini-cart-component-frontend.js 40.9 kB
build/mini-cart-contents.js 1.81 kB
build/mini-cart-frontend.js 1.74 kB
build/mini-cart.js 6.23 kB
build/price-filter-frontend.js 12.4 kB
build/price-filter.js 8.62 kB
build/price-format.js 1.19 kB
build/product-best-sellers.js 5.57 kB
build/product-categories.js 3.46 kB
build/product-category.js 6.44 kB
build/product-new.js 5.73 kB
build/product-on-sale.js 6.11 kB
build/product-search.js 2.47 kB
build/product-tag.js 5.81 kB
build/product-top-rated.js 5.7 kB
build/products-by-attribute.js 6.61 kB
build/reviews-by-category.js 9.96 kB
build/reviews-by-product.js 11 kB
build/reviews-frontend.js 7.21 kB
build/single-product-frontend.js 25.5 kB
build/single-product.js 8.5 kB
build/stock-filter-frontend.js 6.81 kB
build/stock-filter.js 6.81 kB
build/vendors--atomic-block-components/add-to-cart--cart-blocks/order-summary--checkout-blocks/billing-ad--c5eb4dcd-frontend.js 16.1 kB
build/vendors--atomic-block-components/add-to-cart-frontend.js 4.45 kB
build/vendors--atomic-block-components/price--cart-blocks/line-items--cart-blocks/order-summary--checkout--8a3571de-frontend.js 5.71 kB
build/vendors--cart-blocks/line-items--checkout-blocks/order-summary-frontend.js 3.14 kB
build/vendors--cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/order-summary---eb4d2cec-frontend.js 5.02 kB
build/wc-blocks-data.js 8.84 kB
build/wc-blocks-editor-style-rtl.css 15.8 kB
build/wc-blocks-editor-style.css 15.8 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 949 B
build/wc-blocks-registry.js 2.69 kB
build/wc-blocks-shared-context.js 1.51 kB
build/wc-blocks-shared-hocs.js 1.14 kB
build/wc-blocks-style-rtl.css 21.1 kB
build/wc-blocks-style.css 21.1 kB
build/wc-blocks-vendors-style-rtl.css 1.37 kB
build/wc-blocks-vendors-style.css 1.37 kB
build/wc-blocks-vendors.js 254 kB
build/wc-blocks.js 2.96 kB
build/wc-payment-method-bacs.js 820 B
build/wc-payment-method-cheque.js 816 B
build/wc-payment-method-cod.js 912 B
build/wc-payment-method-paypal.js 838 B
build/wc-payment-method-stripe.js 11.1 kB
build/wc-settings.js 2.58 kB

compressed-size-action

Copy link
Contributor

@Aljullu Aljullu left a comment

Choose a reason for hiding this comment

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

This is working and testing great, and the new features of Storybook are really cool.

The only issue I noticed is that there is quite a big increase in bundle sizes. You can see it if, after building, you compare a file from the build folder between trunk and this branch. You can also see it in the github action results in this PR.

I took a quick look and I think it's caused because of docgen. Is there any way to avoid it being applied to production builds?

@sunyatasattva
Copy link
Contributor Author

Yep, this is indeed a problem I noticed and I don't have a great answer for it @Aljullu. Formerly, it was possible to have a Babel configuration that was specific for Storybook, but this is apparently not supported anymore, according to the docs:

In 6.x, Storybook supported a .storybook/babelrc configuration option. This is no longer supported and it's up to you to reconcile this with your project babelrc.

I had in fact asked clarification on this on the thread I had made on the Storybook repo specifically because of this bundle size increase: storybookjs/storybook#16789 (comment)

Any suggestion on this would be appreciated. Maybe I can force the NODE_ENV to be development and use the docgen plugin only then, but perhaps building storybook would have further differences? 🤔 Again, any suggestion appreciated.

This should reduce production bundle size dramatically. The only
problem here is that Storybook runs its `build` command with the
`NODE_ENV` set to `production`. For this reason, we change the
script to provide `BABEL_ENV` set to `development` to still make sure
the correct configuration is loaded, while trying to reduce any
side-effects on changing the whole `NODE_ENV`.
@sunyatasattva
Copy link
Contributor Author

@Aljullu problem fixed. 0% increase in production bundle size. I have enabled doc generation only on development environment. My only issue with that as mentioned in the previous comment is that I didn't want to change NODE_ENV. Good news is that I didn't have to, as I only changed BABEL_ENV and provided Babel with an extra config for development transpilation and forced Storybook to get that when building and deploying itself.

Let me know what you think about this solution.

@sunyatasattva sunyatasattva force-pushed the update/5249-migrate-storybook-config branch from b93adf3 to 59e1573 Compare December 1, 2021 02:06
Copy link
Contributor

@Aljullu Aljullu left a comment

Choose a reason for hiding this comment

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

Thanks for investigating this, @sunyatasattva! LGTM. 🚢

@sunyatasattva sunyatasattva merged commit 08d4575 into trunk Dec 1, 2021
@sunyatasattva sunyatasattva deleted the update/5249-migrate-storybook-config branch December 1, 2021 11:28
jonny-bull pushed a commit to jonny-bull/woocommerce-gutenberg-products-block that referenced this pull request Dec 14, 2021
…commerce#5249) (woocommerce#5264)

* Migrate Storybook to 6.4.0 and enable auto-detection of controls (woocommerce#5249)

Previously our Babel configuration conflicted with the one provided by
default by Storybook, making us unable to leverage the automatic
detection of properties from both JS and TS components to create
controls (formerly known as knobs).

Upgrading to 6.4.0 fixes a bug that makes it easier to work with
Babel configurations. Also done here:

* Removed a few deprecated addons in favor of the replacement ones
bundled within Storybook Essentials.
* Add auto-detection of certain control types depending on the property names
* Add support for TS stories

More context: storybookjs/storybook#12292

* Use `react-docgen` only in development environments

This should reduce production bundle size dramatically. The only
problem here is that Storybook runs its `build` command with the
`NODE_ENV` set to `production`. For this reason, we change the
script to provide `BABEL_ENV` set to `development` to still make sure
the correct configuration is loaded, while trying to reduce any
side-effects on changing the whole `NODE_ENV`.
jonny-bull pushed a commit to jonny-bull/woocommerce-gutenberg-products-block that referenced this pull request Dec 16, 2021
…commerce#5249) (woocommerce#5264)

* Migrate Storybook to 6.4.0 and enable auto-detection of controls (woocommerce#5249)

Previously our Babel configuration conflicted with the one provided by
default by Storybook, making us unable to leverage the automatic
detection of properties from both JS and TS components to create
controls (formerly known as knobs).

Upgrading to 6.4.0 fixes a bug that makes it easier to work with
Babel configurations. Also done here:

* Removed a few deprecated addons in favor of the replacement ones
bundled within Storybook Essentials.
* Add auto-detection of certain control types depending on the property names
* Add support for TS stories

More context: storybookjs/storybook#12292

* Use `react-docgen` only in development environments

This should reduce production bundle size dramatically. The only
problem here is that Storybook runs its `build` command with the
`NODE_ENV` set to `production`. For this reason, we change the
script to provide `BABEL_ENV` set to `development` to still make sure
the correct configuration is loaded, while trying to reduce any
side-effects on changing the whole `NODE_ENV`.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
focus: components Work that introduces new or updates existing components. type: task The issue is an internally driven task (e.g. from another A8c team). type: technical debt This issue/PR represents/solves the technical debt of the project.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Migrate to latest Storybook best-practices
2 participants