import "./extensions.scss"; import { shell } from "electron"; import React from "react"; import { computed, observable } from "mobx"; import { observer } from "mobx-react"; import { t, Trans } from "@lingui/macro"; import { _i18n } from "../../i18n"; import { Button } from "../button"; import { WizardLayout } from "../layout/wizard-layout"; import { Input } from "../input"; import { Icon } from "../icon"; import { PageLayout } from "../layout/page-layout"; import { extensionLoader } from "../../../extensions/extension-loader"; import { extensionManager } from "../../../extensions/extension-manager"; @observer export class Extensions extends React.Component { @observable search = ""; @computed get extensions() { const searchText = this.search.toLowerCase(); return Array.from(extensionLoader.userExtensions.values()).filter(ext => { const { name, description } = ext.manifest; return [ name.toLowerCase().includes(searchText), description.toLowerCase().includes(searchText), ].some(v => v); }); } get extensionsPath() { return extensionManager.localFolderPath; } renderInfo() { return (

Lens Extension API

The Extensions API in Lens allows users to customize and enhance the Lens experience by creating their own menus or page content that is extended from the existing pages. Many of the core features of Lens are built as extensions and use the same Extension API.
Extensions loaded from:
{this.extensionsPath} shell.openPath(this.extensionsPath)} />
Check out documentation to learn more
); } renderExtensions() { const { extensions, extensionsPath, search } = this; if (!extensions.length) { return (
{search && No search results found} {!search &&

There are no extensions in {extensionsPath}

}
); } return extensions.map(ext => { const { manifestPath: extId, isEnabled, manifest } = ext; const { name, description } = manifest; return (
Name: {name}
Description: {description}
{!isEnabled && ( )} {isEnabled && ( )}
); }); } render() { return ( Extensions}> this.search = value} />
{this.renderExtensions()}
); } }