import "./extensions.scss"; import { remote, 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, InputValidators } from "../input"; import { Icon } from "../icon"; import { PageLayout } from "../layout/page-layout"; import { CopyToClick } from "../copy-to-click/copy-to-click"; import { extensionLoader } from "../../../extensions/extension-loader"; import { extensionManager } from "../../../extensions/extension-manager"; @observer export class Extensions extends React.Component { @observable.ref input: Input; @observable search = ""; @observable downloadUrl = ""; @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; } selectPackedExtensionsDialog = async () => { const { dialog, BrowserWindow, app } = remote; const { canceled, filePaths } = await dialog.showOpenDialog(BrowserWindow.getFocusedWindow(), { defaultPath: app.getPath("downloads"), properties: ["openFile", "multiSelections"], message: _i18n._(t`Select extensions to add to Lens (*.tgz`), buttonLabel: _i18n._(t`Use configuration`), filters: [ { name: "tarball", extensions: [".tgz", ".tar.gz"] } ] }); if (!canceled && filePaths.length) { this.installFromLocalPath(filePaths); } } installFromUrl = () => { if (!this.downloadUrl) { this.input?.focus(); return; } } installFromLocalPath = (filePaths: string[]) => { } renderInfo() { return (
{this.extensionsPath}
npm pack %namenpm view %name dist.tarballCheck out documentation to learn more
{extensionsPath}
{name}