From 80eaea4e4bf3ea18f1cc8983602122f0cee0b242 Mon Sep 17 00:00:00 2001 From: 1aerostorm Date: Wed, 2 Oct 2024 12:17:31 +0300 Subject: [PATCH] HF 30 - Private groups - Fix websocket, small fixes, memo key not required --- .../elements/messages/Compose/index.jsx | 18 +++++++ src/components/modules/Modals.jsx | 26 ++++++++-- src/components/pages/Messages.jsx | 48 ++++++++++++------- 3 files changed, 69 insertions(+), 23 deletions(-) diff --git a/src/components/elements/messages/Compose/index.jsx b/src/components/elements/messages/Compose/index.jsx index d7b20c90..0be80a77 100644 --- a/src/components/elements/messages/Compose/index.jsx +++ b/src/components/elements/messages/Compose/index.jsx @@ -8,6 +8,18 @@ import Icon from 'app/components/elements/Icon'; import { displayQuoteMsg } from 'app/utils/MessageUtils'; import './Compose.css'; +const fixComposeSize = () => { + const sb = document.getElementsByClassName('msgs-sidebar')[0] + let cw = '100%' + if (sb) { + cw = 'calc(100% - ' + sb.offsetWidth + 'px)' + } + const compose = document.getElementsByClassName('msgs-compose')[0] + if (compose) { + compose.style.width = cw + } +} + export default class Compose extends React.Component { onKeyDown = (e) => { if (!window.IS_MOBILE_DEVICE && e.keyCode === 13) { @@ -57,12 +69,18 @@ export default class Compose extends React.Component { componentDidMount() { this.init(); + fixComposeSize() + window.addEventListener('resize', fixComposeSize) } componentDidUpdate() { this.init(); } + componentWillUnmount() { + window.removeEventListener('resize', fixComposeSize) + } + onEmojiClick = (event) => { event.stopPropagation(); diff --git a/src/components/modules/Modals.jsx b/src/components/modules/Modals.jsx index 9a370990..f4bbcba8 100644 --- a/src/components/modules/Modals.jsx +++ b/src/components/modules/Modals.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types' import {NotificationStack} from 'react-notification' import { connect } from 'react-redux'; +import { withRouter } from 'react-router' import CloseButton from 'react-foundation-components/lib/global/close-button'; import Reveal from 'react-foundation-components/lib/global/reveal'; @@ -81,11 +82,23 @@ class Modals extends React.Component { overflow: 'hidden', } + const doHideLogin = (e) => { + const goBack = () => { + const { history, } = this.props + if (history.action !== 'POP') { + history.goBack() + } else { + history.push('/') + } + } + hideLogin(e, goBack) + } + return (
{show_login_modal && - + onHide={doHideLogin} show={show_login_modal}> + } {show_donate_modal && @@ -132,7 +145,7 @@ class Modals extends React.Component { } } -export default connect( +export default withRouter(connect( state => { const loginDefault = state.user.get('loginDefault'); const loginUnclosable = loginDefault && loginDefault.get('unclosable'); @@ -150,8 +163,11 @@ export default connect( } }, dispatch => ({ - hideLogin: e => { + hideLogin: (e, goBack) => { if (e) e.preventDefault(); + if (goBack) { + goBack() + } dispatch(user.actions.hideLogin()) }, hideDonate: e => { @@ -187,4 +203,4 @@ export default connect( removeNotification: (key) => dispatch({type: 'REMOVE_NOTIFICATION', payload: {key}}), }) -)(Modals) +)(Modals)) diff --git a/src/components/pages/Messages.jsx b/src/components/pages/Messages.jsx index 23f8af5a..3abcf53c 100644 --- a/src/components/pages/Messages.jsx +++ b/src/components/pages/Messages.jsx @@ -273,6 +273,7 @@ class Messages extends React.Component { setTimeout(ping, 10000) } ping(true) + this.watchGroup(this.props.to) } componentDidMount() { @@ -288,12 +289,14 @@ class Messages extends React.Component { document.addEventListener('resume', this.onResume) } this.props.loginUser() + this.checkUserAuth(true) + } + + checkUserAuth = (initial) => { const checkAuth = () => { - if (!this.props.username) { - this.props.checkMemo(this.props.currentUser); - } + this.props.checkAuth(this.props.currentUser, this.isChat()) } - if (!localStorage.getItem('msgr_auth')) { + if (!initial || !localStorage.getItem('msgr_auth')) { checkAuth() } else { setTimeout(() => { @@ -303,7 +306,11 @@ class Messages extends React.Component { } componentDidUpdate(prevProps) { - if (this.props.username !== prevProps.username && this.props.username) { + const loggedNow = this.props.username !== prevProps.username && this.props.username + if (this.props.to !== prevProps.to || (this.isChat() && loggedNow)) { + this.checkUserAuth() + } + if (loggedNow) { this.props.fetchState(this.props.to); this.setCallback(this.props.username) } else if (this.props.to !== this.state.to) { @@ -323,9 +330,9 @@ class Messages extends React.Component { this.setState({ to: this.props.to, // protects from infinity loop }); - if (!this.props.checkMemo(currentUser)) { + /*if (!this.props.checkMemo(currentUser)) { return; - } + }*/ const anotherKey = this.props.memo_private !== prevProps.memo_private; const added = this.props.messages.size > this.state.messagesCount; let focusTimeout = prevProps.messages.size ? 100 : 1000; @@ -344,9 +351,7 @@ class Messages extends React.Component { if (added) this.markMessages2(); setTimeout(() => { - if (anotherChat || anotherKey) { - this.focusInput(); - } + this.focusInput(); }, focusTimeout); }) } @@ -911,6 +916,11 @@ class Messages extends React.Component { ); }; + isChat = () => { + const { to } = this.props + return to && to.startsWith('@') + } + isGroup = () => { const { to } = this.props return to && !to.startsWith('@') @@ -1112,7 +1122,7 @@ export default withRouter(connect( dispatch => ({ loginUser: () => dispatch(user.actions.usernamePasswordLogin()), - checkMemo: (currentUser) => { + checkAuth: (currentUser, memoNeed) => { if (!currentUser) { hideSplash() dispatch(user.actions.showLogin({ @@ -1120,13 +1130,15 @@ export default withRouter(connect( })); return false; } - const private_key = currentUser.getIn(['private_keys', 'memo_private']); - if (!private_key) { - hideSplash() - dispatch(user.actions.showLogin({ - loginDefault: { username: currentUser.get('username'), authType: 'memo', unclosable: true } - })); - return false; + if (memoNeed) { + const private_key = currentUser.getIn(['private_keys', 'memo_private']) + if (!private_key) { + hideSplash() + dispatch(user.actions.showLogin({ + loginDefault: { username: currentUser.get('username'), authType: 'memo', } + })); + return false + } } return true; },