packages/storybook: add global apis decorator (#1058)

This commit is contained in:
Patrik Oldsberg
2020-05-28 21:48:21 +02:00
committed by GitHub
parent ce66dc2bb1
commit 828e6675c8
3 changed files with 27 additions and 30 deletions
@@ -16,33 +16,10 @@
import React from 'react';
import CopyTextButton from '.';
import {
ApiProvider,
errorApiRef,
ApiRegistry,
ErrorApi,
} from '@backstage/core-api';
export default {
title: 'CopyTextButton',
component: CopyTextButton,
decorators: [
(storyFn: () => JSX.Element) => {
// TODO: move this to common storybook config, requires core package to be separate from components
const registry = ApiRegistry.from([
[
errorApiRef,
{
post(error) {
// eslint-disable-next-line no-alert
window.alert(`Component posted error, ${error}`);
},
} as ErrorApi,
],
]);
return <ApiProvider apis={registry} children={storyFn()} />;
},
],
};
export const Default = () => (
+16
View File
@@ -0,0 +1,16 @@
import {
ApiRegistry,
alertApiRef,
errorApiRef,
AlertApiForwarder,
ErrorApiForwarder,
ErrorAlerter,
} from '@backstage/core';
const builder = ApiRegistry.builder();
const alertApi = builder.add(alertApiRef, new AlertApiForwarder());
builder.add(errorApiRef, new ErrorAlerter(alertApi, new ErrorApiForwarder()));
export const apis = builder.build();
+11 -7
View File
@@ -3,14 +3,18 @@ import { addDecorator, addParameters } from '@storybook/react';
import { lightTheme, darkTheme } from '@backstage/theme';
import { CssBaseline, ThemeProvider } from '@material-ui/core';
import { useDarkMode } from 'storybook-dark-mode';
import { Content } from '@backstage/core';
import { Content, ApiProvider, AlertDisplay } from '@backstage/core';
import { apis } from './apis';
addDecorator((story) => (
<ThemeProvider theme={useDarkMode() ? darkTheme : lightTheme}>
<CssBaseline>
<Content>{story()}</Content>
</CssBaseline>
</ThemeProvider>
addDecorator(story => (
<ApiProvider apis={apis}>
<ThemeProvider theme={useDarkMode() ? darkTheme : lightTheme}>
<CssBaseline>
<AlertDisplay />
<Content>{story()}</Content>
</CssBaseline>
</ThemeProvider>
</ApiProvider>
));
addParameters({