// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import * as React from 'react'; import { action } from '@storybook/addon-actions'; import { boolean, text } from '@storybook/addon-knobs'; import { storiesOf } from '@storybook/react'; import { Colors } from '../../types/Colors'; import { pngUrl } from '../../storybook/Fixtures'; import { Message, Props as MessagesProps } from './Message'; import { AUDIO_MP3, IMAGE_PNG, MIMEType, VIDEO_MP4 } from '../../types/MIME'; import { Props, Quote } from './Quote'; import { setup as setupI18n } from '../../../js/modules/i18n'; import enMessages from '../../../_locales/en/messages.json'; const i18n = setupI18n('en', enMessages); const story = storiesOf('Components/Conversation/Quote', module); const defaultMessageProps: MessagesProps = { authorId: 'some-id', authorTitle: 'Person X', canReply: true, canDeleteForEveryone: true, canDownload: true, clearSelectedMessage: () => null, conversationId: 'conversationId', conversationType: 'direct', // override deleteMessage: () => null, deleteMessageForEveryone: () => null, direction: 'incoming', displayTapToViewMessage: () => null, downloadAttachment: () => null, i18n, id: 'messageId', interactionMode: 'keyboard', isBlocked: false, isMessageRequestAccepted: true, kickOffAttachmentDownload: () => null, openConversation: () => null, openLink: () => null, previews: [], reactToMessage: () => null, renderEmojiPicker: () =>
, renderAudioAttachment: () =>; }); story.add('Outgoing by Me', () => { const props = createProps({ isFromMe: true, }); return
; }); story.add('Incoming by Another Author', () => { const props = createProps({ authorTitle: 'Terrence Malick', isIncoming: true, }); return
; }); story.add('Incoming by Me', () => { const props = createProps({ isFromMe: true, isIncoming: true, }); return
; }); story.add('Incoming/Outgoing Colors', () => { const props = createProps({}); return ( <> {Colors.map(color => renderInMessage({ ...props, authorColor: color }))} > ); }); story.add('Content Above', () => { const props = createProps({ withContentAbove: true, }); return ( <>
> ); }); story.add('Image Only', () => { const props = createProps({ attachment: { contentType: IMAGE_PNG, fileName: 'sax.png', isVoiceMessage: false, thumbnail: { contentType: IMAGE_PNG, objectUrl: pngUrl, }, }, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any props.text = undefined as any; return
; }); story.add('Image Attachment', () => { const props = createProps({ attachment: { contentType: IMAGE_PNG, fileName: 'sax.png', isVoiceMessage: false, thumbnail: { contentType: IMAGE_PNG, objectUrl: pngUrl, }, }, }); return
; }); story.add('Image Attachment w/o Thumbnail', () => { const props = createProps({ attachment: { contentType: IMAGE_PNG, fileName: 'sax.png', isVoiceMessage: false, }, }); return
; }); story.add('Video Only', () => { const props = createProps({ attachment: { contentType: VIDEO_MP4, fileName: 'great-video.mp4', isVoiceMessage: false, thumbnail: { contentType: IMAGE_PNG, objectUrl: pngUrl, }, }, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any props.text = undefined as any; return
; }); story.add('Video Attachment', () => { const props = createProps({ attachment: { contentType: VIDEO_MP4, fileName: 'great-video.mp4', isVoiceMessage: false, thumbnail: { contentType: IMAGE_PNG, objectUrl: pngUrl, }, }, }); return
; }); story.add('Video Attachment w/o Thumbnail', () => { const props = createProps({ attachment: { contentType: VIDEO_MP4, fileName: 'great-video.mp4', isVoiceMessage: false, }, }); return
; }); story.add('Audio Only', () => { const props = createProps({ attachment: { contentType: AUDIO_MP3, fileName: 'great-video.mp3', isVoiceMessage: false, }, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any props.text = undefined as any; return
; }); story.add('Audio Attachment', () => { const props = createProps({ attachment: { contentType: AUDIO_MP3, fileName: 'great-video.mp3', isVoiceMessage: false, }, }); return
; }); story.add('Voice Message Only', () => { const props = createProps({ attachment: { contentType: AUDIO_MP3, fileName: 'great-video.mp3', isVoiceMessage: true, }, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any props.text = undefined as any; return
; }); story.add('Voice Message Attachment', () => { const props = createProps({ attachment: { contentType: AUDIO_MP3, fileName: 'great-video.mp3', isVoiceMessage: true, }, }); return
; }); story.add('Other File Only', () => { const props = createProps({ attachment: { contentType: 'application/json' as MIMEType, fileName: 'great-data.json', isVoiceMessage: false, }, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any props.text = undefined as any; return
; }); story.add('Other File Attachment', () => { const props = createProps({ attachment: { contentType: 'application/json' as MIMEType, fileName: 'great-data.json', isVoiceMessage: false, }, }); return
; }); story.add('No Close Button', () => { const props = createProps(); props.onClose = undefined; return
; }); story.add('Message Not Found', () => { const props = createProps({ referencedMessageNotFound: true, }); return renderInMessage(props); }); story.add('Missing Text & Attachment', () => { const props = createProps(); // eslint-disable-next-line @typescript-eslint/no-explicit-any props.text = undefined as any; return
; }); story.add('@mention + outgoing + another author', () => { const props = createProps({ authorTitle: 'Tony Stark', text: '@Captain America Lunch later?', }); return
; }); story.add('@mention + outgoing + me', () => { const props = createProps({ isFromMe: true, text: '@Captain America Lunch later?', }); return
; }); story.add('@mention + incoming + another author', () => { const props = createProps({ authorTitle: 'Captain America', isIncoming: true, text: '@Tony Stark sure', }); return
; }); story.add('@mention + incoming + me', () => { const props = createProps({ isFromMe: true, isIncoming: true, text: '@Tony Stark sure', }); return
; });