From 5eb41e8a6c83ab9b7bae3d864d49e53c38a6b58f Mon Sep 17 00:00:00 2001 From: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> Date: Thu, 20 Apr 2023 16:01:50 +0300 Subject: [PATCH] List layout column injection token package (#7544) Signed-off-by: Jari Kolehmainen Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> Co-authored-by: Jari Kolehmainen --- package-lock.json | 19 + packages/core/package.json | 1 + packages/core/src/common/item.store.ts | 5 +- .../k8s-api/endpoints/helm-releases.api.ts | 2 +- .../core/src/common/k8s-api/kube-object.ts | 2 +- .../__snapshots__/pods.test.tsx.snap | 2600 +++++++++++++++++ .../features/cluster/workloads/pods.test.tsx | 132 + .../components/+cluster/cluster-issues.tsx | 2 +- .../columns/pods-age-column.injectable.tsx | 30 + .../pods-containers-column.injectable.tsx | 86 + .../columns/pods-name-column.injectable.tsx | 42 + .../pods-namespace-column.injectable.tsx | 31 + .../columns/pods-node-column.injectable.tsx | 51 + .../columns/pods-owners-column.injectable.tsx | 53 + .../columns/pods-qos-column.injectable.tsx | 29 + .../pods-restarts-column.injectable.tsx | 29 + .../columns/pods-status-column.injectable.tsx | 30 + .../pods-status-icon-column.injectable.tsx | 31 + .../components/+workloads-pods/pods.tsx | 186 +- .../components/item-object-list/content.tsx | 2 +- .../components/item-object-list/header.tsx | 2 +- .../item-object-list/list-layout.tsx | 2 +- .../kube-object-list-layout.test.tsx.snap | 228 +- .../kube-object-list-layout.test.tsx | 2 + .../kube-object-list-layout.tsx | 30 + .../src/renderer/components/table/table.tsx | 2 +- .../port-forward/port-forward-item.ts | 2 +- packages/list-layout/.eslintrc.js | 6 + packages/list-layout/.prettierrc | 1 + packages/list-layout/index.ts | 1 + packages/list-layout/jest.config.js | 1 + ...ect-list-layout-column-injection-token.tsx | 97 + packages/list-layout/package.json | 43 + packages/list-layout/tsconfig.json | 4 + packages/list-layout/webpack.config.js | 1 + 35 files changed, 3589 insertions(+), 196 deletions(-) create mode 100644 packages/core/src/features/cluster/workloads/__snapshots__/pods.test.tsx.snap create mode 100644 packages/core/src/features/cluster/workloads/pods.test.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-age-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-containers-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-name-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-namespace-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-node-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-owners-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-qos-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-restarts-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-status-column.injectable.tsx create mode 100644 packages/core/src/renderer/components/+workloads-pods/columns/pods-status-icon-column.injectable.tsx create mode 100644 packages/list-layout/.eslintrc.js create mode 100644 packages/list-layout/.prettierrc create mode 100644 packages/list-layout/index.ts create mode 100644 packages/list-layout/jest.config.js create mode 100644 packages/list-layout/kube-object-list-layout-column-injection-token.tsx create mode 100644 packages/list-layout/package.json create mode 100644 packages/list-layout/tsconfig.json create mode 100644 packages/list-layout/webpack.config.js diff --git a/package-lock.json b/package-lock.json index 9904624d1d..ac8130ea40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3935,6 +3935,10 @@ "resolved": "packages/technical-features/application/legacy-extensions", "link": true }, + "node_modules/@k8slens/list-layout": { + "resolved": "packages/list-layout", + "link": true + }, "node_modules/@k8slens/messaging": { "resolved": "packages/technical-features/messaging/agnostic", "link": true @@ -35719,6 +35723,7 @@ "@astronautlabs/jsonpath": "^1.1.0", "@hapi/call": "^9.0.1", "@hapi/subtext": "^7.1.0", + "@k8slens/list-layout": "^1.0.0-alpha.0", "@k8slens/metrics": "^6.5.0-alpha.3", "@k8slens/node-fetch": "^6.5.0-alpha.3", "@k8slens/react-application": "^1.0.0-alpha.2", @@ -36657,6 +36662,20 @@ } } }, + "packages/list-layout": { + "name": "@k8slens/list-layout", + "version": "1.0.0-alpha.0", + "license": "MIT", + "devDependencies": { + "@k8slens/eslint-config": "^6.5.0-alpha.2", + "@k8slens/jest": "^6.5.0-alpha.2", + "@k8slens/typescript": "^6.5.0-alpha.2" + }, + "peerDependencies": { + "@ogre-tools/injectable": "^15.1.2", + "react": "^17.0.2" + } + }, "packages/metrics": { "name": "@k8slens/metrics", "version": "6.5.0-alpha.3", diff --git a/packages/core/package.json b/packages/core/package.json index 4c62e9c601..ed8002974c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -115,6 +115,7 @@ "@k8slens/metrics": "^6.5.0-alpha.3", "@k8slens/node-fetch": "^6.5.0-alpha.3", "@k8slens/react-application": "^1.0.0-alpha.2", + "@k8slens/list-layout": "^1.0.0-alpha.0", "@kubernetes/client-node": "^0.18.1", "@material-ui/styles": "^4.11.5", "@sentry/electron": "^3.0.8", diff --git a/packages/core/src/common/item.store.ts b/packages/core/src/common/item.store.ts index 4d7c3343ef..cb9b27ed2e 100644 --- a/packages/core/src/common/item.store.ts +++ b/packages/core/src/common/item.store.ts @@ -3,14 +3,11 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { ItemObject } from "@k8slens/list-layout"; import autoBind from "auto-bind"; import orderBy from "lodash/orderBy"; import { action, computed, observable, when, makeObservable } from "mobx"; -export interface ItemObject { - getId(): string; - getName(): string; -} export abstract class ItemStore { protected defaultSorting = (item: Item) => item.getName(); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api.ts index 3460378e59..a5807edb68 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { ItemObject } from "../../item.store"; +import type { ItemObject } from "@k8slens/list-layout"; import type { HelmReleaseDetails } from "./helm-releases.api/request-details.injectable"; export interface HelmReleaseUpdateDetails { diff --git a/packages/core/src/common/k8s-api/kube-object.ts b/packages/core/src/common/k8s-api/kube-object.ts index a45d5c415f..e43633aed6 100644 --- a/packages/core/src/common/k8s-api/kube-object.ts +++ b/packages/core/src/common/k8s-api/kube-object.ts @@ -22,7 +22,7 @@ import { isTypedArray, isRecord, } from "@k8slens/utilities"; -import type { ItemObject } from "../item.store"; +import type { ItemObject } from "@k8slens/list-layout"; import type { Patch } from "rfc6902"; import assert from "assert"; import type { JsonObject } from "type-fest"; diff --git a/packages/core/src/features/cluster/workloads/__snapshots__/pods.test.tsx.snap b/packages/core/src/features/cluster/workloads/__snapshots__/pods.test.tsx.snap new file mode 100644 index 0000000000..63c7621cba --- /dev/null +++ b/packages/core/src/features/cluster/workloads/__snapshots__/pods.test.tsx.snap @@ -0,0 +1,2600 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`workloads / pods when navigating to workloads / pods view given a namespace has pods renders 1`] = ` + +
+
+
+
+
+ +
+ + + close + + +
+ Close +
+
+
+
+
+
+
+
+