From febae16bbb057bf2fd29fc0c2e20ad0e1cdb80c2 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Thu, 25 May 2023 13:25:03 +0300 Subject: [PATCH] Removing table context. Pass columns through the props Signed-off-by: Alex Andreev --- .../components/item-object-list/content.tsx | 12 +++++------- .../components/item-object-list/list-layout.tsx | 5 +++++ .../kube-object-list-layout.tsx | 15 +++------------ packages/table/index.ts | 9 --------- packages/table/package.json | 3 +-- 5 files changed, 14 insertions(+), 30 deletions(-) diff --git a/packages/core/src/renderer/components/item-object-list/content.tsx b/packages/core/src/renderer/components/item-object-list/content.tsx index 14c65557c3..6e5c37dbb2 100644 --- a/packages/core/src/renderer/components/item-object-list/content.tsx +++ b/packages/core/src/renderer/components/item-object-list/content.tsx @@ -18,7 +18,7 @@ import type { AddRemoveButtonsProps } from "../add-remove-buttons"; import { AddRemoveButtons } from "../add-remove-buttons"; import { NoItems } from "../no-items"; 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 { LensTheme } from "../../themes/lens-theme"; 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 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 type { TableComponent, TableDataContextValue } from "@k8slens/table-tokens"; -import { TableDataContext, tableComponentInjectionToken } from "@k8slens/table-tokens"; +import type { TableComponent } from "@k8slens/table-tokens"; +import { tableComponentInjectionToken } from "@k8slens/table-tokens"; export interface ItemListLayoutContentProps { getFilters: () => Filter[]; @@ -56,6 +56,7 @@ export interface ItemListLayoutContentProps Partial>; addRemoveButtons?: Partial; virtual?: boolean; + columns?: GeneralKubeObjectListLayoutColumn[]; // item details view hasDetailsView?: boolean; @@ -89,9 +90,6 @@ class NonInjectedItemListLayoutContent< Item extends ItemObject, PreLoadStores extends boolean, > extends React.Component & Dependencies> { - static contextType = TableDataContext; - declare context: TableDataContextValue; - constructor(props: ItemListLayoutContentProps & Dependencies) { super(props); makeObservable(this); @@ -316,7 +314,7 @@ class NonInjectedItemListLayoutContent<
= (item: I) => SingleOrMany; export type SearchFilters = Record>; @@ -98,6 +101,7 @@ export type ItemListLayoutProps; customizeHeader?: HeaderCustomizer | HeaderCustomizer[]; + columns?: GeneralKubeObjectListLayoutColumn[]; // items list configuration isReady?: boolean; // show loading indicator while not ready @@ -304,6 +308,7 @@ class NonInjectedItemListLayout + columns={this.props.columns} getItems={() => this.items} getFilters={() => this.filters} tableId={this.props.tableId} diff --git a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx index 13140dacb7..87fd84504e 100644 --- a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx +++ b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx @@ -31,7 +31,6 @@ import type { ClusterContext } from "../../cluster-frame-context/cluster-frame-c import type { GeneralKubeObjectListLayoutColumn, SpecificKubeListLayoutColumn } from "@k8slens/list-layout"; import { kubeObjectListLayoutColumnInjectionToken } from "@k8slens/list-layout"; import { sortBy } from "lodash"; -import { TableDataContext } from "@k8slens/table-tokens"; export type KubeItemListStore = ItemListStore & SubscribableStore & { 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 A extends KubeApi, D extends KubeJsonApiDataFor, -> extends Omit, "getItems" | "dependentStores" | "preloadStores"> { +> extends Omit, "getItems" | "dependentStores" | "preloadStores" | "columns"> { items?: K[]; getItems?: () => K[]; store: KubeItemListStore; @@ -187,13 +186,14 @@ class NonInjectedKubeObjectListLayout< ...targetColumns, ], (v) => -v.priority).map((col) => col.header); - const itemsListLayout = ( + return ( className={cssNames("KubeObjectListLayout", className)} store={store} getItems={() => this.props.items || store.contextItems} preloadStores={false} // loading handled in kubeWatchApi.subscribeStores() detailsItem={this.selectedItem} + columns={targetColumns as GeneralKubeObjectListLayoutColumn[]} customizeHeader={[ ({ filters, searchProps, info, ...headerPlaceHolders }) => ({ filters: ( @@ -234,15 +234,6 @@ class NonInjectedKubeObjectListLayout< {...layoutProps} /> ); - - return ( - - {itemsListLayout} - - ); } } diff --git a/packages/table/index.ts b/packages/table/index.ts index 246ebf6df3..b6f785dfb2 100644 --- a/packages/table/index.ts +++ b/packages/table/index.ts @@ -5,7 +5,6 @@ import type { GeneralKubeObjectListLayoutColumn, SpecificKubeListLayoutColumn, } from "@k8slens/list-layout"; -import React from "react"; type Column = ( | BaseKubeObjectListLayoutColumn @@ -20,14 +19,6 @@ export interface TableComponentProps { load?: (tableId: string) => object; } -export interface TableDataContextValue { - columns?: Column[]; -} - -export const TableDataContext = React.createContext({ - columns: [], -}); - export interface TableComponent { Component: React.ComponentType; } diff --git a/packages/table/package.json b/packages/table/package.json index 44516a1436..5e8d5db658 100644 --- a/packages/table/package.json +++ b/packages/table/package.json @@ -23,7 +23,6 @@ "rimraf": "^4.4.1" }, "peerDependencies": { - "@ogre-tools/injectable": "^16.1.0", - "react": "^17.0.2" + "@ogre-tools/injectable": "^16.1.0" } }