From 0d7a284d2af1d72aae828f2ed5652429d0b2441c Mon Sep 17 00:00:00 2001
From: Alex Andreev
Date: Fri, 30 Oct 2020 10:55:26 +0300
Subject: [PATCH] Adding search to extension page
Signed-off-by: Alex Andreev
---
.../components/+extensions/extensions.scss | 11 +++++
.../components/+extensions/extensions.tsx | 46 ++++++++++++++++---
2 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/src/renderer/components/+extensions/extensions.scss b/src/renderer/components/+extensions/extensions.scss
index 242853343c..aef5c3117e 100644
--- a/src/renderer/components/+extensions/extensions.scss
+++ b/src/renderer/components/+extensions/extensions.scss
@@ -12,5 +12,16 @@
.info-col {
flex: 0.6;
+ align-self: flex-start;
+ }
+
+ .SearchInput {
+ margin-top: $margin / 2;
+ margin-bottom: $margin * 2;
+
+ > label {
+ padding: $padding $padding * 2;
+ border-radius: $radius;
+ }
}
}
\ No newline at end of file
diff --git a/src/renderer/components/+extensions/extensions.tsx b/src/renderer/components/+extensions/extensions.tsx
index 974b3840fe..b10393b290 100644
--- a/src/renderer/components/+extensions/extensions.tsx
+++ b/src/renderer/components/+extensions/extensions.tsx
@@ -1,15 +1,26 @@
import "./extensions.scss";
import React, { Fragment } from "react";
-import { Trans } from "@lingui/macro";
+import { t, Trans } from "@lingui/macro";
import { observer } from "mobx-react";
import { Badge } from "../badge";
import { Button } from "../button";
import { extensionLoader } from "../../../extensions/extension-loader";
import { WizardLayout } from "../layout/wizard-layout";
+import { Input } from "../input";
+import { _i18n } from "../../i18n";
+import { computed, observable } from "mobx";
+import { extensionManager } from "../../../extensions/extension-manager";
@observer
export class Extensions extends React.Component {
+ @observable search = ""
+
+ @computed get extensions() {
+ const extensions = extensionLoader.userExtensions
+ return extensions.filter(ext => ext.name.includes(this.search))
+ }
+
disable(name: string) {
}
@@ -21,23 +32,35 @@ export class Extensions extends React.Component {
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.
- Check out documentation to learn more .
+ Check out documentation to learn more
)
}
renderExtensions() {
- const extensions = extensionLoader.userExtensions;
- if (!extensions.length) {
- return (
-
+ if (!this.extensions.length) {
+ const message = this.search ?
No search results found : (
+ <>
There are no extensions found in
/.k8slens/extensions
+ >
+ )
+ return (
+
+ {message}
)
}
- return extensions.map(extension => {
+ if (!this.extensions.length) {
+ return (
+
+ There are no extensions found in
+ {extensionManager.localFolderPath}
+
+ )
+ }
+ return this.extensions.map(extension => {
const { id, name, description } = extension;
return (
@@ -63,6 +86,15 @@ export class Extensions extends React.Component {
>
Extensions
+ {/* TODO: Use generic search input after https://github.com/lensapp/lens/pull/1114 will be pushed */}
+ this.search = value}
+ />
{this.renderExtensions()}