diff --git a/src/common/k8s-api/kube-object.store.ts b/src/common/k8s-api/kube-object.store.ts index c7681dced3..16f9c6457f 100644 --- a/src/common/k8s-api/kube-object.store.ts +++ b/src/common/k8s-api/kube-object.store.ts @@ -184,7 +184,17 @@ export abstract class KubeObjectStore extends ItemStore const res = api.list({ reqInit }, this.query); if (onLoadFailure) { - return res.catch(error => (onLoadFailure(error.message), [])); + try { + return await res; + } catch (error) { + onLoadFailure(error?.message || error?.toString() || "Unknown error"); + + // reset the store because we are loading all, so that nothing is displayed + this.items.clear(); + this.selectedItemsIds.clear(); + + return []; + } } return res; @@ -346,7 +356,7 @@ export abstract class KubeObjectStore extends ItemStore async patch(item: T, patch: Patch): Promise { return this.postUpdate( await this.api.patch( - { + { name: item.getName(), namespace: item.getNs(), }, patch, @@ -358,7 +368,7 @@ export abstract class KubeObjectStore extends ItemStore async update(item: T, data: Partial): Promise { return this.postUpdate( await this.api.update( - { + { name: item.getName(), namespace: item.getNs(), }, data, diff --git a/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx b/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx index 9daf2f797f..d74f05c839 100644 --- a/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx +++ b/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx @@ -35,6 +35,7 @@ import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter"; import { ResourceKindMap, ResourceNames } from "../../utils/rbac"; import { kubeSelectedUrlParam, toggleDetails } from "../kube-detail-params"; import { Icon } from "../icon"; +import { TooltipPosition } from "../tooltip"; export interface KubeObjectListLayoutProps extends ItemListLayoutProps { store: KubeObjectStore; @@ -77,7 +78,7 @@ export class KubeObjectListLayout extends React.Component< kubeWatchApi.subscribeStores(stores, { preload: true, namespaces: clusterContext.contextNamespaces, - onLoadFailure: error => this.loadErrors.push(error), + onLoadFailure: error => this.loadErrors.push(String(error)), }), ); } @@ -90,13 +91,20 @@ export class KubeObjectListLayout extends React.Component< return null; } - const tooltip = ( - <> - {this.loadErrors.map((error, index) =>

{error}

)} - + return ( + + {this.loadErrors.map((error, index) =>

{error}

)} + + ), + preferredPositions: TooltipPosition.BOTTOM, + }} + /> ); - - return ; } render() { diff --git a/src/renderer/components/tooltip/tooltip.tsx b/src/renderer/components/tooltip/tooltip.tsx index 179224ee32..07f27b1dd7 100644 --- a/src/renderer/components/tooltip/tooltip.tsx +++ b/src/renderer/components/tooltip/tooltip.tsx @@ -112,26 +112,21 @@ export class Tooltip extends React.Component { @boundMethod refreshPosition() { - const { preferredPositions } = this.props; + const { preferredPositions = [] } = this.props; const { elem, targetElem } = this; - let positions = new Set([ - TooltipPosition.RIGHT, - TooltipPosition.BOTTOM, - TooltipPosition.TOP, - TooltipPosition.LEFT, - TooltipPosition.TOP_RIGHT, - TooltipPosition.TOP_LEFT, - TooltipPosition.BOTTOM_RIGHT, - TooltipPosition.BOTTOM_LEFT, - ]); + // Start with the preferred positions + const positions = new Set([preferredPositions].flat()); - if (preferredPositions) { - positions = new Set([ - ...[preferredPositions].flat(), - ...positions, - ]); - } + // Then add the default ordering, these won't override the above + positions.add(TooltipPosition.RIGHT); + positions.add(TooltipPosition.BOTTOM); + positions.add(TooltipPosition.TOP); + positions.add(TooltipPosition.LEFT); + positions.add(TooltipPosition.TOP_RIGHT); + positions.add(TooltipPosition.TOP_LEFT); + positions.add(TooltipPosition.BOTTOM_RIGHT); + positions.add(TooltipPosition.BOTTOM_LEFT); // reset position first and get all possible client-rect area for tooltip element this.setPosition({ left: 0, top: 0 }); @@ -178,35 +173,35 @@ export class Tooltip extends React.Component { const bottomCenter = targetBounds.bottom + offset; switch (position) { - case "top": + case TooltipPosition.TOP: left = horizontalCenter; top = topCenter; break; - case "bottom": + case TooltipPosition.BOTTOM: left = horizontalCenter; top = bottomCenter; break; - case "left": + case TooltipPosition.LEFT: top = verticalCenter; left = targetBounds.left - tooltipBounds.width - offset; break; - case "right": + case TooltipPosition.RIGHT: top = verticalCenter; left = targetBounds.right + offset; break; - case "top_left": + case TooltipPosition.TOP_LEFT: left = targetBounds.left; top = topCenter; break; - case "top_right": + case TooltipPosition.TOP_RIGHT: left = targetBounds.right - tooltipBounds.width; top = topCenter; break; - case "bottom_left": + case TooltipPosition.BOTTOM_LEFT: top = bottomCenter; left = targetBounds.left; break; - case "bottom_right": + case TooltipPosition.BOTTOM_RIGHT: top = bottomCenter; left = targetBounds.right - tooltipBounds.width; break;