microsoft/vscode-react-native
Publicmirrored from https://github.com/microsoft/vscode-react-nativeAvailable
src/extension/appcenter/helpers/vscodeUtils.ts
90lines · modecode
| 1 | // Copyright (c) Microsoft Corporation. All rights reserved. |
| 2 | // Licensed under the MIT license. See LICENSE file in the project root for details. |
| 3 | |
| 4 | import { MessageTypes, ACConstants } from "../appCenterConstants"; |
| 5 | import { commands, StatusBarItem, window, MessageItem } from "vscode"; |
| 6 | import { ACUtils } from "./utils"; |
| 7 | import * as Q from "q"; |
| 8 | |
| 9 | export interface IButtonMessageItem { |
| 10 | title: string; |
| 11 | url?: string; |
| 12 | command?: string; |
| 13 | } |
| 14 | |
| 15 | export class ButtonMessageItem implements MessageItem, IButtonMessageItem { |
| 16 | public title: string; |
| 17 | public url?: string; |
| 18 | public command?: string; |
| 19 | } |
| 20 | |
| 21 | export class VsCodeUtils { |
| 22 | public static setStatusBar(statusBar: StatusBarItem, text: string, tooltip: string, commandOnClick?: string): Q.Promise<void> { |
| 23 | if (statusBar !== undefined) { |
| 24 | statusBar.command = commandOnClick; // undefined clears the command |
| 25 | statusBar.text = text; |
| 26 | statusBar.tooltip = tooltip; |
| 27 | statusBar.color = ACConstants.AppCenterCodePushStatusBarColor; |
| 28 | statusBar.show(); |
| 29 | } |
| 30 | return Q.resolve(void 0); |
| 31 | } |
| 32 | |
| 33 | public static ShowInformationMessage(message: string, ...urlMessageItem: IButtonMessageItem[]): Q.Promise<IButtonMessageItem | undefined> { |
| 34 | return Q.Promise<IButtonMessageItem | undefined>((resolve, reject) => { |
| 35 | return this.showMessage(message, MessageTypes.Info, ...urlMessageItem).then((res: IButtonMessageItem | undefined) => { |
| 36 | resolve(res); |
| 37 | return; |
| 38 | }); |
| 39 | }); |
| 40 | } |
| 41 | |
| 42 | public static ShowWarningMessage(message: string, ...urlMessageItem: IButtonMessageItem[]): Q.Promise<IButtonMessageItem | undefined> { |
| 43 | return Q.Promise<IButtonMessageItem | undefined>((resolve, reject) => { |
| 44 | return this.showMessage(message, MessageTypes.Warn, ...urlMessageItem).then((res: IButtonMessageItem | undefined) => { |
| 45 | resolve(res); |
| 46 | return; |
| 47 | }); |
| 48 | }); |
| 49 | } |
| 50 | |
| 51 | public static ShowErrorMessage(message: string, ...urlMessageItem: IButtonMessageItem[]): Q.Promise<IButtonMessageItem | undefined> { |
| 52 | return Q.Promise<IButtonMessageItem | undefined>((resolve, reject) => { |
| 53 | return this.showMessage(message, MessageTypes.Error, ...urlMessageItem).then((res: IButtonMessageItem | undefined) => { |
| 54 | resolve(res); |
| 55 | return; |
| 56 | }); |
| 57 | }); |
| 58 | } |
| 59 | |
| 60 | private static async showMessage(messageToDisplay: string, type: MessageTypes, ...urlMessageItem: IButtonMessageItem[]): Promise<IButtonMessageItem | undefined> { |
| 61 | // The following "cast" allows us to pass our own type around (and not reference "vscode" via an import) |
| 62 | const messageItems: ButtonMessageItem[] = <ButtonMessageItem[]>urlMessageItem; |
| 63 | |
| 64 | let chosenItem: IButtonMessageItem | undefined; |
| 65 | switch (type) { |
| 66 | case MessageTypes.Error: |
| 67 | chosenItem = await window.showErrorMessage(messageToDisplay, ...messageItems); |
| 68 | break; |
| 69 | case MessageTypes.Info: |
| 70 | chosenItem = await window.showInformationMessage(messageToDisplay, ...messageItems); |
| 71 | break; |
| 72 | case MessageTypes.Warn: |
| 73 | chosenItem = await window.showWarningMessage(messageToDisplay, ...messageItems); |
| 74 | break; |
| 75 | default: |
| 76 | break; |
| 77 | } |
| 78 | |
| 79 | if (chosenItem) { |
| 80 | if (chosenItem.url) { |
| 81 | ACUtils.OpenUrl(chosenItem.url); |
| 82 | } |
| 83 | if (chosenItem.command) { |
| 84 | commands.executeCommand<void>(chosenItem.command); |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | return chosenItem; |
| 89 | } |
| 90 | } |