👋 Emberistas! 🐹
This week: Polyfilled ember-data packages syntax for all Ember apps 📦, use Figma with Storybook to make your developer life easier 🎨, QUnit DOM announces v1.0 release 🎂, and check out the ember-changeset 3.0.0 release 🎉!
The ember-data packages API allows you to import objects and methods from smaller packages in the ember-data module following guidelines similar to the ones established in the Ember Modules RFC#176. With real and resolvable package paths, many developers can directly benefit from them with improved code reference information in their IDE. The ember-data packages API is available since ember-data 3.11.
There's nothing like a new, shiny API that makes your developer life easier. Even better if you can already use that API in your application without any upgrading! Users of ember-data with version 3.10 and below get to benefit from the new way of importing with the help of the ember-data packages polyfill!
The polyfill ensures that any instances of the Packages API import statements are transformed back to the legacy "DS" EmberData import syntax. You can opt-in to using the polyfill in your app, by upgrading your ember-cli-babel dependency to version 7.14 or higher for this new feature.
Wanna learn more about how to use the new packages import syntax for ember-data? Be sure to give the Ember 3.11 release post another read for practical code examples on how to use it and pop by the #ember-data channel on the Ember Discord for more questions and discussions.
Thomas Gossmann (@gossi) has started a blog post series on Figma, Ember and Storybook. Part 1: Full Featured Themes in Figma has been published and will tell you all about how to organise your design in Figma.
Stay tuned for Part 2 on design tokens and Part 3 on documentation within the Ember Ecosystem. Follow @unistyler on Twitter to be notified when they are published.
You can find the design system and code on GitHub.
QUnit DOM provides readable assertions for QUnit and has been shipped with Ember since v3.1. If you haven't tried QUnit DOM yet, we recommend checking out its API to see how you can simplify your tests.
With version 1.0, you can use assertion chaining:
1 2 3 4
assert.dom('[data-test-input="Email"]') .isRequired() .hasAttribute('type', 'email') .hasValue('firstname.lastname@example.org');
You can also try out a new assertion,
hasProperty, to check for DOM properties. There can be subtle differences between
hasAttribute (to check for HTML attributes) and
hasProperty (for DOM properties):
1 2 3 4 5 6 7 8 9 10
// These two assertions are equivalent. assert.dom('[data-test-input="I Agree"]') .hasAttribute('checked', '') .hasProperty('checked', true); // These three assertions are equivalent. assert.dom('[data-test-button="Delete"]') .hasClass('btn').hasClass('btn-red') .hasAttribute('class', 'btn btn-red') .hasProperty('className', 'btn btn-red');
To learn more about when you might use
The ember-changeset addon officially released version 3.0.0. The addon provides a Changeset class that represents a set of valid changes for any Object (
DS.Model, POJOs, etc). The idea is only the changeset's internal values are updated until we invoke the save method which would set and save the valid changes onto the provided object.
This release requires Ember 3.13 and above and the use of @tracked will help ember-changeset monitor and propagate changes to the UI layer. If your app is < 3.13 or you need to support IE11, then you can install the 2.0 series. Watch a free video intro presented by EmberScreencasts and use ember-changeset today!
This week we'd like to thank @bobisjan, @chancancode, @xg-wang, @pzuraq, @efx, @rwwagner90, @jenweber, @lifeart, @chadhietala, @mansona and @pichfl for their contributions to Ember and related repositories! 💖
Wondering about something related to Ember, Ember Data, Glimmer, or addons in the Ember ecosystem, but don't know where to ask? Readers’ Questions are just for you!
Submit your own short and sweet question under bit.ly/ask-ember-core. And don’t worry, there are no silly questions, we appreciate them all - promise! 🤞
That's another wrap! ✨
Chris Ng, Anne-Greeth van Herwijnen, Isaac Lee, Jessica Jordan, Amy Lam and the Learning Team