12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import type {RouteComponentProps} from 'react-router';
- import styled from '@emotion/styled';
- import {space} from 'sentry/styles/space';
- import EmptyStory from 'sentry/views/stories/emptyStory';
- import ErrorStory from 'sentry/views/stories/errorStory';
- import storiesContext from 'sentry/views/stories/storiesContext';
- import StoryFile from 'sentry/views/stories/storyFile';
- import StoryHeader from 'sentry/views/stories/storyHeader';
- import StoryList from 'sentry/views/stories/storyList';
- import type {StoriesQuery} from 'sentry/views/stories/types';
- import useStoriesLoader from 'sentry/views/stories/useStoriesLoader';
- type Props = RouteComponentProps<{}, {}, any, StoriesQuery>;
- export default function Stories({location}: Props) {
- const story = useStoriesLoader({filename: location.query.name});
- return (
- <Layout>
- <StoryHeader style={{gridArea: 'head'}} />
- <aside style={{gridArea: 'aside'}}>
- <StoryList files={storiesContext().files()} />
- </aside>
- {story.error ? (
- <VerticalScroll style={{gridArea: 'body'}}>
- <ErrorStory error={story.error} />
- </VerticalScroll>
- ) : story.resolved ? (
- <Main style={{gridArea: 'body'}}>
- <StoryFile filename={story.filename} resolved={story.resolved} />
- </Main>
- ) : (
- <VerticalScroll style={{gridArea: 'body'}}>
- <EmptyStory />
- </VerticalScroll>
- )}
- </Layout>
- );
- }
- const Layout = styled('div')`
- --stories-grid-space: ${space(2)};
- display: grid;
- grid-template:
- 'head head' max-content
- 'aside body' auto/ ${p => p.theme.settings.sidebarWidth} 1fr;
- gap: var(--stories-grid-space);
- place-items: stretch;
- height: 100vh;
- padding: var(--stories-grid-space);
- `;
- const VerticalScroll = styled('main')`
- overflow-x: hidden;
- overflow-y: scroll;
- `;
- /**
- * Avoid <Panel> here because nested panels will have a modified theme.
- * Therefore stories will look different in prod.
- */
- const Main = styled(VerticalScroll)`
- background: ${p => p.theme.background};
- border-radius: ${p => p.theme.panelBorderRadius};
- border: 1px solid ${p => p.theme.border};
- padding: var(--stories-grid-space);
- overflow-x: hidden;
- overflow-y: scroll;
- position: relative;
- `;
|