1
0
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:
Roman 2022-12-30 15:10:28 +02:00
commit 4c88f295ec
8 changed files with 110 additions and 16 deletions

View File

@ -420,7 +420,7 @@ exports[`extensions - navigation using application menu when navigating to exten
<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>
</section>
<div>

View File

@ -10,7 +10,6 @@ import { autorun, makeObservable, observable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react";
import { DrawerTitle } from "../drawer";
import type { ShowNotification } from "../notifications";
import { Input } from "../input";
import { Button } from "../button";
import type { KubeObjectDetailsProps } from "../kube-object-details";
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 showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
import loggerInjectable from "../../../common/logger.injectable";
import { MonacoEditor } from "../monaco-editor";
export interface ConfigMapDetailsProps extends KubeObjectDetailsProps<ConfigMap> {
}
@ -99,18 +99,21 @@ class NonInjectedConfigMapDetails extends React.Component<ConfigMapDetailsProps
<>
<DrawerTitle>Data</DrawerTitle>
{
data.map(([name, value]) => (
data.map(([name, value = ""]) => (
<div key={name} className="data">
<div className="name">{name}</div>
<div className="flex gaps align-flex-start">
<Input
multiLine
theme="round-black"
className="box grow"
value={value}
onChange={v => this.data.set(name, v)}
/>
</div>
<MonacoEditor
id={`config-map-data-${name}`}
style={{
resize: "vertical",
overflow: "hidden",
border: "1px solid var(--borderFaintColor)",
borderRadius: "4px",
}}
value={value}
onChange={v => this.data.set(name, v)}
setInitialHeight
/>
</div>
))
}

View File

@ -89,7 +89,7 @@ const NonInjectedInstall: React.FC<Dependencies & InstallProps> = ({
</div>
<small className={styles.proTip}>
<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>
</section>
);

View File

@ -152,7 +152,7 @@ const NonInjectedInstalledExtensions = observer(({ extensionDiscovery, extension
<h3 className="font-medium text-3xl mt-5 mb-2">
There are no extensions installed.
</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>
);
}

View File

@ -11,7 +11,8 @@
> .Tabs {
background: var(--layoutTabsBackground);
min-height: 36px;
flex-shrink: 0;
height: 34px;
}
main {

View File

@ -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;

View File

@ -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);
});
});

View File

@ -18,6 +18,7 @@ import type { LensTheme } from "../../themes/lens-theme";
import { withInjectables } from "@ogre-tools/injectable-react";
import userStoreInjectable from "../../../common/user-store/user-store.injectable";
import activeThemeInjectable from "../../themes/active.injectable";
import getEditorHeightFromLinesCountInjectable from "./get-editor-height-from-lines-number.injectable";
export type MonacoEditorId = string;
@ -37,11 +38,13 @@ export interface MonacoEditorProps {
onDidContentSizeChange?(evt: editor.IContentSizeChangedEvent): void;
onModelChange?(model: editor.ITextModel, prev?: editor.ITextModel): void;
innerRef?: React.ForwardedRef<MonacoEditorRef>;
setInitialHeight?: boolean;
}
interface Dependencies {
userStore: UserStore;
activeTheme: IComputedValue<LensTheme>;
getEditorHeightFromLinesCount: (linesCount: number) => number;
}
export function createMonacoUri(id: MonacoEditorId): Uri {
@ -288,14 +291,23 @@ class NonInjectedMonacoEditor extends React.Component<MonacoEditorProps & Depend
// avoid excessive validations during typing
validateLazy = debounce(this.validate, 250);
get initialHeight() {
return this.props.getEditorHeightFromLinesCount(this.model.getLineCount());
}
render() {
const { className, style } = this.props;
const css: React.CSSProperties = {
...style,
height: style?.height ?? this.initialHeight,
};
return (
<div
data-test-id="monaco-editor"
className={cssNames(styles.MonacoEditor, className)}
style={style}
style={css}
ref={elem => this.containerElem = elem}
/>
);
@ -309,6 +321,7 @@ export const MonacoEditor = withInjectables<Dependencies, MonacoEditorProps, Mon
...props,
userStore: di.inject(userStoreInjectable),
activeTheme: di.inject(activeThemeInjectable),
getEditorHeightFromLinesCount: di.inject(getEditorHeightFromLinesCountInjectable),
}),
},
);