support for channels
This commit is contained in:
+1
-1
@@ -72,7 +72,7 @@
|
|||||||
"react": "^16.13.1",
|
"react": "^16.13.1",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
"react-intl": "^4.7.6",
|
"react-intl": "^4.7.6",
|
||||||
"tinode-sdk": "^0.16.7"
|
"tinode-sdk": "^0.16.8-beta1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.10.5",
|
"@babel/core": "^7.10.5",
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ export const MAX_TAG_COUNT = 16;
|
|||||||
export const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
|
export const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
|
||||||
// Access mode for new group topics created by the current user.
|
// Access mode for new group topics created by the current user.
|
||||||
export const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
|
export const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
|
||||||
|
// Access mode for a channel.
|
||||||
|
export const CHANNEL_ACCESS_MODE = 'JR';
|
||||||
|
|
||||||
// Access mode for no access.
|
// Access mode for no access.
|
||||||
export const NO_ACCESS_MODE = 'N';
|
export const NO_ACCESS_MODE = 'N';
|
||||||
|
|||||||
@@ -718,7 +718,7 @@ class InfoView extends React.Component {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
{this.state.groupTopic ?
|
{this.state.groupTopic && this.state.sharer ?
|
||||||
<>
|
<>
|
||||||
<div className="hr" />
|
<div className="hr" />
|
||||||
<div className="panel-form-column">
|
<div className="panel-form-column">
|
||||||
@@ -729,12 +729,10 @@ class InfoView extends React.Component {
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="panel-form-row">
|
<div className="panel-form-row">
|
||||||
{this.state.sharer ?
|
<a href="#" className="flat-button" onClick={this.handleShowAddMembers}>
|
||||||
<a href="#" className="flat-button" onClick={this.handleShowAddMembers}>
|
<i className="material-icons">person_add</i> <FormattedMessage id="button_add_members"
|
||||||
<i className="material-icons">person_add</i> <FormattedMessage id="button_add_members"
|
defaultMessage="Add members" description="Flat button [Add members] (to topic)" />
|
||||||
defaultMessage="Add members" description="Flat button [Add members] (to topic)" />
|
</a>
|
||||||
</a>
|
|
||||||
: null}
|
|
||||||
</div>
|
</div>
|
||||||
<FormattedMessage id="group_has_no_members" defaultMessage="No members"
|
<FormattedMessage id="group_has_no_members" defaultMessage="No members"
|
||||||
description="Shown in place of group members">{
|
description="Shown in place of group members">{
|
||||||
|
|||||||
+24
-12
@@ -152,9 +152,13 @@ class MessagesView extends React.Component {
|
|||||||
|
|
||||||
// Don't request the tags. They are useless unless the user
|
// Don't request the tags. They are useless unless the user
|
||||||
// is the owner and is editing the topic.
|
// is the owner and is editing the topic.
|
||||||
let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub();
|
let getQuery = topic.startMetaQuery().withLaterDesc();
|
||||||
|
if (this.state.isSharer || (newTopic && !topic.isChannel())) {
|
||||||
|
// Request subscriptions only if one of S,O,A is given or it's a new non-channel topic.
|
||||||
|
getQuery = getQuery.withLaterSub();
|
||||||
|
}
|
||||||
if (this.state.isReader || newTopic) {
|
if (this.state.isReader || newTopic) {
|
||||||
// If reading is either permitted or we don't know because it's a new topic. Ask for messages.
|
// Reading is either permitted or we don't know because it's a new topic. Ask for messages.
|
||||||
getQuery = getQuery.withLaterData(MESSAGES_PAGE);
|
getQuery = getQuery.withLaterData(MESSAGES_PAGE);
|
||||||
if (this.state.isReader) {
|
if (this.state.isReader) {
|
||||||
getQuery = getQuery.withLaterDel();
|
getQuery = getQuery.withLaterDel();
|
||||||
@@ -284,6 +288,9 @@ class MessagesView extends React.Component {
|
|||||||
if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {
|
if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {
|
||||||
nextState.readingBlocked = !prevState.readingBlocked;
|
nextState.readingBlocked = !prevState.readingBlocked;
|
||||||
}
|
}
|
||||||
|
if (nextProps.acs.isSharer() != prevState.isSharer) {
|
||||||
|
nextState.isSharer = !prevState.isSharer;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (prevState.isWriter) {
|
if (prevState.isWriter) {
|
||||||
nextState.isWriter = false;
|
nextState.isWriter = false;
|
||||||
@@ -294,6 +301,9 @@ class MessagesView extends React.Component {
|
|||||||
if (!prevState.readingBlocked) {
|
if (!prevState.readingBlocked) {
|
||||||
prevState.readingBlocked = true;
|
prevState.readingBlocked = true;
|
||||||
}
|
}
|
||||||
|
if (prevState.isSharer) {
|
||||||
|
nextState.isSharer = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {
|
if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {
|
||||||
@@ -726,7 +736,8 @@ class MessagesView extends React.Component {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
const topic = this.props.tinode.getTopic(this.state.topic);
|
const topic = this.props.tinode.getTopic(this.state.topic);
|
||||||
const groupTopic = topic.getType() == 'grp';
|
const isChannel = topic.isChannel();
|
||||||
|
const groupTopic = topic.getType() == 'grp' && !isChannel;
|
||||||
let messageNodes = [];
|
let messageNodes = [];
|
||||||
let previousFrom = null;
|
let previousFrom = null;
|
||||||
let chatBoxClass = null;
|
let chatBoxClass = null;
|
||||||
@@ -735,32 +746,33 @@ class MessagesView extends React.Component {
|
|||||||
let nextFrom = null;
|
let nextFrom = null;
|
||||||
|
|
||||||
if (i + 1 < this.state.messages.length) {
|
if (i + 1 < this.state.messages.length) {
|
||||||
nextFrom = this.state.messages[i+1].from
|
nextFrom = this.state.messages[i+1].from || 'chan';
|
||||||
}
|
}
|
||||||
|
|
||||||
let sequence = 'single';
|
let sequence = 'single';
|
||||||
if (msg.from == previousFrom) {
|
let thisFrom = msg.from || 'chan';
|
||||||
if (msg.from == nextFrom) {
|
if (thisFrom == previousFrom) {
|
||||||
|
if (thisFrom == nextFrom) {
|
||||||
sequence = 'middle';
|
sequence = 'middle';
|
||||||
} else {
|
} else {
|
||||||
sequence = 'last';
|
sequence = 'last';
|
||||||
}
|
}
|
||||||
} else if (msg.from == nextFrom) {
|
} else if (thisFrom == nextFrom) {
|
||||||
sequence = 'first';
|
sequence = 'first';
|
||||||
}
|
}
|
||||||
previousFrom = msg.from;
|
previousFrom = thisFrom;
|
||||||
|
|
||||||
const isReply = !(msg.from == this.props.myUserId);
|
const isReply = !(thisFrom == this.props.myUserId);
|
||||||
const deliveryStatus = topic.msgStatus(msg);
|
const deliveryStatus = topic.msgStatus(msg);
|
||||||
|
|
||||||
let userName, userAvatar, userFrom;
|
let userName, userAvatar, userFrom;
|
||||||
if (groupTopic) {
|
if (groupTopic) {
|
||||||
const user = topic.userDesc(msg.from);
|
const user = topic.userDesc(thisFrom);
|
||||||
if (user && user.public) {
|
if (user && user.public) {
|
||||||
userName = user.public.fn;
|
userName = user.public.fn;
|
||||||
userAvatar = makeImageUrl(user.public.photo);
|
userAvatar = makeImageUrl(user.public.photo);
|
||||||
}
|
}
|
||||||
userFrom = msg.from;
|
userFrom = thisFrom;
|
||||||
chatBoxClass='chat-box group';
|
chatBoxClass='chat-box group';
|
||||||
} else {
|
} else {
|
||||||
chatBoxClass='chat-box';
|
chatBoxClass='chat-box';
|
||||||
@@ -811,7 +823,7 @@ class MessagesView extends React.Component {
|
|||||||
avatar={avatar}
|
avatar={avatar}
|
||||||
topic={this.state.topic}
|
topic={this.state.topic}
|
||||||
title={this.state.title} />
|
title={this.state.title} />
|
||||||
<span className={online} />
|
{!isChannel ? <span className={online} /> : null}
|
||||||
</div>
|
</div>
|
||||||
<div id="topic-title-group">
|
<div id="topic-title-group">
|
||||||
<div id="topic-title" className="panel-title">{
|
<div id="topic-title" className="panel-title">{
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { defineMessages, injectIntl } from 'react-intl';
|
import { defineMessages, injectIntl } from 'react-intl';
|
||||||
|
|
||||||
|
import Tinode from 'tinode-sdk';
|
||||||
|
|
||||||
import Contact from './contact.jsx';
|
import Contact from './contact.jsx';
|
||||||
import ContactAction from './contact-action.jsx';
|
import ContactAction from './contact-action.jsx';
|
||||||
|
|
||||||
@@ -55,6 +57,7 @@ class ContactList extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isChannel = Tinode.isChannelTopicName(key);
|
||||||
const selected = showCheckmark ?
|
const selected = showCheckmark ?
|
||||||
(this.props.topicSelected.indexOf(key) > -1) :
|
(this.props.topicSelected.indexOf(key) > -1) :
|
||||||
(this.props.topicSelected === key);
|
(this.props.topicSelected === key);
|
||||||
@@ -82,7 +85,7 @@ class ContactList extends React.Component {
|
|||||||
badges={badges}
|
badges={badges}
|
||||||
showCheckmark={showCheckmark}
|
showCheckmark={showCheckmark}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
showOnline={this.props.showOnline}
|
showOnline={this.props.showOnline && !isChannel}
|
||||||
onSelected={this.props.onTopicSelected}
|
onSelected={this.props.onTopicSelected}
|
||||||
showContextMenu={this.props.showContextMenu}
|
showContextMenu={this.props.showContextMenu}
|
||||||
item={key}
|
item={key}
|
||||||
|
|||||||
+32
-13
@@ -90,7 +90,7 @@
|
|||||||
/*!***********************!*\
|
/*!***********************!*\
|
||||||
!*** ./src/config.js ***!
|
!*** ./src/config.js ***!
|
||||||
\***********************/
|
\***********************/
|
||||||
/*! exports provided: APP_NAME, API_KEY, KNOWN_HOSTS, DEFAULT_HOST, LOGGING_ENABLED, KEYPRESS_DELAY, RECEIVED_DELAY, READ_DELAY, MIN_TAG_LENGTH, MAX_TAG_COUNT, DEFAULT_P2P_ACCESS_MODE, NEW_GRP_ACCESS_MODE, NO_ACCESS_MODE, MEDIA_BREAKPOINT, REM_SIZE, AVATAR_SIZE, BROKEN_IMAGE_SIZE, MESSAGES_PAGE, MAX_INBAND_ATTACHMENT_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, MAX_IMAGE_DIM, MAX_ONLINE_IN_TOPIC, MAX_TITLE_LENGTH, LINK_CONTACT_US, LINK_PRIVACY_POLICY, LINK_TERMS_OF_SERVICE */
|
/*! exports provided: APP_NAME, API_KEY, KNOWN_HOSTS, DEFAULT_HOST, LOGGING_ENABLED, KEYPRESS_DELAY, RECEIVED_DELAY, READ_DELAY, MIN_TAG_LENGTH, MAX_TAG_COUNT, DEFAULT_P2P_ACCESS_MODE, NEW_GRP_ACCESS_MODE, CHANNEL_ACCESS_MODE, NO_ACCESS_MODE, MEDIA_BREAKPOINT, REM_SIZE, AVATAR_SIZE, BROKEN_IMAGE_SIZE, MESSAGES_PAGE, MAX_INBAND_ATTACHMENT_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, MAX_IMAGE_DIM, MAX_ONLINE_IN_TOPIC, MAX_TITLE_LENGTH, LINK_CONTACT_US, LINK_PRIVACY_POLICY, LINK_TERMS_OF_SERVICE */
|
||||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
@@ -107,6 +107,7 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MAX_TAG_COUNT", function() { return MAX_TAG_COUNT; });
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MAX_TAG_COUNT", function() { return MAX_TAG_COUNT; });
|
||||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_P2P_ACCESS_MODE", function() { return DEFAULT_P2P_ACCESS_MODE; });
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_P2P_ACCESS_MODE", function() { return DEFAULT_P2P_ACCESS_MODE; });
|
||||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NEW_GRP_ACCESS_MODE", function() { return NEW_GRP_ACCESS_MODE; });
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NEW_GRP_ACCESS_MODE", function() { return NEW_GRP_ACCESS_MODE; });
|
||||||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CHANNEL_ACCESS_MODE", function() { return CHANNEL_ACCESS_MODE; });
|
||||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NO_ACCESS_MODE", function() { return NO_ACCESS_MODE; });
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NO_ACCESS_MODE", function() { return NO_ACCESS_MODE; });
|
||||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MEDIA_BREAKPOINT", function() { return MEDIA_BREAKPOINT; });
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MEDIA_BREAKPOINT", function() { return MEDIA_BREAKPOINT; });
|
||||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REM_SIZE", function() { return REM_SIZE; });
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REM_SIZE", function() { return REM_SIZE; });
|
||||||
@@ -138,6 +139,7 @@ const MIN_TAG_LENGTH = 4;
|
|||||||
const MAX_TAG_COUNT = 16;
|
const MAX_TAG_COUNT = 16;
|
||||||
const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
|
const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
|
||||||
const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
|
const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
|
||||||
|
const CHANNEL_ACCESS_MODE = 'JR';
|
||||||
const NO_ACCESS_MODE = 'N';
|
const NO_ACCESS_MODE = 'N';
|
||||||
const MEDIA_BREAKPOINT = 640;
|
const MEDIA_BREAKPOINT = 640;
|
||||||
const REM_SIZE = 13;
|
const REM_SIZE = 13;
|
||||||
@@ -2595,7 +2597,7 @@ class InfoView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
|||||||
onClick: this.handleReport
|
onClick: this.handleReport
|
||||||
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
|
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
|
||||||
className: "material-icons"
|
className: "material-icons"
|
||||||
}, "report"), " \xA0", formatMessage(messages.report_chat)) : null), this.state.groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
}, "report"), " \xA0", formatMessage(messages.report_chat)) : null), this.state.groupTopic && this.state.sharer ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
||||||
className: "hr"
|
className: "hr"
|
||||||
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
||||||
className: "panel-form-column"
|
className: "panel-form-column"
|
||||||
@@ -2608,7 +2610,7 @@ class InfoView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
|||||||
defaultMessage: "Group members:"
|
defaultMessage: "Group members:"
|
||||||
}))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
}))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
||||||
className: "panel-form-row"
|
className: "panel-form-row"
|
||||||
}, this.state.sharer ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
|
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
|
||||||
href: "#",
|
href: "#",
|
||||||
className: "flat-button",
|
className: "flat-button",
|
||||||
onClick: this.handleShowAddMembers
|
onClick: this.handleShowAddMembers
|
||||||
@@ -2617,7 +2619,7 @@ class InfoView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
|||||||
}, "person_add"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
}, "person_add"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||||||
id: "button_add_members",
|
id: "button_add_members",
|
||||||
defaultMessage: "Add members"
|
defaultMessage: "Add members"
|
||||||
})) : null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
}))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||||||
id: "group_has_no_members",
|
id: "group_has_no_members",
|
||||||
defaultMessage: "No members"
|
defaultMessage: "No members"
|
||||||
}, no_members => react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
}, no_members => react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
||||||
@@ -2973,7 +2975,12 @@ class MessagesView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Componen
|
|||||||
|
|
||||||
if (topic && !topic.isSubscribed() && this.props.ready && (this.state.topic != prevState.topic || !prevProps.ready)) {
|
if (topic && !topic.isSubscribed() && this.props.ready && (this.state.topic != prevState.topic || !prevProps.ready)) {
|
||||||
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();
|
||||||
|
console.log("subscribing:", this.state.isSharer, newTopic, topic.isChannel());
|
||||||
|
|
||||||
|
if (this.state.isSharer || newTopic && !topic.isChannel()) {
|
||||||
|
getQuery = getQuery.withLaterSub();
|
||||||
|
}
|
||||||
|
|
||||||
if (this.state.isReader || newTopic) {
|
if (this.state.isReader || newTopic) {
|
||||||
getQuery = getQuery.withLaterData(_config_js__WEBPACK_IMPORTED_MODULE_13__["MESSAGES_PAGE"]);
|
getQuery = getQuery.withLaterData(_config_js__WEBPACK_IMPORTED_MODULE_13__["MESSAGES_PAGE"]);
|
||||||
@@ -3109,6 +3116,10 @@ class MessagesView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Componen
|
|||||||
if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {
|
if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {
|
||||||
nextState.readingBlocked = !prevState.readingBlocked;
|
nextState.readingBlocked = !prevState.readingBlocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nextProps.acs.isSharer() != prevState.isSharer) {
|
||||||
|
nextState.isSharer = !prevState.isSharer;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (prevState.isWriter) {
|
if (prevState.isWriter) {
|
||||||
nextState.isWriter = false;
|
nextState.isWriter = false;
|
||||||
@@ -3121,6 +3132,10 @@ class MessagesView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Componen
|
|||||||
if (!prevState.readingBlocked) {
|
if (!prevState.readingBlocked) {
|
||||||
prevState.readingBlocked = true;
|
prevState.readingBlocked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prevState.isSharer) {
|
||||||
|
nextState.isSharer = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {
|
if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {
|
||||||
@@ -3575,7 +3590,7 @@ class MessagesView extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Componen
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const topic = this.props.tinode.getTopic(this.state.topic);
|
const topic = this.props.tinode.getTopic(this.state.topic);
|
||||||
const groupTopic = topic.getType() == 'grp';
|
const groupTopic = topic.getType() == 'grp' && !topic.isChannel();
|
||||||
let messageNodes = [];
|
let messageNodes = [];
|
||||||
let previousFrom = null;
|
let previousFrom = null;
|
||||||
let chatBoxClass = null;
|
let chatBoxClass = null;
|
||||||
@@ -7024,9 +7039,12 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/* 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__);
|
||||||
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
|
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
|
||||||
/* 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 _contact_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./contact.jsx */ "./src/widgets/contact.jsx");
|
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
|
||||||
/* harmony import */ var _contact_action_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-action.jsx */ "./src/widgets/contact-action.jsx");
|
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
|
||||||
/* 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 _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ "./src/widgets/contact.jsx");
|
||||||
|
/* harmony import */ var _contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contact-action.jsx */ "./src/widgets/contact-action.jsx");
|
||||||
|
/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -7055,7 +7073,7 @@ class ContactList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component
|
|||||||
if (this.props.contacts && this.props.contacts.length > 0) {
|
if (this.props.contacts && this.props.contacts.length > 0) {
|
||||||
this.props.contacts.map(c => {
|
this.props.contacts.map(c => {
|
||||||
if (c.action) {
|
if (c.action) {
|
||||||
contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_action_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
||||||
title: c.title,
|
title: c.title,
|
||||||
action: c.action,
|
action: c.action,
|
||||||
values: c.values,
|
values: c.values,
|
||||||
@@ -7081,6 +7099,7 @@ class ContactList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isChannel = tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default.a.isChannelTopicName(key);
|
||||||
const selected = showCheckmark ? this.props.topicSelected.indexOf(key) > -1 : this.props.topicSelected === key;
|
const selected = showCheckmark ? this.props.topicSelected.indexOf(key) > -1 : this.props.topicSelected === key;
|
||||||
const badges = [];
|
const badges = [];
|
||||||
|
|
||||||
@@ -7101,9 +7120,9 @@ class ContactList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component
|
|||||||
}
|
}
|
||||||
|
|
||||||
const comment = Array.isArray(c.private) ? c.private.join(',') : c.private ? c.private.comment : null;
|
const comment = Array.isArray(c.private) ? c.private.join(',') : c.private ? c.private.comment : null;
|
||||||
contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
title: c.public ? c.public.fn : null,
|
title: c.public ? c.public.fn : null,
|
||||||
avatar: Object(_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__["makeImageUrl"])(c.public ? c.public.photo : null),
|
avatar: Object(_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__["makeImageUrl"])(c.public ? c.public.photo : null),
|
||||||
comment: comment,
|
comment: comment,
|
||||||
unread: this.props.showUnread ? c.unread : 0,
|
unread: this.props.showUnread ? c.unread : 0,
|
||||||
now: c.online && this.props.connected,
|
now: c.online && this.props.connected,
|
||||||
@@ -7112,7 +7131,7 @@ class ContactList extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component
|
|||||||
badges: badges,
|
badges: badges,
|
||||||
showCheckmark: showCheckmark,
|
showCheckmark: showCheckmark,
|
||||||
selected: selected,
|
selected: selected,
|
||||||
showOnline: this.props.showOnline,
|
showOnline: this.props.showOnline && !isChannel,
|
||||||
onSelected: this.props.onTopicSelected,
|
onSelected: this.props.onTopicSelected,
|
||||||
showContextMenu: this.props.showContextMenu,
|
showContextMenu: this.props.showContextMenu,
|
||||||
item: key,
|
item: key,
|
||||||
|
|||||||
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
+80
-18
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user