// Copyright 2020-2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import * as React from 'react'; import { action } from '@storybook/addon-actions'; import { number } from '@storybook/addon-knobs'; import enMessages from '../../_locales/en/messages.json'; import type { PropsType } from './Lightbox'; import { Lightbox } from './Lightbox'; import type { MediaItemType } from '../types/MediaItem'; import { setupI18n } from '../util/setupI18n'; import { AUDIO_MP3, IMAGE_JPEG, VIDEO_MP4, VIDEO_QUICKTIME, stringToMIMEType, } from '../types/MIME'; import { fakeAttachment } from '../test-both/helpers/fakeAttachment'; const i18n = setupI18n('en', enMessages); export default { title: 'Components/Lightbox', }; type OverridePropsMediaItemType = Partial & { caption?: string }; function createMediaItem( overrideProps: OverridePropsMediaItemType ): MediaItemType { return { attachment: fakeAttachment({ caption: overrideProps.caption || '', contentType: IMAGE_JPEG, fileName: overrideProps.objectURL, url: overrideProps.objectURL, }), contentType: IMAGE_JPEG, index: 0, message: { attachments: [], conversationId: '1234', id: 'image-msg', received_at: 0, received_at_ms: Date.now(), sent_at: Date.now(), }, objectURL: '', ...overrideProps, }; } const createProps = (overrideProps: Partial = {}): PropsType => ({ close: action('close'), i18n, isViewOnce: Boolean(overrideProps.isViewOnce), media: overrideProps.media || [], onSave: action('onSave'), selectedIndex: number('selectedIndex', overrideProps.selectedIndex || 0), }); export const Multimedia = (): JSX.Element => { const props = createProps({ media: [ { attachment: fakeAttachment({ contentType: IMAGE_JPEG, fileName: 'tina-rolf-269345-unsplash.jpg', url: '/fixtures/tina-rolf-269345-unsplash.jpg', caption: 'Still from The Lighthouse, starring Robert Pattinson and Willem Defoe.', }), contentType: IMAGE_JPEG, index: 0, message: { attachments: [], conversationId: '1234', id: 'image-msg', received_at: 1, received_at_ms: Date.now(), sent_at: Date.now(), }, objectURL: '/fixtures/tina-rolf-269345-unsplash.jpg', }, { attachment: fakeAttachment({ contentType: VIDEO_MP4, fileName: 'pixabay-Soap-Bubble-7141.mp4', url: '/fixtures/pixabay-Soap-Bubble-7141.mp4', }), contentType: VIDEO_MP4, index: 1, message: { attachments: [], conversationId: '1234', id: 'video-msg', received_at: 2, received_at_ms: Date.now(), sent_at: Date.now(), }, objectURL: '/fixtures/pixabay-Soap-Bubble-7141.mp4', }, createMediaItem({ contentType: IMAGE_JPEG, index: 2, thumbnailObjectUrl: '/fixtures/kitten-1-64-64.jpg', objectURL: '/fixtures/kitten-1-64-64.jpg', }), createMediaItem({ contentType: IMAGE_JPEG, index: 3, thumbnailObjectUrl: '/fixtures/kitten-2-64-64.jpg', objectURL: '/fixtures/kitten-2-64-64.jpg', }), ], }); return ; }; export const MissingMedia = (): JSX.Element => { const props = createProps({ media: [ { attachment: fakeAttachment({ contentType: IMAGE_JPEG, fileName: 'tina-rolf-269345-unsplash.jpg', url: '/fixtures/tina-rolf-269345-unsplash.jpg', }), contentType: IMAGE_JPEG, index: 0, message: { attachments: [], conversationId: '1234', id: 'image-msg', received_at: 3, received_at_ms: Date.now(), sent_at: Date.now(), }, objectURL: undefined, }, ], }); return ; }; export const SingleImage = (): JSX.Element => ( ); export const ImageWithCaptionNormalImage = (): JSX.Element => ( ); ImageWithCaptionNormalImage.story = { name: 'Image with Caption (normal image)', }; export const ImageWithCaptionAllWhiteImage = (): JSX.Element => ( ); ImageWithCaptionAllWhiteImage.story = { name: 'Image with Caption (all-white image)', }; export const SingleVideo = (): JSX.Element => ( ); export const SingleVideoWCaption = (): JSX.Element => ( ); SingleVideoWCaption.story = { name: 'Single Video w/caption', }; export const UnsupportedImageType = (): JSX.Element => ( ); export const UnsupportedVideoType = (): JSX.Element => ( ); export const UnsupportedContent = (): JSX.Element => ( ); export const CustomChildren = (): JSX.Element => (
I am middle child
); CustomChildren.story = { name: 'Custom children', }; export const Forwarding = (): JSX.Element => ( ); export const ConversationHeader = (): JSX.Element => ( ({ acceptedMessageRequest: true, avatarPath: '/fixtures/kitten-1-64-64.jpg', badges: [], id: '1234', isMe: false, name: 'Test', profileName: 'Test', sharedGroupNames: [], title: 'Test', type: 'direct', })} media={[ createMediaItem({ contentType: VIDEO_MP4, objectURL: '/fixtures/pixabay-Soap-Bubble-7141.mp4', }), ]} /> ); export const ViewOnceVideo = (): JSX.Element => ( );