From e40c8a62998b57287515fc30fb29b5268bcfd043 Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Tue, 8 Dec 2020 14:18:24 +0200 Subject: [PATCH] Add installFromNpm to Extensions Signed-off-by: Panu Horsmalahti --- src/extensions/extension-loader.ts | 2 +- .../components/+extensions/extensions.tsx | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index 37ff4b2bce..50a27b7e13 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -294,7 +294,7 @@ export class ExtensionLoader { * Get url to the tarball of the extension package. Assumes package is found from npm regisry. * @param packageName e.g. "@mirantis/lens-extension-cc" */ - getNpmPackageTarballUrl(packageName: string) { + getNpmPackageTarballUrl(packageName: string): Promise { return new Promise((resolve, reject) => { const command = [extensionInstaller.npmPath, "view", packageName, "dist.tarball", "--silent"]; diff --git a/src/renderer/components/+extensions/extensions.tsx b/src/renderer/components/+extensions/extensions.tsx index cb38791a03..b0c7e43702 100644 --- a/src/renderer/components/+extensions/extensions.tsx +++ b/src/renderer/components/+extensions/extensions.tsx @@ -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; const fileName = path.basename(installPath); @@ -187,7 +202,7 @@ export class Extensions extends React.Component {

Installation has failed: {String(error)}

); } - }; + } installOnDrop = (files: File[]) => { logger.info("Install from D&D"); @@ -511,7 +526,7 @@ export class Extensions extends React.Component { validators={installPath ? Extensions.installPathValidator : undefined} value={installPath} onChange={value => this.installPath = value} - onSubmit={this.installFromUrlOrPath} + onSubmit={this.installFromInstallPath} iconLeft="link" iconRight={ Pro-Tip: you can also drag-n-drop tarball-file to this area