UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

55 lines (53 loc) 1.91 kB
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