Parse jsonPath expressions (#1793)

* Fix jsonPath calls by removing \ characters and using $..[] notation

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* Parse jsonPath properly

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* Cleanup

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* More cleanup

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* Improve parsing

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* Finetuning

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* Stringify children only if value is object or array

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>

* Test other escaped characters do not cause issues

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
Lauri Nevala authored and GitHub committed 2020-12-21 22:16:57 +02:00
1 parent c8a93414b2
commit e8f36e97a3
4 files changed
+92 -6

No files matched your search

@@ -13,6 +13,7 @@ import { crdStore } from "./crd.store";
import { KubeObjectMeta } from "../kube-object/kube-object-meta";
import { Input } from "../input";
import { AdditionalPrinterColumnsV1, CustomResourceDefinition } from "../../api/endpoints/crd.api";
import { parseJsonPath } from "../../utils/jsonPath";
interface Props extends KubeObjectDetailsProps<CustomResourceDefinition> {
}
@@ -46,7 +47,7 @@ export class CrdResourceDetails extends React.Component<Props> {
renderAdditionalColumns(crd: CustomResourceDefinition, columns: AdditionalPrinterColumnsV1[]) {
return columns.map(({ name, jsonPath: jp }) => (
<DrawerItem key={name} name={name} renderBoolean>
{convertSpecValue(jsonPath.value(crd, jp.slice(1)))}
{convertSpecValue(jsonPath.value(crd, parseJsonPath(jp.slice(1))))}
</DrawerItem>
));
}
@@ -12,6 +12,7 @@ import { autorun, computed } from "mobx";
import { crdStore } from "./crd.store";
import { TableSortCallback } from "../table";
import { apiManager } from "../../api/api-manager";
import { parseJsonPath } from "../../utils/jsonPath";
interface Props extends RouteComponentProps<ICRDRouteParams> {
}
@@ -61,7 +62,7 @@ export class CrdResources extends React.Component<Props> {
};
extraColumns.forEach(column => {
sortingCallbacks[column.name] = (item: KubeObject) => jsonPath.value(item, column.jsonPath.slice(1));
sortingCallbacks[column.name] = (item: KubeObject) => jsonPath.value(item, parseJsonPath(column.jsonPath.slice(1)));
});
return (
@@ -91,10 +92,18 @@ export class CrdResources extends React.Component<Props> {
renderTableContents={(crdInstance: KubeObject) => [
crdInstance.getName(),
isNamespaced && crdInstance.getNs(),
...extraColumns.map(column => ({
renderBoolean: true,
children: JSON.stringify(jsonPath.value(crdInstance, column.jsonPath.slice(1))),
})),
...extraColumns.map((column) => {
let value = jsonPath.value(crdInstance, parseJsonPath(column.jsonPath.slice(1)));
if (Array.isArray(value) || typeof value === "object") {
value = JSON.stringify(value);
}
return {
renderBoolean: true,
children: value,
};
}),
crdInstance.getAge(),
]}
/>