Move file attach DnD to MessagesView.
This commit is contained in:
+5
-3
@@ -2929,9 +2929,11 @@ ul.tabbar li.active > a {
|
|||||||
Drag-and-drop container.
|
Drag-and-drop container.
|
||||||
*/
|
*/
|
||||||
.drag-and-drop {
|
.drag-and-drop {
|
||||||
display: inline-block;
|
display: flex;
|
||||||
position: relative;
|
flex-direction: column;
|
||||||
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.drag-and-drop .banner {
|
.drag-and-drop .banner {
|
||||||
@@ -2947,7 +2949,7 @@ ul.tabbar li.active > a {
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
font-size: 1.2rem;
|
font-size: 2rem;
|
||||||
color: grey;
|
color: grey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "Drag file here",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -239,6 +239,10 @@
|
|||||||
"defaultMessage": "Unsupported",
|
"defaultMessage": "Unsupported",
|
||||||
"description": "Unsupported entity in drafty"
|
"description": "Unsupported entity in drafty"
|
||||||
},
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner"
|
||||||
|
},
|
||||||
"editing_message": {
|
"editing_message": {
|
||||||
"defaultMessage": "Editing",
|
"defaultMessage": "Editing",
|
||||||
"description": "Title over message editing preview"
|
"description": "Title over message editing preview"
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1521,5 +1521,12 @@
|
|||||||
"description": "Icon tool tip for sending a message",
|
"description": "Icon tool tip for sending a message",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"drag_file": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "Drag file here",
|
||||||
|
"description": "Prompt on the file drag-n-drop overlay banner",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+72
-44
@@ -9,6 +9,7 @@ import CallPanel from '../widgets/call-panel.jsx';
|
|||||||
import ChatMessage from '../widgets/chat-message.jsx';
|
import ChatMessage from '../widgets/chat-message.jsx';
|
||||||
import ContactBadges from '../widgets/contact-badges.jsx';
|
import ContactBadges from '../widgets/contact-badges.jsx';
|
||||||
import DocPreview from '../widgets/doc-preview.jsx';
|
import DocPreview from '../widgets/doc-preview.jsx';
|
||||||
|
import DragAndDrop from '../widgets/drag-and-drop.jsx'
|
||||||
import ErrorPanel from '../widgets/error-panel.jsx';
|
import ErrorPanel from '../widgets/error-panel.jsx';
|
||||||
import GroupSubs from '../widgets/group-subs.jsx';
|
import GroupSubs from '../widgets/group-subs.jsx';
|
||||||
import ImagePreview from '../widgets/image-preview.jsx';
|
import ImagePreview from '../widgets/image-preview.jsx';
|
||||||
@@ -67,6 +68,11 @@ const messages = defineMessages({
|
|||||||
id: 'editing_message',
|
id: 'editing_message',
|
||||||
defaultMessage: 'Editing',
|
defaultMessage: 'Editing',
|
||||||
description: 'Title over message editing preview'
|
description: 'Title over message editing preview'
|
||||||
|
},
|
||||||
|
drag_file: {
|
||||||
|
id: 'drag_file',
|
||||||
|
defaultMessage: 'Drag file here',
|
||||||
|
description: 'Prompt on the file drag-n-drop overlay banner'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -128,6 +134,7 @@ class MessagesView extends React.Component {
|
|||||||
this.postReadNotification = this.postReadNotification.bind(this);
|
this.postReadNotification = this.postReadNotification.bind(this);
|
||||||
this.clearNotificationQueue = this.clearNotificationQueue.bind(this);
|
this.clearNotificationQueue = this.clearNotificationQueue.bind(this);
|
||||||
this.goToLatestMessage = this.goToLatestMessage.bind(this);
|
this.goToLatestMessage = this.goToLatestMessage.bind(this);
|
||||||
|
this.handleFileDrop = this.handleFileDrop.bind(this);
|
||||||
|
|
||||||
this.handlePickReply = this.handlePickReply.bind(this);
|
this.handlePickReply = this.handlePickReply.bind(this);
|
||||||
this.handleEditMessage = this.handleEditMessage.bind(this);
|
this.handleEditMessage = this.handleEditMessage.bind(this);
|
||||||
@@ -940,6 +947,19 @@ class MessagesView extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handleFileDrop is called when the user drags & drops a file upon the message view.
|
||||||
|
handleFileDrop(files) {
|
||||||
|
if (!files || files.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const file = files[0];
|
||||||
|
if (file.type && file.type.startsWith('image/')) {
|
||||||
|
this.handleAttachImage(file);
|
||||||
|
} else {
|
||||||
|
this.handleAttachFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// sendAudioAttachment sends audio bits inband as Drafty message (no preview).
|
// sendAudioAttachment sends audio bits inband as Drafty message (no preview).
|
||||||
sendAudioAttachment(url, preview, duration) {
|
sendAudioAttachment(url, preview, duration) {
|
||||||
fetch(url)
|
fetch(url)
|
||||||
@@ -1253,51 +1273,8 @@ class MessagesView extends React.Component {
|
|||||||
|
|
||||||
const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');
|
const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');
|
||||||
|
|
||||||
component2 = (
|
let messagesComponent = (
|
||||||
<>
|
<>
|
||||||
<div id="topic-caption-panel" className="caption-panel">
|
|
||||||
{this.props.displayMobile ?
|
|
||||||
<a href="#" id="hide-message-view" onClick={(e) => {e.preventDefault(); this.props.onHideMessagesView();}}>
|
|
||||||
<i className="material-icons">arrow_back</i>
|
|
||||||
</a>
|
|
||||||
:
|
|
||||||
null}
|
|
||||||
<div className="avatar-box">
|
|
||||||
<LetterTile
|
|
||||||
tinode={this.props.tinode}
|
|
||||||
avatar={avatar}
|
|
||||||
topic={this.state.topic}
|
|
||||||
title={this.state.title}
|
|
||||||
deleted={this.state.deleted} />
|
|
||||||
{!isChannel ? <span className={online} /> : null}
|
|
||||||
</div>
|
|
||||||
<div id="topic-title-group">
|
|
||||||
<div id="topic-title" className={titleClass}>{
|
|
||||||
this.state.title ||
|
|
||||||
<i><FormattedMessage id="unnamed_topic" defaultMessage="Unnamed"
|
|
||||||
description="Title shown when the topic has no name" /></i>
|
|
||||||
}<ContactBadges badges={icon_badges} /></div>
|
|
||||||
<div id="topic-last-seen">{lastSeen}</div>
|
|
||||||
</div>
|
|
||||||
{groupTopic ?
|
|
||||||
<GroupSubs
|
|
||||||
tinode={this.props.tinode}
|
|
||||||
subscribers={this.state.onlineSubs} /> :
|
|
||||||
<div id="topic-users" />
|
|
||||||
}
|
|
||||||
<div>
|
|
||||||
<a href="#" onClick={this.handleContextClick}>
|
|
||||||
<i className="material-icons">more_vert</i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{this.props.displayMobile ?
|
|
||||||
<ErrorPanel
|
|
||||||
level={this.props.errorLevel}
|
|
||||||
text={this.props.errorText}
|
|
||||||
onClearError={this.props.onError} />
|
|
||||||
: null}
|
|
||||||
<LoadSpinner show={this.state.fetchingMessages} />
|
|
||||||
<div id="messages-container">
|
<div id="messages-container">
|
||||||
<button className={'action-button' + (this.state.showGoToLastButton ? '' : ' hidden')}
|
<button className={'action-button' + (this.state.showGoToLastButton ? '' : ' hidden')}
|
||||||
onClick={this.goToLatestMessage}>
|
onClick={this.goToLatestMessage}>
|
||||||
@@ -1348,6 +1325,57 @@ class MessagesView extends React.Component {
|
|||||||
onCancelReply={this.handleCancelReply} />}
|
onCancelReply={this.handleCancelReply} />}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
component2 = (
|
||||||
|
<>
|
||||||
|
<div id="topic-caption-panel" className="caption-panel">
|
||||||
|
{this.props.displayMobile ?
|
||||||
|
<a href="#" id="hide-message-view" onClick={(e) => {e.preventDefault(); this.props.onHideMessagesView();}}>
|
||||||
|
<i className="material-icons">arrow_back</i>
|
||||||
|
</a>
|
||||||
|
:
|
||||||
|
null}
|
||||||
|
<div className="avatar-box">
|
||||||
|
<LetterTile
|
||||||
|
tinode={this.props.tinode}
|
||||||
|
avatar={avatar}
|
||||||
|
topic={this.state.topic}
|
||||||
|
title={this.state.title}
|
||||||
|
deleted={this.state.deleted} />
|
||||||
|
{!isChannel ? <span className={online} /> : null}
|
||||||
|
</div>
|
||||||
|
<div id="topic-title-group">
|
||||||
|
<div id="topic-title" className={titleClass}>{
|
||||||
|
this.state.title ||
|
||||||
|
<i><FormattedMessage id="unnamed_topic" defaultMessage="Unnamed"
|
||||||
|
description="Title shown when the topic has no name" /></i>
|
||||||
|
}<ContactBadges badges={icon_badges} /></div>
|
||||||
|
<div id="topic-last-seen">{lastSeen}</div>
|
||||||
|
</div>
|
||||||
|
{groupTopic ?
|
||||||
|
<GroupSubs
|
||||||
|
tinode={this.props.tinode}
|
||||||
|
subscribers={this.state.onlineSubs} /> :
|
||||||
|
<div id="topic-users" />
|
||||||
|
}
|
||||||
|
<div>
|
||||||
|
<a href="#" onClick={this.handleContextClick}>
|
||||||
|
<i className="material-icons">more_vert</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{this.props.displayMobile ?
|
||||||
|
<ErrorPanel
|
||||||
|
level={this.props.errorLevel}
|
||||||
|
text={this.props.errorText}
|
||||||
|
onClearError={this.props.onError} />
|
||||||
|
: null}
|
||||||
|
<LoadSpinner show={this.state.fetchingMessages} />
|
||||||
|
{!this.state.unconfirmed && !this.props.forwardMessage ?
|
||||||
|
<DragAndDrop actionPrompt={this.props.intl.formatMessage(messages.drag_file)} onDrop={this.handleFileDrop} >{messagesComponent}</DragAndDrop>
|
||||||
|
: messagesComponent}
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
component = <div id="topic-view">{component2}</div>
|
component = <div id="topic-view">{component2}</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Drag & drop container: displays a banner on drag and calls a handler on drop.
|
// Drag & drop container: displays a banner on drag and calls a handler on drop.
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
export default class DragAndDrop extends React.Component {
|
export default class DragAndDrop extends React.PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import { Drafty } from 'tinode-sdk';
|
|||||||
// a dependency on webm-duration-fix.
|
// a dependency on webm-duration-fix.
|
||||||
const AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));
|
const AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));
|
||||||
|
|
||||||
import DragAndDrop from './drag-and-drop.jsx';
|
|
||||||
|
|
||||||
import { KEYPRESS_DELAY } from '../config.js';
|
import { KEYPRESS_DELAY } from '../config.js';
|
||||||
import { filePasted } from '../lib/blob-helpers.js';
|
import { filePasted } from '../lib/blob-helpers.js';
|
||||||
import { replyFormatter } from '../lib/formatters.js';
|
import { replyFormatter } from '../lib/formatters.js';
|
||||||
@@ -243,13 +241,6 @@ class SendMessage extends React.PureComponent {
|
|||||||
{this.state.quote}
|
{this.state.quote}
|
||||||
</div>) : null;
|
</div>) : null;
|
||||||
const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;
|
const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;
|
||||||
const inputField = (<textarea id="sendMessage" placeholder={prompt}
|
|
||||||
value={this.state.message} onChange={this.handleMessageTyping}
|
|
||||||
onKeyPress={this.handleKeyPress}
|
|
||||||
ref={(ref) => {this.messageEditArea = ref;}}
|
|
||||||
autoFocus />);
|
|
||||||
const inputArea = this.props.onAttachFile ?
|
|
||||||
(<DragAndDrop actionPrompt={formatMessage(messages.icon_title_attach_file)} onDrop={this.handleDropAttach}>{inputField}</DragAndDrop>) : {inputField};
|
|
||||||
return (
|
return (
|
||||||
<div id="send-message-wrapper">
|
<div id="send-message-wrapper">
|
||||||
{!this.props.noInput ? quote : null}
|
{!this.props.noInput ? quote : null}
|
||||||
@@ -276,7 +267,11 @@ class SendMessage extends React.PureComponent {
|
|||||||
onDeleted={_ => this.setState({audioRec: false})}
|
onDeleted={_ => this.setState({audioRec: false})}
|
||||||
onFinished={this.handleAttachAudio}/>
|
onFinished={this.handleAttachAudio}/>
|
||||||
</Suspense>) :
|
</Suspense>) :
|
||||||
inputArea)}
|
<textarea id="sendMessage" placeholder={prompt}
|
||||||
|
value={this.state.message} onChange={this.handleMessageTyping}
|
||||||
|
onKeyPress={this.handleKeyPress}
|
||||||
|
ref={(ref) => {this.messageEditArea = ref;}}
|
||||||
|
autoFocus />)}
|
||||||
{this.state.message || !audioEnabled ?
|
{this.state.message || !audioEnabled ?
|
||||||
<a href="#" onClick={this.handleSend} title={formatMessage(messages.icon_title_send)}>
|
<a href="#" onClick={this.handleSend} title={formatMessage(messages.icon_title_send)}>
|
||||||
<i className="material-icons">{sendIcon}</i>
|
<i className="material-icons">{sendIcon}</i>
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+144
-128
@@ -5310,20 +5310,22 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/* harmony import */ var _widgets_chat_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/chat-message.jsx */ "./src/widgets/chat-message.jsx");
|
/* harmony import */ var _widgets_chat_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/chat-message.jsx */ "./src/widgets/chat-message.jsx");
|
||||||
/* harmony import */ var _widgets_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
|
/* harmony import */ var _widgets_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
|
||||||
/* harmony import */ var _widgets_doc_preview_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/doc-preview.jsx */ "./src/widgets/doc-preview.jsx");
|
/* harmony import */ var _widgets_doc_preview_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/doc-preview.jsx */ "./src/widgets/doc-preview.jsx");
|
||||||
/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
|
/* harmony import */ var _widgets_drag_and_drop_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/drag-and-drop.jsx */ "./src/widgets/drag-and-drop.jsx");
|
||||||
/* harmony import */ var _widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/group-subs.jsx */ "./src/widgets/group-subs.jsx");
|
/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
|
||||||
/* harmony import */ var _widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/image-preview.jsx */ "./src/widgets/image-preview.jsx");
|
/* harmony import */ var _widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/group-subs.jsx */ "./src/widgets/group-subs.jsx");
|
||||||
/* harmony import */ var _widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../widgets/invitation.jsx */ "./src/widgets/invitation.jsx");
|
/* harmony import */ var _widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../widgets/image-preview.jsx */ "./src/widgets/image-preview.jsx");
|
||||||
/* harmony import */ var _widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../widgets/letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
|
/* harmony import */ var _widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../widgets/invitation.jsx */ "./src/widgets/invitation.jsx");
|
||||||
/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
|
/* harmony import */ var _widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../widgets/letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
|
||||||
/* harmony import */ var _logo_view_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./logo-view.jsx */ "./src/views/logo-view.jsx");
|
/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
|
||||||
/* harmony import */ var _widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../widgets/meta-message.jsx */ "./src/widgets/meta-message.jsx");
|
/* harmony import */ var _logo_view_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./logo-view.jsx */ "./src/views/logo-view.jsx");
|
||||||
/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../widgets/send-message.jsx */ "./src/widgets/send-message.jsx");
|
/* harmony import */ var _widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../widgets/meta-message.jsx */ "./src/widgets/meta-message.jsx");
|
||||||
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
|
/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../widgets/send-message.jsx */ "./src/widgets/send-message.jsx");
|
||||||
/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
|
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
|
||||||
/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
|
/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
|
||||||
/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
|
/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
|
||||||
/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
|
/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
|
||||||
|
/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -5408,6 +5410,13 @@ const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
|
|||||||
"type": 0,
|
"type": 0,
|
||||||
"value": "Editing"
|
"value": "Editing"
|
||||||
}]
|
}]
|
||||||
|
},
|
||||||
|
drag_file: {
|
||||||
|
id: "drag_file",
|
||||||
|
defaultMessage: [{
|
||||||
|
"type": 0,
|
||||||
|
"value": "Drag file here"
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
function isUnconfirmed(acs) {
|
function isUnconfirmed(acs) {
|
||||||
@@ -5425,7 +5434,7 @@ function isPeerRestricted(acs) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
function shouldPresentCallPanel(callState) {
|
function shouldPresentCallPanel(callState) {
|
||||||
return callState == _constants_js__WEBPACK_IMPORTED_MODULE_17__.CALL_STATE_OUTGOING_INITATED || callState == _constants_js__WEBPACK_IMPORTED_MODULE_17__.CALL_STATE_IN_PROGRESS;
|
return callState == _constants_js__WEBPACK_IMPORTED_MODULE_18__.CALL_STATE_OUTGOING_INITATED || callState == _constants_js__WEBPACK_IMPORTED_MODULE_18__.CALL_STATE_IN_PROGRESS;
|
||||||
}
|
}
|
||||||
class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
|
class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -5459,6 +5468,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
this.postReadNotification = this.postReadNotification.bind(this);
|
this.postReadNotification = this.postReadNotification.bind(this);
|
||||||
this.clearNotificationQueue = this.clearNotificationQueue.bind(this);
|
this.clearNotificationQueue = this.clearNotificationQueue.bind(this);
|
||||||
this.goToLatestMessage = this.goToLatestMessage.bind(this);
|
this.goToLatestMessage = this.goToLatestMessage.bind(this);
|
||||||
|
this.handleFileDrop = this.handleFileDrop.bind(this);
|
||||||
this.handlePickReply = this.handlePickReply.bind(this);
|
this.handlePickReply = this.handlePickReply.bind(this);
|
||||||
this.handleEditMessage = this.handleEditMessage.bind(this);
|
this.handleEditMessage = this.handleEditMessage.bind(this);
|
||||||
this.handleCancelReply = this.handleCancelReply.bind(this);
|
this.handleCancelReply = this.handleCancelReply.bind(this);
|
||||||
@@ -5587,7 +5597,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
if (topic.public) {
|
if (topic.public) {
|
||||||
Object.assign(nextState, {
|
Object.assign(nextState, {
|
||||||
title: topic.public.fn,
|
title: topic.public.fn,
|
||||||
avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.makeImageUrl)(topic.public.photo)
|
avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.makeImageUrl)(topic.public.photo)
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
Object.assign(nextState, {
|
Object.assign(nextState, {
|
||||||
@@ -5671,7 +5681,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
const newTopic = this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic;
|
const newTopic = this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic;
|
||||||
let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub();
|
let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub();
|
||||||
if (this.state.isReader || newTopic) {
|
if (this.state.isReader || newTopic) {
|
||||||
getQuery = getQuery.withLaterData(_config_js__WEBPACK_IMPORTED_MODULE_16__.MESSAGES_PAGE);
|
getQuery = getQuery.withLaterData(_config_js__WEBPACK_IMPORTED_MODULE_17__.MESSAGES_PAGE);
|
||||||
if (this.state.isReader) {
|
if (this.state.isReader) {
|
||||||
getQuery = getQuery.withLaterDel();
|
getQuery = getQuery.withLaterDel();
|
||||||
}
|
}
|
||||||
@@ -5682,7 +5692,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
const setQuery = newTopic ? this.props.newTopicParams : undefined;
|
const setQuery = newTopic ? this.props.newTopicParams : undefined;
|
||||||
topic.subscribe(getQuery.build(), setQuery).then(ctrl => {
|
topic.subscribe(getQuery.build(), setQuery).then(ctrl => {
|
||||||
if (ctrl.code == 303) {
|
if (ctrl.code == 303) {
|
||||||
_lib_navigation_js__WEBPACK_IMPORTED_MODULE_19__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_19__["default"].setUrlTopic('', ctrl.params.topic));
|
_lib_navigation_js__WEBPACK_IMPORTED_MODULE_20__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_20__["default"].setUrlTopic('', ctrl.params.topic));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.state.topic != ctrl.topic) {
|
if (this.state.topic != ctrl.topic) {
|
||||||
@@ -5756,7 +5766,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
this.setState({
|
this.setState({
|
||||||
fetchingMessages: true
|
fetchingMessages: true
|
||||||
}, _ => {
|
}, _ => {
|
||||||
topic.getMessagesPage(_config_js__WEBPACK_IMPORTED_MODULE_16__.MESSAGES_PAGE).catch(err => this.props.onError(err.message, 'err')).finally(_ => this.setState({
|
topic.getMessagesPage(_config_js__WEBPACK_IMPORTED_MODULE_17__.MESSAGES_PAGE).catch(err => this.props.onError(err.message, 'err')).finally(_ => this.setState({
|
||||||
fetchingMessages: false
|
fetchingMessages: false
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
@@ -5775,7 +5785,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
if (desc.public) {
|
if (desc.public) {
|
||||||
this.setState({
|
this.setState({
|
||||||
title: desc.public.fn,
|
title: desc.public.fn,
|
||||||
avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.makeImageUrl)(desc.public.photo)
|
avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.makeImageUrl)(desc.public.photo)
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -5830,7 +5840,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
this.readNotificationQueue.push({
|
this.readNotificationQueue.push({
|
||||||
topicName: this.state.topic,
|
topicName: this.state.topic,
|
||||||
seq: seq,
|
seq: seq,
|
||||||
sendAt: now.setMilliseconds(now.getMilliseconds() + _config_js__WEBPACK_IMPORTED_MODULE_16__.READ_DELAY)
|
sendAt: now.setMilliseconds(now.getMilliseconds() + _config_js__WEBPACK_IMPORTED_MODULE_17__.READ_DELAY)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
clearNotificationQueue() {
|
clearNotificationQueue() {
|
||||||
@@ -5908,7 +5918,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
clearTimeout(this.keyPressTimer);
|
clearTimeout(this.keyPressTimer);
|
||||||
this.keyPressTimer = setTimeout(_ => this.setState({
|
this.keyPressTimer = setTimeout(_ => this.setState({
|
||||||
typingIndicator: false
|
typingIndicator: false
|
||||||
}), _config_js__WEBPACK_IMPORTED_MODULE_16__.KEYPRESS_DELAY + 1000);
|
}), _config_js__WEBPACK_IMPORTED_MODULE_17__.KEYPRESS_DELAY + 1000);
|
||||||
if (!this.state.typingIndicator) {
|
if (!this.state.typingIndicator) {
|
||||||
this.setState({
|
this.setState({
|
||||||
typingIndicator: true
|
typingIndicator: true
|
||||||
@@ -5996,7 +6006,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
}
|
}
|
||||||
handleEnablePeer(e) {
|
handleEnablePeer(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this.props.onChangePermissions(this.state.topic, _config_js__WEBPACK_IMPORTED_MODULE_16__.DEFAULT_P2P_ACCESS_MODE, this.state.topic);
|
this.props.onChangePermissions(this.state.topic, _config_js__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_P2P_ACCESS_MODE, this.state.topic);
|
||||||
}
|
}
|
||||||
sendKeyPress(audio) {
|
sendKeyPress(audio) {
|
||||||
const topic = this.props.tinode.getTopic(this.state.topic);
|
const topic = this.props.tinode.getTopic(this.state.topic);
|
||||||
@@ -6043,7 +6053,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
sendFileAttachment(file) {
|
sendFileAttachment(file) {
|
||||||
const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;
|
const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;
|
||||||
if (file.size > maxInbandAttachmentSize) {
|
if (file.size > maxInbandAttachmentSize) {
|
||||||
const uploader = this.props.tinode.getLargeFileHelper();
|
const uploader = this.props.tinode.getLargeFileHelper();
|
||||||
if (!uploader) {
|
if (!uploader) {
|
||||||
@@ -6059,7 +6069,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
});
|
});
|
||||||
this.sendMessage(msg, uploadCompletionPromise, uploader);
|
this.sendMessage(msg, uploadCompletionPromise, uploader);
|
||||||
} else {
|
} else {
|
||||||
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.fileToBase64)(file).then(b64 => this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachFile(null, {
|
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.fileToBase64)(file).then(b64 => this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachFile(null, {
|
||||||
mime: b64.mime,
|
mime: b64.mime,
|
||||||
data: b64.bits,
|
data: b64.bits,
|
||||||
filename: b64.name
|
filename: b64.name
|
||||||
@@ -6067,11 +6077,11 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
handleAttachFile(file) {
|
handleAttachFile(file) {
|
||||||
const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_EXTERN_ATTACHMENT_SIZE);
|
const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_EXTERN_ATTACHMENT_SIZE);
|
||||||
if (file.size > maxExternAttachmentSize) {
|
if (file.size > maxExternAttachmentSize) {
|
||||||
this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large, {
|
this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large, {
|
||||||
size: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_20__.bytesToHumanSize)(file.size),
|
size: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_21__.bytesToHumanSize)(file.size),
|
||||||
limit: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_20__.bytesToHumanSize)(maxExternAttachmentSize)
|
limit: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_21__.bytesToHumanSize)(maxExternAttachmentSize)
|
||||||
}), 'err');
|
}), 'err');
|
||||||
} else {
|
} else {
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -6096,7 +6106,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
const width = this.state.imagePreview.width;
|
const width = this.state.imagePreview.width;
|
||||||
const height = this.state.imagePreview.height;
|
const height = this.state.imagePreview.height;
|
||||||
const fname = this.state.imagePreview.name;
|
const fname = this.state.imagePreview.name;
|
||||||
const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;
|
const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;
|
||||||
if (blob.size > maxInbandAttachmentSize) {
|
if (blob.size > maxInbandAttachmentSize) {
|
||||||
const uploader = this.props.tinode.getLargeFileHelper();
|
const uploader = this.props.tinode.getLargeFileHelper();
|
||||||
if (!uploader) {
|
if (!uploader) {
|
||||||
@@ -6104,7 +6114,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const uploadCompletionPromise = uploader.upload(blob);
|
const uploadCompletionPromise = uploader.upload(blob);
|
||||||
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_16__.IMAGE_PREVIEW_DIM, _config_js__WEBPACK_IMPORTED_MODULE_16__.IMAGE_PREVIEW_DIM, -1, false).then(scaled => (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.blobToBase64)(scaled.blob)).then(b64 => {
|
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_17__.IMAGE_PREVIEW_DIM, _config_js__WEBPACK_IMPORTED_MODULE_17__.IMAGE_PREVIEW_DIM, -1, false).then(scaled => (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.blobToBase64)(scaled.blob)).then(b64 => {
|
||||||
let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertImage(null, 0, {
|
let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertImage(null, 0, {
|
||||||
mime: mime,
|
mime: mime,
|
||||||
_tempPreview: b64.bits,
|
_tempPreview: b64.bits,
|
||||||
@@ -6122,7 +6132,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
}).catch(err => this.props.onError(err, 'err'));
|
}).catch(err => this.props.onError(err, 'err'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.blobToBase64)(blob).then(b64 => {
|
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.blobToBase64)(blob).then(b64 => {
|
||||||
let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertImage(null, 0, {
|
let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertImage(null, 0, {
|
||||||
mime: b64.mime,
|
mime: b64.mime,
|
||||||
preview: b64.bits,
|
preview: b64.bits,
|
||||||
@@ -6139,8 +6149,8 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
handleAttachImage(file) {
|
handleAttachImage(file) {
|
||||||
const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_EXTERN_ATTACHMENT_SIZE);
|
const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_EXTERN_ATTACHMENT_SIZE);
|
||||||
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.imageScaled)(file, _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_IMAGE_DIM, _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_IMAGE_DIM, maxExternAttachmentSize, false).then(scaled => {
|
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.imageScaled)(file, _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_IMAGE_DIM, _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_IMAGE_DIM, maxExternAttachmentSize, false).then(scaled => {
|
||||||
this.setState({
|
this.setState({
|
||||||
imagePreview: {
|
imagePreview: {
|
||||||
url: URL.createObjectURL(scaled.blob),
|
url: URL.createObjectURL(scaled.blob),
|
||||||
@@ -6156,9 +6166,20 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
this.props.onError(err, 'err');
|
this.props.onError(err, 'err');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
handleFileDrop(files) {
|
||||||
|
if (!files || files.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const file = files[0];
|
||||||
|
if (file.type && file.type.startsWith('image/')) {
|
||||||
|
this.handleAttachImage(file);
|
||||||
|
} else {
|
||||||
|
this.handleAttachFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
sendAudioAttachment(url, preview, duration) {
|
sendAudioAttachment(url, preview, duration) {
|
||||||
fetch(url).then(result => result.blob()).then(blob => {
|
fetch(url).then(result => result.blob()).then(blob => {
|
||||||
const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_16__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024;
|
const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_17__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024;
|
||||||
if (blob.size > maxInbandAttachmentSize) {
|
if (blob.size > maxInbandAttachmentSize) {
|
||||||
const uploader = this.props.tinode.getLargeFileHelper();
|
const uploader = this.props.tinode.getLargeFileHelper();
|
||||||
if (!uploader) {
|
if (!uploader) {
|
||||||
@@ -6175,7 +6196,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
});
|
});
|
||||||
this.sendMessage(msg, uploadCompletionPromise, uploader);
|
this.sendMessage(msg, uploadCompletionPromise, uploader);
|
||||||
} else {
|
} else {
|
||||||
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.blobToBase64)(blob).then(b64 => {
|
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.blobToBase64)(blob).then(b64 => {
|
||||||
this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendAudio(null, {
|
this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendAudio(null, {
|
||||||
mime: b64.mime,
|
mime: b64.mime,
|
||||||
size: blob.size,
|
size: blob.size,
|
||||||
@@ -6207,7 +6228,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
}
|
}
|
||||||
content = typeof content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init(content) : content;
|
content = typeof content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init(content) : content;
|
||||||
if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {
|
if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {
|
||||||
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.replyContent(content, _config_js__WEBPACK_IMPORTED_MODULE_16__.QUOTED_REPLY_LENGTH);
|
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.replyContent(content, _config_js__WEBPACK_IMPORTED_MODULE_17__.QUOTED_REPLY_LENGTH);
|
||||||
} else {
|
} else {
|
||||||
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init('\u26A0 '), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));
|
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init('\u26A0 '), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));
|
||||||
}
|
}
|
||||||
@@ -6229,7 +6250,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
content = typeof content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init(content) : content;
|
content = typeof content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init(content) : content;
|
||||||
const editable = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.toMarkdown(content);
|
const editable = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.toMarkdown(content);
|
||||||
if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {
|
if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {
|
||||||
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.replyContent(content, _config_js__WEBPACK_IMPORTED_MODULE_16__.EDIT_PREVIEW_LENGTH);
|
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.replyContent(content, _config_js__WEBPACK_IMPORTED_MODULE_17__.EDIT_PREVIEW_LENGTH);
|
||||||
} else {
|
} else {
|
||||||
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init('\u26A0 '), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));
|
content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init('\u26A0 '), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));
|
||||||
}
|
}
|
||||||
@@ -6273,14 +6294,14 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
if (this.props.hideSelf) {
|
if (this.props.hideSelf) {
|
||||||
component = null;
|
component = null;
|
||||||
} else if (!this.state.topic) {
|
} else if (!this.state.topic) {
|
||||||
component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_logo_view_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], {
|
component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_logo_view_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], {
|
||||||
serverVersion: this.props.serverVersion,
|
serverVersion: this.props.serverVersion,
|
||||||
serverAddress: this.props.serverAddress
|
serverAddress: this.props.serverAddress
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
let component2;
|
let component2;
|
||||||
if (this.state.imagePreview) {
|
if (this.state.imagePreview) {
|
||||||
component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
|
component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], {
|
||||||
content: this.state.imagePreview,
|
content: this.state.imagePreview,
|
||||||
tinode: this.props.tinode,
|
tinode: this.props.tinode,
|
||||||
reply: this.state.reply,
|
reply: this.state.reply,
|
||||||
@@ -6289,7 +6310,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
onSendMessage: this.sendImageAttachment
|
onSendMessage: this.sendImageAttachment
|
||||||
});
|
});
|
||||||
} else if (this.state.imagePostview) {
|
} else if (this.state.imagePostview) {
|
||||||
component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
|
component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], {
|
||||||
content: this.state.imagePostview,
|
content: this.state.imagePostview,
|
||||||
onClose: this.handleClosePreview
|
onClose: this.handleClosePreview
|
||||||
});
|
});
|
||||||
@@ -6368,7 +6389,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
const user = topic.userDesc(thisFrom);
|
const user = topic.userDesc(thisFrom);
|
||||||
if (user && user.public) {
|
if (user && user.public) {
|
||||||
userName = user.public.fn;
|
userName = user.public.fn;
|
||||||
userAvatar = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_18__.makeImageUrl)(user.public.photo);
|
userAvatar = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_19__.makeImageUrl)(user.public.photo);
|
||||||
}
|
}
|
||||||
chatBoxClass = groupTopic ? 'chat-box group' : 'chat-box';
|
chatBoxClass = groupTopic ? 'chat-box group' : 'chat-box';
|
||||||
const ref = this.getOrCreateMessageRef(msg.seq);
|
const ref = this.getOrCreateMessageRef(msg.seq);
|
||||||
@@ -6377,15 +6398,15 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
replyToSeq = null;
|
replyToSeq = null;
|
||||||
}
|
}
|
||||||
if (msg.hi) {
|
if (msg.hi) {
|
||||||
messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], {
|
messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], {
|
||||||
deleted: true,
|
deleted: true,
|
||||||
key: msg.seq
|
key: msg.seq
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
const thisDate = new Date(msg.ts);
|
const thisDate = new Date(msg.ts);
|
||||||
if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {
|
if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {
|
||||||
messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], {
|
messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], {
|
||||||
date: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_20__.relativeDateFormat)(msg.ts),
|
date: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_21__.relativeDateFormat)(msg.ts),
|
||||||
locale: this.props.intl.locale,
|
locale: this.props.intl.locale,
|
||||||
key: 'date-' + msg.seq
|
key: 'date-' + msg.seq
|
||||||
}));
|
}));
|
||||||
@@ -6432,67 +6453,14 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
if (cont.online) {
|
if (cont.online) {
|
||||||
lastSeen = formatMessage(messages.online_now);
|
lastSeen = formatMessage(messages.online_now);
|
||||||
} else if (cont.seen) {
|
} else if (cont.seen) {
|
||||||
lastSeen = formatMessage(messages.last_seen) + ": " + (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_20__.shortDateFormat)(cont.seen.when, this.props.intl.locale);
|
lastSeen = formatMessage(messages.last_seen) + ": " + (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_21__.shortDateFormat)(cont.seen.when, this.props.intl.locale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const avatar = this.state.avatar || true;
|
const avatar = this.state.avatar || true;
|
||||||
const online = this.state.deleted ? null : this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';
|
const online = this.state.deleted ? null : this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';
|
||||||
const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');
|
const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');
|
||||||
component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
let messagesComponent = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
id: "topic-caption-panel",
|
|
||||||
className: "caption-panel"
|
|
||||||
}, this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
||||||
href: "#",
|
|
||||||
id: "hide-message-view",
|
|
||||||
onClick: e => {
|
|
||||||
e.preventDefault();
|
|
||||||
this.props.onHideMessagesView();
|
|
||||||
}
|
|
||||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
|
||||||
className: "material-icons"
|
|
||||||
}, "arrow_back")) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
||||||
className: "avatar-box"
|
|
||||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], {
|
|
||||||
tinode: this.props.tinode,
|
|
||||||
avatar: avatar,
|
|
||||||
topic: this.state.topic,
|
|
||||||
title: this.state.title,
|
|
||||||
deleted: this.state.deleted
|
|
||||||
}), !isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
|
|
||||||
className: online
|
|
||||||
}) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
||||||
id: "topic-title-group"
|
|
||||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
||||||
id: "topic-title",
|
|
||||||
className: titleClass
|
|
||||||
}, this.state.title || react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
|
||||||
id: "unnamed_topic",
|
|
||||||
defaultMessage: [{
|
|
||||||
"type": 0,
|
|
||||||
"value": "Unnamed"
|
|
||||||
}]
|
|
||||||
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
|
||||||
badges: icon_badges
|
|
||||||
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
||||||
id: "topic-last-seen"
|
|
||||||
}, lastSeen)), groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
|
|
||||||
tinode: this.props.tinode,
|
|
||||||
subscribers: this.state.onlineSubs
|
|
||||||
}) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
||||||
id: "topic-users"
|
|
||||||
}), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
||||||
href: "#",
|
|
||||||
onClick: this.handleContextClick
|
|
||||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
|
||||||
className: "material-icons"
|
|
||||||
}, "more_vert")))), this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
|
|
||||||
level: this.props.errorLevel,
|
|
||||||
text: this.props.errorText,
|
|
||||||
onClearError: this.props.onError
|
|
||||||
}) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], {
|
|
||||||
show: this.state.fetchingMessages
|
|
||||||
}), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
||||||
id: "messages-container"
|
id: "messages-container"
|
||||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
||||||
className: 'action-button' + (this.state.showGoToLastButton ? '' : ' hidden'),
|
className: 'action-button' + (this.state.showGoToLastButton ? '' : ' hidden'),
|
||||||
@@ -6534,9 +6502,9 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
"type": 0,
|
"type": 0,
|
||||||
"value": "Enable"
|
"value": "Enable"
|
||||||
}]
|
}]
|
||||||
})), ".") : null, this.state.unconfirmed ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], {
|
})), ".") : null, this.state.unconfirmed ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], {
|
||||||
onAction: this.handleNewChatAcceptance
|
onAction: this.handleNewChatAcceptance
|
||||||
}) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], {
|
}) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], {
|
||||||
tinode: this.props.tinode,
|
tinode: this.props.tinode,
|
||||||
topicName: this.state.topic,
|
topicName: this.state.topic,
|
||||||
noInput: !!this.props.forwardMessage,
|
noInput: !!this.props.forwardMessage,
|
||||||
@@ -6553,6 +6521,63 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
|
|||||||
onQuoteClick: this.handleQuoteClick,
|
onQuoteClick: this.handleQuoteClick,
|
||||||
onCancelReply: this.handleCancelReply
|
onCancelReply: this.handleCancelReply
|
||||||
}));
|
}));
|
||||||
|
component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
|
id: "topic-caption-panel",
|
||||||
|
className: "caption-panel"
|
||||||
|
}, this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
||||||
|
href: "#",
|
||||||
|
id: "hide-message-view",
|
||||||
|
onClick: e => {
|
||||||
|
e.preventDefault();
|
||||||
|
this.props.onHideMessagesView();
|
||||||
|
}
|
||||||
|
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
||||||
|
className: "material-icons"
|
||||||
|
}, "arrow_back")) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
|
className: "avatar-box"
|
||||||
|
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], {
|
||||||
|
tinode: this.props.tinode,
|
||||||
|
avatar: avatar,
|
||||||
|
topic: this.state.topic,
|
||||||
|
title: this.state.title,
|
||||||
|
deleted: this.state.deleted
|
||||||
|
}), !isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
|
||||||
|
className: online
|
||||||
|
}) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
|
id: "topic-title-group"
|
||||||
|
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
|
id: "topic-title",
|
||||||
|
className: titleClass
|
||||||
|
}, this.state.title || react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||||
|
id: "unnamed_topic",
|
||||||
|
defaultMessage: [{
|
||||||
|
"type": 0,
|
||||||
|
"value": "Unnamed"
|
||||||
|
}]
|
||||||
|
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
||||||
|
badges: icon_badges
|
||||||
|
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
|
id: "topic-last-seen"
|
||||||
|
}, lastSeen)), groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
|
||||||
|
tinode: this.props.tinode,
|
||||||
|
subscribers: this.state.onlineSubs
|
||||||
|
}) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
|
id: "topic-users"
|
||||||
|
}), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
||||||
|
href: "#",
|
||||||
|
onClick: this.handleContextClick
|
||||||
|
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
||||||
|
className: "material-icons"
|
||||||
|
}, "more_vert")))), this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
|
||||||
|
level: this.props.errorLevel,
|
||||||
|
text: this.props.errorText,
|
||||||
|
onClearError: this.props.onError
|
||||||
|
}) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], {
|
||||||
|
show: this.state.fetchingMessages
|
||||||
|
}), !this.state.unconfirmed && !this.props.forwardMessage ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_drag_and_drop_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
|
||||||
|
actionPrompt: this.props.intl.formatMessage(messages.drag_file),
|
||||||
|
onDrop: this.handleFileDrop
|
||||||
|
}, messagesComponent) : messagesComponent);
|
||||||
}
|
}
|
||||||
component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
id: "topic-view"
|
id: "topic-view"
|
||||||
@@ -12526,7 +12551,7 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
||||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
|
|
||||||
class DragAndDrop extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
|
class DragAndDrop extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
@@ -14691,10 +14716,9 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
|
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
|
||||||
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
|
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
|
||||||
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
|
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
|
||||||
/* harmony import */ var _drag_and_drop_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./drag-and-drop.jsx */ "./src/widgets/drag-and-drop.jsx");
|
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
|
||||||
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
|
/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
|
||||||
/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
|
/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/formatters.js */ "./src/lib/formatters.js");
|
||||||
/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/formatters.js */ "./src/lib/formatters.js");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -14702,7 +14726,6 @@ const AudioRecorder = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Pro
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
|
const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
|
||||||
messaging_disabled: {
|
messaging_disabled: {
|
||||||
id: "messaging_disabled_prompt",
|
id: "messaging_disabled_prompt",
|
||||||
@@ -14840,7 +14863,7 @@ class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
formatReply() {
|
formatReply() {
|
||||||
return this.props.reply ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.reply.content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__.replyFormatter, {
|
return this.props.reply ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.reply.content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_5__.replyFormatter, {
|
||||||
formatMessage: this.props.intl.formatMessage.bind(this.props.intl),
|
formatMessage: this.props.intl.formatMessage.bind(this.props.intl),
|
||||||
authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)
|
authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)
|
||||||
}) : null;
|
}) : null;
|
||||||
@@ -14849,7 +14872,7 @@ class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComp
|
|||||||
if (this.props.disabled) {
|
if (this.props.disabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.filePasted)(e, file => {
|
if ((0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.filePasted)(e, file => {
|
||||||
this.props.onAttachImage(file);
|
this.props.onAttachImage(file);
|
||||||
}, file => {
|
}, file => {
|
||||||
this.props.onAttachFile(file);
|
this.props.onAttachFile(file);
|
||||||
@@ -14911,7 +14934,7 @@ class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComp
|
|||||||
});
|
});
|
||||||
if (this.props.onKeyPress) {
|
if (this.props.onKeyPress) {
|
||||||
const now = new Date().getTime();
|
const now = new Date().getTime();
|
||||||
if (now - this.keypressTimestamp > _config_js__WEBPACK_IMPORTED_MODULE_4__.KEYPRESS_DELAY) {
|
if (now - this.keypressTimestamp > _config_js__WEBPACK_IMPORTED_MODULE_3__.KEYPRESS_DELAY) {
|
||||||
this.props.onKeyPress();
|
this.props.onKeyPress();
|
||||||
this.keypressTimestamp = now;
|
this.keypressTimestamp = now;
|
||||||
}
|
}
|
||||||
@@ -14945,23 +14968,6 @@ class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComp
|
|||||||
className: "material-icons gray"
|
className: "material-icons gray"
|
||||||
}, "close"))), this.state.quote) : null;
|
}, "close"))), this.state.quote) : null;
|
||||||
const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;
|
const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;
|
||||||
const inputField = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", {
|
|
||||||
id: "sendMessage",
|
|
||||||
placeholder: prompt,
|
|
||||||
value: this.state.message,
|
|
||||||
onChange: this.handleMessageTyping,
|
|
||||||
onKeyPress: this.handleKeyPress,
|
|
||||||
ref: ref => {
|
|
||||||
this.messageEditArea = ref;
|
|
||||||
},
|
|
||||||
autoFocus: true
|
|
||||||
});
|
|
||||||
const inputArea = this.props.onAttachFile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_drag_and_drop_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
|
||||||
actionPrompt: formatMessage(messages.icon_title_attach_file),
|
|
||||||
onDrop: this.handleDropAttach
|
|
||||||
}, inputField) : {
|
|
||||||
inputField
|
|
||||||
};
|
|
||||||
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
id: "send-message-wrapper"
|
id: "send-message-wrapper"
|
||||||
}, !this.props.noInput ? quote : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
}, !this.props.noInput ? quote : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||||
@@ -14994,7 +15000,17 @@ class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComp
|
|||||||
audioRec: false
|
audioRec: false
|
||||||
}),
|
}),
|
||||||
onFinished: this.handleAttachAudio
|
onFinished: this.handleAttachAudio
|
||||||
})) : inputArea, this.state.message || !audioEnabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
})) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", {
|
||||||
|
id: "sendMessage",
|
||||||
|
placeholder: prompt,
|
||||||
|
value: this.state.message,
|
||||||
|
onChange: this.handleMessageTyping,
|
||||||
|
onKeyPress: this.handleKeyPress,
|
||||||
|
ref: ref => {
|
||||||
|
this.messageEditArea = ref;
|
||||||
|
},
|
||||||
|
autoFocus: true
|
||||||
|
}), this.state.message || !audioEnabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
||||||
href: "#",
|
href: "#",
|
||||||
onClick: this.handleSend,
|
onClick: this.handleSend,
|
||||||
title: formatMessage(messages.icon_title_send)
|
title: formatMessage(messages.icon_title_send)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user