1
0
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:
Roman 2021-02-17 13:39:27 +02:00 committed by GitHub
parent 0724819915
commit b8c78cd18f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 11 deletions

View File

@ -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> {

View File

@ -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;