mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Move store subscription to injectable
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
c22eb14e91
commit
6406ffabfd
@ -29,9 +29,10 @@ import nodeApiInjectable from "../../../common/k8s-api/endpoints/node.api.inject
|
|||||||
import eventStoreInjectable from "../+events/store.injectable";
|
import eventStoreInjectable from "../+events/store.injectable";
|
||||||
import podStoreInjectable from "./store.injectable";
|
import podStoreInjectable from "./store.injectable";
|
||||||
import { List } from "../list/list";
|
import { List } from "../list/list";
|
||||||
import { createColumnHelper, getCoreRowModel } from '@tanstack/react-table'
|
import { ColumnDef, createColumnHelper, getCoreRowModel } from '@tanstack/react-table'
|
||||||
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribableStore, SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeToStoresDisposersInjectable from "../../kube-watch-api/subscribe-to-stores-disposers.injectable";
|
||||||
|
|
||||||
enum columnId {
|
enum columnId {
|
||||||
name = "name",
|
name = "name",
|
||||||
@ -51,7 +52,7 @@ interface Dependencies {
|
|||||||
eventStore: EventStore;
|
eventStore: EventStore;
|
||||||
podStore: PodStore;
|
podStore: PodStore;
|
||||||
nodeApi: NodeApi;
|
nodeApi: NodeApi;
|
||||||
subscribeToStores: SubscribeStores;
|
subscribeToWatchStores: SubscribeStores;
|
||||||
}
|
}
|
||||||
|
|
||||||
const columnHelper = createColumnHelper<Pod>()
|
const columnHelper = createColumnHelper<Pod>()
|
||||||
@ -59,16 +60,9 @@ const columnHelper = createColumnHelper<Pod>()
|
|||||||
@observer
|
@observer
|
||||||
class NonInjectedPods extends React.Component<Dependencies> {
|
class NonInjectedPods extends React.Component<Dependencies> {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { podStore, eventStore, subscribeToStores } = this.props;
|
const storeDisposer = this.props.subscribeToWatchStores([this.props.podStore, this.props.eventStore]);
|
||||||
const stores = Array.from(new Set([podStore, eventStore]));
|
|
||||||
|
|
||||||
const reactions: Disposer[] = [];
|
disposeOnUnmount(this, storeDisposer)
|
||||||
|
|
||||||
reactions.push(
|
|
||||||
subscribeToStores(stores),
|
|
||||||
);
|
|
||||||
|
|
||||||
disposeOnUnmount(this, reactions);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
renderState<T extends string>(name: string, ready: boolean, key: string, data: Partial<Record<T, string | number>> | undefined) {
|
renderState<T extends string>(name: string, ready: boolean, key: string, data: Partial<Record<T, string | number>> | undefined) {
|
||||||
@ -162,6 +156,27 @@ class NonInjectedPods extends React.Component<Dependencies> {
|
|||||||
render() {
|
render() {
|
||||||
const { podStore } = this.props;
|
const { podStore } = this.props;
|
||||||
|
|
||||||
|
// const cols = React.useMemo<ColumnDef<Pod>[]>(() => ([
|
||||||
|
// {
|
||||||
|
// header: "Name",
|
||||||
|
// cell: (pod) => pod.getValue()
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// id: "warning",
|
||||||
|
// cell: props => <KubeObjectStatusIcon key="icon" object={props.row.original} />,
|
||||||
|
// enableSorting: false,
|
||||||
|
// enableResizing: false,
|
||||||
|
// minSize: 30,
|
||||||
|
// size: 30
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// header: "Namespace",
|
||||||
|
// cell: info => info.getValue(),
|
||||||
|
// minSize: 110
|
||||||
|
// },
|
||||||
|
|
||||||
|
// ]), []);
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
columnHelper.accessor(row => row.getName(), {
|
columnHelper.accessor(row => row.getName(), {
|
||||||
id: "name",
|
id: "name",
|
||||||
@ -340,6 +355,6 @@ export const Pods = withInjectables<Dependencies>(NonInjectedPods, {
|
|||||||
nodeApi: di.inject(nodeApiInjectable),
|
nodeApi: di.inject(nodeApiInjectable),
|
||||||
eventStore: di.inject(eventStoreInjectable),
|
eventStore: di.inject(eventStoreInjectable),
|
||||||
podStore: di.inject(podStoreInjectable),
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeToStores: di.inject(subscribeStoresInjectable),
|
subscribeToWatchStores: di.inject(subscribeToStoresDisposersInjectable)
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import type { SubscribableStore } from "../kube-watch-api/kube-watch-api";
|
||||||
|
import type { Disposer } from "../utils";
|
||||||
|
import subscribeStoresInjectable from "./subscribe-stores.injectable";
|
||||||
|
|
||||||
|
const subscribeToStoresDisposersInjectable = getInjectable({
|
||||||
|
id: "subscribe-to-stores-disposers",
|
||||||
|
causesSideEffects: true,
|
||||||
|
instantiate: (di) => {
|
||||||
|
const subscribe = di.inject(subscribeStoresInjectable);
|
||||||
|
|
||||||
|
return (stores: SubscribableStore[]) => {
|
||||||
|
const disposer: Disposer = subscribe(stores, {
|
||||||
|
onLoadFailure: error => {
|
||||||
|
console.warn("Failed to load store: ", error);
|
||||||
|
// TODO: Show notification
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
return () => disposer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default subscribeToStoresDisposersInjectable;
|
||||||
Loading…
Reference in New Issue
Block a user