mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Removing table context. Pass columns through the props
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
6e5fc63953
commit
febae16bbb
@ -18,7 +18,7 @@ import type { AddRemoveButtonsProps } from "../add-remove-buttons";
|
|||||||
import { AddRemoveButtons } from "../add-remove-buttons";
|
import { AddRemoveButtons } from "../add-remove-buttons";
|
||||||
import { NoItems } from "../no-items";
|
import { NoItems } from "../no-items";
|
||||||
import { Spinner } from "../spinner";
|
import { Spinner } from "../spinner";
|
||||||
import type { ItemObject, TableCellProps } from "@k8slens/list-layout";
|
import type { GeneralKubeObjectListLayoutColumn, ItemObject, TableCellProps } from "@k8slens/list-layout";
|
||||||
import type { Filter, PageFiltersStore } from "./page-filters/store";
|
import type { Filter, PageFiltersStore } from "./page-filters/store";
|
||||||
import type { LensTheme } from "../../themes/lens-theme";
|
import type { LensTheme } from "../../themes/lens-theme";
|
||||||
import { MenuActions } from "../menu/menu-actions";
|
import { MenuActions } from "../menu/menu-actions";
|
||||||
@ -35,8 +35,8 @@ import type { ToggleTableColumnVisibility } from "../../../features/user-prefere
|
|||||||
import toggleTableColumnVisibilityInjectable from "../../../features/user-preferences/common/toggle-table-column-visibility.injectable";
|
import toggleTableColumnVisibilityInjectable from "../../../features/user-preferences/common/toggle-table-column-visibility.injectable";
|
||||||
import type { IsTableColumnHidden } from "../../../features/user-preferences/common/is-table-column-hidden.injectable";
|
import type { IsTableColumnHidden } from "../../../features/user-preferences/common/is-table-column-hidden.injectable";
|
||||||
import isTableColumnHiddenInjectable from "../../../features/user-preferences/common/is-table-column-hidden.injectable";
|
import isTableColumnHiddenInjectable from "../../../features/user-preferences/common/is-table-column-hidden.injectable";
|
||||||
import type { TableComponent, TableDataContextValue } from "@k8slens/table-tokens";
|
import type { TableComponent } from "@k8slens/table-tokens";
|
||||||
import { TableDataContext, tableComponentInjectionToken } from "@k8slens/table-tokens";
|
import { tableComponentInjectionToken } from "@k8slens/table-tokens";
|
||||||
|
|
||||||
export interface ItemListLayoutContentProps<Item extends ItemObject, PreLoadStores extends boolean> {
|
export interface ItemListLayoutContentProps<Item extends ItemObject, PreLoadStores extends boolean> {
|
||||||
getFilters: () => Filter[];
|
getFilters: () => Filter[];
|
||||||
@ -56,6 +56,7 @@ export interface ItemListLayoutContentProps<Item extends ItemObject, PreLoadStor
|
|||||||
customizeTableRowProps?: (item: Item) => Partial<TableRowProps<Item>>;
|
customizeTableRowProps?: (item: Item) => Partial<TableRowProps<Item>>;
|
||||||
addRemoveButtons?: Partial<AddRemoveButtonsProps>;
|
addRemoveButtons?: Partial<AddRemoveButtonsProps>;
|
||||||
virtual?: boolean;
|
virtual?: boolean;
|
||||||
|
columns?: GeneralKubeObjectListLayoutColumn[];
|
||||||
|
|
||||||
// item details view
|
// item details view
|
||||||
hasDetailsView?: boolean;
|
hasDetailsView?: boolean;
|
||||||
@ -89,9 +90,6 @@ class NonInjectedItemListLayoutContent<
|
|||||||
Item extends ItemObject,
|
Item extends ItemObject,
|
||||||
PreLoadStores extends boolean,
|
PreLoadStores extends boolean,
|
||||||
> extends React.Component<ItemListLayoutContentProps<Item, PreLoadStores> & Dependencies> {
|
> extends React.Component<ItemListLayoutContentProps<Item, PreLoadStores> & Dependencies> {
|
||||||
static contextType = TableDataContext;
|
|
||||||
declare context: TableDataContextValue;
|
|
||||||
|
|
||||||
constructor(props: ItemListLayoutContentProps<Item, PreLoadStores> & Dependencies) {
|
constructor(props: ItemListLayoutContentProps<Item, PreLoadStores> & Dependencies) {
|
||||||
super(props);
|
super(props);
|
||||||
makeObservable(this);
|
makeObservable(this);
|
||||||
@ -316,7 +314,7 @@ class NonInjectedItemListLayoutContent<
|
|||||||
<div className="items box grow flex column">
|
<div className="items box grow flex column">
|
||||||
<table.Component
|
<table.Component
|
||||||
tableId={tableId}
|
tableId={tableId}
|
||||||
columns={this.context.columns}
|
columns={this.props.columns}
|
||||||
virtual={virtual}
|
virtual={virtual}
|
||||||
selectable={hasDetailsView}
|
selectable={hasDetailsView}
|
||||||
sortable={sortingCallbacks}
|
sortable={sortingCallbacks}
|
||||||
|
|||||||
@ -31,6 +31,9 @@ import selectedFilterNamespacesInjectable from "../../../common/k8s-api/selected
|
|||||||
import pageFiltersStoreInjectable from "./page-filters/store.injectable";
|
import pageFiltersStoreInjectable from "./page-filters/store.injectable";
|
||||||
import type { StorageLayer } from "../../utils/storage-helper";
|
import type { StorageLayer } from "../../utils/storage-helper";
|
||||||
import autoBindReact from "auto-bind/react";
|
import autoBindReact from "auto-bind/react";
|
||||||
|
import type {
|
||||||
|
GeneralKubeObjectListLayoutColumn
|
||||||
|
} from "@k8slens/list-layout";
|
||||||
|
|
||||||
export type SearchFilter<I extends ItemObject> = (item: I) => SingleOrMany<string | number | undefined | null>;
|
export type SearchFilter<I extends ItemObject> = (item: I) => SingleOrMany<string | number | undefined | null>;
|
||||||
export type SearchFilters<I extends ItemObject> = Record<string, SearchFilter<I>>;
|
export type SearchFilters<I extends ItemObject> = Record<string, SearchFilter<I>>;
|
||||||
@ -98,6 +101,7 @@ export type ItemListLayoutProps<Item extends ItemObject, PreLoadStores extends b
|
|||||||
headerClassName?: IClassName;
|
headerClassName?: IClassName;
|
||||||
renderHeaderTitle?: RenderHeaderTitle<Item, PreLoadStores>;
|
renderHeaderTitle?: RenderHeaderTitle<Item, PreLoadStores>;
|
||||||
customizeHeader?: HeaderCustomizer | HeaderCustomizer[];
|
customizeHeader?: HeaderCustomizer | HeaderCustomizer[];
|
||||||
|
columns?: GeneralKubeObjectListLayoutColumn[];
|
||||||
|
|
||||||
// items list configuration
|
// items list configuration
|
||||||
isReady?: boolean; // show loading indicator while not ready
|
isReady?: boolean; // show loading indicator while not ready
|
||||||
@ -304,6 +308,7 @@ class NonInjectedItemListLayout<I extends ItemObject, PreLoadStores extends bool
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<ItemListLayoutContent<I, PreLoadStores>
|
<ItemListLayoutContent<I, PreLoadStores>
|
||||||
|
columns={this.props.columns}
|
||||||
getItems={() => this.items}
|
getItems={() => this.items}
|
||||||
getFilters={() => this.filters}
|
getFilters={() => this.filters}
|
||||||
tableId={this.props.tableId}
|
tableId={this.props.tableId}
|
||||||
|
|||||||
@ -31,7 +31,6 @@ import type { ClusterContext } from "../../cluster-frame-context/cluster-frame-c
|
|||||||
import type { GeneralKubeObjectListLayoutColumn, SpecificKubeListLayoutColumn } from "@k8slens/list-layout";
|
import type { GeneralKubeObjectListLayoutColumn, SpecificKubeListLayoutColumn } from "@k8slens/list-layout";
|
||||||
import { kubeObjectListLayoutColumnInjectionToken } from "@k8slens/list-layout";
|
import { kubeObjectListLayoutColumnInjectionToken } from "@k8slens/list-layout";
|
||||||
import { sortBy } from "lodash";
|
import { sortBy } from "lodash";
|
||||||
import { TableDataContext } from "@k8slens/table-tokens";
|
|
||||||
|
|
||||||
export type KubeItemListStore<K extends KubeObject> = ItemListStore<K, false> & SubscribableStore & {
|
export type KubeItemListStore<K extends KubeObject> = ItemListStore<K, false> & SubscribableStore & {
|
||||||
getByPath: (path: string) => K | undefined;
|
getByPath: (path: string) => K | undefined;
|
||||||
@ -43,7 +42,7 @@ export interface KubeObjectListLayoutProps<
|
|||||||
// eslint-disable-next-line unused-imports/no-unused-vars-ts, @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line unused-imports/no-unused-vars-ts, @typescript-eslint/no-unused-vars
|
||||||
A extends KubeApi<K, D>,
|
A extends KubeApi<K, D>,
|
||||||
D extends KubeJsonApiDataFor<K>,
|
D extends KubeJsonApiDataFor<K>,
|
||||||
> extends Omit<ItemListLayoutProps<K, false>, "getItems" | "dependentStores" | "preloadStores"> {
|
> extends Omit<ItemListLayoutProps<K, false>, "getItems" | "dependentStores" | "preloadStores" | "columns"> {
|
||||||
items?: K[];
|
items?: K[];
|
||||||
getItems?: () => K[];
|
getItems?: () => K[];
|
||||||
store: KubeItemListStore<K>;
|
store: KubeItemListStore<K>;
|
||||||
@ -187,13 +186,14 @@ class NonInjectedKubeObjectListLayout<
|
|||||||
...targetColumns,
|
...targetColumns,
|
||||||
], (v) => -v.priority).map((col) => col.header);
|
], (v) => -v.priority).map((col) => col.header);
|
||||||
|
|
||||||
const itemsListLayout = (
|
return (
|
||||||
<ItemListLayout<K, false>
|
<ItemListLayout<K, false>
|
||||||
className={cssNames("KubeObjectListLayout", className)}
|
className={cssNames("KubeObjectListLayout", className)}
|
||||||
store={store}
|
store={store}
|
||||||
getItems={() => this.props.items || store.contextItems}
|
getItems={() => this.props.items || store.contextItems}
|
||||||
preloadStores={false} // loading handled in kubeWatchApi.subscribeStores()
|
preloadStores={false} // loading handled in kubeWatchApi.subscribeStores()
|
||||||
detailsItem={this.selectedItem}
|
detailsItem={this.selectedItem}
|
||||||
|
columns={targetColumns as GeneralKubeObjectListLayoutColumn[]}
|
||||||
customizeHeader={[
|
customizeHeader={[
|
||||||
({ filters, searchProps, info, ...headerPlaceHolders }) => ({
|
({ filters, searchProps, info, ...headerPlaceHolders }) => ({
|
||||||
filters: (
|
filters: (
|
||||||
@ -234,15 +234,6 @@ class NonInjectedKubeObjectListLayout<
|
|||||||
{...layoutProps}
|
{...layoutProps}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
|
||||||
<TableDataContext.Provider
|
|
||||||
value={{
|
|
||||||
columns: targetColumns as GeneralKubeObjectListLayoutColumn[],
|
|
||||||
}}>
|
|
||||||
{itemsListLayout}
|
|
||||||
</TableDataContext.Provider>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import type {
|
|||||||
GeneralKubeObjectListLayoutColumn,
|
GeneralKubeObjectListLayoutColumn,
|
||||||
SpecificKubeListLayoutColumn,
|
SpecificKubeListLayoutColumn,
|
||||||
} from "@k8slens/list-layout";
|
} from "@k8slens/list-layout";
|
||||||
import React from "react";
|
|
||||||
|
|
||||||
type Column = (
|
type Column = (
|
||||||
| BaseKubeObjectListLayoutColumn<KubeObject>
|
| BaseKubeObjectListLayoutColumn<KubeObject>
|
||||||
@ -20,14 +19,6 @@ export interface TableComponentProps {
|
|||||||
load?: (tableId: string) => object;
|
load?: (tableId: string) => object;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TableDataContextValue {
|
|
||||||
columns?: Column[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export const TableDataContext = React.createContext<TableDataContextValue>({
|
|
||||||
columns: [],
|
|
||||||
});
|
|
||||||
|
|
||||||
export interface TableComponent {
|
export interface TableComponent {
|
||||||
Component: React.ComponentType<TableComponentProps>;
|
Component: React.ComponentType<TableComponentProps>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,6 @@
|
|||||||
"rimraf": "^4.4.1"
|
"rimraf": "^4.4.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ogre-tools/injectable": "^16.1.0",
|
"@ogre-tools/injectable": "^16.1.0"
|
||||||
"react": "^17.0.2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user