mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-05-14 19:07:47 +00:00
Introduces a comprehensive disableChat config option that disables the entire chat feature including button visibility, notifications, sounds, private messages, and keyboard shortcuts. When disabled, the chat tab is hidden from the chat panel while allowing other tabs (polls, files, CC) to remain accessible.
114 lines
3.5 KiB
TypeScript
114 lines
3.5 KiB
TypeScript
import React, { Component } from 'react';
|
|
import { WithTranslation } from 'react-i18next';
|
|
import { connect } from 'react-redux';
|
|
|
|
import { IReduxState, IStore } from '../../../app/types';
|
|
import { CHAT_ENABLED } from '../../../base/flags/constants';
|
|
import { getFeatureFlag } from '../../../base/flags/functions';
|
|
import { translate } from '../../../base/i18n/functions';
|
|
import { IconMessage } from '../../../base/icons/svg';
|
|
import { getParticipantById } from '../../../base/participants/functions';
|
|
import { IParticipant } from '../../../base/participants/types';
|
|
import ContextMenuItem from '../../../base/ui/components/web/ContextMenuItem';
|
|
import { openChat } from '../../../chat/actions.web';
|
|
import { isChatDisabled } from '../../../chat/functions';
|
|
import { isButtonEnabled } from '../../../toolbox/functions.web';
|
|
import { NOTIFY_CLICK_MODE } from '../../../toolbox/types';
|
|
import { IButtonProps } from '../../types';
|
|
|
|
interface IProps extends IButtonProps, WithTranslation {
|
|
|
|
/**
|
|
* True if the private chat functionality is disabled, hence the button is not visible.
|
|
*/
|
|
_hidden: boolean;
|
|
|
|
/**
|
|
* The participant to send the message to.
|
|
*/
|
|
_participant?: IParticipant;
|
|
|
|
/**
|
|
* Redux dispatch function.
|
|
*/
|
|
dispatch: IStore['dispatch'];
|
|
}
|
|
|
|
/**
|
|
* A custom implementation of the PrivateMessageButton specialized for
|
|
* the web version of the remote video menu. When the web platform starts to use
|
|
* the {@code AbstractButton} component for the remote video menu, we can get rid
|
|
* of this component and use the generic button in the chat feature.
|
|
*/
|
|
class PrivateMessageMenuButton extends Component<IProps> {
|
|
/**
|
|
* Instantiates a new Component instance.
|
|
*
|
|
* @inheritdoc
|
|
*/
|
|
constructor(props: IProps) {
|
|
super(props);
|
|
|
|
this._onClick = this._onClick.bind(this);
|
|
}
|
|
|
|
/**
|
|
* Implements React's {@link Component#render()}.
|
|
*
|
|
* @inheritdoc
|
|
* @returns {ReactElement}
|
|
*/
|
|
override render() {
|
|
const { _hidden, t } = this.props;
|
|
|
|
if (_hidden) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<ContextMenuItem
|
|
accessibilityLabel = { t('toolbar.accessibilityLabel.privateMessage') }
|
|
icon = { IconMessage }
|
|
onClick = { this._onClick }
|
|
text = { t('toolbar.privateMessage') } />
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Callback to be invoked on pressing the button.
|
|
*
|
|
* @param {React.MouseEvent|undefined} e - The click event.
|
|
* @returns {void}
|
|
*/
|
|
_onClick() {
|
|
const { _participant, dispatch, notifyClick, notifyMode } = this.props;
|
|
|
|
notifyClick?.();
|
|
if (notifyMode === NOTIFY_CLICK_MODE.PREVENT_AND_NOTIFY) {
|
|
return;
|
|
}
|
|
dispatch(openChat(_participant));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Maps part of the Redux store to the props of this component.
|
|
*
|
|
* @param {Object} state - The Redux state.
|
|
* @param {IProps} ownProps - The own props of the component.
|
|
* @returns {IProps}
|
|
*/
|
|
function _mapStateToProps(state: IReduxState, ownProps: any) {
|
|
const enabled = getFeatureFlag(state, CHAT_ENABLED, true) && !isChatDisabled(state);
|
|
const { visible = enabled } = ownProps;
|
|
|
|
return {
|
|
_participant: getParticipantById(state, ownProps.participantID),
|
|
visible,
|
|
_hidden: (typeof interfaceConfig !== 'undefined'
|
|
&& (interfaceConfig.DISABLE_PRIVATE_MESSAGES || !isButtonEnabled('chat', state))) || isChatDisabled(state)
|
|
};
|
|
}
|
|
|
|
export default translate(connect(_mapStateToProps)(PrivateMessageMenuButton));
|