From 966aa38cbf7ae8fd96894659f3c5f9da3ddb5d89 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 8 Sep 2020 16:48:29 +0300 Subject: [PATCH] example-extension: allow to disable extension from page component (demo-only) Signed-off-by: Roman --- .../example-extension/example-extension.tsx | 28 +++++++++++-------- src/extensions/lens-runtime.ts | 3 ++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/extensions/example-extension/example-extension.tsx b/src/extensions/example-extension/example-extension.tsx index f360cbf3cf..8ee52e6f66 100644 --- a/src/extensions/example-extension/example-extension.tsx +++ b/src/extensions/example-extension/example-extension.tsx @@ -1,30 +1,30 @@ -import { DynamicPageType, Icon, LensExtension } from "@lens/extensions"; // fixme: map to generated types from "extension-api.ts" +import { Button, DynamicPageType, Icon, LensExtension } from "@lens/extensions"; // fixme: map to generated types from "extension-api.ts" import React from "react"; import path from "path"; +let extension: ExampleExtension; // todo: provide instance from context + export default class ExampleExtension extends LensExtension { protected unRegisterPage = Function(); onActivate() { + extension = this console.log('EXAMPLE EXTENSION: ACTIVATE', this.getMeta()) - const { dynamicPages, components: { MainLayout } } = this.runtime; + const { dynamicPages } = this.runtime; this.unRegisterPage = dynamicPages.register({ type: DynamicPageType.CLUSTER, path: "/extension-example", menuTitle: "Example Extension", components: { - Page: () => ( - - - - ), + Page: ExtensionPage, MenuIcon: ExtensionIcon, } }) } onDeactivate() { + extension = null; console.log('EXAMPLE EXTENSION: DEACTIVATE', this.getMeta()); this.unRegisterPage(); } @@ -34,16 +34,22 @@ export function ExtensionIcon(props: {} /*IconProps |*/) { return } -// todo: provide extension-instance and lens-runtime (context/props/extension-js-scope) export class ExtensionPage extends React.Component { + deactivate = () => { + extension.runtime.navigate("/") + extension.disable(); + } + render() { + const { MainLayout } = extension.runtime.components; return ( -
-
+ +

Hello from extensions-api!

File: {__filename}

+
-
+ ) } } diff --git a/src/extensions/lens-runtime.ts b/src/extensions/lens-runtime.ts index 4e335317e1..5fdc4c35eb 100644 --- a/src/extensions/lens-runtime.ts +++ b/src/extensions/lens-runtime.ts @@ -3,8 +3,10 @@ import logger from "../main/logger"; import { dynamicPages } from "./register-page"; import { MainLayout } from "../renderer/components/layout/main-layout"; +import { navigate } from "../renderer/navigation"; export interface LensRuntimeRendererEnv { + navigate: typeof navigate; logger: typeof logger; dynamicPages: typeof dynamicPages components: { @@ -15,6 +17,7 @@ export interface LensRuntimeRendererEnv { export function getLensRuntime(): LensRuntimeRendererEnv { return { logger, + navigate, dynamicPages, components: { MainLayout // fixme: refactor, import as pure component from "@lens/extensions"