Use knock rooms sync to reflect the knock state (#11596)
Signed-off-by: Charly Nguyen <charly.nguyen@nordeck.net>pull/28788/head^2
parent
bb91df1d3c
commit
5cf2e1514b
|
@ -245,7 +245,6 @@ export interface IRoomState {
|
||||||
|
|
||||||
canAskToJoin: boolean;
|
canAskToJoin: boolean;
|
||||||
promptAskToJoin: boolean;
|
promptAskToJoin: boolean;
|
||||||
knocked: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LocalRoomViewProps {
|
interface LocalRoomViewProps {
|
||||||
|
@ -458,7 +457,6 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
msc3946ProcessDynamicPredecessor: SettingsStore.getValue("feature_dynamic_room_predecessors"),
|
msc3946ProcessDynamicPredecessor: SettingsStore.getValue("feature_dynamic_room_predecessors"),
|
||||||
canAskToJoin: this.askToJoinEnabled,
|
canAskToJoin: this.askToJoinEnabled,
|
||||||
promptAskToJoin: false,
|
promptAskToJoin: false,
|
||||||
knocked: false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
this.dispatcherRef = dis.register(this.onAction);
|
this.dispatcherRef = dis.register(this.onAction);
|
||||||
|
@ -664,7 +662,6 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
: false,
|
: false,
|
||||||
activeCall: roomId ? CallStore.instance.getActiveCall(roomId) : null,
|
activeCall: roomId ? CallStore.instance.getActiveCall(roomId) : null,
|
||||||
promptAskToJoin: this.context.roomViewStore.promptAskToJoin(),
|
promptAskToJoin: this.context.roomViewStore.promptAskToJoin(),
|
||||||
knocked: this.context.roomViewStore.knocked(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -2118,7 +2115,6 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
signUrl={this.props.threepidInvite?.signUrl}
|
signUrl={this.props.threepidInvite?.signUrl}
|
||||||
roomId={this.state.roomId}
|
roomId={this.state.roomId}
|
||||||
promptAskToJoin={this.state.promptAskToJoin}
|
promptAskToJoin={this.state.promptAskToJoin}
|
||||||
knocked={this.state.knocked}
|
|
||||||
onSubmitAskToJoin={this.onSubmitAskToJoin}
|
onSubmitAskToJoin={this.onSubmitAskToJoin}
|
||||||
onCancelAskToJoin={this.onCancelAskToJoin}
|
onCancelAskToJoin={this.onCancelAskToJoin}
|
||||||
/>
|
/>
|
||||||
|
@ -2202,7 +2198,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
<RoomPreviewBar
|
<RoomPreviewBar
|
||||||
room={this.state.room}
|
room={this.state.room}
|
||||||
promptAskToJoin={myMembership === "leave" || this.state.promptAskToJoin}
|
promptAskToJoin={myMembership === "leave" || this.state.promptAskToJoin}
|
||||||
knocked={myMembership === "knock" || this.state.knocked}
|
knocked={myMembership === "knock"}
|
||||||
onSubmitAskToJoin={this.onSubmitAskToJoin}
|
onSubmitAskToJoin={this.onSubmitAskToJoin}
|
||||||
onCancelAskToJoin={this.onCancelAskToJoin}
|
onCancelAskToJoin={this.onCancelAskToJoin}
|
||||||
onForgetClick={this.onForgetClick}
|
onForgetClick={this.onForgetClick}
|
||||||
|
|
|
@ -73,7 +73,6 @@ const RoomContext = createContext<
|
||||||
msc3946ProcessDynamicPredecessor: false,
|
msc3946ProcessDynamicPredecessor: false,
|
||||||
canAskToJoin: false,
|
canAskToJoin: false,
|
||||||
promptAskToJoin: false,
|
promptAskToJoin: false,
|
||||||
knocked: false,
|
|
||||||
});
|
});
|
||||||
RoomContext.displayName = "RoomContext";
|
RoomContext.displayName = "RoomContext";
|
||||||
export default RoomContext;
|
export default RoomContext;
|
||||||
|
|
|
@ -119,7 +119,6 @@ interface State {
|
||||||
viewingCall: boolean;
|
viewingCall: boolean;
|
||||||
|
|
||||||
promptAskToJoin: boolean;
|
promptAskToJoin: boolean;
|
||||||
knocked: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const INITIAL_STATE: State = {
|
const INITIAL_STATE: State = {
|
||||||
|
@ -141,7 +140,6 @@ const INITIAL_STATE: State = {
|
||||||
wasContextSwitch: false,
|
wasContextSwitch: false,
|
||||||
viewingCall: false,
|
viewingCall: false,
|
||||||
promptAskToJoin: false,
|
promptAskToJoin: false,
|
||||||
knocked: false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
type Listener = (isActive: boolean) => void;
|
type Listener = (isActive: boolean) => void;
|
||||||
|
@ -775,15 +773,6 @@ export class RoomViewStore extends EventEmitter {
|
||||||
return this.state.promptAskToJoin;
|
return this.state.promptAskToJoin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the current state of the 'knocked' property.
|
|
||||||
*
|
|
||||||
* @returns {boolean} The value of the 'knocked' property.
|
|
||||||
*/
|
|
||||||
public knocked(): boolean {
|
|
||||||
return this.state.knocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submits a request to join a room by sending a knock request.
|
* Submits a request to join a room by sending a knock request.
|
||||||
*
|
*
|
||||||
|
@ -793,15 +782,13 @@ export class RoomViewStore extends EventEmitter {
|
||||||
private submitAskToJoin(payload: SubmitAskToJoinPayload): void {
|
private submitAskToJoin(payload: SubmitAskToJoinPayload): void {
|
||||||
MatrixClientPeg.safeGet()
|
MatrixClientPeg.safeGet()
|
||||||
.knockRoom(payload.roomId, { viaServers: this.state.viaServers, ...payload.opts })
|
.knockRoom(payload.roomId, { viaServers: this.state.viaServers, ...payload.opts })
|
||||||
.then(() => this.setState({ promptAskToJoin: false, knocked: true }))
|
.catch((err: MatrixError) =>
|
||||||
.catch((err: MatrixError) => {
|
|
||||||
this.setState({ promptAskToJoin: false });
|
|
||||||
|
|
||||||
Modal.createDialog(ErrorDialog, {
|
Modal.createDialog(ErrorDialog, {
|
||||||
title: _t("Failed to join"),
|
title: _t("Failed to join"),
|
||||||
description: err.httpStatus === 403 ? _t("You need an invite to access this room.") : err.message,
|
description: err.httpStatus === 403 ? _t("You need an invite to access this room.") : err.message,
|
||||||
});
|
}),
|
||||||
});
|
)
|
||||||
|
.finally(() => this.setState({ promptAskToJoin: false }));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -813,7 +800,6 @@ export class RoomViewStore extends EventEmitter {
|
||||||
private cancelAskToJoin(payload: CancelAskToJoinPayload): void {
|
private cancelAskToJoin(payload: CancelAskToJoinPayload): void {
|
||||||
MatrixClientPeg.safeGet()
|
MatrixClientPeg.safeGet()
|
||||||
.leave(payload.roomId)
|
.leave(payload.roomId)
|
||||||
.then(() => this.setState({ knocked: false }))
|
|
||||||
.catch((err: MatrixError) =>
|
.catch((err: MatrixError) =>
|
||||||
Modal.createDialog(ErrorDialog, { title: _t("Failed to cancel"), description: err.message }),
|
Modal.createDialog(ErrorDialog, { title: _t("Failed to cancel"), description: err.message }),
|
||||||
);
|
);
|
||||||
|
|
|
@ -85,7 +85,6 @@ describe("<SendMessageComposer/>", () => {
|
||||||
msc3946ProcessDynamicPredecessor: false,
|
msc3946ProcessDynamicPredecessor: false,
|
||||||
canAskToJoin: false,
|
canAskToJoin: false,
|
||||||
promptAskToJoin: false,
|
promptAskToJoin: false,
|
||||||
knocked: false,
|
|
||||||
};
|
};
|
||||||
describe("createMessageContent", () => {
|
describe("createMessageContent", () => {
|
||||||
const permalinkCreator = jest.fn() as any;
|
const permalinkCreator = jest.fn() as any;
|
||||||
|
|
|
@ -507,39 +507,25 @@ describe("RoomViewStore", function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("knocked()", () => {
|
|
||||||
it("returns false", () => {
|
|
||||||
expect(roomViewStore.knocked()).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("returns true", async () => {
|
|
||||||
jest.spyOn(mockClient, "knockRoom").mockResolvedValue({ room_id: roomId });
|
|
||||||
await dispatchSubmitAskToJoin(roomId);
|
|
||||||
expect(roomViewStore.knocked()).toBe(true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("Action.SubmitAskToJoin", () => {
|
describe("Action.SubmitAskToJoin", () => {
|
||||||
const reason = "some reason";
|
const reason = "some reason";
|
||||||
beforeEach(async () => await dispatchPromptAskToJoin());
|
beforeEach(async () => await dispatchPromptAskToJoin());
|
||||||
|
|
||||||
it("calls knockRoom(), sets askToJoin state to false and knocked state to true", async () => {
|
it("calls knockRoom() and sets promptAskToJoin state to false", async () => {
|
||||||
jest.spyOn(mockClient, "knockRoom").mockResolvedValue({ room_id: roomId });
|
jest.spyOn(mockClient, "knockRoom").mockResolvedValue({ room_id: roomId });
|
||||||
await dispatchSubmitAskToJoin(roomId, reason);
|
await dispatchSubmitAskToJoin(roomId, reason);
|
||||||
|
|
||||||
expect(mockClient.knockRoom).toHaveBeenCalledWith(roomId, { reason, viaServers: [] });
|
expect(mockClient.knockRoom).toHaveBeenCalledWith(roomId, { reason, viaServers: [] });
|
||||||
expect(roomViewStore.promptAskToJoin()).toBe(false);
|
expect(roomViewStore.promptAskToJoin()).toBe(false);
|
||||||
expect(roomViewStore.knocked()).toBe(true);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calls knockRoom(), sets askToJoin to false, keeps knocked state false and shows an error dialog", async () => {
|
it("calls knockRoom(), sets promptAskToJoin state to false and shows an error dialog", async () => {
|
||||||
const error = new MatrixError(undefined, 403);
|
const error = new MatrixError(undefined, 403);
|
||||||
jest.spyOn(mockClient, "knockRoom").mockRejectedValue(error);
|
jest.spyOn(mockClient, "knockRoom").mockRejectedValue(error);
|
||||||
await dispatchSubmitAskToJoin(roomId, reason);
|
await dispatchSubmitAskToJoin(roomId, reason);
|
||||||
|
|
||||||
expect(mockClient.knockRoom).toHaveBeenCalledWith(roomId, { reason, viaServers: [] });
|
expect(mockClient.knockRoom).toHaveBeenCalledWith(roomId, { reason, viaServers: [] });
|
||||||
expect(roomViewStore.promptAskToJoin()).toBe(false);
|
expect(roomViewStore.promptAskToJoin()).toBe(false);
|
||||||
expect(roomViewStore.knocked()).toBe(false);
|
|
||||||
expect(Modal.createDialog).toHaveBeenCalledWith(ErrorDialog, {
|
expect(Modal.createDialog).toHaveBeenCalledWith(ErrorDialog, {
|
||||||
description: "You need an invite to access this room.",
|
description: "You need an invite to access this room.",
|
||||||
title: "Failed to join",
|
title: "Failed to join",
|
||||||
|
@ -550,6 +536,7 @@ describe("RoomViewStore", function () {
|
||||||
const error = new MatrixError();
|
const error = new MatrixError();
|
||||||
jest.spyOn(mockClient, "knockRoom").mockRejectedValue(error);
|
jest.spyOn(mockClient, "knockRoom").mockRejectedValue(error);
|
||||||
await dispatchSubmitAskToJoin(roomId);
|
await dispatchSubmitAskToJoin(roomId);
|
||||||
|
|
||||||
expect(Modal.createDialog).toHaveBeenCalledWith(ErrorDialog, {
|
expect(Modal.createDialog).toHaveBeenCalledWith(ErrorDialog, {
|
||||||
description: error.message,
|
description: error.message,
|
||||||
title: "Failed to join",
|
title: "Failed to join",
|
||||||
|
@ -563,21 +550,19 @@ describe("RoomViewStore", function () {
|
||||||
await dispatchSubmitAskToJoin(roomId);
|
await dispatchSubmitAskToJoin(roomId);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calls leave() and sets knocked state to false", async () => {
|
it("calls leave()", async () => {
|
||||||
jest.spyOn(mockClient, "leave").mockResolvedValue({});
|
jest.spyOn(mockClient, "leave").mockResolvedValue({});
|
||||||
await dispatchCancelAskToJoin(roomId);
|
await dispatchCancelAskToJoin(roomId);
|
||||||
|
|
||||||
expect(mockClient.leave).toHaveBeenCalledWith(roomId);
|
expect(mockClient.leave).toHaveBeenCalledWith(roomId);
|
||||||
expect(roomViewStore.knocked()).toBe(false);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calls leave(), keeps knocked state true and shows an error dialog", async () => {
|
it("calls leave() and shows an error dialog", async () => {
|
||||||
const error = new MatrixError();
|
const error = new MatrixError();
|
||||||
jest.spyOn(mockClient, "leave").mockRejectedValue(error);
|
jest.spyOn(mockClient, "leave").mockRejectedValue(error);
|
||||||
await dispatchCancelAskToJoin(roomId);
|
await dispatchCancelAskToJoin(roomId);
|
||||||
|
|
||||||
expect(mockClient.leave).toHaveBeenCalledWith(roomId);
|
expect(mockClient.leave).toHaveBeenCalledWith(roomId);
|
||||||
expect(roomViewStore.knocked()).toBe(true);
|
|
||||||
expect(Modal.createDialog).toHaveBeenCalledWith(ErrorDialog, {
|
expect(Modal.createDialog).toHaveBeenCalledWith(ErrorDialog, {
|
||||||
description: error.message,
|
description: error.message,
|
||||||
title: "Failed to cancel",
|
title: "Failed to cancel",
|
||||||
|
|
|
@ -90,7 +90,6 @@ export function getRoomContext(room: Room, override: Partial<IRoomState>): IRoom
|
||||||
msc3946ProcessDynamicPredecessor: false,
|
msc3946ProcessDynamicPredecessor: false,
|
||||||
canAskToJoin: false,
|
canAskToJoin: false,
|
||||||
promptAskToJoin: false,
|
promptAskToJoin: false,
|
||||||
knocked: false,
|
|
||||||
|
|
||||||
...override,
|
...override,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue