1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Create a telemetry tab with extensions

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2021-04-05 10:31:06 +03:00
parent a51907f6d4
commit 2d4decd0fb
4 changed files with 42 additions and 18 deletions

View File

@ -8,6 +8,7 @@ export default class SurveyRendererExtension extends LensRendererExtension {
appPreferences = [ appPreferences = [
{ {
title: "In-App Surveys", title: "In-App Surveys",
showInPreferencesTab: "telemetry",
components: { components: {
Hint: () => <SurveyPreferenceHint/>, Hint: () => <SurveyPreferenceHint/>,
Input: () => <SurveyPreferenceInput survey={surveyPreferencesStore}/> Input: () => <SurveyPreferenceInput survey={surveyPreferencesStore}/>

View File

@ -8,6 +8,7 @@ export default class TelemetryRendererExtension extends LensRendererExtension {
appPreferences = [ appPreferences = [
{ {
title: "Telemetry & Usage Tracking", title: "Telemetry & Usage Tracking",
showInPreferencesTab: "telemetry",
id: "telemetry-tracking", id: "telemetry-tracking",
components: { components: {
Hint: () => <TelemetryPreferenceHint/>, Hint: () => <TelemetryPreferenceHint/>,

View File

@ -9,6 +9,7 @@ export interface AppPreferenceComponents {
export interface AppPreferenceRegistration { export interface AppPreferenceRegistration {
title: string; title: string;
id?: string; id?: string;
showInPreferencesTab?: string;
components: AppPreferenceComponents; components: AppPreferenceComponents;
} }

View File

@ -6,7 +6,7 @@ import { disposeOnUnmount, observer } from "mobx-react";
import { userStore } from "../../../common/user-store"; import { userStore } from "../../../common/user-store";
import { isWindows } from "../../../common/vars"; import { isWindows } from "../../../common/vars";
import { appPreferenceRegistry } from "../../../extensions/registries/app-preference-registry"; import { appPreferenceRegistry, RegisteredAppPreference } from "../../../extensions/registries/app-preference-registry";
import { themeStore } from "../../theme.store"; import { themeStore } from "../../theme.store";
import { Input } from "../input"; import { Input } from "../input";
import { PageLayout } from "../layout/page-layout"; import { PageLayout } from "../layout/page-layout";
@ -22,6 +22,7 @@ enum PreferencesTab {
Application = "application", Application = "application",
Proxy = "proxy", Proxy = "proxy",
Kubernetes = "kubernetes", Kubernetes = "kubernetes",
Telemetry = "telemetry",
Extensions = "extensions", Extensions = "extensions",
Other = "other" Other = "other"
} }
@ -59,6 +60,8 @@ export class Preferences extends React.Component {
}; };
renderNavigation() { renderNavigation() {
const extensions = appPreferenceRegistry.getItems().filter(e => !e.showInPreferencesTab);
return ( return (
<Tabs className="flex column" scrollable={false} onChange={this.onTabChange}> <Tabs className="flex column" scrollable={false} onChange={this.onTabChange}>
<div className="header">Preferences</div> <div className="header">Preferences</div>
@ -77,11 +80,18 @@ export class Preferences extends React.Component {
label="Kubernetes" label="Kubernetes"
active={this.activeTab == PreferencesTab.Kubernetes} active={this.activeTab == PreferencesTab.Kubernetes}
/> />
<Tab
value={PreferencesTab.Telemetry}
label="Telemetry"
active={this.activeTab == PreferencesTab.Telemetry}
/>
{extensions.length > 0 &&
<Tab <Tab
value={PreferencesTab.Extensions} value={PreferencesTab.Extensions}
label="Extensions" label="Extensions"
active={this.activeTab == PreferencesTab.Extensions} active={this.activeTab == PreferencesTab.Extensions}
/> />
}
<Tab <Tab
value={PreferencesTab.Other} value={PreferencesTab.Other}
label="Other" label="Other"
@ -91,8 +101,25 @@ export class Preferences extends React.Component {
); );
} }
renderExtension({ title, id, components: { Hint, Input } }: RegisteredAppPreference) {
return (
<React.Fragment key={id}>
<section id={id} className="small">
<SubTitle title={title}/>
<Input/>
<div className="hint">
<Hint/>
</div>
</section>
<hr className="small"/>
</React.Fragment>
);
}
render() { render() {
const { preferences } = userStore; const { preferences } = userStore;
const extensions = appPreferenceRegistry.getItems();
const telemetryExtensions = extensions.filter(e => e.showInPreferencesTab == PreferencesTab.Telemetry);
let defaultShell = process.env.SHELL || process.env.PTYSHELL; let defaultShell = process.env.SHELL || process.env.PTYSHELL;
if (!defaultShell) { if (!defaultShell) {
@ -190,23 +217,17 @@ export class Preferences extends React.Component {
</section> </section>
)} )}
{this.activeTab == PreferencesTab.Telemetry && (
<section id="telemetry">
<h2>Telemetry</h2>
{telemetryExtensions.map(this.renderExtension)}
</section>
)}
{this.activeTab == PreferencesTab.Extensions && ( {this.activeTab == PreferencesTab.Extensions && (
<section id="extensions"> <section id="extensions">
<h2>Extensions</h2> <h2>Extensions</h2>
{appPreferenceRegistry.getItems().map(({ title, id, components: { Hint, Input } }) => { {extensions.filter(e => !e.showInPreferencesTab).map(this.renderExtension)}
return (
<>
<section key={id} id={title} className="small">
<SubTitle title={title}/>
<Input/>
<div className="hint">
<Hint/>
</div>
</section>
<hr className="small"/>
</>
);
})}
</section> </section>
)} )}