microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.6.5

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

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
4import { MessageTypes, ACConstants } from "../appCenterConstants";
5import { commands, StatusBarItem, window, MessageItem } from "vscode";
6import { ACUtils } from "./utils";
7import * as Q from "q";
8
9export interface IButtonMessageItem {
10 title: string;
11 url?: string;
12 command?: string;
13}
14
15export class ButtonMessageItem implements MessageItem, IButtonMessageItem {
16 public title: string;
17 public url?: string;
18 public command?: string;
19}
20
21export 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}