diff --git a/ts/components/Lightbox.md b/ts/components/Lightbox.md deleted file mode 100644 index e93d2e7cbd38..000000000000 --- a/ts/components/Lightbox.md +++ /dev/null @@ -1,108 +0,0 @@ -## Image - -```jsx -const noop = () => {}; - -
- -
; -``` - -## Image with caption - -```jsx -const noop = () => {}; - -
- -
; -``` - -## Image with timer - -```jsx -const noop = () => {}; - -
- console.log('close')} - i18n={util.i18n} - /> -
; -``` - -## Image (unsupported format) - -```jsx -const noop = () => {}; - -
- -
; -``` - -## Video (supported format) - -```jsx -const noop = () => {}; - -
- -
; -``` - -## Video (unsupported format) - -```jsx -const noop = () => {}; - -
- -
; -``` - -## Unsupported file format - -```jsx -const noop = () => {}; - -
- -
; -``` diff --git a/ts/components/Lightbox.stories.tsx b/ts/components/Lightbox.stories.tsx new file mode 100644 index 000000000000..492c9327c2ad --- /dev/null +++ b/ts/components/Lightbox.stories.tsx @@ -0,0 +1,120 @@ +import * as React from 'react'; + +import { action } from '@storybook/addon-actions'; +import { boolean, text } from '@storybook/addon-knobs'; +import { storiesOf } from '@storybook/react'; + +import { Lightbox, Props } from './Lightbox'; +import { + AUDIO_MP3, + IMAGE_JPEG, + MIMEType, + VIDEO_MP4, + VIDEO_QUICKTIME, +} from '../types/MIME'; + +// @ts-ignore +import { setup as setupI18n } from '../../js/modules/i18n'; +// @ts-ignore +import enMessages from '../../_locales/en/messages.json'; +const i18n = setupI18n('en', enMessages); + +const story = storiesOf('Components/Lightbox', module); + +const createProps = (overrideProps: Partial = {}): Props => ({ + caption: text('caption', overrideProps.caption || ''), + close: action('close'), + contentType: overrideProps.contentType || IMAGE_JPEG, + i18n, + isViewOnce: boolean('isViewOnce', overrideProps.isViewOnce || false), + objectURL: text('objectURL', overrideProps.objectURL || ''), + onNext: overrideProps.onNext, + onPrevious: overrideProps.onPrevious, + onSave: overrideProps.onSave, +}); + +story.add('Image', () => { + const props = createProps({ + objectURL: '/fixtures/tina-rolf-269345-unsplash.jpg', + }); + + return ; +}); + +story.add('Image with Caption', () => { + const props = createProps({ + caption: + 'This is the user-provided caption. It can get long and wrap onto multiple lines.', + objectURL: '/fixtures/tina-rolf-269345-unsplash.jpg', + }); + + return ; +}); + +story.add('Video', () => { + const props = createProps({ + contentType: VIDEO_MP4, + objectURL: '/fixtures/pixabay-Soap-Bubble-7141.mp4', + }); + + return ; +}); + +story.add('Video with Caption', () => { + const props = createProps({ + caption: + 'This is the user-provided caption. It can get long and wrap onto multiple lines.', + contentType: VIDEO_MP4, + objectURL: '/fixtures/pixabay-Soap-Bubble-7141.mp4', + }); + + return ; +}); + +story.add('Video (View Once)', () => { + const props = createProps({ + contentType: VIDEO_MP4, + isViewOnce: true, + objectURL: '/fixtures/pixabay-Soap-Bubble-7141.mp4', + }); + + return ; +}); + +story.add('Unsupported Image Type', () => { + const props = createProps({ + contentType: 'image/tiff' as MIMEType, + objectURL: 'unsupported-image.tiff', + }); + + return ; +}); + +story.add('Unsupported Video Type', () => { + const props = createProps({ + contentType: VIDEO_QUICKTIME, + objectURL: 'unsupported-video.mov', + }); + + return ; +}); + +story.add('Unsupported ContentType', () => { + const props = createProps({ + contentType: AUDIO_MP3, + objectURL: '/fixtures/incompetech-com-Agnus-Dei-X.mp3', + }); + + return ; +}); + +story.add('Including Next/Previous/Save Callbacks', () => { + const props = createProps({ + objectURL: '/fixtures/tina-rolf-269345-unsplash.jpg', + onNext: action('onNext'), + onPrevious: action('onPrevious'), + onSave: action('onSave'), + }); + + return ; +}); diff --git a/ts/components/Lightbox.tsx b/ts/components/Lightbox.tsx index ac6d94caa3a0..a87bed883363 100644 --- a/ts/components/Lightbox.tsx +++ b/ts/components/Lightbox.tsx @@ -23,7 +23,7 @@ const colorSVG = (url: string, color: string) => { }; }; -interface Props { +export interface Props { close: () => void; contentType: MIME.MIMEType | undefined; i18n: LocalizerType; @@ -363,7 +363,7 @@ export class Lightbox extends React.Component { !isVideoTypeSupported && MIME.isVideo(contentType); if (isUnsupportedImageType || isUnsupportedVideoType) { const iconUrl = isUnsupportedVideoType - ? 'images/video.svg' + ? 'images/movie.svg' : 'images/image.svg'; return ;