From 0dc45c7ce9ea2dfaf69bba9f4e5f3284c5d21c5d Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Thu, 13 Oct 2022 14:13:22 +0300 Subject: [PATCH] Introduce competition for telemetry preference tab Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- ...or-reporting-preference-item.injectable.ts | 29 ++++++++++++ .../automatic-error-reporting.tsx | 47 +++++++++++++++++++ .../telemetry/telemetry-page.tsx | 14 ++++++ .../telemetry-preference-page.injectable.ts | 23 +++++++++ .../telemetry-preference-tab.injectable.ts | 24 ++++++++++ 5 files changed, 137 insertions(+) create mode 100644 src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting-preference-item.injectable.ts create mode 100644 src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting.tsx create mode 100644 src/features/preferences/renderer/preference-items/telemetry/telemetry-page.tsx create mode 100644 src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-page.injectable.ts create mode 100644 src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-tab.injectable.ts diff --git a/src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting-preference-item.injectable.ts b/src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting-preference-item.injectable.ts new file mode 100644 index 0000000000..c432c43542 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting-preference-item.injectable.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { preferenceItemInjectionToken } from "../../preference-item-injection-token"; +import { AutomaticErrorReporting } from "./automatic-error-reporting"; +import sentryDataSourceNameInjectable from "../../../../../../common/vars/sentry-dsn-url.injectable"; + +const automaticErrorReportingPreferenceItemInjectable = getInjectable({ + id: "automatic-error-reporting-preference-item", + + instantiate: (di) => { + const sentryDnsUrl = di.inject(sentryDataSourceNameInjectable); + + return { + kind: "item" as const, + id: "automatic-error-reporting", + parentId: "telemetry-page", + orderNumber: 20, + Component: AutomaticErrorReporting, + isShown: !!sentryDnsUrl, + }; + }, + + injectionToken: preferenceItemInjectionToken, +}); + +export default automaticErrorReportingPreferenceItemInjectable; diff --git a/src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting.tsx b/src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting.tsx new file mode 100644 index 0000000000..7e23c0af35 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/telemetry/automatic-error-reporting/automatic-error-reporting.tsx @@ -0,0 +1,47 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import React from "react"; +import { SubTitle } from "../../../../../../renderer/components/layout/sub-title"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import type { UserStore } from "../../../../../../common/user-store"; +import userStoreInjectable from "../../../../../../common/user-store/user-store.injectable"; +import { observer } from "mobx-react"; +import { Checkbox } from "../../../../../../renderer/components/checkbox"; + +interface Dependencies { + userStore: UserStore; +} + +const NonInjectedAutomaticErrorReporting = observer(({ userStore }: Dependencies) => ( +
+ + (userStore.allowErrorReporting = value)} + /> +
+ + Automatic error reports provide vital information about issues and + application crashes. It is highly recommended to keep this feature + enabled to ensure fast turnaround for issues you might encounter. + +
+
+)); + +export const AutomaticErrorReporting = withInjectables( + NonInjectedAutomaticErrorReporting, + + { + getProps: (di) => ({ + userStore: di.inject(userStoreInjectable), + }), + }, +); diff --git a/src/features/preferences/renderer/preference-items/telemetry/telemetry-page.tsx b/src/features/preferences/renderer/preference-items/telemetry/telemetry-page.tsx new file mode 100644 index 0000000000..691d9b8cdc --- /dev/null +++ b/src/features/preferences/renderer/preference-items/telemetry/telemetry-page.tsx @@ -0,0 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import React from "react"; +import type { PreferenceItemComponent } from "../preference-item-injection-token"; + +export const TelemetryPage: PreferenceItemComponent = ({ children }) => ( +
+

Telemetry

+ + {children} +
+); diff --git a/src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-page.injectable.ts b/src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-page.injectable.ts new file mode 100644 index 0000000000..8f25c1b9f1 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-page.injectable.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { preferenceItemInjectionToken } from "../preference-item-injection-token"; +import { TelemetryPage } from "./telemetry-page"; + +const telemetryPreferencePageInjectable = getInjectable({ + id: "telemetry-preference-page", + + instantiate: () => ({ + kind: "page" as const, + id: "telemetry-page", + parentId: "telemetry-tab", + orderNumber: 0, + Component: TelemetryPage, + }), + + injectionToken: preferenceItemInjectionToken, +}); + +export default telemetryPreferencePageInjectable; diff --git a/src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-tab.injectable.ts b/src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-tab.injectable.ts new file mode 100644 index 0000000000..5d96258bb8 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/telemetry/telemetry-preference-tab.injectable.ts @@ -0,0 +1,24 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { preferenceItemInjectionToken } from "../preference-item-injection-token"; + +const telemetryPreferenceTabInjectable = getInjectable({ + id: "telemetry-preference-tab", + + instantiate: () => ({ + kind: "tab" as const, + id: "telemetry-tab", + parentId: "preference-tabs" as const, + pathId: "telemetry", + testId: "terminal-preferences-page", + label: "Telemetry", + orderNumber: 20, + }), + + injectionToken: preferenceItemInjectionToken, +}); + +export default telemetryPreferenceTabInjectable;