mirror of https://github.com/vector-im/riot-web
fix Stickerpicker and MessageContextMenu
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>pull/21833/head
parent
3847996b5b
commit
811454462d
|
@ -31,6 +31,7 @@ import Resend from '../../../Resend';
|
||||||
import SettingsStore from '../../../settings/SettingsStore';
|
import SettingsStore from '../../../settings/SettingsStore';
|
||||||
import { isUrlPermitted } from '../../../HtmlUtils';
|
import { isUrlPermitted } from '../../../HtmlUtils';
|
||||||
import { isContentActionable } from '../../../utils/EventUtils';
|
import { isContentActionable } from '../../../utils/EventUtils';
|
||||||
|
import {MenuItem} from "../../structures/ContextualMenu";
|
||||||
|
|
||||||
function canCancel(eventStatus) {
|
function canCancel(eventStatus) {
|
||||||
return eventStatus === EventStatus.QUEUED || eventStatus === EventStatus.NOT_SENT;
|
return eventStatus === EventStatus.QUEUED || eventStatus === EventStatus.NOT_SENT;
|
||||||
|
@ -289,8 +290,6 @@ module.exports = createReactClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
|
|
||||||
|
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
const me = cli.getUserId();
|
const me = cli.getUserId();
|
||||||
const mxEvent = this.props.mxEvent;
|
const mxEvent = this.props.mxEvent;
|
||||||
|
@ -322,89 +321,89 @@ module.exports = createReactClass({
|
||||||
if (!mxEvent.isRedacted()) {
|
if (!mxEvent.isRedacted()) {
|
||||||
if (eventStatus === EventStatus.NOT_SENT) {
|
if (eventStatus === EventStatus.NOT_SENT) {
|
||||||
resendButton = (
|
resendButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onResendClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onResendClick}>
|
||||||
{ _t('Resend') }
|
{ _t('Resend') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editStatus === EventStatus.NOT_SENT) {
|
if (editStatus === EventStatus.NOT_SENT) {
|
||||||
resendEditButton = (
|
resendEditButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onResendEditClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onResendEditClick}>
|
||||||
{ _t('Resend edit') }
|
{ _t('Resend edit') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unsentReactionsCount !== 0) {
|
if (unsentReactionsCount !== 0) {
|
||||||
resendReactionsButton = (
|
resendReactionsButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onResendReactionsClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onResendReactionsClick}>
|
||||||
{ _t('Resend %(unsentCount)s reaction(s)', {unsentCount: unsentReactionsCount}) }
|
{ _t('Resend %(unsentCount)s reaction(s)', {unsentCount: unsentReactionsCount}) }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (redactStatus === EventStatus.NOT_SENT) {
|
if (redactStatus === EventStatus.NOT_SENT) {
|
||||||
resendRedactionButton = (
|
resendRedactionButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onResendRedactionClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onResendRedactionClick}>
|
||||||
{ _t('Resend removal') }
|
{ _t('Resend removal') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSent && this.state.canRedact) {
|
if (isSent && this.state.canRedact) {
|
||||||
redactButton = (
|
redactButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onRedactClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onRedactClick}>
|
||||||
{ _t('Remove') }
|
{ _t('Remove') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allowCancel) {
|
if (allowCancel) {
|
||||||
cancelButton = (
|
cancelButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onCancelSendClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onCancelSendClick}>
|
||||||
{ _t('Cancel Sending') }
|
{ _t('Cancel Sending') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isContentActionable(mxEvent)) {
|
if (isContentActionable(mxEvent)) {
|
||||||
forwardButton = (
|
forwardButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onForwardClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onForwardClick}>
|
||||||
{ _t('Forward Message') }
|
{ _t('Forward Message') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (this.state.canPin) {
|
if (this.state.canPin) {
|
||||||
pinButton = (
|
pinButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onPinClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onPinClick}>
|
||||||
{ this._isPinned() ? _t('Unpin Message') : _t('Pin Message') }
|
{ this._isPinned() ? _t('Unpin Message') : _t('Pin Message') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const viewSourceButton = (
|
const viewSourceButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onViewSourceClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onViewSourceClick}>
|
||||||
{ _t('View Source') }
|
{ _t('View Source') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (mxEvent.getType() !== mxEvent.getWireType()) {
|
if (mxEvent.getType() !== mxEvent.getWireType()) {
|
||||||
viewClearSourceButton = (
|
viewClearSourceButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onViewClearSourceClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onViewClearSourceClick}>
|
||||||
{ _t('View Decrypted Source') }
|
{ _t('View Decrypted Source') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.eventTileOps) {
|
if (this.props.eventTileOps) {
|
||||||
if (this.props.eventTileOps.isWidgetHidden()) {
|
if (this.props.eventTileOps.isWidgetHidden()) {
|
||||||
unhidePreviewButton = (
|
unhidePreviewButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onUnhidePreviewClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onUnhidePreviewClick}>
|
||||||
{ _t('Unhide Preview') }
|
{ _t('Unhide Preview') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -415,19 +414,19 @@ module.exports = createReactClass({
|
||||||
}
|
}
|
||||||
// XXX: if we use room ID, we should also include a server where the event can be found (other than in the domain of the event ID)
|
// XXX: if we use room ID, we should also include a server where the event can be found (other than in the domain of the event ID)
|
||||||
const permalinkButton = (
|
const permalinkButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field">
|
<MenuItem className="mx_MessageContextMenu_field">
|
||||||
<a href={permalink} target="_blank" rel="noopener" onClick={this.onPermalinkClick} tabIndex={-1}>
|
<a href={permalink} target="_blank" rel="noopener" onClick={this.onPermalinkClick} tabIndex={-1}>
|
||||||
{ mxEvent.isRedacted() || mxEvent.getType() !== 'm.room.message'
|
{ mxEvent.isRedacted() || mxEvent.getType() !== 'm.room.message'
|
||||||
? _t('Share Permalink') : _t('Share Message') }
|
? _t('Share Permalink') : _t('Share Message') }
|
||||||
</a>
|
</a>
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (this.props.eventTileOps && this.props.eventTileOps.getInnerText) {
|
if (this.props.eventTileOps && this.props.eventTileOps.getInnerText) {
|
||||||
quoteButton = (
|
quoteButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onQuoteClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onQuoteClick}>
|
||||||
{ _t('Quote') }
|
{ _t('Quote') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,7 +436,7 @@ module.exports = createReactClass({
|
||||||
isUrlPermitted(mxEvent.event.content.external_url)
|
isUrlPermitted(mxEvent.event.content.external_url)
|
||||||
) {
|
) {
|
||||||
externalURLButton = (
|
externalURLButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field">
|
<MenuItem className="mx_MessageContextMenu_field">
|
||||||
<a
|
<a
|
||||||
href={mxEvent.event.content.external_url}
|
href={mxEvent.event.content.external_url}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
@ -447,33 +446,33 @@ module.exports = createReactClass({
|
||||||
>
|
>
|
||||||
{ _t('Source URL') }
|
{ _t('Source URL') }
|
||||||
</a>
|
</a>
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.collapseReplyThread) {
|
if (this.props.collapseReplyThread) {
|
||||||
collapseReplyThread = (
|
collapseReplyThread = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onCollapseReplyThreadClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onCollapseReplyThreadClick}>
|
||||||
{ _t('Collapse Reply Thread') }
|
{ _t('Collapse Reply Thread') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let e2eInfo;
|
let e2eInfo;
|
||||||
if (this.props.e2eInfoCallback) {
|
if (this.props.e2eInfoCallback) {
|
||||||
e2eInfo = (
|
e2eInfo = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.e2eInfoClicked}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.e2eInfoClicked}>
|
||||||
{ _t('End-to-end encryption information') }
|
{ _t('End-to-end encryption information') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let reportEventButton;
|
let reportEventButton;
|
||||||
if (mxEvent.getSender() !== me) {
|
if (mxEvent.getSender() !== me) {
|
||||||
reportEventButton = (
|
reportEventButton = (
|
||||||
<AccessibleButton className="mx_MessageContextMenu_field" onClick={this.onReportEventClick}>
|
<MenuItem className="mx_MessageContextMenu_field" onClick={this.onReportEventClick}>
|
||||||
{ _t('Report Content') }
|
{ _t('Report Content') }
|
||||||
</AccessibleButton>
|
</MenuItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import ActiveWidgetStore from '../../../stores/ActiveWidgetStore';
|
||||||
import PersistedElement from "../elements/PersistedElement";
|
import PersistedElement from "../elements/PersistedElement";
|
||||||
import {IntegrationManagers} from "../../../integrations/IntegrationManagers";
|
import {IntegrationManagers} from "../../../integrations/IntegrationManagers";
|
||||||
import SettingsStore from "../../../settings/SettingsStore";
|
import SettingsStore from "../../../settings/SettingsStore";
|
||||||
|
import {ContextMenu} from "../../structures/ContextualMenu";
|
||||||
|
|
||||||
const widgetType = 'm.stickerpicker';
|
const widgetType = 'm.stickerpicker';
|
||||||
|
|
||||||
|
@ -371,26 +372,8 @@ export default class Stickerpicker extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const ContextualMenu = sdk.getComponent('structures.ContextualMenu');
|
let stickerPicker;
|
||||||
const GenericElementContextMenu = sdk.getComponent('context_menus.GenericElementContextMenu');
|
|
||||||
let stickersButton;
|
let stickersButton;
|
||||||
|
|
||||||
const stickerPicker = <ContextualMenu
|
|
||||||
elementClass={GenericElementContextMenu}
|
|
||||||
chevronOffset={this.state.stickerPickerChevronOffset}
|
|
||||||
chevronFace={'bottom'}
|
|
||||||
left={this.state.stickerPickerX}
|
|
||||||
top={this.state.stickerPickerY}
|
|
||||||
menuWidth={this.popoverWidth}
|
|
||||||
menuHeight={this.popoverHeight}
|
|
||||||
element={this._getStickerpickerContent()}
|
|
||||||
onFinished={this._onFinished}
|
|
||||||
menuPaddingTop={0}
|
|
||||||
menuPaddingLeft={0}
|
|
||||||
menuPaddingRight={0}
|
|
||||||
zIndex={STICKERPICKER_Z_INDEX}
|
|
||||||
/>;
|
|
||||||
|
|
||||||
if (this.state.showStickers) {
|
if (this.state.showStickers) {
|
||||||
// Show hide-stickers button
|
// Show hide-stickers button
|
||||||
stickersButton =
|
stickersButton =
|
||||||
|
@ -402,6 +385,23 @@ export default class Stickerpicker extends React.Component {
|
||||||
title={_t("Hide Stickers")}
|
title={_t("Hide Stickers")}
|
||||||
>
|
>
|
||||||
</AccessibleButton>;
|
</AccessibleButton>;
|
||||||
|
|
||||||
|
const GenericElementContextMenu = sdk.getComponent('context_menus.GenericElementContextMenu');
|
||||||
|
stickerPicker = <ContextMenu
|
||||||
|
chevronOffset={this.state.stickerPickerChevronOffset}
|
||||||
|
chevronFace="bottom"
|
||||||
|
left={this.state.stickerPickerX}
|
||||||
|
top={this.state.stickerPickerY}
|
||||||
|
menuWidth={this.popoverWidth}
|
||||||
|
menuHeight={this.popoverHeight}
|
||||||
|
onFinished={this._onFinished}
|
||||||
|
menuPaddingTop={0}
|
||||||
|
menuPaddingLeft={0}
|
||||||
|
menuPaddingRight={0}
|
||||||
|
zIndex={STICKERPICKER_Z_INDEX}
|
||||||
|
>
|
||||||
|
<GenericElementContextMenu element={this._getStickerpickerContent()} onResize={this._onFinished} />
|
||||||
|
</ContextMenu>;
|
||||||
} else {
|
} else {
|
||||||
// Show show-stickers button
|
// Show show-stickers button
|
||||||
stickersButton =
|
stickersButton =
|
||||||
|
@ -415,8 +415,8 @@ export default class Stickerpicker extends React.Component {
|
||||||
</AccessibleButton>;
|
</AccessibleButton>;
|
||||||
}
|
}
|
||||||
return <React.Fragment>
|
return <React.Fragment>
|
||||||
{stickersButton}
|
{ stickersButton }
|
||||||
{this.state.showStickers && stickerPicker}
|
{ stickerPicker }
|
||||||
</React.Fragment>;
|
</React.Fragment>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue