microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
1.7.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/experimentService/experiments/RNTPreviewPrompt.ts

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