-
-
Notifications
You must be signed in to change notification settings - Fork 827
Better error handling in jump to date #10405
Changes from 1 commit
e13e311
054688d
70f65f4
072d878
2c247c9
72b2ebd
d5fd664
8210828
bc13247
d90f4f6
93d200f
1c724e1
df2b4d2
8c42581
bac5a89
78cbc06
5ca2bb4
6e921da
7079c69
bcb51b4
99f8ff3
d3b0790
5fefd64
b633a74
d901c90
9cecaa9
52e6f30
0902215
2aa7f91
7c4a398
23268af
1447b76
222fcc4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,7 +20,7 @@ import { Direction } from "matrix-js-sdk/src/models/event-timeline"; | |
import { logger } from "matrix-js-sdk/src/logger"; | ||
|
||
import { _t } from "../../../languageHandler"; | ||
import { formatFullDateNoTime } from "../../../DateUtils"; | ||
import { formatFullDateNoDay, formatFullDateNoTime } from "../../../DateUtils"; | ||
import { MatrixClientPeg } from "../../../MatrixClientPeg"; | ||
import dis from "../../../dispatcher/dispatcher"; | ||
import { Action } from "../../../dispatcher/actions"; | ||
|
@@ -118,12 +118,12 @@ export default class DateSeparator extends React.Component<IProps, IState> { | |
|
||
private pickDate = async (inputTimestamp: number | string | Date): Promise<void> => { | ||
const unixTimestamp = new Date(inputTimestamp).getTime(); | ||
const roomIdForJumpRequest = this.props.roomId; | ||
|
||
const cli = MatrixClientPeg.get(); | ||
try { | ||
const roomId = this.props.roomId; | ||
const cli = MatrixClientPeg.get(); | ||
const { event_id: eventId, origin_server_ts: originServerTs } = await cli.timestampToEvent( | ||
roomId, | ||
roomIdForJumpRequest, | ||
unixTimestamp, | ||
Direction.Forward, | ||
); | ||
|
@@ -132,23 +132,67 @@ export default class DateSeparator extends React.Component<IProps, IState> { | |
`found ${eventId} (${originServerTs}) for timestamp=${unixTimestamp} (looking forward)`, | ||
); | ||
|
||
dis.dispatch<ViewRoomPayload>({ | ||
action: Action.ViewRoom, | ||
event_id: eventId, | ||
highlighted: true, | ||
room_id: roomId, | ||
metricsTrigger: undefined, // room doesn't change | ||
}); | ||
} catch (e) { | ||
const code = e.errcode || e.statusCode; | ||
// only show the dialog if failing for something other than a network error | ||
// (e.g. no errcode or statusCode) as in that case the redactions end up in the | ||
// detached queue and we show the room status bar to allow retry | ||
if (typeof code !== "undefined") { | ||
// display error message stating you couldn't delete this. | ||
// Only try to navigate to the room if the user is still viewing the same | ||
// room. We don't want to jump someone back to a room after a slow request | ||
// if they've already navigated away to another room. | ||
const roomIdBeforeNavigation = this.props.roomId; | ||
MadLittleMods marked this conversation as resolved.
Show resolved
Hide resolved
|
||
if (roomIdBeforeNavigation === roomIdForJumpRequest) { | ||
dis.dispatch<ViewRoomPayload>({ | ||
action: Action.ViewRoom, | ||
event_id: eventId, | ||
highlighted: true, | ||
room_id: roomIdBeforeNavigation, | ||
metricsTrigger: undefined, // room doesn't change | ||
}); | ||
} | ||
} catch (err) { | ||
logger.error( | ||
`Error occured while trying to find event in ${roomIdForJumpRequest} ` + | ||
`at timestamp=${unixTimestamp}:`, | ||
err, | ||
); | ||
|
||
// Only display an error if the user is still viewing the same room. We | ||
// don't want to worry someone about an error in a room they no longer care | ||
// about after a slow request if they've already navigated away to another | ||
// room. | ||
const roomIdBeforeDisplayingError = this.props.roomId; | ||
if (roomIdBeforeDisplayingError === roomIdForJumpRequest) { | ||
let friendlyErrorMessage = `An error occured while trying to find and jump to the given date.`; | ||
MadLittleMods marked this conversation as resolved.
Show resolved
Hide resolved
|
||
if (err.errcode === "M_NOT_FOUND") { | ||
friendlyErrorMessage = _t( | ||
"We were unable to find an event looking forwards from %(dateString)s. " + | ||
"Try choosing an earlier date.", | ||
{ dateString: formatFullDateNoDay(new Date(unixTimestamp)) }, | ||
); | ||
} | ||
if (err.name === "ConnectionError") { | ||
friendlyErrorMessage = _t( | ||
"Your homeserver was unreachable and was not able to log you in. Please try again. " + | ||
"If this continues, please contact your homeserver administrator.", | ||
); | ||
} | ||
|
||
Modal.createDialog(ErrorDialog, { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't know how to fix this TypeScript error:
Same pattern we use everywhere else in the codebase so I don't know of a better example to work from either. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @alunturner Any tips on how to fix this error? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm afraid I think I've probably done the same as you and checked the other uses of this, seeing that they all have the same issue. The problem must lie in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've created an issue to track this element-hq/element-web#24899 I guess we will just go with an exception here and worry about the problem generally in a separate PR down the line. |
||
title: _t("Error"), | ||
description: _t("Unable to find event at that date. (%(code)s)", { code }), | ||
title: _t("Unable to find event at that date"), | ||
description: ( | ||
<> | ||
<p>{friendlyErrorMessage}</p> | ||
<details> | ||
<summary>{_t("Error details")}</summary> | ||
|
||
<ul> | ||
<li>{_t("Request status code: %(statusCode)s", { statusCode: err.httpStatus })}</li> | ||
<li> | ||
{_t("Error code: %(errorCode)s", { | ||
errorCode: err.errcode || _t("Error code not available"), | ||
})} | ||
</li> | ||
</ul> | ||
<p>{String(err)}</p> | ||
</details> | ||
</> | ||
), | ||
}); | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This previous comment was bogus. Just copy/paste cruft from
matrix-react-sdk/src/components/views/dialogs/ConfirmRedactDialog.tsx
Lines 96 to 98 in bc60e59