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

allow to manually input kube-config file path (edit + save on blur + auto-replace "~" => os.homedir()

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2020-08-25 23:13:13 +03:00
parent cb669d15df
commit bec50de6a6
6 changed files with 181 additions and 84 deletions

View File

@ -87,7 +87,7 @@ msgstr "Account Name"
msgid "Active" msgid "Active"
msgstr "Active" msgstr "Active"
#: src/renderer/components/+add-cluster/add-cluster.tsx:228 #: src/renderer/components/+add-cluster/add-cluster.tsx:248
#: src/renderer/components/cluster-manager/clusters-menu.tsx:116 #: src/renderer/components/cluster-manager/clusters-menu.tsx:116
msgid "Add Cluster" msgid "Add Cluster"
msgstr "Add Cluster" msgstr "Add Cluster"
@ -112,7 +112,7 @@ msgstr "Add bindings to {name}"
#~ msgid "Add cluster" #~ msgid "Add cluster"
#~ msgstr "Add cluster" #~ msgstr "Add cluster"
#: src/renderer/components/+add-cluster/add-cluster.tsx:246 #: src/renderer/components/+add-cluster/add-cluster.tsx:266
msgid "Add cluster(s)" msgid "Add cluster(s)"
msgstr "Add cluster(s)" msgstr "Add cluster(s)"
@ -319,7 +319,7 @@ msgstr "Binding targets"
msgid "Bindings" msgid "Bindings"
msgstr "Bindings" msgstr "Bindings"
#: src/renderer/components/+add-cluster/add-cluster.tsx:210 #: src/renderer/components/+add-cluster/add-cluster.tsx:227
msgid "Browse" msgid "Browse"
msgstr "Browse" msgstr "Browse"
@ -1730,7 +1730,7 @@ msgstr "Parallelism"
msgid "Parameters" msgid "Parameters"
msgstr "Parameters" msgstr "Parameters"
#: src/renderer/components/+add-cluster/add-cluster.tsx:205 #: src/renderer/components/+add-cluster/add-cluster.tsx:222
msgid "Paste as text" msgid "Paste as text"
msgstr "Paste as text" msgstr "Paste as text"
@ -1754,7 +1754,7 @@ msgstr "Persistent Volume Claims"
msgid "Persistent Volumes" msgid "Persistent Volumes"
msgstr "Persistent Volumes" msgstr "Persistent Volumes"
#: src/renderer/components/+add-cluster/add-cluster.tsx:92 #: src/renderer/components/+add-cluster/add-cluster.tsx:106
msgid "Please select kube-config's context" msgid "Please select kube-config's context"
msgstr "Please select kube-config's context" msgstr "Please select kube-config's context"
@ -1851,6 +1851,14 @@ msgstr "Private Key Secret"
msgid "Privileged" msgid "Privileged"
msgstr "Privileged" msgstr "Privileged"
#: src/renderer/components/+add-cluster/add-cluster.tsx:225
#~ msgid "Pro-tip: you can also drag-n-drop kube-config file in the left-side area"
#~ msgstr "Pro-tip: you can also drag-n-drop kube-config file in the left-side area"
#: src/renderer/components/+add-cluster/add-cluster.tsx:229
msgid "Pro-tip: you can also drag-n-drop kube-config file to this area"
msgstr "Pro-tip: you can also drag-n-drop kube-config file to this area"
#: src/renderer/components/+storage-classes/storage-class-details.tsx:28 #: src/renderer/components/+storage-classes/storage-class-details.tsx:28
#: src/renderer/components/+storage-classes/storage-classes.tsx:35 #: src/renderer/components/+storage-classes/storage-classes.tsx:35
msgid "Provisioner" msgid "Provisioner"
@ -1860,7 +1868,7 @@ msgstr "Provisioner"
msgid "Proxy is used only for non-cluster communication." msgid "Proxy is used only for non-cluster communication."
msgstr "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:234 #: src/renderer/components/+add-cluster/add-cluster.tsx:254
msgid "Proxy settings" msgid "Proxy settings"
msgstr "Proxy settings" msgstr "Proxy settings"
@ -2041,7 +2049,7 @@ msgstr "Required Drop Capabilities"
msgid "Required field" msgid "Required field"
msgstr "Required field" msgstr "Required field"
#: src/renderer/components/+add-cluster/add-cluster.tsx:209 #: src/renderer/components/+add-cluster/add-cluster.tsx:226
#: src/renderer/components/item-object-list/page-filters-list.tsx:31 #: src/renderer/components/item-object-list/page-filters-list.tsx:31
msgid "Reset" msgid "Reset"
msgstr "Reset" msgstr "Reset"
@ -2050,6 +2058,18 @@ msgstr "Reset"
msgid "Reset filters?" msgid "Reset filters?"
msgstr "Reset filters?" msgstr "Reset filters?"
#: src/renderer/components/+add-cluster/add-cluster.tsx:65
msgid "Resetting config to {0}"
msgstr "Resetting config to {0}"
#: src/renderer/components/+add-cluster/add-cluster.tsx:68
#~ msgid "Resetting kube-config to current {0}"
#~ msgstr "Resetting kube-config to current {0}"
#: src/renderer/components/+add-cluster/add-cluster.tsx:68
#~ msgid "Resetting kube-config to default: {kubeConfigDefaultPath}"
#~ msgstr "Resetting kube-config to default: {kubeConfigDefaultPath}"
#: src/renderer/components/+custom-resources/crd-details.tsx:44 #: src/renderer/components/+custom-resources/crd-details.tsx:44
#: src/renderer/components/+custom-resources/crd-list.tsx:73 #: src/renderer/components/+custom-resources/crd-list.tsx:73
msgid "Resource" msgid "Resource"
@ -2245,7 +2265,7 @@ msgstr "Secret type"
msgid "Secrets" msgid "Secrets"
msgstr "Secrets" msgstr "Secrets"
#: src/renderer/components/+add-cluster/add-cluster.tsx:231 #: src/renderer/components/+add-cluster/add-cluster.tsx:251
msgid "Select a context" msgid "Select a context"
msgstr "Select a context" msgstr "Select a context"
@ -2257,8 +2277,8 @@ msgstr "Select a quota.."
#~ msgid "Select context" #~ msgid "Select context"
#~ msgstr "Select context" #~ msgstr "Select context"
#: src/renderer/components/+add-cluster/add-cluster.tsx:62 #: src/renderer/components/+add-cluster/add-cluster.tsx:76
#: src/renderer/components/+add-cluster/add-cluster.tsx:62 #: src/renderer/components/+add-cluster/add-cluster.tsx:76
msgid "Select custom kube-config file" msgid "Select custom kube-config file"
msgstr "Select custom kube-config file" msgstr "Select custom kube-config file"
@ -2266,13 +2286,17 @@ msgstr "Select custom kube-config file"
#~ msgid "Select file" #~ msgid "Select file"
#~ msgstr "Select file" #~ msgstr "Select file"
#: src/renderer/components/+add-cluster/add-cluster.tsx:221
msgid "Select kube-config file"
msgstr "Select kube-config file"
#: src/renderer/components/+add-cluster/add-cluster.tsx:173 #: src/renderer/components/+add-cluster/add-cluster.tsx:173
#~ msgid "Select kubeconfig" #~ msgid "Select kubeconfig"
#~ msgstr "Select kubeconfig" #~ msgstr "Select kubeconfig"
#: src/renderer/components/+add-cluster/add-cluster.tsx:204 #: src/renderer/components/+add-cluster/add-cluster.tsx:224
msgid "Select or drop file" #~ msgid "Select or drop file"
msgstr "Select or drop file" #~ msgstr "Select or drop file"
#: src/renderer/components/+preferences/preferences.tsx:88 #: src/renderer/components/+preferences/preferences.tsx:88
#~ msgid "Select repository" #~ msgid "Select repository"
@ -2612,8 +2636,8 @@ msgstr "Upgrade version"
msgid "Usage" msgid "Usage"
msgstr "Usage" msgstr "Usage"
#: src/renderer/components/+add-cluster/add-cluster.tsx:63 #: src/renderer/components/+add-cluster/add-cluster.tsx:77
#: src/renderer/components/+add-cluster/add-cluster.tsx:63 #: src/renderer/components/+add-cluster/add-cluster.tsx:77
msgid "Use configuration" msgid "Use configuration"
msgstr "Use configuration" msgstr "Use configuration"

View File

@ -87,7 +87,7 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:228 #: src/renderer/components/+add-cluster/add-cluster.tsx:248
#: src/renderer/components/cluster-manager/clusters-menu.tsx:116 #: src/renderer/components/cluster-manager/clusters-menu.tsx:116
msgid "Add Cluster" msgid "Add Cluster"
msgstr "" msgstr ""
@ -112,7 +112,7 @@ msgstr ""
#~ msgid "Add cluster" #~ msgid "Add cluster"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:246 #: src/renderer/components/+add-cluster/add-cluster.tsx:266
msgid "Add cluster(s)" msgid "Add cluster(s)"
msgstr "" msgstr ""
@ -319,7 +319,7 @@ msgstr ""
msgid "Bindings" msgid "Bindings"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:210 #: src/renderer/components/+add-cluster/add-cluster.tsx:227
msgid "Browse" msgid "Browse"
msgstr "" msgstr ""
@ -1713,7 +1713,7 @@ msgstr ""
msgid "Parameters" msgid "Parameters"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:205 #: src/renderer/components/+add-cluster/add-cluster.tsx:222
msgid "Paste as text" msgid "Paste as text"
msgstr "" msgstr ""
@ -1737,7 +1737,7 @@ msgstr ""
msgid "Persistent Volumes" msgid "Persistent Volumes"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:92 #: src/renderer/components/+add-cluster/add-cluster.tsx:106
msgid "Please select kube-config's context" msgid "Please select kube-config's context"
msgstr "" msgstr ""
@ -1834,6 +1834,14 @@ msgstr ""
msgid "Privileged" msgid "Privileged"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:225
#~ msgid "Pro-tip: you can also drag-n-drop kube-config file in the left-side area"
#~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:229
msgid "Pro-tip: you can also drag-n-drop kube-config file to this area"
msgstr ""
#: src/renderer/components/+storage-classes/storage-class-details.tsx:28 #: src/renderer/components/+storage-classes/storage-class-details.tsx:28
#: src/renderer/components/+storage-classes/storage-classes.tsx:35 #: src/renderer/components/+storage-classes/storage-classes.tsx:35
msgid "Provisioner" msgid "Provisioner"
@ -1843,7 +1851,7 @@ msgstr ""
msgid "Proxy is used only for non-cluster communication." msgid "Proxy is used only for non-cluster communication."
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:234 #: src/renderer/components/+add-cluster/add-cluster.tsx:254
msgid "Proxy settings" msgid "Proxy settings"
msgstr "" msgstr ""
@ -2024,7 +2032,7 @@ msgstr ""
msgid "Required field" msgid "Required field"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:209 #: src/renderer/components/+add-cluster/add-cluster.tsx:226
#: src/renderer/components/item-object-list/page-filters-list.tsx:31 #: src/renderer/components/item-object-list/page-filters-list.tsx:31
msgid "Reset" msgid "Reset"
msgstr "" msgstr ""
@ -2033,6 +2041,18 @@ msgstr ""
msgid "Reset filters?" msgid "Reset filters?"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:65
msgid "Resetting config to {0}"
msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:68
#~ msgid "Resetting kube-config to current {0}"
#~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:68
#~ msgid "Resetting kube-config to default: {kubeConfigDefaultPath}"
#~ msgstr ""
#: src/renderer/components/+custom-resources/crd-details.tsx:44 #: src/renderer/components/+custom-resources/crd-details.tsx:44
#: src/renderer/components/+custom-resources/crd-list.tsx:73 #: src/renderer/components/+custom-resources/crd-list.tsx:73
msgid "Resource" msgid "Resource"
@ -2228,7 +2248,7 @@ msgstr ""
msgid "Secrets" msgid "Secrets"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:231 #: src/renderer/components/+add-cluster/add-cluster.tsx:251
msgid "Select a context" msgid "Select a context"
msgstr "" msgstr ""
@ -2240,8 +2260,8 @@ msgstr ""
#~ msgid "Select context" #~ msgid "Select context"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:62 #: src/renderer/components/+add-cluster/add-cluster.tsx:76
#: src/renderer/components/+add-cluster/add-cluster.tsx:62 #: src/renderer/components/+add-cluster/add-cluster.tsx:76
msgid "Select custom kube-config file" msgid "Select custom kube-config file"
msgstr "" msgstr ""
@ -2249,13 +2269,17 @@ msgstr ""
#~ msgid "Select file" #~ msgid "Select file"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:221
msgid "Select kube-config file"
msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:173 #: src/renderer/components/+add-cluster/add-cluster.tsx:173
#~ msgid "Select kubeconfig" #~ msgid "Select kubeconfig"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:204 #: src/renderer/components/+add-cluster/add-cluster.tsx:224
msgid "Select or drop file" #~ msgid "Select or drop file"
msgstr "" #~ msgstr ""
#: src/renderer/components/+preferences/preferences.tsx:88 #: src/renderer/components/+preferences/preferences.tsx:88
#~ msgid "Select repository" #~ msgid "Select repository"
@ -2595,8 +2619,8 @@ msgstr ""
msgid "Usage" msgid "Usage"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:63 #: src/renderer/components/+add-cluster/add-cluster.tsx:77
#: src/renderer/components/+add-cluster/add-cluster.tsx:63 #: src/renderer/components/+add-cluster/add-cluster.tsx:77
msgid "Use configuration" msgid "Use configuration"
msgstr "" msgstr ""

View File

@ -88,7 +88,7 @@ msgstr "Название аккаунта"
msgid "Active" msgid "Active"
msgstr "Активный" msgstr "Активный"
#: src/renderer/components/+add-cluster/add-cluster.tsx:228 #: src/renderer/components/+add-cluster/add-cluster.tsx:248
#: src/renderer/components/cluster-manager/clusters-menu.tsx:116 #: src/renderer/components/cluster-manager/clusters-menu.tsx:116
msgid "Add Cluster" msgid "Add Cluster"
msgstr "" msgstr ""
@ -113,7 +113,7 @@ msgstr "Добавить привязки к {name}"
#~ msgid "Add cluster" #~ msgid "Add cluster"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:246 #: src/renderer/components/+add-cluster/add-cluster.tsx:266
msgid "Add cluster(s)" msgid "Add cluster(s)"
msgstr "" msgstr ""
@ -320,7 +320,7 @@ msgstr "Цели привязки"
msgid "Bindings" msgid "Bindings"
msgstr "Привязки" msgstr "Привязки"
#: src/renderer/components/+add-cluster/add-cluster.tsx:210 #: src/renderer/components/+add-cluster/add-cluster.tsx:227
msgid "Browse" msgid "Browse"
msgstr "" msgstr ""
@ -1731,7 +1731,7 @@ msgstr "Параллелизм"
msgid "Parameters" msgid "Parameters"
msgstr "Параметры" msgstr "Параметры"
#: src/renderer/components/+add-cluster/add-cluster.tsx:205 #: src/renderer/components/+add-cluster/add-cluster.tsx:222
msgid "Paste as text" msgid "Paste as text"
msgstr "" msgstr ""
@ -1755,7 +1755,7 @@ msgstr "Persistent Volume Claims"
msgid "Persistent Volumes" msgid "Persistent Volumes"
msgstr "Persistent Volumes" msgstr "Persistent Volumes"
#: src/renderer/components/+add-cluster/add-cluster.tsx:92 #: src/renderer/components/+add-cluster/add-cluster.tsx:106
msgid "Please select kube-config's context" msgid "Please select kube-config's context"
msgstr "" msgstr ""
@ -1852,6 +1852,14 @@ msgstr "Секрет приватного ключа"
msgid "Privileged" msgid "Privileged"
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:225
#~ msgid "Pro-tip: you can also drag-n-drop kube-config file in the left-side area"
#~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:229
msgid "Pro-tip: you can also drag-n-drop kube-config file to this area"
msgstr ""
#: src/renderer/components/+storage-classes/storage-class-details.tsx:28 #: src/renderer/components/+storage-classes/storage-class-details.tsx:28
#: src/renderer/components/+storage-classes/storage-classes.tsx:35 #: src/renderer/components/+storage-classes/storage-classes.tsx:35
msgid "Provisioner" msgid "Provisioner"
@ -1861,7 +1869,7 @@ msgstr "Комиссия"
msgid "Proxy is used only for non-cluster communication." msgid "Proxy is used only for non-cluster communication."
msgstr "" msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:234 #: src/renderer/components/+add-cluster/add-cluster.tsx:254
msgid "Proxy settings" msgid "Proxy settings"
msgstr "" msgstr ""
@ -2042,7 +2050,7 @@ msgstr ""
msgid "Required field" msgid "Required field"
msgstr "Обязательное поле" msgstr "Обязательное поле"
#: src/renderer/components/+add-cluster/add-cluster.tsx:209 #: src/renderer/components/+add-cluster/add-cluster.tsx:226
#: src/renderer/components/item-object-list/page-filters-list.tsx:31 #: src/renderer/components/item-object-list/page-filters-list.tsx:31
msgid "Reset" msgid "Reset"
msgstr "Сбросить" msgstr "Сбросить"
@ -2051,6 +2059,18 @@ msgstr "Сбросить"
msgid "Reset filters?" msgid "Reset filters?"
msgstr "Сбросить фильтры?" msgstr "Сбросить фильтры?"
#: src/renderer/components/+add-cluster/add-cluster.tsx:65
msgid "Resetting config to {0}"
msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:68
#~ msgid "Resetting kube-config to current {0}"
#~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:68
#~ msgid "Resetting kube-config to default: {kubeConfigDefaultPath}"
#~ msgstr ""
#: src/renderer/components/+custom-resources/crd-details.tsx:44 #: src/renderer/components/+custom-resources/crd-details.tsx:44
#: src/renderer/components/+custom-resources/crd-list.tsx:73 #: src/renderer/components/+custom-resources/crd-list.tsx:73
msgid "Resource" msgid "Resource"
@ -2246,7 +2266,7 @@ msgstr "Тип секрета"
msgid "Secrets" msgid "Secrets"
msgstr "Secrets" msgstr "Secrets"
#: src/renderer/components/+add-cluster/add-cluster.tsx:231 #: src/renderer/components/+add-cluster/add-cluster.tsx:251
msgid "Select a context" msgid "Select a context"
msgstr "" msgstr ""
@ -2258,8 +2278,8 @@ msgstr "Выберите квоту..."
#~ msgid "Select context" #~ msgid "Select context"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:62 #: src/renderer/components/+add-cluster/add-cluster.tsx:76
#: src/renderer/components/+add-cluster/add-cluster.tsx:62 #: src/renderer/components/+add-cluster/add-cluster.tsx:76
msgid "Select custom kube-config file" msgid "Select custom kube-config file"
msgstr "" msgstr ""
@ -2267,13 +2287,17 @@ msgstr ""
#~ msgid "Select file" #~ msgid "Select file"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:221
msgid "Select kube-config file"
msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:173 #: src/renderer/components/+add-cluster/add-cluster.tsx:173
#~ msgid "Select kubeconfig" #~ msgid "Select kubeconfig"
#~ msgstr "" #~ msgstr ""
#: src/renderer/components/+add-cluster/add-cluster.tsx:204 #: src/renderer/components/+add-cluster/add-cluster.tsx:224
msgid "Select or drop file" #~ msgid "Select or drop file"
msgstr "" #~ msgstr ""
#: src/renderer/components/+preferences/preferences.tsx:88 #: src/renderer/components/+preferences/preferences.tsx:88
#~ msgid "Select repository" #~ msgid "Select repository"
@ -2613,8 +2637,8 @@ msgstr "Обновить версию"
msgid "Usage" msgid "Usage"
msgstr "Использование" msgstr "Использование"
#: src/renderer/components/+add-cluster/add-cluster.tsx:63 #: src/renderer/components/+add-cluster/add-cluster.tsx:77
#: src/renderer/components/+add-cluster/add-cluster.tsx:63 #: src/renderer/components/+add-cluster/add-cluster.tsx:77
msgid "Use configuration" msgid "Use configuration"
msgstr "" msgstr ""

View File

@ -7,6 +7,10 @@
} }
} }
.hint {
margin-top: -$padding;
}
.Select { .Select {
.kube-context { .kube-context {
--flex-gap: #{$padding}; --flex-gap: #{$padding};

View File

@ -1,4 +1,5 @@
import "./add-cluster.scss" import "./add-cluster.scss"
import os from "os";
import React, { Fragment } from "react"; import React, { Fragment } from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { computed, observable } from "mobx"; import { computed, observable } from "mobx";
@ -23,10 +24,6 @@ import { cssNames } from "../../utils";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
import { Tab, Tabs } from "../tabs"; import { Tab, Tabs } from "../tabs";
// todo: improve UI/UX kube-config consuming: FILE (input + button) | PASTE TEXT (editor)
// todo: allow to manually input kube-config file path (edit + save on blur + auto-replace "~" => os.homedir()
// todo: allow to create multiple clusters at once (multi-select)
enum KubeConfigSourceTab { enum KubeConfigSourceTab {
FILE = "file", FILE = "file",
TEXT = "text" TEXT = "text"
@ -38,6 +35,7 @@ export class AddCluster extends React.Component {
@observable.ref newClusterConfig: KubeConfig; @observable.ref newClusterConfig: KubeConfig;
@observable.ref error: React.ReactNode; @observable.ref error: React.ReactNode;
@observable kubeConfigPath = "";
@observable sourceTab = KubeConfigSourceTab.FILE; @observable sourceTab = KubeConfigSourceTab.FILE;
@observable isWaiting = false @observable isWaiting = false
@observable showSettings = false @observable showSettings = false
@ -46,28 +44,45 @@ export class AddCluster extends React.Component {
@observable customConfig = "" @observable customConfig = ""
componentDidMount() { componentDidMount() {
this.kubeConfigPath = userStore.kubeConfigPath; this.setKubeConfig(userStore.kubeConfigPath);
} }
componentWillUnmount() { componentWillUnmount() {
userStore.markNewContextsAsSeen(); userStore.markNewContextsAsSeen();
} }
protected get kubeConfigPath() { protected setKubeConfig(filePath: string, { saveGlobal = true, throwError = false } = {}) {
return userStore.kubeConfigPath;
}
protected set kubeConfigPath(filePath: string) {
try { try {
const kubeConfig = loadConfig(filePath); const kubeConfig = loadConfig(filePath);
validateConfig(kubeConfig); validateConfig(kubeConfig);
this.kubeConfigPath = filePath;
this.localKubeConfig = kubeConfig; this.localKubeConfig = kubeConfig;
this.newClusterConfig = null; // reset previously selected this.newClusterConfig = null; // reset previously selected
userStore.kubeConfigPath = filePath; // save to store if (saveGlobal) {
userStore.kubeConfigPath = filePath; // save to store
}
} catch (err) { } catch (err) {
Notifications.error( Notifications.error(
<p>Can't read config file in <em>{filePath}</em>: {String(err)}</p> <p>Can't read config file in <em>{filePath}</em>: {String(err)}</p>
); );
if (throwError) {
throw err;
}
}
}
onKubeConfigInputBlur = () => {
const isChanged = this.kubeConfigPath !== userStore.kubeConfigPath;
if (isChanged) {
this.kubeConfigPath = this.kubeConfigPath.replace("~", os.homedir());
try {
this.setKubeConfig(this.kubeConfigPath, { throwError: true })
} catch (err) {
Notifications.info(<p>
<Trans>Resetting config to {userStore.kubeConfigPath}</Trans>
</p>, { timeout: 2500 });
this.setKubeConfig(userStore.kubeConfigPath);
}
} }
} }
@ -80,12 +95,12 @@ export class AddCluster extends React.Component {
buttonLabel: _i18n._(t`Use configuration`), buttonLabel: _i18n._(t`Use configuration`),
}); });
if (!canceled && filePaths.length) { if (!canceled && filePaths.length) {
this.kubeConfigPath = filePaths[0]; this.setKubeConfig(filePaths[0]);
} }
} }
resetKubeConfig = () => { resetKubeConfig = () => {
this.kubeConfigPath = kubeConfigDefaultPath; this.setKubeConfig(kubeConfigDefaultPath);
} }
@computed get clusterOptions() { @computed get clusterOptions() {
@ -119,7 +134,7 @@ export class AddCluster extends React.Component {
return label; return label;
}; };
// fixme: support adding multiple clusters // fixme: allow to create multiple clusters at once (multi-select)
addCluster = async () => { addCluster = async () => {
const { newClusterConfig, customConfig, proxyServer } = this; const { newClusterConfig, customConfig, proxyServer } = this;
const clusterId = uuid(); const clusterId = uuid();
@ -207,7 +222,7 @@ export class AddCluster extends React.Component {
<Tabs withBorder onChange={v => this.sourceTab = v}> <Tabs withBorder onChange={v => this.sourceTab = v}>
<Tab <Tab
value={KubeConfigSourceTab.FILE} value={KubeConfigSourceTab.FILE}
label={<Trans>Select or drop file</Trans>} label={<Trans>Select kube-config file</Trans>}
active={this.sourceTab == KubeConfigSourceTab.FILE}/> active={this.sourceTab == KubeConfigSourceTab.FILE}/>
<Tab <Tab
value={KubeConfigSourceTab.TEXT} value={KubeConfigSourceTab.TEXT}
@ -216,27 +231,32 @@ export class AddCluster extends React.Component {
/> />
</Tabs> </Tabs>
{this.sourceTab === KubeConfigSourceTab.FILE && ( {this.sourceTab === KubeConfigSourceTab.FILE && (
<div className="kube-config-select flex gaps align-center"> <>
<Input <div className="kube-config-select flex gaps align-center">
autoSelectOnFocus <Input
theme="round-black" theme="round-black"
className="kube-config-path box grow" className="kube-config-path box grow"
value={this.kubeConfigPath} value={this.kubeConfigPath}
onChange={value => console.log('change', value)} onChange={v => this.kubeConfigPath = v}
/> onBlur={this.onKubeConfigInputBlur}
{this.kubeConfigPath !== kubeConfigDefaultPath && (
<Icon
material="settings_backup_restore"
onClick={this.resetKubeConfig}
tooltip={<Trans>Reset</Trans>}
/> />
)} {this.kubeConfigPath !== kubeConfigDefaultPath && (
<Icon <Icon
material="folder" material="settings_backup_restore"
onClick={this.selectKubeConfig} onClick={this.resetKubeConfig}
tooltip={<Trans>Browse</Trans>} tooltip={<Trans>Reset</Trans>}
/> />
</div> )}
<Icon
material="folder"
onClick={this.selectKubeConfig}
tooltip={<Trans>Browse</Trans>}
/>
</div>
<small className="hint">
<Trans>Pro-tip: you can also drag-n-drop kube-config file to this area</Trans>
</small>
</>
)} )}
{this.sourceTab === KubeConfigSourceTab.TEXT && ( {this.sourceTab === KubeConfigSourceTab.TEXT && (
<AceEditor <AceEditor
@ -266,7 +286,7 @@ export class AddCluster extends React.Component {
}, },
onDrop: event => { onDrop: event => {
this.dropAreaActive = false this.dropAreaActive = false
this.kubeConfigPath = event.dataTransfer.files[0].path; this.setKubeConfig(event.dataTransfer.files[0].path)
} }
}} }}
> >

View File

@ -29,11 +29,12 @@ export class Notifications extends React.Component {
}); });
} }
static info(message: IMessage) { static info(message: IMessage, customOpts: Partial<INotification> = {}) {
return notificationsStore.add({ return notificationsStore.add({
message: message, status: "info",
timeout: 0, timeout: 0,
status: "info" message: message,
...customOpts,
}); });
} }