Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 7c20eb9

Browse files
authored
Put call on hold when transfer dialog is opened (#7669)
And take it off hold if the dialog is cancelled. Also changes the onFinished signature of invitedialog which claimed to return an array of strings but never did, so now it just returns a boolean.
1 parent b04d2de commit 7c20eb9

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

src/CallHandler.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import { WidgetType } from "./widgets/WidgetType";
3939
import { SettingLevel } from "./settings/SettingLevel";
4040
import QuestionDialog from "./components/views/dialogs/QuestionDialog";
4141
import ErrorDialog from "./components/views/dialogs/ErrorDialog";
42+
import InviteDialog, { KIND_CALL_TRANSFER } from "./components/views/dialogs/InviteDialog";
4243
import WidgetStore from "./stores/WidgetStore";
4344
import { WidgetMessagingStore } from "./stores/widgets/WidgetMessagingStore";
4445
import { ElementWidgetActions } from "./stores/widgets/ElementWidgetActions";
@@ -1100,6 +1101,23 @@ export default class CallHandler extends EventEmitter {
11001101
});
11011102
}
11021103

1104+
/*
1105+
* Shows the transfer dialog for a call, signalling to the other end that
1106+
* a transfer is about to happen
1107+
*/
1108+
public showTransferDialog(call: MatrixCall): void {
1109+
call.setRemoteOnHold(true);
1110+
const { finished } = Modal.createTrackedDialog(
1111+
'Transfer Call', '', InviteDialog, { kind: KIND_CALL_TRANSFER, call },
1112+
/*className=*/"mx_InviteDialog_transferWrapper", /*isPriority=*/false, /*isStatic=*/true,
1113+
);
1114+
finished.then((results: boolean[]) => {
1115+
if (results.length === 0 || results[0] === false) {
1116+
call.setRemoteOnHold(false);
1117+
}
1118+
});
1119+
}
1120+
11031121
private addCallForRoom(roomId: string, call: MatrixCall, changedRooms = false): void {
11041122
if (this.calls.has(roomId)) {
11051123
logger.log(`Couldn't add call to room ${roomId}: already have a call for this room`);

src/components/views/context_menus/CallContextMenu.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import { MatrixCall } from 'matrix-js-sdk/src/webrtc/call';
2121
import { _t } from '../../../languageHandler';
2222
import ContextMenu, { IProps as IContextMenuProps, MenuItem } from '../../structures/ContextMenu';
2323
import CallHandler from '../../../CallHandler';
24-
import InviteDialog, { KIND_CALL_TRANSFER } from '../dialogs/InviteDialog';
25-
import Modal from '../../../Modal';
2624
import { replaceableComponent } from "../../../utils/replaceableComponent";
2725

2826
interface IProps extends IContextMenuProps {
@@ -52,10 +50,7 @@ export default class CallContextMenu extends React.Component<IProps> {
5250
};
5351

5452
onTransferClick = () => {
55-
Modal.createTrackedDialog(
56-
'Transfer Call', '', InviteDialog, { kind: KIND_CALL_TRANSFER, call: this.props.call },
57-
/*className=*/"mx_InviteDialog_transferWrapper", /*isPriority=*/false, /*isStatic=*/true,
58-
);
53+
CallHandler.instance.showTransferDialog(this.props.call);
5954
this.props.onFinished();
6055
};
6156

src/components/views/dialogs/InviteDialog.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,8 +352,10 @@ class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {
352352
}
353353

354354
interface IInviteDialogProps {
355-
// Takes an array of user IDs/emails to invite.
356-
onFinished: (toInvite?: string[]) => void;
355+
// Takes a boolean which is true if a user / users were invited /
356+
// a call transfer was initiated or false if the dialog was cancelled
357+
// with no action taken.
358+
onFinished: (success: boolean) => void;
357359

358360
// The kind of invite being performed. Assumed to be KIND_DM if
359361
// not provided.
@@ -685,7 +687,7 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
685687
should_peek: false,
686688
joining: false,
687689
});
688-
this.props.onFinished();
690+
this.props.onFinished(true);
689691
return;
690692
}
691693

@@ -732,7 +734,7 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
732734
}
733735

734736
await createRoom(createRoomOptions);
735-
this.props.onFinished();
737+
this.props.onFinished(true);
736738
} catch (err) {
737739
logger.error(err);
738740
this.setState({
@@ -764,7 +766,7 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
764766
const result = await inviteMultipleToRoom(this.props.roomId, targetIds, true);
765767
CountlyAnalytics.instance.trackSendInvite(startTime, this.props.roomId, targetIds.length);
766768
if (!this.shouldAbortAfterInviteError(result, room)) { // handles setting error message too
767-
this.props.onFinished();
769+
this.props.onFinished(true);
768770
}
769771
} catch (err) {
770772
logger.error(err);
@@ -801,7 +803,7 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
801803
this.state.consultFirst,
802804
);
803805
}
804-
this.props.onFinished();
806+
this.props.onFinished(true);
805807
};
806808

807809
private onKeyDown = (e) => {
@@ -824,7 +826,7 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
824826
};
825827

826828
private onCancel = () => {
827-
this.props.onFinished([]);
829+
this.props.onFinished(false);
828830
};
829831

830832
private updateSuggestions = async (term) => {
@@ -1086,11 +1088,11 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
10861088
private onManageSettingsClick = (e) => {
10871089
e.preventDefault();
10881090
dis.fire(Action.ViewUserSettings);
1089-
this.props.onFinished();
1091+
this.props.onFinished(false);
10901092
};
10911093

10921094
private onCommunityInviteClick = (e) => {
1093-
this.props.onFinished();
1095+
this.props.onFinished(false);
10941096
showCommunityInviteDialog(CommunityPrototypeStore.instance.getSelectedCommunityId());
10951097
};
10961098

0 commit comments

Comments
 (0)