Convert MemberTile to TS
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
parent
d5acfc6cf4
commit
87d27593de
1 changed files with 40 additions and 28 deletions
|
@ -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],
|
Loading…
Add table
Add a link
Reference in a new issue