diff --git a/.storybook/preview.js b/.storybook/preview.js index 720efc6ac..c4d4ff5d2 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -1,5 +1,7 @@ -import './styles/preview.less'; import { themes } from '@storybook/theming'; +import { hbs } from 'ember-cli-htmlbars'; + +import './styles/preview.less'; export const parameters = { actions: { argTypesRegex: '^on[A-Z].*' }, @@ -24,3 +26,15 @@ export const parameters = { theme: themes.dark } }; + +export const decorators = [ + (storyFn, { globals }) => { + return { + template: hbs``, + context: { + globals, + story: storyFn() + } + }; + } +]; diff --git a/tests/dummy/app/components/storybook.hbs b/tests/dummy/app/components/storybook.hbs new file mode 100644 index 000000000..a9540b5f4 --- /dev/null +++ b/tests/dummy/app/components/storybook.hbs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/dummy/app/components/storybook.ts b/tests/dummy/app/components/storybook.ts new file mode 100644 index 000000000..1f35f8eda --- /dev/null +++ b/tests/dummy/app/components/storybook.ts @@ -0,0 +1,45 @@ +import { setComponentTemplate } from '@ember/component'; +import { inject as service } from '@ember/service'; +import Component from '@glimmer/component'; + +import type { IntlService } from 'ember-intl'; + +interface Globals {} + +interface StorybookArgs { + story: { + template: any; + context: Record; + }; + globals: Globals; +} + +export default class StorybookComponent extends Component { + @service declare intl: IntlService; + + constructor(owner: any, args: StorybookArgs) { + super(owner, args); + + this.intl.setLocale('en-us'); + } + + get storyComponent() { + class StoryComponent extends Component {} + + Object.keys(this.storyComponentArgs).forEach((key) => { + Object.defineProperty(StoryComponent.prototype, key, { + get() { + return (this as any).args.__ctx?.[key]; + } + }); + }); + + setComponentTemplate(this.args.story.template, StoryComponent); + + return StoryComponent; + } + + get storyComponentArgs() { + return this.args.story.context ?? {}; + } +}