Convert MessageEditHistoryDialog to TS
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
parent
b396383e06
commit
b2331d1e21
1 changed files with 33 additions and 22 deletions
|
@ -15,21 +15,37 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
import * as sdk from "../../../index";
|
|
||||||
import { wantsDateSeparator } from '../../../DateUtils';
|
import { wantsDateSeparator } from '../../../DateUtils';
|
||||||
import SettingsStore from '../../../settings/SettingsStore';
|
import SettingsStore from '../../../settings/SettingsStore';
|
||||||
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
||||||
|
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||||
|
import BaseDialog from "./BaseDialog";
|
||||||
|
import ScrollPanel from "../../structures/ScrollPanel";
|
||||||
|
import Spinner from "../elements/Spinner";
|
||||||
|
import EditHistoryMessage from "../messages/EditHistoryMessage";
|
||||||
|
import DateSeparator from "../messages/DateSeparator";
|
||||||
|
|
||||||
|
interface IProps {
|
||||||
|
mxEvent: MatrixEvent;
|
||||||
|
onFinished: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IState {
|
||||||
|
originalEvent: MatrixEvent;
|
||||||
|
error: {
|
||||||
|
errcode: string;
|
||||||
|
};
|
||||||
|
events: MatrixEvent[];
|
||||||
|
nextBatch: string;
|
||||||
|
isLoading: boolean;
|
||||||
|
isTwelveHour: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
@replaceableComponent("views.dialogs.MessageEditHistoryDialog")
|
@replaceableComponent("views.dialogs.MessageEditHistoryDialog")
|
||||||
export default class MessageEditHistoryDialog extends React.PureComponent {
|
export default class MessageEditHistoryDialog extends React.PureComponent<IProps, IState> {
|
||||||
static propTypes = {
|
constructor(props: IProps) {
|
||||||
mxEvent: PropTypes.object.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
originalEvent: null,
|
originalEvent: null,
|
||||||
|
@ -41,7 +57,7 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
loadMoreEdits = async (backwards) => {
|
private loadMoreEdits = async (backwards?: boolean): Promise<boolean> => {
|
||||||
if (backwards || (!this.state.nextBatch && !this.state.isLoading)) {
|
if (backwards || (!this.state.nextBatch && !this.state.isLoading)) {
|
||||||
// bail out on backwards as we only paginate in one direction
|
// bail out on backwards as we only paginate in one direction
|
||||||
return false;
|
return false;
|
||||||
|
@ -53,7 +69,7 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
let result;
|
let result;
|
||||||
let resolve;
|
let resolve;
|
||||||
let reject;
|
let reject;
|
||||||
const promise = new Promise((_resolve, _reject) => {resolve = _resolve; reject = _reject;});
|
const promise = new Promise<boolean>((_resolve, _reject) => {resolve = _resolve; reject = _reject;});
|
||||||
try {
|
try {
|
||||||
result = await client.relations(
|
result = await client.relations(
|
||||||
roomId, eventId, "m.replace", "m.room.message", opts);
|
roomId, eventId, "m.replace", "m.room.message", opts);
|
||||||
|
@ -67,7 +83,7 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
const newEvents = result.events;
|
const newEvents = result.events;
|
||||||
this._locallyRedactEventsIfNeeded(newEvents);
|
this.locallyRedactEventsIfNeeded(newEvents);
|
||||||
this.setState({
|
this.setState({
|
||||||
originalEvent: this.state.originalEvent || result.originalEvent,
|
originalEvent: this.state.originalEvent || result.originalEvent,
|
||||||
events: this.state.events.concat(newEvents),
|
events: this.state.events.concat(newEvents),
|
||||||
|
@ -78,9 +94,9 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
resolve(hasMoreResults);
|
resolve(hasMoreResults);
|
||||||
});
|
});
|
||||||
return promise;
|
return promise;
|
||||||
}
|
};
|
||||||
|
|
||||||
_locallyRedactEventsIfNeeded(newEvents) {
|
private locallyRedactEventsIfNeeded(newEvents: MatrixEvent[]): void {
|
||||||
const roomId = this.props.mxEvent.getRoomId();
|
const roomId = this.props.mxEvent.getRoomId();
|
||||||
const client = MatrixClientPeg.get();
|
const client = MatrixClientPeg.get();
|
||||||
const room = client.getRoom(roomId);
|
const room = client.getRoom(roomId);
|
||||||
|
@ -95,13 +111,11 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
public componentDidMount(): void {
|
||||||
this.loadMoreEdits();
|
this.loadMoreEdits();
|
||||||
}
|
}
|
||||||
|
|
||||||
_renderEdits() {
|
private renderEdits(): JSX.Element[] {
|
||||||
const EditHistoryMessage = sdk.getComponent('messages.EditHistoryMessage');
|
|
||||||
const DateSeparator = sdk.getComponent('messages.DateSeparator');
|
|
||||||
const nodes = [];
|
const nodes = [];
|
||||||
let lastEvent;
|
let lastEvent;
|
||||||
let allEvents = this.state.events;
|
let allEvents = this.state.events;
|
||||||
|
@ -128,7 +142,7 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
public render(): JSX.Element {
|
||||||
let content;
|
let content;
|
||||||
if (this.state.error) {
|
if (this.state.error) {
|
||||||
const { error } = this.state;
|
const { error } = this.state;
|
||||||
|
@ -149,20 +163,17 @@ export default class MessageEditHistoryDialog extends React.PureComponent {
|
||||||
</p>);
|
</p>);
|
||||||
}
|
}
|
||||||
} else if (this.state.isLoading) {
|
} else if (this.state.isLoading) {
|
||||||
const Spinner = sdk.getComponent("elements.Spinner");
|
|
||||||
content = <Spinner />;
|
content = <Spinner />;
|
||||||
} else {
|
} else {
|
||||||
const ScrollPanel = sdk.getComponent("structures.ScrollPanel");
|
|
||||||
content = (<ScrollPanel
|
content = (<ScrollPanel
|
||||||
className="mx_MessageEditHistoryDialog_scrollPanel"
|
className="mx_MessageEditHistoryDialog_scrollPanel"
|
||||||
onFillRequest={this.loadMoreEdits}
|
onFillRequest={this.loadMoreEdits}
|
||||||
stickyBottom={false}
|
stickyBottom={false}
|
||||||
startAtBottom={false}
|
startAtBottom={false}
|
||||||
>
|
>
|
||||||
<ul className="mx_MessageEditHistoryDialog_edits">{ this._renderEdits() }</ul>
|
<ul className="mx_MessageEditHistoryDialog_edits">{ this.renderEdits() }</ul>
|
||||||
</ScrollPanel>);
|
</ScrollPanel>);
|
||||||
}
|
}
|
||||||
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
|
||||||
return (
|
return (
|
||||||
<BaseDialog
|
<BaseDialog
|
||||||
className='mx_MessageEditHistoryDialog'
|
className='mx_MessageEditHistoryDialog'
|
Loading…
Add table
Add a link
Reference in a new issue