@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
55 lines (53 loc) • 1.91 kB
JavaScript
import { Dom } from '../../dom/dom';
import { RpcInboundClient } from '../rpc-inbound-client';
import { RpcDialogType, RpcDialogKey } from './rpc-dialog-model';
export class RpcDialogClient {
/**
* Elements that open a dialog, used for resuming focus
*/
static dialogOrigins = {};
/**
* The dialog command.
*
* @param data the dialog data object.
* @return Promise<RpcDialogResult> the promise object of dialog result.
*/
static dialog(rpc, data) {
if (data.type === RpcDialogType.OpenMessageDialog
|| data.type === RpcDialogType.OpenConfirmationDialog
|| data.type === RpcDialogType.OpenConfirmationListDialog
|| data.type === RpcDialogType.OpenChoiceDialog) {
// open a dialog, store element that opens it
const origin = document.activeElement;
if (origin) {
RpcDialogClient.dialogOrigins[data.dialogId] = origin;
}
}
return RpcInboundClient.call(rpc, RpcDialogKey.command, RpcDialogKey.version, data)
.then((result) => {
if (data.type === RpcDialogType.Close) {
// successfully close a dialog, resume focus
RpcDialogClient.resumeFocus(data.dialogId);
}
return result;
});
}
/**
* Resume focus back to the original element that shows the dialog.
* @param id The id of dialog
*/
static resumeFocus(id) {
if (!RpcDialogClient.dialogOrigins[id]) {
return;
}
const element = RpcDialogClient.dialogOrigins[id];
setTimeout(() => {
const focusOn = Dom.getFocusOrigin(element);
if (focusOn) {
focusOn.focus();
}
delete RpcDialogClient.dialogOrigins[id];
});
}
}
//# sourceMappingURL=rpc-dialog-client.js.map