From d8d5186a0172b16539a675b5b723a4784894a108 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 4 Sep 2020 20:17:03 -0500 Subject: [PATCH 01/13] Chats: basic display of attachments --- .../chats/components/chat_message_list.js | 28 +++++++++++++++++-- app/styles/chats.scss | 5 ++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/soapbox/features/chats/components/chat_message_list.js b/app/soapbox/features/chats/components/chat_message_list.js index baa50a08f..d8568d385 100644 --- a/app/soapbox/features/chats/components/chat_message_list.js +++ b/app/soapbox/features/chats/components/chat_message_list.js @@ -9,6 +9,8 @@ import { fetchChatMessages } from 'soapbox/actions/chats'; import emojify from 'soapbox/features/emoji/emoji'; import classNames from 'classnames'; import { escape, throttle } from 'lodash'; +import { MediaGallery } from 'soapbox/features/ui/util/async-components'; +import Bundle from 'soapbox/features/ui/components/bundle'; const scrollBottom = (elem) => elem.scrollHeight - elem.offsetHeight - elem.scrollTop; @@ -115,6 +117,21 @@ class ChatMessageList extends ImmutablePureComponent { trailing: true, }); + maybeRenderMedia = chatMessage => { + const attachment = chatMessage.get('attachment'); + if (!attachment) return null; + return ( + + {Component => ( + + )} + + ); + } + parsePendingContent = content => { return escape(content).replace(/(?:\r\n|\r|\n)/g, '
'); } @@ -145,12 +162,17 @@ class ChatMessageList extends ImmutablePureComponent { })} key={chatMessage.get('id')} > - + > + + {this.maybeRenderMedia(chatMessage)} + ))} diff --git a/app/styles/chats.scss b/app/styles/chats.scss index 38550ac3b..f49450155 100644 --- a/app/styles/chats.scss +++ b/app/styles/chats.scss @@ -290,3 +290,8 @@ } } } + +.chat-message .media-gallery__item-thumbnail img, +.chat-message .media-gallery__item-thumbnail .still-image img { + object-fit: contain; +} From 84e51754813b3aab28ee437d28b5f132721b2005 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 5 Sep 2020 16:39:57 -0500 Subject: [PATCH 02/13] Chats: improve attachments, make modal work --- .../features/chats/components/chat_message_list.js | 8 +++++++- app/styles/chats.scss | 14 +++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/soapbox/features/chats/components/chat_message_list.js b/app/soapbox/features/chats/components/chat_message_list.js index d8568d385..d6acefe2f 100644 --- a/app/soapbox/features/chats/components/chat_message_list.js +++ b/app/soapbox/features/chats/components/chat_message_list.js @@ -8,6 +8,7 @@ import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import { fetchChatMessages } from 'soapbox/actions/chats'; import emojify from 'soapbox/features/emoji/emoji'; import classNames from 'classnames'; +import { openModal } from 'soapbox/actions/modal'; import { escape, throttle } from 'lodash'; import { MediaGallery } from 'soapbox/features/ui/util/async-components'; import Bundle from 'soapbox/features/ui/components/bundle'; @@ -117,6 +118,10 @@ class ChatMessageList extends ImmutablePureComponent { trailing: true, }); + onOpenMedia = (media, index) => { + this.props.dispatch(openModal('MEDIA', { media, index })); + }; + maybeRenderMedia = chatMessage => { const attachment = chatMessage.get('attachment'); if (!attachment) return null; @@ -125,7 +130,8 @@ class ChatMessageList extends ImmutablePureComponent { {Component => ( )} diff --git a/app/styles/chats.scss b/app/styles/chats.scss index f49450155..7d8c7d6fb 100644 --- a/app/styles/chats.scss +++ b/app/styles/chats.scss @@ -291,7 +291,15 @@ } } -.chat-message .media-gallery__item-thumbnail img, -.chat-message .media-gallery__item-thumbnail .still-image img { - object-fit: contain; +.chat-message .media-gallery { + height: 120px !important; + + .spoiler-button { + display: none; + } + + &__item-thumbnail img, + &__item-thumbnail .still-image img { + object-fit: contain; + } } From 6dc38adeaa37993fef4ae647d82d39a0250b24ca Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 5 Sep 2020 21:48:25 -0500 Subject: [PATCH 03/13] Chats: add upload button to chat input --- app/soapbox/features/chats/components/chat_box.js | 6 ++++++ app/styles/chats.scss | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/soapbox/features/chats/components/chat_box.js b/app/soapbox/features/chats/components/chat_box.js index 12b28d513..e307325a5 100644 --- a/app/soapbox/features/chats/components/chat_box.js +++ b/app/soapbox/features/chats/components/chat_box.js @@ -10,6 +10,7 @@ import { } from 'soapbox/actions/chats'; import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import ChatMessageList from './chat_message_list'; +import UploadButton from 'soapbox/features/compose/components/upload_button'; const messages = defineMessages({ placeholder: { id: 'chat_box.input.placeholder', defaultMessage: 'Send a message…' }, @@ -91,6 +92,10 @@ class ChatBox extends ImmutablePureComponent { this.markRead(); } + handleFiles = (files) => { + // TODO: Upload attachment + } + render() { const { chatMessageIds, chatId, intl } = this.props; if (!chatMessageIds) return null; @@ -99,6 +104,7 @@ class ChatBox extends ImmutablePureComponent {
+