123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import {Fragment, useState} from 'react';
- import styled from '@emotion/styled';
- import onboardingFrameworkSelectionJavascript from 'sentry-images/spot/onboarding-framework-selection-javascript.svg';
- import ClippedBox from 'sentry/components/clippedBox';
- import JSXNode from 'sentry/components/stories/jsxNode';
- import JSXProperty from 'sentry/components/stories/jsxProperty';
- import Matrix from 'sentry/components/stories/matrix';
- import SideBySide from 'sentry/components/stories/sideBySide';
- import SizingWindow from 'sentry/components/stories/sizingWindow';
- import storyBook from 'sentry/stories/storyBook';
- import {space} from 'sentry/styles/space';
- export default storyBook(ClippedBox, story => {
- story('Default', () => (
- <Fragment>
- <p>
- By default <JSXNode name="ClippedBox" /> is just a container. Add{' '}
- <JSXProperty name="defaultClipped" value /> to occlude the bottom part of the
- content if the content height is larger than{' '}
- <JSXProperty name="clipHeight" value={Number} />. You should also set{' '}
- <JSXProperty name="clipHeight" value={Number} /> (default: 300) to be something
- reasonable for the situation.
- </p>
- <p>
- Once expanded, <JSXNode name="ClippedBox" /> cannot be collapsed again.
- </p>
- <SizingWindow>
- <ClippedBox>
- <img src={onboardingFrameworkSelectionJavascript} height={300} />
- </ClippedBox>
- </SizingWindow>
- </Fragment>
- ));
- const CustomFade = styled('div')`
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- padding: ${space(1)};
- background: ${p => p.theme.background};
- text-align: center;
- pointer-events: none;
- `;
- story('Title', () => (
- <SizingWindow>
- <ClippedBox title="This is the title">
- <img src={onboardingFrameworkSelectionJavascript} height={300} />
- </ClippedBox>
- </SizingWindow>
- ));
- story('Custom Button & Fade', () => (
- <Matrix
- render={ClippedBox}
- propMatrix={{
- btnText: ['Custom Label'],
- buttonProps: [undefined, {priority: 'danger'}],
- clipHeight: [100],
- clipFade: [
- undefined,
- ({showMoreButton}) => <CustomFade>{showMoreButton}</CustomFade>,
- ],
- children: [
- <img key="img" src={onboardingFrameworkSelectionJavascript} height={150} />,
- ],
- }}
- selectedProps={['buttonProps', 'clipFade']}
- />
- ));
- story('Callbacks', () => {
- return (
- <Fragment>
- <p>
- Some callbacks are available:{' '}
- <JSXProperty name="onSetRenderedHeight" value={Function} />
- & <JSXProperty name="onReveal" value={Function} />.
- </p>
- <SideBySide>
- {[50, 100, 150].map(imgHeight => {
- const [isRevealed, setIsRevealed] = useState(false);
- const [renderedHeight, setRenderedHeight] = useState<number | undefined>(
- undefined
- );
- return (
- <div key={imgHeight}>
- <p>
- <JSXNode name="ClippedBox" props={{clipHeight: 100}}>
- <JSXNode name="img" props={{height: imgHeight}} />
- </JSXNode>
- </p>
- <p>isRevealed = {String(isRevealed)}</p>
- <p>renderedHeight = {renderedHeight}</p>
- <SizingWindow>
- <ClippedBox
- clipHeight={100}
- onReveal={() => setIsRevealed(true)}
- onSetRenderedHeight={setRenderedHeight}
- >
- <img
- src={onboardingFrameworkSelectionJavascript}
- height={imgHeight}
- />
- </ClippedBox>
- </SizingWindow>
- </div>
- );
- })}
- </SideBySide>
- </Fragment>
- );
- });
- });
|