microsoft/vscode-react-native

Public

mirrored fromhttps://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
1.0.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/experimentService/experiments/RNTPreviewPrompt.ts

62lines · 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 * 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
11 public async run(newExpConfig: ExperimentConfig, curExpParameters?: ExperimentParameters): Promise<ExperimentResult> {
12 if (
13 curExpParameters
14 && (curExpParameters.promptShown
15 || newExpConfig.popCoveragePercent === curExpParameters.popCoveragePercent)
16 ) {
17 return {
18 resultStatus: ExperimentStatuses.DISABLED,
19 updatedExperimentParameters: curExpParameters,
20 };
21 }
22
23 const updatedExperimentParameters = this.showPrompIfThresholdIsNotExceeded(newExpConfig, curExpParameters);
24
25 return {
26 resultStatus: ExperimentStatuses.ENABLED,
27 updatedExperimentParameters,
28 };
29 }
30
31 private showPrompIfThresholdIsNotExceeded(newExpConfig: ExperimentConfig, promptParameters?: ExperimentParameters) {
32 if (promptParameters) {
33 promptParameters.popCoveragePercent = newExpConfig.popCoveragePercent;
34 } else {
35 promptParameters = Object.assign(
36 {},
37 newExpConfig,
38 {
39 extensionId: "msjsdiag.vscode-react-native-preview",
40 promptShown: false,
41 }
42 );
43 }
44
45 if (newExpConfig.popCoveragePercent > Math.random()) {
46 const buttonText = "Open extension";
47 vscode.window.showInformationMessage(PROMPT_TITLES.RNT_PREVIEW_PROMPT, buttonText)
48 .then(selection => {
49 if (selection === buttonText && promptParameters) {
50 vscode.commands.executeCommand("workbench.extensions.search", promptParameters.extensionId);
51 vscode.commands.executeCommand("extension.open", promptParameters.extensionId);
52 }
53 });
54
55 promptParameters.promptShown = true;
56 } else {
57 promptParameters.promptShown = false;
58 }
59
60 return promptParameters;
61 }
62}
63