mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Allow to auto-update extensions
Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
1 parent
d8dbe51e7a
commit
e5d9de3206
6 files changed
+112
-5
No files matched your search
+6
@@ -32,6 +32,7 @@ import type {
|
||||
LensExtensionManifest,
|
||||
} from "../../../../../extensions/lens-extension";
|
||||
import type { InstallRequest } from "../install-request";
|
||||
import { isCompatibleExtension } from "../../../../../extensions/extension-compatibility";
|
||||
|
||||
export interface InstallRequestValidated {
|
||||
fileName: string;
|
||||
@@ -60,6 +61,11 @@ export async function createTempFilesAndValidate({
|
||||
|
||||
await fse.writeFile(tempFile, data);
|
||||
const manifest = await validatePackage(tempFile);
|
||||
|
||||
if (!isCompatibleExtension(manifest)){
|
||||
throw new Error("Incompatible extension");
|
||||
}
|
||||
|
||||
const id = path.join(
|
||||
ExtensionDiscovery.getInstance().nodeModulesPath,
|
||||
manifest.name,
|
||||
|
||||
@@ -112,6 +112,7 @@ class NonInjectedExtensions extends React.Component<Dependencies> {
|
||||
enable={this.props.enableExtension}
|
||||
disable={this.props.disableExtension}
|
||||
uninstall={this.props.confirmUninstallExtension}
|
||||
upgrade={this.props.installFromInput}
|
||||
/>
|
||||
</section>
|
||||
</SettingLayout>
|
||||
|
||||
@@ -37,6 +37,7 @@ interface Props {
|
||||
enable: (id: LensExtensionId) => void;
|
||||
disable: (id: LensExtensionId) => void;
|
||||
uninstall: (extension: InstalledExtension) => void;
|
||||
upgrade: (input: string) => void;
|
||||
}
|
||||
|
||||
function getStatus(extension: InstalledExtension) {
|
||||
@@ -47,7 +48,7 @@ function getStatus(extension: InstalledExtension) {
|
||||
return extension.isEnabled ? "Enabled" : "Disabled";
|
||||
}
|
||||
|
||||
export const InstalledExtensions = observer(({ extensions, uninstall, enable, disable }: Props) => {
|
||||
export const InstalledExtensions = observer(({ extensions, uninstall, enable, disable, upgrade }: Props) => {
|
||||
const filters = [
|
||||
(extension: InstalledExtension) => extension.manifest.name,
|
||||
(extension: InstalledExtension) => getStatus(extension),
|
||||
@@ -91,7 +92,7 @@ export const InstalledExtensions = observer(({ extensions, uninstall, enable, di
|
||||
const data = useMemo(
|
||||
() => {
|
||||
return extensions.map(extension => {
|
||||
const { id, isEnabled, isCompatible, manifest } = extension;
|
||||
const { id, isEnabled, isCompatible, manifest, availableUpdate } = extension;
|
||||
const { name, description, version } = manifest;
|
||||
const isUninstalling = ExtensionInstallationStateStore.isExtensionUninstalling(id);
|
||||
|
||||
@@ -104,7 +105,15 @@ export const InstalledExtensions = observer(({ extensions, uninstall, enable, di
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
version,
|
||||
version: (
|
||||
<div>
|
||||
{version}
|
||||
{ availableUpdate ?(
|
||||
<Icon small material="autorenew" title="Update available"/>
|
||||
) : ""
|
||||
}
|
||||
</div>
|
||||
),
|
||||
status: (
|
||||
<div className={cssNames({ [styles.enabled]: isEnabled, [styles.invalid]: !isCompatible })}>
|
||||
{getStatus(extension)}
|
||||
@@ -134,6 +143,16 @@ export const InstalledExtensions = observer(({ extensions, uninstall, enable, di
|
||||
</>
|
||||
)}
|
||||
|
||||
{ availableUpdate && (
|
||||
<MenuItem
|
||||
disabled={isUninstalling}
|
||||
onClick={() => upgrade(availableUpdate.input)}
|
||||
>
|
||||
<Icon material="upgrade"/>
|
||||
<span className="title" aria-disabled={isUninstalling}>Upgrade</span>
|
||||
</MenuItem>
|
||||
)}
|
||||
|
||||
<MenuItem
|
||||
disabled={isUninstalling}
|
||||
onClick={() => uninstall(extension)}
|
||||
|
||||
Reference in new issue
Block a user