mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
fix: keep last selected row during navigation in the details panel (#2165)
Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
parent
0724819915
commit
b8c78cd18f
@ -13,11 +13,21 @@ import { CrdResourceDetails } from "../+custom-resources";
|
|||||||
import { KubeObjectMenu } from "./kube-object-menu";
|
import { KubeObjectMenu } from "./kube-object-menu";
|
||||||
import { kubeObjectDetailRegistry } from "../../api/kube-object-detail-registry";
|
import { kubeObjectDetailRegistry } from "../../api/kube-object-detail-registry";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to store `object.selfLink` to show more info about resource in the details panel.
|
||||||
|
*/
|
||||||
export const kubeDetailsUrlParam = createPageParam({
|
export const kubeDetailsUrlParam = createPageParam({
|
||||||
name: "kube-details",
|
name: "kube-details",
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to highlight last active/selected table row with the resource.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* If we go to "Nodes (page) -> Node (details) -> Pod (details)",
|
||||||
|
* last clicked Node should be "active" while Pod details are shown).
|
||||||
|
*/
|
||||||
export const kubeSelectedUrlParam = createPageParam({
|
export const kubeSelectedUrlParam = createPageParam({
|
||||||
name: "kube-selected",
|
name: "kube-selected",
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
@ -26,8 +36,8 @@ export const kubeSelectedUrlParam = createPageParam({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export function showDetails(details = "", resetSelected = true) {
|
export function showDetails(selfLink = "", resetSelected = true) {
|
||||||
const detailsUrl = getDetailsUrl(details, resetSelected);
|
const detailsUrl = getDetailsUrl(selfLink, resetSelected);
|
||||||
|
|
||||||
navigation.merge({ search: detailsUrl });
|
navigation.merge({ search: detailsUrl });
|
||||||
}
|
}
|
||||||
@ -36,18 +46,18 @@ export function hideDetails() {
|
|||||||
showDetails();
|
showDetails();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDetailsUrl(details: string, resetSelected = false) {
|
export function getDetailsUrl(selfLink: string, resetSelected = false, mergeGlobals = true) {
|
||||||
const detailsUrl = kubeDetailsUrlParam.toSearchString({ value: details });
|
const params = new URLSearchParams(mergeGlobals ? navigation.searchParams : "");
|
||||||
|
|
||||||
|
params.set(kubeDetailsUrlParam.urlName, selfLink);
|
||||||
|
|
||||||
if (resetSelected) {
|
if (resetSelected) {
|
||||||
const params = new URLSearchParams(detailsUrl);
|
params.delete(kubeSelectedUrlParam.urlName);
|
||||||
|
} else {
|
||||||
params.delete(kubeSelectedUrlParam.name);
|
params.set(kubeSelectedUrlParam.urlName, kubeSelectedUrlParam.get());
|
||||||
|
|
||||||
return `?${params.toString()}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return detailsUrl;
|
return `?${params}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface KubeObjectDetailsProps<T = KubeObject> {
|
export interface KubeObjectDetailsProps<T = KubeObject> {
|
||||||
|
|||||||
@ -20,7 +20,7 @@ export class PageParam<V = any> {
|
|||||||
static SYSTEM_PREFIX = "lens-";
|
static SYSTEM_PREFIX = "lens-";
|
||||||
|
|
||||||
readonly name: string;
|
readonly name: string;
|
||||||
protected urlName: string;
|
readonly urlName: string;
|
||||||
|
|
||||||
constructor(readonly init: PageParamInit<V> | PageSystemParamInit<V>, protected history: IObservableHistory) {
|
constructor(readonly init: PageParamInit<V> | PageSystemParamInit<V>, protected history: IObservableHistory) {
|
||||||
const { isSystem, name } = init as PageSystemParamInit;
|
const { isSystem, name } = init as PageSystemParamInit;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user