Add a ToastStore

To store toast. Rather than them being stored in the state of the
ToastContainer component, they now have a dedicated store. This mostly
fixes problems involving showing toasts when the app loaded because
we would otherwise have a race condition where something tries to
show a toast before the ToastContainer is mounted.
This commit is contained in:
David Baker 2020-01-16 20:23:47 +00:00
parent 3ed7beac78
commit 83b1505401
4 changed files with 71 additions and 31 deletions

View file

@ -23,6 +23,7 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg';
import {verificationMethods} from 'matrix-js-sdk/src/crypto';
import KeyVerificationStateObserver, {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver";
import dis from "../../../dispatcher";
import ToastStore from "../../../stores/ToastStore";
export default class VerificationRequestToast extends React.PureComponent {
constructor(props) {
@ -63,12 +64,12 @@ export default class VerificationRequestToast extends React.PureComponent {
_checkRequestIsPending = () => {
if (!this.props.requestObserver.pending) {
this.props.dismiss();
ToastStore.sharedInstance().dismissToast(this.props.toastKey);
}
}
cancel = () => {
this.props.dismiss();
ToastStore.sharedInstance().dismissToast(this.props.toastKey);
try {
this.props.request.cancel();
} catch (err) {
@ -77,7 +78,7 @@ export default class VerificationRequestToast extends React.PureComponent {
}
accept = () => {
this.props.dismiss();
ToastStore.sharedInstance().dismissToast(this.props.toastKey);
const {event} = this.props.request;
// no room id for to_device requests
if (event.getRoomId()) {
@ -119,7 +120,7 @@ export default class VerificationRequestToast extends React.PureComponent {
}
VerificationRequestToast.propTypes = {
dismiss: PropTypes.func.isRequired,
request: PropTypes.object.isRequired,
requestObserver: PropTypes.instanceOf(KeyVerificationStateObserver),
toastKey: PropTypes.string.isRequired,
};