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:
parent
e611a75b6d
commit
0a920cf743
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
.Events {
|
.Events {
|
||||||
h5.title {
|
|
||||||
.events-count {
|
|
||||||
font-size: $font-size;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.Table {
|
.Table {
|
||||||
.TableCell {
|
.TableCell {
|
||||||
&.message {
|
&.message {
|
||||||
|
|||||||
@ -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 },
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user