Convert MemberTile to TS

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
Šimon Brandner 2021-06-23 17:28:02 +02:00
parent d5acfc6cf4
commit 87d27593de
No known key found for this signature in database
GPG key ID: 9760693FDD98A790

View file

@ -17,20 +17,32 @@ limitations under the License.
import SettingsStore from "../../../settings/SettingsStore"; import SettingsStore from "../../../settings/SettingsStore";
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types';
import * as sdk from "../../../index"; import * as sdk from "../../../index";
import dis from "../../../dispatcher/dispatcher"; import dis from "../../../dispatcher/dispatcher";
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import { MatrixClientPeg } from "../../../MatrixClientPeg"; import { MatrixClientPeg } from "../../../MatrixClientPeg";
import {Action} from "../../../dispatcher/actions"; import {Action} from "../../../dispatcher/actions";
import {replaceableComponent} from "../../../utils/replaceableComponent"; import { replaceableComponent } from "../../../utils/replaceableComponent";
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
import { EventType } from "matrix-js-sdk/src/@types/event";
import { DeviceInfo } from "matrix-js-sdk/src/crypto";
interface IProps {
member: RoomMember,
showPresence?: boolean,
}
interface IState {
statusMessage: string,
isRoomEncrypted: boolean,
e2eStatus: string,
}
@replaceableComponent("views.rooms.MemberTile") @replaceableComponent("views.rooms.MemberTile")
export default class MemberTile extends React.Component { export default class MemberTile extends React.Component<IProps, IState> {
static propTypes = { private userLastModifiedTime: number;
member: PropTypes.any.isRequired, // RoomMember private memberLastModifiedTime: number;
showPresence: PropTypes.bool,
};
static defaultProps = { static defaultProps = {
showPresence: true, showPresence: true,
@ -52,7 +64,7 @@ export default class MemberTile extends React.Component {
if (SettingsStore.getValue("feature_custom_status")) { if (SettingsStore.getValue("feature_custom_status")) {
const { user } = this.props.member; const { user } = this.props.member;
if (user) { if (user) {
user.on("User._unstable_statusMessage", this._onStatusMessageCommitted); user.on("User._unstable_statusMessage", this.onStatusMessageCommitted);
} }
} }
@ -80,7 +92,7 @@ export default class MemberTile extends React.Component {
if (user) { if (user) {
user.removeListener( user.removeListener(
"User._unstable_statusMessage", "User._unstable_statusMessage",
this._onStatusMessageCommitted, this.onStatusMessageCommitted,
); );
} }
@ -91,8 +103,8 @@ export default class MemberTile extends React.Component {
} }
} }
onRoomStateEvents = ev => { private onRoomStateEvents = (ev: MatrixEvent): void => {
if (ev.getType() !== "m.room.encryption") return; if (ev.getType() !== EventType.RoomEncryption) return;
const { roomId } = this.props.member; const { roomId } = this.props.member;
if (ev.getRoomId() !== roomId) return; if (ev.getRoomId() !== roomId) return;
@ -105,17 +117,17 @@ export default class MemberTile extends React.Component {
this.updateE2EStatus(); this.updateE2EStatus();
}; };
onUserTrustStatusChanged = (userId, trustStatus) => { private onUserTrustStatusChanged = (userId: string, trustStatus: string): void => {
if (userId !== this.props.member.userId) return; if (userId !== this.props.member.userId) return;
this.updateE2EStatus(); this.updateE2EStatus();
}; };
onDeviceVerificationChanged = (userId, deviceId, deviceInfo) => { private onDeviceVerificationChanged = (userId: string, deviceId: string, deviceInfo: DeviceInfo): void => {
if (userId !== this.props.member.userId) return; if (userId !== this.props.member.userId) return;
this.updateE2EStatus(); this.updateE2EStatus();
}; };
async updateE2EStatus() { private async updateE2EStatus(): Promise<void> {
const cli = MatrixClientPeg.get(); const cli = MatrixClientPeg.get();
const { userId } = this.props.member; const { userId } = this.props.member;
const isMe = userId === cli.getUserId(); const isMe = userId === cli.getUserId();
@ -143,32 +155,32 @@ export default class MemberTile extends React.Component {
}); });
} }
getStatusMessage() { private getStatusMessage(): string {
const { user } = this.props.member; const { user } = this.props.member;
if (!user) { if (!user) {
return ""; return "";
} }
return user._unstable_statusMessage; return user.unstable_statusMessage;
} }
_onStatusMessageCommitted = () => { private onStatusMessageCommitted = (): void => {
// The `User` object has observed a status message change. // The `User` object has observed a status message change.
this.setState({ this.setState({
statusMessage: this.getStatusMessage(), statusMessage: this.getStatusMessage(),
}); });
}; };
shouldComponentUpdate(nextProps, nextState) { shouldComponentUpdate(nextProps: IProps, nextState: IState): boolean {
if ( if (
this.member_last_modified_time === undefined || this.memberLastModifiedTime === undefined ||
this.member_last_modified_time < nextProps.member.getLastModifiedTime() this.memberLastModifiedTime < nextProps.member.getLastModifiedTime()
) { ) {
return true; return true;
} }
if ( if (
nextProps.member.user && nextProps.member.user &&
(this.user_last_modified_time === undefined || (this.userLastModifiedTime === undefined ||
this.user_last_modified_time < nextProps.member.user.getLastModifiedTime()) this.userLastModifiedTime < nextProps.member.user.getLastModifiedTime())
) { ) {
return true; return true;
} }
@ -181,18 +193,18 @@ export default class MemberTile extends React.Component {
return false; return false;
} }
onClick = e => { private onClick = (e: MouseEvent): void => {
dis.dispatch({ dis.dispatch({
action: Action.ViewUser, action: Action.ViewUser,
member: this.props.member, member: this.props.member,
}); });
}; };
_getDisplayName() { private getDisplayName(): string {
return this.props.member.name; return this.props.member.name;
} }
getPowerLabel() { private getPowerLabel(): string {
return _t("%(userName)s (power %(powerLevelNumber)s)", { return _t("%(userName)s (power %(powerLevelNumber)s)", {
userName: this.props.member.userId, userName: this.props.member.userId,
powerLevelNumber: this.props.member.powerLevel, powerLevelNumber: this.props.member.powerLevel,
@ -204,7 +216,7 @@ export default class MemberTile extends React.Component {
const EntityTile = sdk.getComponent('rooms.EntityTile'); const EntityTile = sdk.getComponent('rooms.EntityTile');
const member = this.props.member; const member = this.props.member;
const name = this._getDisplayName(); const name = this.getDisplayName();
const presenceState = member.user ? member.user.presence : null; const presenceState = member.user ? member.user.presence : null;
let statusMessage = null; let statusMessage = null;
@ -217,9 +229,9 @@ export default class MemberTile extends React.Component {
); );
if (member.user) { if (member.user) {
this.user_last_modified_time = member.user.getLastModifiedTime(); this.userLastModifiedTime = member.user.getLastModifiedTime();
} }
this.member_last_modified_time = member.getLastModifiedTime(); this.memberLastModifiedTime = member.getLastModifiedTime();
const powerStatusMap = new Map([ const powerStatusMap = new Map([
[100, EntityTile.POWER_STATUS_ADMIN], [100, EntityTile.POWER_STATUS_ADMIN],