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

responding to comments

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2021-02-12 17:31:00 +02:00
parent e611a75b6d
commit 0a920cf743
4 changed files with 29 additions and 35 deletions

View File

@ -126,9 +126,9 @@ export class KubeObject implements ItemObject {
return new Date().getTime() - new Date(this.metadata.creationTimestamp).getTime(); return new Date().getTime() - new Date(this.metadata.creationTimestamp).getTime();
} }
getAge(humanize = true, compact = true, fromNow = false) { getAge(humanize = true, compact = true, fromNow = false): string | number {
if (fromNow) { if (fromNow) {
return moment(this.metadata.creationTimestamp).fromNow(); // "string" return moment(this.metadata.creationTimestamp).fromNow(); // "string", getTimeDiffFromNow() cannot be used
} }
const diff = this.getTimeDiffFromNow(); const diff = this.getTimeDiffFromNow();

View File

@ -1,10 +1,4 @@
.Events { .Events {
h5.title {
.events-count {
font-size: $font-size;
}
}
.Table { .Table {
.TableCell { .TableCell {
&.message { &.message {

View File

@ -9,6 +9,7 @@ import { EventStore, eventStore } from "./event.store";
import { getDetailsUrl, KubeObjectListLayout, KubeObjectListLayoutProps } from "../kube-object"; import { getDetailsUrl, KubeObjectListLayout, KubeObjectListLayoutProps } from "../kube-object";
import { KubeEvent } from "../../api/endpoints/events.api"; import { KubeEvent } from "../../api/endpoints/events.api";
import { TableSortCallbacks, TableSortParams } from "../table"; import { TableSortCallbacks, TableSortParams } from "../table";
import { IHeaderPlaceholders } from "../item-object-list";
import { Tooltip } from "../tooltip"; import { Tooltip } from "../tooltip";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { cssNames, IClassName, stopPropagation } from "../../utils"; import { cssNames, IClassName, stopPropagation } from "../../utils";
@ -76,23 +77,36 @@ export class Events extends React.Component<Props> {
return this.items; return this.items;
} }
@computed get header(): React.ReactNode { customizeHeader = ({ info, title }: IHeaderPlaceholders) => {
const { items, visibleItems } = this; const { compact } = this.props;
const { store, items, visibleItems } = this;
const allEventsAreShown = visibleItems.length === items.length; const allEventsAreShown = visibleItems.length === items.length;
if (this.props.compact && !allEventsAreShown) { // handle "compact"-mode header
if (compact) {
if (allEventsAreShown) return title; // title == "Events"
return <> return <>
Events <span className="events-count"> {title}
({visibleItems.length} of <Link to={eventsURL()}>{items.length}</Link>) <span> ({visibleItems.length} of <Link to={eventsURL()}>{items.length}</Link>)</span>
</span>
</>; </>;
} }
return <>Events</>; return {
} info: <>
{info}
<Icon
small
material="help_outline"
className="help-icon"
tooltip={`Limited to ${store.limit}`}
/>
</>
};
};
render() { render() {
const { store, visibleItems, header, sortingCallbacks, sorting } = this; const { store, visibleItems, sortingCallbacks, sorting } = this;
const { compact, compactLimit, className, ...layoutProps } = this.props; const { compact, compactLimit, className, ...layoutProps } = this.props;
const events = ( const events = (
@ -102,10 +116,11 @@ export class Events extends React.Component<Props> {
tableId="events" tableId="events"
store={store} store={store}
className={cssNames("Events", className, { compact })} className={cssNames("Events", className, { compact })}
renderHeaderTitle="Events"
customizeHeader={this.customizeHeader}
isSelectable={false} isSelectable={false}
items={visibleItems} items={visibleItems}
virtual={!compact} virtual={!compact}
renderHeaderTitle={header}
sortingCallbacks={sortingCallbacks} sortingCallbacks={sortingCallbacks}
tableProps={{ tableProps={{
sortSyncWithUrl: false, sortSyncWithUrl: false,
@ -118,21 +133,6 @@ export class Events extends React.Component<Props> {
(event: KubeEvent) => event.getSource(), (event: KubeEvent) => event.getSource(),
(event: KubeEvent) => event.involvedObject.name, (event: KubeEvent) => event.involvedObject.name,
]} ]}
customizeHeader={({ title, info }) => (
compact ? title : ({
info: (
<>
{info}
<Icon
small
material="help_outline"
className="help-icon"
tooltip={`Limited to ${store.limit}`}
/>
</>
)
})
)}
renderTableHeader={[ renderTableHeader={[
{ title: "Type", className: "type", sortBy: columnId.type, id: columnId.type }, { title: "Type", className: "type", sortBy: columnId.type, id: columnId.type },
{ title: "Message", className: "message", id: columnId.message }, { title: "Message", className: "message", id: columnId.message },

View File

@ -28,7 +28,7 @@ import { namespaceStore } from "../+namespaces/namespace.store";
export type SearchFilter<T extends ItemObject = any> = (item: T) => string | number | (string | number)[]; export type SearchFilter<T extends ItemObject = any> = (item: T) => string | number | (string | number)[];
export type ItemsFilter<T extends ItemObject = any> = (items: T[]) => T[]; export type ItemsFilter<T extends ItemObject = any> = (items: T[]) => T[];
interface IHeaderPlaceholders { export interface IHeaderPlaceholders {
title: ReactNode; title: ReactNode;
search: ReactNode; search: ReactNode;
filters: ReactNode; filters: ReactNode;
@ -372,7 +372,7 @@ export class ItemListLayout extends React.Component<ItemListLayoutProps> {
let header = this.renderHeaderContent(placeholders); let header = this.renderHeaderContent(placeholders);
if (customizeHeader) { if (customizeHeader) {
const modifiedHeader = customizeHeader(placeholders, header); const modifiedHeader = customizeHeader(placeholders, header) ?? {};
if (isReactNode(modifiedHeader)) { if (isReactNode(modifiedHeader)) {
header = modifiedHeader; header = modifiedHeader;