From 24f754697bc9fa9bb14d6861ab84e150cc643dd1 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 22 Jul 2020 19:21:46 +0300 Subject: [PATCH] preferences page -- part 1 Signed-off-by: Roman --- locales/en/messages.po | 84 +++++++++++++++ locales/fi/messages.po | 84 +++++++++++++++ locales/ru/messages.po | 84 +++++++++++++++ src/common/user-store.ts | 11 +- src/main/helm/helm-repo-manager.ts | 47 +------- src/main/routes/config-route.ts | 2 +- .../_vue/components/PreferencesPage.vue | 5 +- .../components/+preferences/preferences.scss | 6 ++ .../components/+preferences/preferences.tsx | 102 +++++++++++++++++- src/renderer/components/app.tsx | 2 + .../components/layout/wizard-layout.scss | 10 +- src/renderer/components/tooltip/tooltip.tsx | 2 +- src/renderer/index.tsx | 2 - 13 files changed, 381 insertions(+), 60 deletions(-) diff --git a/locales/en/messages.po b/locales/en/messages.po index 01ac5a96d5..ac03d7f19a 100644 --- a/locales/en/messages.po +++ b/locales/en/messages.po @@ -186,6 +186,14 @@ msgstr "Allocatable" msgid "Allow Privilege Escalation" msgstr "Allow Privilege Escalation" +#: src/renderer/components/+preferences/preferences.tsx:76 +msgid "Allow telemetry & usage tracking" +msgstr "Allow telemetry & usage tracking" + +#: src/renderer/components/+preferences/preferences.tsx:68 +msgid "Allow untrusted Certificate Authorities" +msgstr "Allow untrusted Certificate Authorities" + #: src/renderer/components/+pod-security-policies/pod-security-policy-details.tsx:51 msgid "Allowed CSI Drivers" msgstr "Allowed CSI Drivers" @@ -377,6 +385,10 @@ msgstr "Cancel" msgid "Capacity" msgstr "Capacity" +#: src/renderer/components/+preferences/preferences.tsx:67 +msgid "Certificate Trust" +msgstr "Certificate Trust" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificates.tsx:59 msgid "Certificates" msgstr "Certificates" @@ -440,6 +452,10 @@ msgstr "Cluster IP" msgid "Cluster Issuers" msgstr "Cluster Issuers" +#: src/renderer/components/+preferences/preferences.tsx:50 +msgid "Color Theme" +msgstr "Color Theme" + #: src/renderer/components/+workloads-pods/pod-details-container.tsx:81 msgid "Command" msgstr "Command" @@ -685,6 +701,10 @@ msgstr "Daemon Sets" msgid "DaemonSets" msgstr "DaemonSets" +#: src/renderer/components/+preferences/preferences.tsx:22 +msgid "Dark" +msgstr "Dark" + #: src/renderer/components/+config-maps/config-map-details.tsx:69 #: src/renderer/components/+config-secrets/secret-details.tsx:78 msgid "Data" @@ -744,14 +764,26 @@ msgstr "Disk" msgid "Disk:" msgstr "Disk:" +#: src/renderer/components/+preferences/preferences.tsx:72 +msgid "Does not affect cluster communications!" +msgstr "Does not affect cluster communications!" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89 msgid "Domains" msgstr "Domains" +#: src/renderer/components/+preferences/preferences.tsx:53 +msgid "Download Mirror" +msgstr "Download Mirror" + #: src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx:91 msgid "Download file" msgstr "Download file" +#: src/renderer/components/+preferences/preferences.tsx:54 +msgid "Download mirror for kubectl" +msgstr "Download mirror for kubectl" + #: src/renderer/components/+nodes/node-menu.tsx:59 #: src/renderer/components/+nodes/node-menu.tsx:60 msgid "Drain" @@ -901,6 +933,10 @@ msgstr "Fs Group" msgid "Get started by associating one or more clusters to Lens." msgstr "Get started by associating one or more clusters to Lens." +#: src/renderer/components/+preferences/preferences.tsx:39 +#~ msgid "Global Lens Settings page" +#~ msgstr "Global Lens Settings page" + #: src/renderer/components/+custom-resources/crd-details.tsx:32 #: src/renderer/components/+custom-resources/crd-list.tsx:58 #: src/renderer/components/+custom-resources/crd-list.tsx:74 @@ -915,10 +951,18 @@ msgstr "Groups" msgid "HPA" msgstr "HPA" +#: src/renderer/components/+preferences/preferences.tsx:61 +msgid "HTTP Proxy" +msgstr "HTTP Proxy" + #: src/renderer/components/+add-cluster/add-cluster.tsx:178 msgid "HTTP Proxy server. Used for communicating with Kubernetes API." msgstr "HTTP Proxy server. Used for communicating with Kubernetes API." +#: src/renderer/components/+preferences/preferences.tsx:56 +msgid "Helm" +msgstr "Helm" + #: src/renderer/components/dock/install-chart.tsx:113 msgid "Helm Chart Install" msgstr "Helm Chart Install" @@ -1141,10 +1185,18 @@ msgstr "Last seen" msgid "Last transition time: {lastTransitionTime}" msgstr "Last transition time: {lastTransitionTime}" +#: src/renderer/components/+preferences/preferences.tsx:42 +msgid "Lens Global Settings" +msgstr "Lens Global Settings" + #: src/renderer/components/+pod-security-policies/pod-security-policy-details.tsx:146 msgid "Level" msgstr "Level" +#: src/renderer/components/+preferences/preferences.tsx:23 +msgid "Light" +msgstr "Light" + #: src/renderer/components/+events/events.tsx:59 msgid "Limited to {0}" msgstr "Limited to {0}" @@ -1409,6 +1461,10 @@ msgstr "Namespaces" msgid "Namespaces: {0}" msgstr "Namespaces: {0}" +#: src/renderer/components/+preferences/preferences.tsx:71 +msgid "Needed with some corporate proxies that do certificate re-writing." +msgstr "Needed with some corporate proxies that do certificate re-writing." + #: src/renderer/components/+network-ingresses/ingress-details.tsx:66 #: src/renderer/components/+workloads-pods/pod-charts.tsx:13 #: src/renderer/components/layout/sidebar.tsx:89 @@ -1675,6 +1731,10 @@ msgstr "Port" msgid "Ports" msgstr "Ports" +#: src/renderer/components/+preferences/preferences.tsx:37 +msgid "Preferences" +msgstr "Preferences" + #: src/renderer/components/+workloads-pods/pod-details.tsx:93 msgid "Priority Class" msgstr "Priority Class" @@ -1693,6 +1753,10 @@ msgstr "Privileged" msgid "Provisioner" msgstr "Provisioner" +#: src/renderer/components/+preferences/preferences.tsx:64 +msgid "Proxy is used only for non-cluster communication." +msgstr "Proxy is used only for non-cluster communication." + #: src/renderer/components/+add-cluster/add-cluster.tsx:172 msgid "Proxy settings" msgstr "Proxy settings" @@ -2273,6 +2337,14 @@ msgstr "TLS" msgid "Taints" msgstr "Taints" +#: src/renderer/components/+preferences/preferences.tsx:75 +msgid "Telemetry & Usage Tracking" +msgstr "Telemetry & Usage Tracking" + +#: src/renderer/components/+preferences/preferences.tsx:78 +msgid "Telemetry & usage data is collected to continuously improve the Lens experience." +msgstr "Telemetry & usage data is collected to continuously improve the Lens experience." + #: src/renderer/components/dock/terminal.store.ts:29 msgid "Terminal" msgstr "Terminal" @@ -2301,6 +2373,10 @@ msgstr "This field must contain only lowercase latin characters, numbers and das msgid "This is the quick launch menu." msgstr "This is the quick launch menu." +#: src/renderer/components/+preferences/preferences.tsx:70 +msgid "This will make Lens to trust ANY certificate authority without any validations." +msgstr "This will make Lens to trust ANY certificate authority without any validations." + #: src/renderer/components/+network-policies/network-policy-details.tsx:59 msgid "To" msgstr "To" @@ -2340,6 +2416,10 @@ msgstr "Transmit" msgid "Type" msgstr "Type" +#: src/renderer/components/+preferences/preferences.tsx:62 +msgid "Type HTTP proxy url (example: http://proxy.acme.org:8080)" +msgstr "Type HTTP proxy url (example: http://proxy.acme.org:8080)" + #: src/renderer/components/kube-object/kube-object-meta.tsx:26 msgid "UID" msgstr "UID" @@ -2529,6 +2609,10 @@ msgstr "ago" msgid "and <0>{tailCount} more" msgstr "and <0>{tailCount} more" +#: src/renderer/components/+preferences/preferences.tsx:42 +msgid "applicable to all clusters" +msgstr "applicable to all clusters" + #: src/renderer/components/+nodes/nodes.tsx:55 msgid "cores:" msgstr "cores:" diff --git a/locales/fi/messages.po b/locales/fi/messages.po index 6892f5bed8..3a53e4ec23 100644 --- a/locales/fi/messages.po +++ b/locales/fi/messages.po @@ -186,6 +186,14 @@ msgstr "" msgid "Allow Privilege Escalation" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:76 +msgid "Allow telemetry & usage tracking" +msgstr "" + +#: src/renderer/components/+preferences/preferences.tsx:68 +msgid "Allow untrusted Certificate Authorities" +msgstr "" + #: src/renderer/components/+pod-security-policies/pod-security-policy-details.tsx:51 msgid "Allowed CSI Drivers" msgstr "" @@ -377,6 +385,10 @@ msgstr "" msgid "Capacity" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:67 +msgid "Certificate Trust" +msgstr "" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificates.tsx:59 msgid "Certificates" msgstr "" @@ -436,6 +448,10 @@ msgstr "" msgid "Cluster Issuers" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:50 +msgid "Color Theme" +msgstr "" + #: src/renderer/components/+workloads-pods/pod-details-container.tsx:81 msgid "Command" msgstr "" @@ -681,6 +697,10 @@ msgstr "" msgid "DaemonSets" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:22 +msgid "Dark" +msgstr "" + #: src/renderer/components/+config-maps/config-map-details.tsx:69 #: src/renderer/components/+config-secrets/secret-details.tsx:78 msgid "Data" @@ -740,14 +760,26 @@ msgstr "" msgid "Disk:" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:72 +msgid "Does not affect cluster communications!" +msgstr "" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89 msgid "Domains" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:53 +msgid "Download Mirror" +msgstr "" + #: src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx:91 msgid "Download file" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:54 +msgid "Download mirror for kubectl" +msgstr "" + #: src/renderer/components/+nodes/node-menu.tsx:59 #: src/renderer/components/+nodes/node-menu.tsx:60 msgid "Drain" @@ -892,6 +924,10 @@ msgstr "" msgid "Get started by associating one or more clusters to Lens." msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:39 +#~ msgid "Global Lens Settings page" +#~ msgstr "" + #: src/renderer/components/+custom-resources/crd-details.tsx:32 #: src/renderer/components/+custom-resources/crd-list.tsx:58 #: src/renderer/components/+custom-resources/crd-list.tsx:74 @@ -906,10 +942,18 @@ msgstr "" msgid "HPA" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:61 +msgid "HTTP Proxy" +msgstr "" + #: src/renderer/components/+add-cluster/add-cluster.tsx:178 msgid "HTTP Proxy server. Used for communicating with Kubernetes API." msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:56 +msgid "Helm" +msgstr "" + #: src/renderer/components/dock/install-chart.tsx:113 msgid "Helm Chart Install" msgstr "" @@ -1132,10 +1176,18 @@ msgstr "" msgid "Last transition time: {lastTransitionTime}" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:42 +msgid "Lens Global Settings" +msgstr "" + #: src/renderer/components/+pod-security-policies/pod-security-policy-details.tsx:146 msgid "Level" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:23 +msgid "Light" +msgstr "" + #: src/renderer/components/+events/events.tsx:59 msgid "Limited to {0}" msgstr "" @@ -1400,6 +1452,10 @@ msgstr "" msgid "Namespaces: {0}" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:71 +msgid "Needed with some corporate proxies that do certificate re-writing." +msgstr "" + #: src/renderer/components/+network-ingresses/ingress-details.tsx:66 #: src/renderer/components/+workloads-pods/pod-charts.tsx:13 #: src/renderer/components/layout/sidebar.tsx:89 @@ -1658,6 +1714,10 @@ msgstr "" msgid "Ports" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:37 +msgid "Preferences" +msgstr "" + #: src/renderer/components/+workloads-pods/pod-details.tsx:93 msgid "Priority Class" msgstr "" @@ -1676,6 +1736,10 @@ msgstr "" msgid "Provisioner" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:64 +msgid "Proxy is used only for non-cluster communication." +msgstr "" + #: src/renderer/components/+add-cluster/add-cluster.tsx:172 msgid "Proxy settings" msgstr "" @@ -2256,6 +2320,14 @@ msgstr "" msgid "Taints" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:75 +msgid "Telemetry & Usage Tracking" +msgstr "" + +#: src/renderer/components/+preferences/preferences.tsx:78 +msgid "Telemetry & usage data is collected to continuously improve the Lens experience." +msgstr "" + #: src/renderer/components/dock/terminal.store.ts:29 msgid "Terminal" msgstr "" @@ -2284,6 +2356,10 @@ msgstr "" msgid "This is the quick launch menu." msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:70 +msgid "This will make Lens to trust ANY certificate authority without any validations." +msgstr "" + #: src/renderer/components/+network-policies/network-policy-details.tsx:59 msgid "To" msgstr "" @@ -2323,6 +2399,10 @@ msgstr "" msgid "Type" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:62 +msgid "Type HTTP proxy url (example: http://proxy.acme.org:8080)" +msgstr "" + #: src/renderer/components/kube-object/kube-object-meta.tsx:26 msgid "UID" msgstr "" @@ -2512,6 +2592,10 @@ msgstr "" msgid "and <0>{tailCount} more" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:42 +msgid "applicable to all clusters" +msgstr "" + #: src/renderer/components/+nodes/nodes.tsx:55 msgid "cores:" msgstr "" diff --git a/locales/ru/messages.po b/locales/ru/messages.po index 6048ee8c5a..8702f65059 100644 --- a/locales/ru/messages.po +++ b/locales/ru/messages.po @@ -187,6 +187,14 @@ msgstr "" msgid "Allow Privilege Escalation" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:76 +msgid "Allow telemetry & usage tracking" +msgstr "" + +#: src/renderer/components/+preferences/preferences.tsx:68 +msgid "Allow untrusted Certificate Authorities" +msgstr "" + #: src/renderer/components/+pod-security-policies/pod-security-policy-details.tsx:51 msgid "Allowed CSI Drivers" msgstr "" @@ -378,6 +386,10 @@ msgstr "Отмена" msgid "Capacity" msgstr "Емкость" +#: src/renderer/components/+preferences/preferences.tsx:67 +msgid "Certificate Trust" +msgstr "" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificates.tsx:59 msgid "Certificates" msgstr "Сертификаты" @@ -441,6 +453,10 @@ msgstr "IP-адрес кластера" msgid "Cluster Issuers" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:50 +msgid "Color Theme" +msgstr "" + #: src/renderer/components/+workloads-pods/pod-details-container.tsx:81 msgid "Command" msgstr "Команда" @@ -686,6 +702,10 @@ msgstr "" msgid "DaemonSets" msgstr "DaemonSets" +#: src/renderer/components/+preferences/preferences.tsx:22 +msgid "Dark" +msgstr "" + #: src/renderer/components/+config-maps/config-map-details.tsx:69 #: src/renderer/components/+config-secrets/secret-details.tsx:78 msgid "Data" @@ -745,14 +765,26 @@ msgstr "Диск" msgid "Disk:" msgstr "Диск:" +#: src/renderer/components/+preferences/preferences.tsx:72 +msgid "Does not affect cluster communications!" +msgstr "" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89 msgid "Domains" msgstr "Домены" +#: src/renderer/components/+preferences/preferences.tsx:53 +msgid "Download Mirror" +msgstr "" + #: src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx:91 msgid "Download file" msgstr "Скачать файл" +#: src/renderer/components/+preferences/preferences.tsx:54 +msgid "Download mirror for kubectl" +msgstr "" + #: src/renderer/components/+nodes/node-menu.tsx:59 #: src/renderer/components/+nodes/node-menu.tsx:60 msgid "Drain" @@ -902,6 +934,10 @@ msgstr "" msgid "Get started by associating one or more clusters to Lens." msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:39 +#~ msgid "Global Lens Settings page" +#~ msgstr "" + #: src/renderer/components/+custom-resources/crd-details.tsx:32 #: src/renderer/components/+custom-resources/crd-list.tsx:58 #: src/renderer/components/+custom-resources/crd-list.tsx:74 @@ -916,10 +952,18 @@ msgstr "Группы" msgid "HPA" msgstr "HPA" +#: src/renderer/components/+preferences/preferences.tsx:61 +msgid "HTTP Proxy" +msgstr "" + #: src/renderer/components/+add-cluster/add-cluster.tsx:178 msgid "HTTP Proxy server. Used for communicating with Kubernetes API." msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:56 +msgid "Helm" +msgstr "" + #: src/renderer/components/dock/install-chart.tsx:113 msgid "Helm Chart Install" msgstr "Установка Helm чарта" @@ -1142,10 +1186,18 @@ msgstr "Увиденно в последний раз" msgid "Last transition time: {lastTransitionTime}" msgstr "Последнее изменение: {lastTransitionTime}" +#: src/renderer/components/+preferences/preferences.tsx:42 +msgid "Lens Global Settings" +msgstr "" + #: src/renderer/components/+pod-security-policies/pod-security-policy-details.tsx:146 msgid "Level" msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:23 +msgid "Light" +msgstr "" + #: src/renderer/components/+events/events.tsx:59 msgid "Limited to {0}" msgstr "" @@ -1410,6 +1462,10 @@ msgstr "Namespaces" msgid "Namespaces: {0}" msgstr "Namespaces: {0}" +#: src/renderer/components/+preferences/preferences.tsx:71 +msgid "Needed with some corporate proxies that do certificate re-writing." +msgstr "" + #: src/renderer/components/+network-ingresses/ingress-details.tsx:66 #: src/renderer/components/+workloads-pods/pod-charts.tsx:13 #: src/renderer/components/layout/sidebar.tsx:89 @@ -1676,6 +1732,10 @@ msgstr "" msgid "Ports" msgstr "Порты" +#: src/renderer/components/+preferences/preferences.tsx:37 +msgid "Preferences" +msgstr "" + #: src/renderer/components/+workloads-pods/pod-details.tsx:93 msgid "Priority Class" msgstr "Класс приоритета" @@ -1694,6 +1754,10 @@ msgstr "" msgid "Provisioner" msgstr "Комиссия" +#: src/renderer/components/+preferences/preferences.tsx:64 +msgid "Proxy is used only for non-cluster communication." +msgstr "" + #: src/renderer/components/+add-cluster/add-cluster.tsx:172 msgid "Proxy settings" msgstr "" @@ -2274,6 +2338,14 @@ msgstr "TLS" msgid "Taints" msgstr "Метки блокировки" +#: src/renderer/components/+preferences/preferences.tsx:75 +msgid "Telemetry & Usage Tracking" +msgstr "" + +#: src/renderer/components/+preferences/preferences.tsx:78 +msgid "Telemetry & usage data is collected to continuously improve the Lens experience." +msgstr "" + #: src/renderer/components/dock/terminal.store.ts:29 msgid "Terminal" msgstr "Терминал" @@ -2302,6 +2374,10 @@ msgstr "Это поле может содержать только латинс msgid "This is the quick launch menu." msgstr "" +#: src/renderer/components/+preferences/preferences.tsx:70 +msgid "This will make Lens to trust ANY certificate authority without any validations." +msgstr "" + #: src/renderer/components/+network-policies/network-policy-details.tsx:59 msgid "To" msgstr "Из" @@ -2341,6 +2417,10 @@ msgstr "Транзит" msgid "Type" msgstr "Тип" +#: src/renderer/components/+preferences/preferences.tsx:62 +msgid "Type HTTP proxy url (example: http://proxy.acme.org:8080)" +msgstr "" + #: src/renderer/components/kube-object/kube-object-meta.tsx:26 msgid "UID" msgstr "" @@ -2530,6 +2610,10 @@ msgstr "тому назад" msgid "and <0>{tailCount} more" msgstr "и <0>{tailCount} ещё" +#: src/renderer/components/+preferences/preferences.tsx:42 +msgid "applicable to all clusters" +msgstr "" + #: src/renderer/components/+nodes/nodes.tsx:55 msgid "cores:" msgstr "ядер:" diff --git a/src/common/user-store.ts b/src/common/user-store.ts index 40f41ff356..7841cbe4bb 100644 --- a/src/common/user-store.ts +++ b/src/common/user-store.ts @@ -5,9 +5,14 @@ import migrations from "../migrations/user-store" import { getAppVersion } from "./utils/app-version"; import { tracker } from "./tracker"; -// todo: merge with common/user-store.ts +// todo: merge with config.store.ts + theme.store.ts // fixme: detect new contexts from .kube/config since last open +export enum ThemeType { + LIGHT = "light", + DARK = "dark", +} + export interface UserStoreModel { lastSeenAppVersion: string; seenContexts: string[]; @@ -16,7 +21,7 @@ export interface UserStoreModel { export interface UserPreferences { httpsProxy?: string; - colorTheme?: string | "dark"; + colorTheme?: string | "dark" | "light"; allowUntrustedCAs?: boolean; allowTelemetry?: boolean; downloadMirror?: string | "default"; @@ -41,8 +46,10 @@ export class UserStore extends BaseStore { @observable preferences: UserPreferences = { allowTelemetry: true, + allowUntrustedCAs: false, colorTheme: "dark", downloadMirror: "default", + httpsProxy: "", }; get isNewVersion() { diff --git a/src/main/helm/helm-repo-manager.ts b/src/main/helm/helm-repo-manager.ts index e8fa1f4a34..3622c37f7e 100644 --- a/src/main/helm/helm-repo-manager.ts +++ b/src/main/helm/helm-repo-manager.ts @@ -17,12 +17,13 @@ export type HelmRepo = { } export class HelmRepoManager extends Singleton { - public static cache = {} + static cache = {} + protected helmEnv: HelmEnv protected initialized: boolean public async init() { - const helm = await helmCli.binaryPath() + await helmCli.ensureBinary(); if (!this.initialized) { this.helmEnv = await this.parseHelmEnv() await this.update() @@ -95,38 +96,6 @@ export class HelmRepoManager extends Singleton { return stdout } - protected async addRepositories(repositories: HelmRepo[]) { - const currentRepositories = await this.repositories() - repositories.forEach(async (repo: HelmRepo) => { - try { - const repoExists = currentRepositories.find((currentRepo: HelmRepo) => { - return currentRepo.url == repo.url - }) - if (!repoExists) { - await this.addRepo(repo) - } - } catch (error) { - logger.error(JSON.stringify(error)) - } - }); - } - - protected async pruneRepositories(repositoriesToKeep: HelmRepo[]) { - const repositories = await this.repositories() - repositories.filter((repo: HelmRepo) => { - return repositoriesToKeep.find((repoToKeep: HelmRepo) => { - return repo.name == repoToKeep.name - }) === undefined - }).forEach(async (repo: HelmRepo) => { - try { - const output = await this.removeRepo(repo) - logger.debug(output) - } catch (error) { - logger.error(error) - } - }) - } - public async addRepo(repository: HelmRepo) { const helm = await helmCli.binaryPath() logger.debug(`${helm} repo add ${repository.name} ${repository.url}`) @@ -136,16 +105,6 @@ export class HelmRepoManager extends Singleton { }) return stdout } - - public async removeRepo(repository: HelmRepo): Promise { - const helm = await helmCli.binaryPath() - logger.debug(`${helm} repo remove ${repository.name} ${repository.url}`) - - const { stdout, stderr } = await promiseExec(`"${helm}" repo remove ${repository.name}`).catch((error) => { - throw(error.stderr) - }) - return stdout - } } export const repoManager = HelmRepoManager.getInstance() diff --git a/src/main/routes/config-route.ts b/src/main/routes/config-route.ts index 73382ed95a..8b86549951 100644 --- a/src/main/routes/config-route.ts +++ b/src/main/routes/config-route.ts @@ -94,7 +94,7 @@ class ConfigRoute extends LensApi { const data: IConfigRoutePayload = { clusterName: cluster.contextName, lensVersion: app.getVersion(), - lensTheme: `kontena-${userStore.preferences.colorTheme}`, + lensTheme: userStore.preferences.colorTheme, kubeVersion: cluster.version, chartsEnabled: true, isClusterAdmin: cluster.isAdmin, diff --git a/src/renderer/_vue/components/PreferencesPage.vue b/src/renderer/_vue/components/PreferencesPage.vue index b780d15f8a..2d4b6c40ca 100644 --- a/src/renderer/_vue/components/PreferencesPage.vue +++ b/src/renderer/_vue/components/PreferencesPage.vue @@ -206,7 +206,10 @@ export default { loadHubRepositories: async function() { const res = await this.request({ uri: "https://hub.helm.sh/assets/js/repos.json"}).catch((error) => { this.hubRepositories = [] }) this.hubRepositories = res.body.data.sort(this.repoCompare).map((repo) => { - return { text: repo.name, value: repo.name+"|"+repo.url} + return { + text: repo.name, + value: repo.name+"|"+repo.url + } }) } }, diff --git a/src/renderer/components/+preferences/preferences.scss b/src/renderer/components/+preferences/preferences.scss index ef6fe71a8b..3f17d95e66 100644 --- a/src/renderer/components/+preferences/preferences.scss +++ b/src/renderer/components/+preferences/preferences.scss @@ -1,3 +1,9 @@ .Preferences { + --flex-gap: #{$padding}; + h2 { + &:not(:first-child) { + margin-top: $padding * 3; + } + } } \ No newline at end of file diff --git a/src/renderer/components/+preferences/preferences.tsx b/src/renderer/components/+preferences/preferences.tsx index d8abe6076c..6902099a69 100644 --- a/src/renderer/components/+preferences/preferences.tsx +++ b/src/renderer/components/+preferences/preferences.tsx @@ -1,14 +1,106 @@ import "./preferences.scss" -import React from "react"; +import React, { Fragment } from "react"; import { observer } from "mobx-react"; +import { t, Trans } from "@lingui/macro"; +import { _i18n } from "../../i18n"; +import { WizardLayout } from "../layout/wizard-layout"; +import { Icon } from "../icon"; +import { Select, SelectOption } from "../select"; +import { ThemeType, userStore } from "../../../common/user-store"; +import { Input } from "../input"; +import { Checkbox } from "../checkbox"; + +type ThemeSelectOption = SelectOption & { type: ThemeType } @observer export class Preferences extends React.Component { - render() { + themeOptions: ThemeSelectOption[] = [ + { value: "kontena-dark", label: Dark, type: ThemeType.DARK }, + { value: "kontena-light", label: Light, type: ThemeType.LIGHT }, + ] + + downloadMirrorOptions: SelectOption[] = [ + { value: "default", label: "Default (Google)" }, + { value: "china", label: "China (Azure)" }, + ] + + onThemeChange = ({ value }: ThemeSelectOption) => { + // themeStore.setTheme(value); // fixme: apply theme on the fly for current view + userStore.preferences.colorTheme = value; + } + + renderInfo() { return ( -
- Preferences -
+ +

+ Preferences +

+
+ + + Lens Global Settings (applicable to all clusters) + +
+
+ ) + } + + render() { + const { preferences } = userStore; + return ( + +

Color Theme

+ preferences.downloadMirror = value} + /> + +

Helm

+
+ // todo: added helm repos +
+ +

HTTP Proxy

+ preferences.httpsProxy = v} + /> + + Proxy is used only for non-cluster communication. + + +

Certificate Trust

+ Allow untrusted Certificate Authorities} + value={preferences.allowUntrustedCAs} + onChange={v => preferences.allowUntrustedCAs = v} + /> + + This will make Lens to trust ANY certificate authority without any validations.{" "} + Needed with some corporate proxies that do certificate re-writing.{" "} + Does not affect cluster communications! + + +

Telemetry & Usage Tracking

+ Allow telemetry & usage tracking} + value={preferences.allowTelemetry} + onChange={v => preferences.allowTelemetry = v} + /> + + Telemetry & usage data is collected to continuously improve the Lens experience. + +
) } } diff --git a/src/renderer/components/app.tsx b/src/renderer/components/app.tsx index d1d5e85451..ae3f4a2b6d 100755 --- a/src/renderer/components/app.tsx +++ b/src/renderer/components/app.tsx @@ -37,6 +37,7 @@ import { clusterIpc } from "../../common/cluster-ipc"; import { clusterStore } from "../../common/cluster-store"; import { ClusterStatus } from "./cluster-manager/cluster-status"; import { clusterStatusRoute, clusterStatusURL } from "./cluster-manager/cluster-status.route"; +import { Preferences, preferencesRoute } from "./+preferences"; import { navigation } from "../navigation"; import { CubeSpinner } from "./spinner"; @@ -85,6 +86,7 @@ export class App extends React.Component { + diff --git a/src/renderer/components/layout/wizard-layout.scss b/src/renderer/components/layout/wizard-layout.scss index 08f5e01580..06d126bab2 100644 --- a/src/renderer/components/layout/wizard-layout.scss +++ b/src/renderer/components/layout/wizard-layout.scss @@ -1,5 +1,5 @@ .WizardLayout { - --flex-gap: #{$padding * 2}; + $spacing: $padding * 2; position: relative; padding: $padding * 3; @@ -8,8 +8,9 @@ grid-template-columns: 1fr 40%; > .content-col { - padding: var(--flex-gap); - margin-right: var(--flex-gap); + --flex-gap: #{$spacing}; + padding: $spacing; + margin-right: $spacing; background-color: var(--clusters-menu-bgc); border-radius: $radius; @@ -22,7 +23,8 @@ > .info-col { @include hidden-scrollbar; - padding: var(--flex-gap); + --flex-gap: #{$spacing}; + padding: $spacing; border-left: 1px solid #353a3e; } diff --git a/src/renderer/components/tooltip/tooltip.tsx b/src/renderer/components/tooltip/tooltip.tsx index a104618244..8c7e1d15ef 100644 --- a/src/renderer/components/tooltip/tooltip.tsx +++ b/src/renderer/components/tooltip/tooltip.tsx @@ -7,7 +7,7 @@ import { createPortal } from "react-dom" import { autobind, cssNames } from "../../utils"; import { Animate } from "../animate"; -// todo: refactor -- better positioning + remove "flying effect" +// fixme: refactor -- better positioning + remove "flying effect" // todo: always render outside of parent element ("overflow: auto" should not affect tooltip) export interface TooltipProps { diff --git a/src/renderer/index.tsx b/src/renderer/index.tsx index c0f013d12a..b920eb38b0 100644 --- a/src/renderer/index.tsx +++ b/src/renderer/index.tsx @@ -13,7 +13,6 @@ import { _i18n } from "./i18n"; import { ClusterManager } from "./components/cluster-manager"; import { ErrorBoundary } from "./components/error-boundary"; import { WhatsNew, whatsNewRoute } from "./components/+whats-new"; -import { Preferences, preferencesRoute } from "./components/+preferences"; @observer class LensApp extends React.Component { @@ -37,7 +36,6 @@ class LensApp extends React.Component { {userStore.isNewVersion && } -