mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Merge remote-tracking branch 'origin/master' into feature/ingress_class_api_view
This commit is contained in:
commit
4c88f295ec
@ -420,7 +420,7 @@ exports[`extensions - navigation using application menu when navigating to exten
|
|||||||
<b>
|
<b>
|
||||||
Pro-Tip
|
Pro-Tip
|
||||||
</b>
|
</b>
|
||||||
: you can drag-n-drop tarball-file to this area
|
: you can drag and drop a tarball file to this area
|
||||||
</small>
|
</small>
|
||||||
</section>
|
</section>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import { autorun, makeObservable, observable } from "mobx";
|
|||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { DrawerTitle } from "../drawer";
|
import { DrawerTitle } from "../drawer";
|
||||||
import type { ShowNotification } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { Input } from "../input";
|
|
||||||
import { Button } from "../button";
|
import { Button } from "../button";
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import { ConfigMap } from "../../../common/k8s-api/endpoints";
|
import { ConfigMap } from "../../../common/k8s-api/endpoints";
|
||||||
@ -21,6 +20,7 @@ import configMapStoreInjectable from "./store.injectable";
|
|||||||
import showSuccessNotificationInjectable from "../notifications/show-success-notification.injectable";
|
import showSuccessNotificationInjectable from "../notifications/show-success-notification.injectable";
|
||||||
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
import { MonacoEditor } from "../monaco-editor";
|
||||||
|
|
||||||
export interface ConfigMapDetailsProps extends KubeObjectDetailsProps<ConfigMap> {
|
export interface ConfigMapDetailsProps extends KubeObjectDetailsProps<ConfigMap> {
|
||||||
}
|
}
|
||||||
@ -99,18 +99,21 @@ class NonInjectedConfigMapDetails extends React.Component<ConfigMapDetailsProps
|
|||||||
<>
|
<>
|
||||||
<DrawerTitle>Data</DrawerTitle>
|
<DrawerTitle>Data</DrawerTitle>
|
||||||
{
|
{
|
||||||
data.map(([name, value]) => (
|
data.map(([name, value = ""]) => (
|
||||||
<div key={name} className="data">
|
<div key={name} className="data">
|
||||||
<div className="name">{name}</div>
|
<div className="name">{name}</div>
|
||||||
<div className="flex gaps align-flex-start">
|
<MonacoEditor
|
||||||
<Input
|
id={`config-map-data-${name}`}
|
||||||
multiLine
|
style={{
|
||||||
theme="round-black"
|
resize: "vertical",
|
||||||
className="box grow"
|
overflow: "hidden",
|
||||||
value={value}
|
border: "1px solid var(--borderFaintColor)",
|
||||||
onChange={v => this.data.set(name, v)}
|
borderRadius: "4px",
|
||||||
/>
|
}}
|
||||||
</div>
|
value={value}
|
||||||
|
onChange={v => this.data.set(name, v)}
|
||||||
|
setInitialHeight
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,7 +89,7 @@ const NonInjectedInstall: React.FC<Dependencies & InstallProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
<small className={styles.proTip}>
|
<small className={styles.proTip}>
|
||||||
<b>Pro-Tip</b>
|
<b>Pro-Tip</b>
|
||||||
: you can drag-n-drop tarball-file to this area
|
: you can drag and drop a tarball file to this area
|
||||||
</small>
|
</small>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -152,7 +152,7 @@ const NonInjectedInstalledExtensions = observer(({ extensionDiscovery, extension
|
|||||||
<h3 className="font-medium text-3xl mt-5 mb-2">
|
<h3 className="font-medium text-3xl mt-5 mb-2">
|
||||||
There are no extensions installed.
|
There are no extensions installed.
|
||||||
</h3>
|
</h3>
|
||||||
<p>Please use the form above to install or drag tarbar-file here.</p>
|
<p>Please use the form above to install or drag a tarball file here.</p>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,8 @@
|
|||||||
|
|
||||||
> .Tabs {
|
> .Tabs {
|
||||||
background: var(--layoutTabsBackground);
|
background: var(--layoutTabsBackground);
|
||||||
min-height: 36px;
|
flex-shrink: 0;
|
||||||
|
height: 34px;
|
||||||
}
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
|
|||||||
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* 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";
|
||||||
|
|
||||||
|
const getEditorHeightFromLinesCountInjectable = getInjectable({
|
||||||
|
id: "get-editor-height-from-lines-number",
|
||||||
|
|
||||||
|
instantiate: () => {
|
||||||
|
return (linesCount: number) => {
|
||||||
|
if (typeof linesCount !== "number") {
|
||||||
|
throw new Error("linesNumber must be a number");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (linesCount < 10) {
|
||||||
|
return 90;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (linesCount < 20) {
|
||||||
|
return 180;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 360;
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default getEditorHeightFromLinesCountInjectable;
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
|
import getEditorHeightFromLinesCountInjectable from "./get-editor-height-from-lines-number.injectable";
|
||||||
|
|
||||||
|
describe("get-editor-height-from-lines-number", () => {
|
||||||
|
let getEditorHeightFromLinesNumber: (linesCount: number) => number;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
const di = getDiForUnitTesting({ doGeneralOverrides: false });
|
||||||
|
|
||||||
|
getEditorHeightFromLinesNumber = di.inject(getEditorHeightFromLinesCountInjectable);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given linesCount is less than 10, when called, returns small number", () => {
|
||||||
|
const actual = getEditorHeightFromLinesNumber(9);
|
||||||
|
|
||||||
|
expect(actual).toBe(90);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given linesCount is equal to 10, when called, returns medium number", () => {
|
||||||
|
const actual = getEditorHeightFromLinesNumber(10);
|
||||||
|
|
||||||
|
expect(actual).toBe(180);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given linesCount is greater than 10 and less than 20, when called, returns medium number", () => {
|
||||||
|
const actual = getEditorHeightFromLinesNumber(19);
|
||||||
|
|
||||||
|
expect(actual).toBe(180);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given linesCount is equal to 20, when called, returns large number", () => {
|
||||||
|
const actual = getEditorHeightFromLinesNumber(20);
|
||||||
|
|
||||||
|
expect(actual).toBe(360);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given linesCount is greater than 20, when called, returns large number", () => {
|
||||||
|
const actual = getEditorHeightFromLinesNumber(21);
|
||||||
|
|
||||||
|
expect(actual).toBe(360);
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -18,6 +18,7 @@ import type { LensTheme } from "../../themes/lens-theme";
|
|||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import userStoreInjectable from "../../../common/user-store/user-store.injectable";
|
import userStoreInjectable from "../../../common/user-store/user-store.injectable";
|
||||||
import activeThemeInjectable from "../../themes/active.injectable";
|
import activeThemeInjectable from "../../themes/active.injectable";
|
||||||
|
import getEditorHeightFromLinesCountInjectable from "./get-editor-height-from-lines-number.injectable";
|
||||||
|
|
||||||
export type MonacoEditorId = string;
|
export type MonacoEditorId = string;
|
||||||
|
|
||||||
@ -37,11 +38,13 @@ export interface MonacoEditorProps {
|
|||||||
onDidContentSizeChange?(evt: editor.IContentSizeChangedEvent): void;
|
onDidContentSizeChange?(evt: editor.IContentSizeChangedEvent): void;
|
||||||
onModelChange?(model: editor.ITextModel, prev?: editor.ITextModel): void;
|
onModelChange?(model: editor.ITextModel, prev?: editor.ITextModel): void;
|
||||||
innerRef?: React.ForwardedRef<MonacoEditorRef>;
|
innerRef?: React.ForwardedRef<MonacoEditorRef>;
|
||||||
|
setInitialHeight?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
userStore: UserStore;
|
userStore: UserStore;
|
||||||
activeTheme: IComputedValue<LensTheme>;
|
activeTheme: IComputedValue<LensTheme>;
|
||||||
|
getEditorHeightFromLinesCount: (linesCount: number) => number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createMonacoUri(id: MonacoEditorId): Uri {
|
export function createMonacoUri(id: MonacoEditorId): Uri {
|
||||||
@ -288,14 +291,23 @@ class NonInjectedMonacoEditor extends React.Component<MonacoEditorProps & Depend
|
|||||||
// avoid excessive validations during typing
|
// avoid excessive validations during typing
|
||||||
validateLazy = debounce(this.validate, 250);
|
validateLazy = debounce(this.validate, 250);
|
||||||
|
|
||||||
|
get initialHeight() {
|
||||||
|
return this.props.getEditorHeightFromLinesCount(this.model.getLineCount());
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { className, style } = this.props;
|
const { className, style } = this.props;
|
||||||
|
|
||||||
|
const css: React.CSSProperties = {
|
||||||
|
...style,
|
||||||
|
height: style?.height ?? this.initialHeight,
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
data-test-id="monaco-editor"
|
data-test-id="monaco-editor"
|
||||||
className={cssNames(styles.MonacoEditor, className)}
|
className={cssNames(styles.MonacoEditor, className)}
|
||||||
style={style}
|
style={css}
|
||||||
ref={elem => this.containerElem = elem}
|
ref={elem => this.containerElem = elem}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
@ -309,6 +321,7 @@ export const MonacoEditor = withInjectables<Dependencies, MonacoEditorProps, Mon
|
|||||||
...props,
|
...props,
|
||||||
userStore: di.inject(userStoreInjectable),
|
userStore: di.inject(userStoreInjectable),
|
||||||
activeTheme: di.inject(activeThemeInjectable),
|
activeTheme: di.inject(activeThemeInjectable),
|
||||||
|
getEditorHeightFromLinesCount: di.inject(getEditorHeightFromLinesCountInjectable),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user