Convert view_user dispatch to prove the conversion works
This is a relatively obvious dispatch action that doesn't require a lot of complicated type definitions, so should be a good candidate to prove the thing works. If for some reason the thing stops working, we've done something wrong. This also adds a bit of generic types to the dispatch call so we don't confuse the tsx parser by using `dis.dispatch(<ViewUserPayload>{...})` as it thinks that's supposed to be a component. We still get type safety, and the thing remains happy with the generics approach.
This commit is contained in:
parent
a3b4c2dfa0
commit
a5f3318f3b
14 changed files with 88 additions and 30 deletions
|
@ -19,5 +19,19 @@ export type DispatcherAction = Action | string;
|
|||
|
||||
export enum Action {
|
||||
// TODO: Populate with actual actions
|
||||
// This is lazily generated as it also includes fixing a bunch of references. Work
|
||||
// that we don't really want to take on in a giant chunk. We should always define
|
||||
// new actions here, and ideally when we touch existing ones we take some time to
|
||||
// define them correctly.
|
||||
|
||||
// When defining a new action, please use lower_scored_case with an optional class
|
||||
// name prefix. For example, `RoomListStore.view_room` or `view_user_settings`.
|
||||
// New definitions should also receive an accompanying interface in the payloads
|
||||
// directory.
|
||||
|
||||
/**
|
||||
* View a user's profile. Should be used with a ViewUserPayload.
|
||||
*/
|
||||
ViewUser = "view_user",
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ export class MatrixDispatcher extends Dispatcher<ActionPayload> {
|
|||
* an operation that the browser requires user interaction
|
||||
* for. Default false (async).
|
||||
*/
|
||||
dispatch(payload: ActionPayload, sync = false) {
|
||||
dispatch<T extends ActionPayload>(payload: T, sync = false) {
|
||||
if (payload instanceof AsyncActionPayload) {
|
||||
payload.fn((action: ActionPayload) => {
|
||||
this.dispatch(action, sync);
|
||||
|
|
29
src/dispatcher/payloads/ViewUserPayload.ts
Normal file
29
src/dispatcher/payloads/ViewUserPayload.ts
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
|
||||
import { ActionPayload } from "../payloads";
|
||||
import { Action } from "../actions";
|
||||
|
||||
export interface ViewUserPayload extends ActionPayload {
|
||||
action: Action.ViewUser,
|
||||
|
||||
/**
|
||||
* The member to view. May be null or falsy to indicate that no member
|
||||
* should be shown (hide whichever relevant components).
|
||||
*/
|
||||
member?: RoomMember;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue