// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for details.
import * as vscode from "vscode";
import { IExperiment } from "../IExperiment";
import {
ExperimentConfig,
ExperimentParameters,
ExperimentResult,
ExperimentStatuses,
} from "../experimentService";
import { PROMPT_TITLES } from "../experimentsStrings";
export default class RNTPreviewPrompt implements IExperiment {
public async run(
newExpConfig: ExperimentConfig,
curExpParameters?: ExperimentParameters,
): Promise<ExperimentResult> {
if (
curExpParameters &&
(curExpParameters.promptShown ||
newExpConfig.popCoveragePercent === curExpParameters.popCoveragePercent)
) {
return {
resultStatus: ExperimentStatuses.DISABLED,
updatedExperimentParameters: curExpParameters,
};
}
const updatedExperimentParameters = this.showPrompIfThresholdIsNotExceeded(
newExpConfig,
curExpParameters,
);
return {
resultStatus: ExperimentStatuses.ENABLED,
updatedExperimentParameters,
};
}
private showPrompIfThresholdIsNotExceeded(
newExpConfig: ExperimentConfig,
promptParameters?: ExperimentParameters,
) {
if (promptParameters) {
promptParameters.popCoveragePercent = newExpConfig.popCoveragePercent;
} else {
promptParameters = Object.assign({}, newExpConfig, {
extensionId: "msjsdiag.vscode-react-native-preview",
promptShown: false,
});
}
if (newExpConfig.popCoveragePercent > Math.random()) {
const buttonText = "Open extension";
vscode.window
.showInformationMessage(PROMPT_TITLES.RNT_PREVIEW_PROMPT, buttonText)
.then(selection => {
if (selection === buttonText && promptParameters) {
vscode.commands.executeCommand(
"workbench.extensions.search",
promptParameters.extensionId,
);
vscode.commands.executeCommand(
"extension.open",
promptParameters.extensionId,
);
}
});
promptParameters.promptShown = true;
} else {
promptParameters.promptShown = false;
}
return promptParameters;
}
}microsoft/vscode-react-native
Publicmirrored fromhttps://github.com/microsoft/vscode-react-nativeAvailable
src/extension/experimentService/experiments/RNTPreviewPrompt.ts
78lines · modepreview