microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
1.0.1

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/experimentService/experiments/RNTPreviewPrompt.ts

62lines · modeblame

88671796RedMickey5 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import * as vscode from "vscode";
5import { IExperiment } from "../IExperiment";
6import { ExperimentConfig, ExperimentParameters, ExperimentResult, ExperimentStatuses } from "../experimentService";
7import { PROMPT_TITLES } from "../experimentsStrings";
8
9export default class RNTPreviewPrompt implements IExperiment {
10
11public async run(newExpConfig: ExperimentConfig, curExpParameters?: ExperimentParameters): Promise<ExperimentResult> {
12if (
13curExpParameters
14&& (curExpParameters.promptShown
15|| newExpConfig.popCoveragePercent === curExpParameters.popCoveragePercent)
16) {
17return {
18resultStatus: ExperimentStatuses.DISABLED,
19updatedExperimentParameters: curExpParameters,
20};
21}
22
23const updatedExperimentParameters = this.showPrompIfThresholdIsNotExceeded(newExpConfig, curExpParameters);
24
25return {
26resultStatus: ExperimentStatuses.ENABLED,
27updatedExperimentParameters,
28};
29}
30
31private showPrompIfThresholdIsNotExceeded(newExpConfig: ExperimentConfig, promptParameters?: ExperimentParameters) {
32if (promptParameters) {
33promptParameters.popCoveragePercent = newExpConfig.popCoveragePercent;
34} else {
35promptParameters = Object.assign(
36{},
37newExpConfig,
38{
39extensionId: "msjsdiag.vscode-react-native-preview",
40promptShown: false,
41}
42);
43}
44
45if (newExpConfig.popCoveragePercent > Math.random()) {
46const buttonText = "Open extension";
47vscode.window.showInformationMessage(PROMPT_TITLES.RNT_PREVIEW_PROMPT, buttonText)
48.then(selection => {
49if (selection === buttonText && promptParameters) {
50vscode.commands.executeCommand("workbench.extensions.search", promptParameters.extensionId);
51vscode.commands.executeCommand("extension.open", promptParameters.extensionId);
52}
53});
54
55promptParameters.promptShown = true;
56} else {
57promptParameters.promptShown = false;
58}
59
60return promptParameters;
61}
62}