Add installFromNpm to Extensions

Signed-off-by: Panu Horsmalahti <phorsmalahti@mirantis.com>
This commit is contained in:
Panu Horsmalahti authored and Sebastian Malton committed 2020-12-09 11:00:07 -05:00
1 parent 5da49d28b1
commit e40c8a6299
2 files changed
+22 -7

No files matched your search

+1 -1
View File
@@ -294,7 +294,7 @@ export class ExtensionLoader {
* Get url to the tarball of the extension package. Assumes package is found from npm regisry. * Get url to the tarball of the extension package. Assumes package is found from npm regisry.
* @param packageName e.g. "@mirantis/lens-extension-cc" * @param packageName e.g. "@mirantis/lens-extension-cc"
*/ */
getNpmPackageTarballUrl(packageName: string) { getNpmPackageTarballUrl(packageName: string): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const command = [extensionInstaller.npmPath, "view", packageName, "dist.tarball", "--silent"]; const command = [extensionInstaller.npmPath, "view", packageName, "dist.tarball", "--silent"];
@@ -160,11 +160,26 @@ export class Extensions extends React.Component {
} }
}; };
installFromUrlOrPath = async () => { /**
const { installPath } = this; * Start extension install using a package name, which is resolved to a tarball url using the npm registry.
* @param packageName e.g. "@publisher/extension-name"
*/
async installFromNpm(packageName: string) {
const tarballUrl = await extensionLoader.getNpmPackageTarballUrl(packageName);
if (!installPath) return; return this.installFromUrlOrPath(tarballUrl);
}
/**
* Start extension install using the current value of this.installPath
*/
installFromInstallPath = async () => {
if (this.installPath) {
this.installFromUrlOrPath(this.installPath);
}
};
async installFromUrlOrPath(installPath: string) {
this.startingInstall = true; this.startingInstall = true;
const fileName = path.basename(installPath); const fileName = path.basename(installPath);
@@ -187,7 +202,7 @@ export class Extensions extends React.Component {
<p>Installation has failed: <b>{String(error)}</b></p> <p>Installation has failed: <b>{String(error)}</b></p>
); );
} }
}; }
installOnDrop = (files: File[]) => { installOnDrop = (files: File[]) => {
logger.info("Install from D&D"); logger.info("Install from D&D");
@@ -511,7 +526,7 @@ export class Extensions extends React.Component {
validators={installPath ? Extensions.installPathValidator : undefined} validators={installPath ? Extensions.installPathValidator : undefined}
value={installPath} value={installPath}
onChange={value => this.installPath = value} onChange={value => this.installPath = value}
onSubmit={this.installFromUrlOrPath} onSubmit={this.installFromInstallPath}
iconLeft="link" iconLeft="link"
iconRight={ iconRight={
<Icon <Icon
@@ -528,7 +543,7 @@ export class Extensions extends React.Component {
label="Install" label="Install"
disabled={this.isInstalling || !Extensions.installPathValidator.validate(installPath)} disabled={this.isInstalling || !Extensions.installPathValidator.validate(installPath)}
waiting={this.isInstalling} waiting={this.isInstalling}
onClick={this.installFromUrlOrPath} onClick={this.installFromInstallPath}
/> />
<small className="hint"> <small className="hint">
<Trans><b>Pro-Tip</b>: you can also drag-n-drop tarball-file to this area</Trans> <Trans><b>Pro-Tip</b>: you can also drag-n-drop tarball-file to this area</Trans>