{"version":3,"sources":["../../../packages/core/rpc/dialog/rpc-dialog-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,eAAe,EAA+B,MAAM,oBAAoB,CAAC;AAEjG,qBAAa,eAAe;IACxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa,CAAwC;IAEpE;;;;;OAKG;WACW,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAuB7E;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAc7B","file":"rpc-dialog-client.d.ts","sourcesContent":["import { Dom } from '../../dom/dom';\r\nimport { Rpc } from '../rpc';\r\nimport { RpcInboundClient } from '../rpc-inbound-client';\r\nimport { RpcDialogData, RpcDialogResult, RpcDialogType, RpcDialogKey } from './rpc-dialog-model';\r\n\r\nexport class RpcDialogClient {\r\n    /**\r\n     * Elements that open a dialog, used for resuming focus\r\n     */\r\n    private static dialogOrigins: { [index: string]: HTMLElement } = {};\r\n\r\n    /**\r\n     * The dialog command.\r\n     *\r\n     * @param data the dialog data object.\r\n     * @return Promise<RpcDialogResult> the promise object of dialog result.\r\n     */\r\n    public static dialog(rpc: Rpc, data: RpcDialogData): Promise<RpcDialogResult> {\r\n        if (data.type === RpcDialogType.OpenMessageDialog\r\n            || data.type === RpcDialogType.OpenConfirmationDialog\r\n            || data.type === RpcDialogType.OpenConfirmationListDialog\r\n            || data.type === RpcDialogType.OpenChoiceDialog) {\r\n            // open a dialog, store element that opens it\r\n            const origin = document.activeElement as HTMLElement;\r\n            if (origin) {\r\n                RpcDialogClient.dialogOrigins[data.dialogId] = origin;\r\n            }\r\n        }\r\n\r\n        return RpcInboundClient.call(rpc, RpcDialogKey.command, RpcDialogKey.version, data)\r\n            .then((result: RpcDialogResult) => {\r\n                if (data.type === RpcDialogType.Close) {\r\n                    // successfully close a dialog, resume focus\r\n                    RpcDialogClient.resumeFocus(data.dialogId);\r\n                }\r\n\r\n                return result;\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Resume focus back to the original element that shows the dialog.\r\n     * @param id The id of dialog\r\n     */\r\n    private static resumeFocus(id: string): void {\r\n        if (!RpcDialogClient.dialogOrigins[id]) {\r\n            return;\r\n        }\r\n\r\n        const element = RpcDialogClient.dialogOrigins[id];\r\n        setTimeout(() => {\r\n            const focusOn: HTMLElement = Dom.getFocusOrigin(element);\r\n            if (focusOn) {\r\n                focusOn.focus();\r\n            }\r\n            delete RpcDialogClient.dialogOrigins[id];\r\n        });\r\n    }\r\n}\r\n"]}