Merge pull request #2856 from storybooks/angular-custom-styles

Add option to pass custom styles for angular components
This commit is contained in:
Igor 2018-01-31 10:17:00 +02:00 committed by GitHub
commit 223c8bacb0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 108 additions and 8 deletions

View File

@ -86,11 +86,12 @@ const getAnnotatedComponent = ({ componentMeta, component, params, knobStore, ch
return KnobWrapperComponent;
};
const createComponentFromTemplate = template => {
const createComponentFromTemplate = (template, styles) => {
const componentClass = class DynamicComponent {};
return Component({
template,
styles,
})(componentClass);
};
@ -106,10 +107,10 @@ export function prepareComponent({ getStory, context, channel, knobStore }) {
resetKnobs(knobStore, channel);
const story = getStory(context);
let { component } = story;
const { template } = story;
const { template, styles } = story;
if (!component) {
component = createComponentFromTemplate(template);
component = createComponentFromTemplate(template, styles);
}
const { componentMeta, props, params, moduleMetadata } = getComponentMetadata({

View File

@ -68,26 +68,27 @@ const getModule = (
return NgModule(moduleMeta)(moduleClass);
};
const createComponentFromTemplate = (template: string): Function => {
const createComponentFromTemplate = (template: string, styles: string[]): Function => {
const componentClass = class DynamicComponent {};
return Component({
template: template,
template,
styles,
})(componentClass);
};
const initModule = (
currentStory: IGetStoryWithContext,
context: IContext,
reRender: boolean = false,
reRender: boolean = false
): Function => {
const storyObj = currentStory(context);
const { component, template, props, moduleMetadata = {} } = storyObj;
const { component, template, props, styles, moduleMetadata = {} } = storyObj;
let AnnotatedComponent;
if (template) {
AnnotatedComponent = createComponentFromTemplate(template);
AnnotatedComponent = createComponentFromTemplate(template, styles);
} else {
AnnotatedComponent = component;
}

View File

@ -16,6 +16,7 @@ export interface NgStory {
propsMeta?: ICollection;
moduleMetadata?: NgModuleMetadata;
template?: string;
styles?: string[];
}
export interface NgError {

View File

@ -0,0 +1,54 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots Custom Style Default 1`] = `
<storybook-dynamic-app-root
cfr={[Function CodegenComponentFactoryResolver]}
data={[Function Object]}
target={[Function ViewContainerRef_]}
>
<ng-component>
<storybook-button-component
_nghost-c9=""
ng-reflect-text="Button with custom styles"
>
<button
_ngcontent-c9=""
>
Button with custom styles
</button>
</storybook-button-component>
</ng-component>
</storybook-dynamic-app-root>
`;
exports[`Storyshots Custom Style With Knobs 1`] = `
<storybook-dynamic-app-root
cfr={[Function CodegenComponentFactoryResolver]}
data={[Function Object]}
target={[Function ViewContainerRef_]}
>
<ng-component
_nghost-c10=""
>
<storybook-button-component
_ngcontent-c10=""
_nghost-c11=""
ng-reflect-text="Button with custom styles"
>
<button
_ngcontent-c11=""
>
Button with custom styles
</button>
</storybook-button-component>
</ng-component>
</storybook-dynamic-app-root>
`;

View File

@ -0,0 +1,43 @@
import { storiesOf } from '@storybook/angular';
import { action } from '@storybook/addon-actions';
import { withKnobs, text } from '@storybook/addon-knobs/angular';
import { Button } from '@storybook/angular/demo';
storiesOf('Custom Style', module)
.add('Default', () => ({
template: `<storybook-button-component [text]="text" (onClick)="onClick($event)"></storybook-button-component>`,
moduleMetadata: {
declarations: [Button],
},
props: {
text: 'Button with custom styles',
onClick: action('log'),
},
styles: [
`
storybook-button-component {
background-color: yellow;
padding: 25px;
}
`,
],
}))
.addDecorator(withKnobs)
.add('With Knobs', () => ({
template: `<storybook-button-component [text]="text" (onClick)="onClick($event)"></storybook-button-component>`,
moduleMetadata: {
declarations: [Button],
},
props: {
text: text('text', 'Button with custom styles'),
onClick: action('log'),
},
styles: [
`
storybook-button-component {
background-color: red;
padding: 25px;
}
`,
],
}));