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

Fine-tuning Extensions view

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2021-03-23 15:16:16 +03:00
parent 848953d224
commit d77c22689b
2 changed files with 74 additions and 64 deletions

View File

@ -1,10 +1,5 @@
.PageLayout.Extensions { .PageLayout.Extensions {
$spacing: $padding * 2; $spacing: $padding * 2;
--width: 50%;
h2 {
margin-bottom: $padding;
}
.no-extensions { .no-extensions {
--flex-gap: #{$padding}; --flex-gap: #{$padding};
@ -16,17 +11,28 @@
} }
.install-extension { .install-extension {
margin: $spacing * 2 0; margin-bottom: $padding * 4;
} }
.installed-extensions { .installed-extensions {
--flex-gap: #{$spacing}; --flex-gap: #{$spacing};
.extension { .extension {
--flex-gap: #{$padding / 2};
padding: $padding $spacing; padding: $padding $spacing;
background: $layoutBackground; background: $layoutBackground;
border-radius: $radius; border-radius: $radius;
.contents {
padding-right: $padding * 2;
.Badge {
font-size: smaller;
overflow: visible;
}
}
.actions > button:not(:last-child) { .actions > button:not(:last-child) {
margin-right: $spacing / 2; margin-right: $spacing / 2;
} }
@ -42,10 +48,8 @@
} }
} }
.SearchInput { .SearchInput > label .Icon {
--spacing: 10px; height: 21px; // conform with icons within Install input
max-width: none;
} }
} }

View File

@ -12,12 +12,12 @@ import { extensionLoader } from "../../../extensions/extension-loader";
import { extensionDisplayName, LensExtensionManifest, sanitizeExtensionName } from "../../../extensions/lens-extension"; import { extensionDisplayName, LensExtensionManifest, sanitizeExtensionName } from "../../../extensions/lens-extension";
import logger from "../../../main/logger"; import logger from "../../../main/logger";
import { prevDefault } from "../../utils"; import { prevDefault } from "../../utils";
import { Badge } from "../badge";
import { Button } from "../button"; import { Button } from "../button";
import { ConfirmDialog } from "../confirm-dialog"; import { ConfirmDialog } from "../confirm-dialog";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { DropFileInput, Input, InputValidator, InputValidators, SearchInput } from "../input"; import { DropFileInput, Input, InputValidator, InputValidators, SearchInput } from "../input";
import { PageLayout } from "../layout/page-layout"; import { PageLayout } from "../layout/page-layout";
import { SubTitle } from "../layout/sub-title";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
import { Spinner } from "../spinner/spinner"; import { Spinner } from "../spinner/spinner";
import { TooltipPosition } from "../tooltip"; import { TooltipPosition } from "../tooltip";
@ -449,9 +449,11 @@ export class Extensions extends React.Component {
return ( return (
<div key={id} className="extension flex gaps align-center"> <div key={id} className="extension flex gaps align-center">
<div className="box grow"> <div className="contents box grow">
<h5>{name}</h5> <div className="flex gaps align-center">
<h6>{version}</h6> <h5 className="extension-name">{name}</h5>
<Badge label={version}/>
</div>
<p>{description}</p> <p>{description}</p>
</div> </div>
<div className="actions"> <div className="actions">
@ -482,20 +484,20 @@ export class Extensions extends React.Component {
} }
render() { render() {
const topHeader = <h2>Manage Lens Extensions</h2>; const topHeader = <h1>Lens Extensions</h1>;
const { installPath } = this; const { installPath } = this;
return ( return (
<DropFileInput onDropFiles={this.installOnDrop}> <DropFileInput onDropFiles={this.installOnDrop}>
<PageLayout showOnTop className="Extensions" header={topHeader} contentGaps={false}> <PageLayout showOnTop className="Extensions" header={topHeader} contentGaps={false}>
<h2>Lens Extensions</h2> <section>
<h1>Extensions</h1>
<div> <div>
Add new features and functionality via Lens Extensions. Add new features and functionality via Lens Extensions.
Check out documentation to <a href={`${docsUrl}/latest/extensions/usage/`} target="_blank" rel="noreferrer">learn more</a> or see the list of <a href="https://github.com/lensapp/lens-extensions/blob/main/README.md" target="_blank" rel="noreferrer">available extensions</a>. Check out documentation to <a href={`${docsUrl}/latest/extensions/usage/`} target="_blank" rel="noreferrer">learn more</a> or see the list of <a href="https://github.com/lensapp/lens-extensions/blob/main/README.md" target="_blank" rel="noreferrer">available extensions</a>.
</div> </div>
<section className="install-extension">
<div className="install-extension flex column gaps"> <h2>Install</h2>
<SubTitle title="Install Extension:"/>
<div className="extension-input flex box gaps align-center"> <div className="extension-input flex box gaps align-center">
<Input <Input
className="box grow" className="box grow"
@ -528,17 +530,21 @@ export class Extensions extends React.Component {
<small className="hint"> <small className="hint">
<b>Pro-Tip</b>: you can also drag-n-drop tarball-file to this area <b>Pro-Tip</b>: you can also drag-n-drop tarball-file to this area
</small> </small>
</div> </section>
<section>
<h2>Installed Extensions</h2> <h2>Installed Extensions</h2>
<div className="installed-extensions flex column gaps"> <div className="installed-extensions flex column gaps">
<SearchInput <SearchInput
theme="round-black"
placeholder="Search installed extensions by name or description" placeholder="Search installed extensions by name or description"
value={this.search} value={this.search}
onChange={(value) => this.search = value} onChange={(value) => this.search = value}
/> />
{extensionDiscovery.isLoaded ? this.renderExtensions() : <div className="spinner-wrapper"><Spinner/></div>} {extensionDiscovery.isLoaded ? this.renderExtensions() : <div className="spinner-wrapper"><Spinner/></div>}
</div> </div>
</section>
</section>
</PageLayout> </PageLayout>
</DropFileInput> </DropFileInput>
); );