1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Enforce some naming conventions (#4813)

Signed-off-by: DmitriyNoa <dmytro.zharkov@gmail.com>
This commit is contained in:
Sebastian Malton 2022-03-01 13:06:53 -05:00 committed by DmitriyNoa
parent 752f1fd8af
commit c65a1f3f61
197 changed files with 630 additions and 634 deletions

View File

@ -146,6 +146,29 @@ module.exports = {
"named": "never", "named": "never",
"asyncArrow": "always", "asyncArrow": "always",
}], }],
"@typescript-eslint/naming-convention": ["error",
{
"selector": "interface",
"format": ["PascalCase"],
"leadingUnderscore": "forbid",
"trailingUnderscore": "forbid",
"custom": {
"regex": "^Props$",
"match": false,
},
},
{
"selector": "typeAlias",
"format": ["PascalCase"],
"leadingUnderscore": "forbid",
"trailingUnderscore": "forbid",
"custom": {
"regex": "^(Props|State)$",
"match": false,
},
},
],
"@typescript-eslint/consistent-type-definitions": ["error", "interface"],
"unused-imports/no-unused-imports-ts": process.env.PROD === "true" ? "error" : "warn", "unused-imports/no-unused-imports-ts": process.env.PROD === "true" ? "error" : "warn",
"unused-imports/no-unused-vars-ts": [ "unused-imports/no-unused-vars-ts": [
"warn", { "warn", {

View File

@ -724,11 +724,11 @@ const {
type Pod = Renderer.K8sApi.Pod; type Pod = Renderer.K8sApi.Pod;
interface Props { interface PodsDetailsListProps {
pods?: Pod[]; pods?: Pod[];
} }
export class PodsDetailsList extends React.Component<Props> { export class PodsDetailsList extends React.Component<PodsDetailsListProps> {
getTableRow = (pod: Pod) => { getTableRow = (pod: Pod) => {
return ( return (
<TableRow key={index} nowrap> <TableRow key={index} nowrap>

View File

@ -109,13 +109,13 @@ To allow the end-user to control the life cycle of this cluster feature the foll
} }
} = Renderer; } = Renderer;
interface Props { interface ExampleClusterFeatureSettingsProps {
cluster: Common.Catalog.KubernetesCluster; cluster: Common.Catalog.KubernetesCluster;
} }
@observer @observer
export class ExampleClusterFeatureSettings extends React.Component<Props> { export class ExampleClusterFeatureSettings extends React.Component<ExampleClusterFeatureSettingsProps> {
constructor(props: Props) { constructor(props: ExampleClusterFeatureSettingsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -17,13 +17,13 @@ const {
}, },
} = Renderer; } = Renderer;
interface Props { export interface MetricsSettingsProps {
cluster: Common.Catalog.KubernetesCluster; cluster: Common.Catalog.KubernetesCluster;
} }
@observer @observer
export class MetricsSettings extends React.Component<Props> { export class MetricsSettings extends React.Component<MetricsSettingsProps> {
constructor(props: Props) { constructor(props: MetricsSettingsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -43,7 +43,7 @@ users:
command: foo command: foo
`; `;
interface kubeconfig { interface Kubeconfig {
apiVersion: string; apiVersion: string;
clusters: [{ clusters: [{
name: string; name: string;
@ -66,7 +66,7 @@ interface kubeconfig {
preferences: {}; preferences: {};
} }
let mockKubeConfig: kubeconfig; let mockKubeConfig: Kubeconfig;
describe("kube helpers", () => { describe("kube helpers", () => {
describe("validateKubeconfig", () => { describe("validateKubeconfig", () => {

View File

@ -5,10 +5,10 @@
import { EventEmitter } from "../event-emitter"; import { EventEmitter } from "../event-emitter";
export type AppEvent = { export interface AppEvent {
name: string; name: string;
action: string; action: string;
params?: object; params?: object;
}; }
export const appEventBus = new EventEmitter<[AppEvent]>(); export const appEventBus = new EventEmitter<[AppEvent]>();

View File

@ -14,9 +14,9 @@ export interface WebLinkStatus extends CatalogEntityStatus {
phase: WebLinkStatusPhase; phase: WebLinkStatusPhase;
} }
export type WebLinkSpec = { export interface WebLinkSpec {
url: string; url: string;
}; }
export class WebLink extends CatalogEntity<CatalogEntityMetadata, WebLinkStatus, WebLinkSpec> { export class WebLink extends CatalogEntity<CatalogEntityMetadata, WebLinkStatus, WebLinkSpec> {
public static readonly apiVersion = "entity.k8slens.dev/v1alpha1"; public static readonly apiVersion = "entity.k8slens.dev/v1alpha1";

View File

@ -9,12 +9,12 @@ import { crdResourcesURL } from "../../routes";
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
import type { KubeJsonApiData } from "../kube-json-api"; import type { KubeJsonApiData } from "../kube-json-api";
type AdditionalPrinterColumnsCommon = { interface AdditionalPrinterColumnsCommon {
name: string; name: string;
type: "integer" | "number" | "string" | "boolean" | "date"; type: "integer" | "number" | "string" | "boolean" | "date";
priority: number; priority: number;
description: string; description: string;
}; }
export type AdditionalPrinterColumnsV1 = AdditionalPrinterColumnsCommon & { export type AdditionalPrinterColumnsV1 = AdditionalPrinterColumnsCommon & {
jsonPath: string; jsonPath: string;

View File

@ -216,7 +216,7 @@ export function ensureObjectSelfLink(api: KubeApi<KubeObject>, object: KubeJsonA
export type KubeApiWatchCallback = (data: IKubeWatchEvent<KubeJsonApiData>, error: any) => void; export type KubeApiWatchCallback = (data: IKubeWatchEvent<KubeJsonApiData>, error: any) => void;
export type KubeApiWatchOptions = { export interface KubeApiWatchOptions {
namespace: string; namespace: string;
callback?: KubeApiWatchCallback; callback?: KubeApiWatchCallback;
abortController?: AbortController; abortController?: AbortController;
@ -225,7 +225,7 @@ export type KubeApiWatchOptions = {
// timeout in seconds // timeout in seconds
timeout?: number; timeout?: number;
}; }
export type KubeApiPatchType = "merge" | "json" | "strategic"; export type KubeApiPatchType = "merge" | "json" | "strategic";

View File

@ -40,9 +40,10 @@ export * from "./splitArray";
export * from "./tar"; export * from "./tar";
export * from "./toJS"; export * from "./toJS";
export * from "./type-narrowing"; export * from "./type-narrowing";
export * from "./types";
export * from "./wait-for-path"; export * from "./wait-for-path";
export type { Tuple } from "./tuple";
import * as iter from "./iter"; import * as iter from "./iter";
import * as array from "./array"; import * as array from "./array";
import * as tuple from "./tuple"; import * as tuple from "./tuple";

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
type StaticThis<T, R extends any[]> = { new(...args: R): T }; interface StaticThis<T, R extends any[]> { new(...args: R): T }
export class Singleton { export class Singleton {
private static instances = new WeakMap<object, Singleton>(); private static instances = new WeakMap<object, Singleton>();

View File

@ -8,8 +8,14 @@ import * as array from "../utils/array";
/** /**
* A strict N-tuple of type T * A strict N-tuple of type T
*/ */
export type Tuple<T, N extends number> = N extends N ? number extends N ? T[] : _TupleOf<T, N, []> : never; export type Tuple<T, N extends number> = N extends N
type _TupleOf<T, N extends number, R extends unknown[]> = R["length"] extends N ? R : _TupleOf<T, N, [T, ...R]>; ? number extends N
? T[]
: TupleOfImpl<T, N, []>
: never;
type TupleOfImpl<T, N extends number, R extends unknown[]> = R["length"] extends N
? R
: TupleOfImpl<T, N, [T, ...R]>;
/** /**
* Iterates over `sources` yielding full tuples until one of the tuple arrays * Iterates over `sources` yielding full tuples until one of the tuple arrays

View File

@ -1,10 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
/**
* An N length tuple of T
*/
export type Tuple<T, N extends number> = N extends N ? number extends N ? T[] : _TupleOf<T, N, []> : never;
type _TupleOf<T, N extends number, R extends unknown[]> = R["length"] extends N ? R : _TupleOf<T, N, [T, ...R]>;

View File

@ -3,11 +3,11 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
export type KubeObjectStatus = { export interface KubeObjectStatus {
level: KubeObjectStatusLevel; level: KubeObjectStatusLevel;
text: string; text: string;
timestamp?: string; timestamp?: string;
}; }
export enum KubeObjectStatusLevel { export enum KubeObjectStatusLevel {
INFO = 1, INFO = 1,

View File

@ -7,10 +7,10 @@ import type { RequestPromiseOptions } from "request-promise-native";
import type { Cluster } from "../../common/cluster/cluster"; import type { Cluster } from "../../common/cluster/cluster";
import { k8sRequest } from "../k8s-request"; import { k8sRequest } from "../k8s-request";
export type ClusterDetectionResult = { export interface ClusterDetectionResult {
value: string | number | boolean; value: string | number | boolean;
accuracy: number; accuracy: number;
}; }
export class BaseClusterDetector { export class BaseClusterDetector {
key: string; key: string;

View File

@ -11,13 +11,13 @@ import * as tar from "tar";
import { isWindows } from "../common/vars"; import { isWindows } from "../common/vars";
import type winston from "winston"; import type winston from "winston";
export type LensBinaryOpts = { export interface LensBinaryOpts {
version: string; version: string;
baseDir: string; baseDir: string;
originalBinaryName: string; originalBinaryName: string;
newBinaryName?: string; newBinaryName?: string;
requestOpts?: request.Options; requestOpts?: request.Options;
}; }
export class LensBinary { export class LensBinary {

View File

@ -7,12 +7,12 @@ import type { CoreV1Api } from "@kubernetes/client-node";
import { inspect } from "util"; import { inspect } from "util";
import { Singleton } from "../../common/utils"; import { Singleton } from "../../common/utils";
export type PrometheusService = { export interface PrometheusService {
id: string; id: string;
namespace: string; namespace: string;
service: string; service: string;
port: number; port: number;
}; }
export abstract class PrometheusProvider { export abstract class PrometheusProvider {
abstract readonly id: string; abstract readonly id: string;

View File

@ -15,9 +15,9 @@ import { EventEmitter } from "events";
import { navigate } from "../../navigation"; import { navigate } from "../../navigation";
import { catalogCategoryRegistry } from "../../api/catalog-category-registry"; import { catalogCategoryRegistry } from "../../api/catalog-category-registry";
export type CatalogAddButtonProps = { export interface CatalogAddButtonProps {
category: CatalogCategory; category: CatalogCategory;
}; }
type CategoryId = string; type CategoryId = string;

View File

@ -16,14 +16,14 @@ import { cssNames } from "../../utils";
import { Avatar } from "../avatar"; import { Avatar } from "../avatar";
import { getLabelBadges } from "./helpers"; import { getLabelBadges } from "./helpers";
interface Props<T extends CatalogEntity> { export interface CatalogEntityDetailsProps<T extends CatalogEntity> {
entity: T; entity: T;
hideDetails(): void; hideDetails(): void;
onRun: () => void; onRun: () => void;
} }
@observer @observer
export class CatalogEntityDetails<T extends CatalogEntity> extends Component<Props<T>> { export class CatalogEntityDetails<T extends CatalogEntity> extends Component<CatalogEntityDetailsProps<T>> {
categoryIcon(category: CatalogCategory) { categoryIcon(category: CatalogCategory) {
if (Icon.isSvg(category.metadata.icon)) { if (Icon.isSvg(category.metadata.icon)) {
return <Icon svg={category.metadata.icon} smallest />; return <Icon svg={category.metadata.icon} smallest />;

View File

@ -15,10 +15,10 @@ import { cssNames } from "../../utils";
import type { CatalogCategory } from "../../api/catalog-entity"; import type { CatalogCategory } from "../../api/catalog-entity";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
type Props = { export interface CatalogMenuProps {
activeItem: string; activeItem: string;
onItemClick: (id: string) => void; onItemClick: (id: string) => void;
}; }
function getCategories() { function getCategories() {
return catalogCategoryRegistry.filteredItems; return catalogCategoryRegistry.filteredItems;
@ -42,7 +42,7 @@ function Item(props: TreeItemProps) {
); );
} }
export const CatalogMenu = observer((props: Props) => { export const CatalogMenu = observer((props: CatalogMenuProps) => {
return ( return (
// Overwrite Material UI styles with injectFirst https://material-ui.com/guides/interoperability/#controlling-priority-4 // Overwrite Material UI styles with injectFirst https://material-ui.com/guides/interoperability/#controlling-priority-4
<StylesProvider injectFirst> <StylesProvider injectFirst>

View File

@ -37,7 +37,7 @@ import type { RegisteredCustomCategoryViewDecl } from "./custom-views.injectable
import customCategoryViewsInjectable from "./custom-views.injectable"; import customCategoryViewsInjectable from "./custom-views.injectable";
import type { CustomCategoryViewComponents } from "./custom-views"; import type { CustomCategoryViewComponents } from "./custom-views";
interface Props extends RouteComponentProps<CatalogViewRouteParam> {} export interface CatalogProps extends RouteComponentProps<CatalogViewRouteParam> {}
interface Dependencies { interface Dependencies {
catalogPreviousActiveTabStorage: { set: (value: string ) => void }; catalogPreviousActiveTabStorage: { set: (value: string ) => void };
@ -47,11 +47,11 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedCatalog extends React.Component<Props & Dependencies> { class NonInjectedCatalog extends React.Component<CatalogProps & Dependencies> {
@observable private contextMenu: CatalogEntityContextMenuContext; @observable private contextMenu: CatalogEntityContextMenuContext;
@observable activeTab?: string; @observable activeTab?: string;
constructor(props: Props & Dependencies) { constructor(props: CatalogProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -305,7 +305,7 @@ class NonInjectedCatalog extends React.Component<Props & Dependencies> {
} }
} }
export const Catalog = withInjectables<Dependencies, Props>( NonInjectedCatalog, { export const Catalog = withInjectables<Dependencies, CatalogProps>( NonInjectedCatalog, {
getProps: (di, props) => ({ getProps: (di, props) => ({
catalogEntityStore: di.inject(catalogEntityStoreInjectable), catalogEntityStore: di.inject(catalogEntityStoreInjectable),
catalogPreviousActiveTabStorage: di.inject(catalogPreviousActiveTabStorageInjectable), catalogPreviousActiveTabStorage: di.inject(catalogPreviousActiveTabStorageInjectable),

View File

@ -20,7 +20,7 @@ import { ThemeStore } from "../../theme.store";
import { kubeSelectedUrlParam, toggleDetails } from "../kube-detail-params"; import { kubeSelectedUrlParam, toggleDetails } from "../kube-detail-params";
import { apiManager } from "../../../common/k8s-api/api-manager"; import { apiManager } from "../../../common/k8s-api/api-manager";
interface Props { export interface ClusterIssuesProps {
className?: string; className?: string;
} }
@ -39,14 +39,14 @@ enum sortBy {
} }
@observer @observer
export class ClusterIssues extends React.Component<Props> { export class ClusterIssues extends React.Component<ClusterIssuesProps> {
private sortCallbacks = { private sortCallbacks = {
[sortBy.type]: (warning: IWarning) => warning.kind, [sortBy.type]: (warning: IWarning) => warning.kind,
[sortBy.object]: (warning: IWarning) => warning.getName(), [sortBy.object]: (warning: IWarning) => warning.getName(),
[sortBy.age]: (warning: IWarning) => warning.timeDiffFromNow, [sortBy.age]: (warning: IWarning) => warning.timeDiffFromNow,
}; };
constructor(props: Props) { constructor(props: ClusterIssuesProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -7,11 +7,11 @@ import React from "react";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
interface Props { export interface ClusterNoMetricsProps {
className: string; className: string;
} }
export function ClusterNoMetrics({ className }: Props) { export function ClusterNoMetrics({ className }: ClusterNoMetricsProps) {
return ( return (
<div className={cssNames("ClusterNoMetrics flex column box grow justify-center align-center", className)}> <div className={cssNames("ClusterNoMetrics flex column box grow justify-center align-center", className)}>
<Icon material="info"/> <Icon material="info"/>

View File

@ -27,11 +27,11 @@ enum columnId {
status = "status", status = "status",
} }
interface Props extends RouteComponentProps<HpaRouteParams> { export interface HorizontalPodAutoscalersProps extends RouteComponentProps<HpaRouteParams> {
} }
@observer @observer
export class HorizontalPodAutoscalers extends React.Component<Props> { export class HorizontalPodAutoscalers extends React.Component<HorizontalPodAutoscalersProps> {
getTargets(hpa: HorizontalPodAutoscaler) { getTargets(hpa: HorizontalPodAutoscaler) {
const metrics = hpa.getMetrics(); const metrics = hpa.getMetrics();

View File

@ -14,7 +14,7 @@ import { DrawerItem } from "../drawer/drawer-item";
import { Badge } from "../badge"; import { Badge } from "../badge";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<LimitRange> { export interface LimitRangeDetailsProps extends KubeObjectDetailsProps<LimitRange> {
} }
function renderLimit(limit: LimitRangeItem, part: LimitPart, resource: Resource) { function renderLimit(limit: LimitRangeItem, part: LimitPart, resource: Resource) {
@ -52,7 +52,7 @@ function renderLimitDetails(limits: LimitRangeItem[], resources: Resource[]) {
} }
@observer @observer
export class LimitRangeDetails extends React.Component<Props> { export class LimitRangeDetails extends React.Component<LimitRangeDetailsProps> {
render() { render() {
const { object: limitRange } = this.props; const { object: limitRange } = this.props;

View File

@ -19,11 +19,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<LimitRangeRouteParams> { export interface LimitRangesProps extends RouteComponentProps<LimitRangeRouteParams> {
} }
@observer @observer
export class LimitRanges extends React.Component<Props> { export class LimitRanges extends React.Component<LimitRangesProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -18,15 +18,15 @@ import { ConfigMap } from "../../../common/k8s-api/endpoints";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<ConfigMap> { export interface ConfigMapDetailsProps extends KubeObjectDetailsProps<ConfigMap> {
} }
@observer @observer
export class ConfigMapDetails extends React.Component<Props> { export class ConfigMapDetails extends React.Component<ConfigMapDetailsProps> {
@observable isSaving = false; @observable isSaving = false;
@observable data = observable.map<string, string>(); @observable data = observable.map<string, string>();
constructor(props: Props) { constructor(props: ConfigMapDetailsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -20,11 +20,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<ConfigMapsRouteParams> { export interface ConfigMapsProps extends RouteComponentProps<ConfigMapsRouteParams> {
} }
@observer @observer
export class ConfigMaps extends React.Component<Props> { export class ConfigMaps extends React.Component<ConfigMapsProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -14,11 +14,11 @@ import { PodDisruptionBudget } from "../../../common/k8s-api/endpoints";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<PodDisruptionBudget> { export interface PodDisruptionBudgetDetailsProps extends KubeObjectDetailsProps<PodDisruptionBudget> {
} }
@observer @observer
export class PodDisruptionBudgetDetails extends React.Component<Props> { export class PodDisruptionBudgetDetails extends React.Component<PodDisruptionBudgetDetailsProps> {
render() { render() {
const { object: pdb } = this.props; const { object: pdb } = this.props;

View File

@ -23,11 +23,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends KubeObjectDetailsProps<PodDisruptionBudget> { export interface PodDisruptionBudgetsProps extends KubeObjectDetailsProps<PodDisruptionBudget> {
} }
@observer @observer
export class PodDisruptionBudgets extends React.Component<Props> { export class PodDisruptionBudgets extends React.Component<PodDisruptionBudgetsProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -20,7 +20,7 @@ import { Notifications } from "../notifications";
import { NamespaceSelect } from "../+namespaces/namespace-select"; import { NamespaceSelect } from "../+namespaces/namespace-select";
import { SubTitle } from "../layout/sub-title"; import { SubTitle } from "../layout/sub-title";
interface Props extends DialogProps { export interface AddQuotaDialogProps extends DialogProps {
} }
const dialogState = observable.object({ const dialogState = observable.object({
@ -28,7 +28,7 @@ const dialogState = observable.object({
}); });
@observer @observer
export class AddQuotaDialog extends React.Component<Props> { export class AddQuotaDialog extends React.Component<AddQuotaDialogProps> {
static defaultQuotas: IResourceQuotaValues = { static defaultQuotas: IResourceQuotaValues = {
"limits.cpu": "", "limits.cpu": "",
"limits.memory": "", "limits.memory": "",
@ -58,7 +58,7 @@ export class AddQuotaDialog extends React.Component<Props> {
@observable namespace = this.defaultNamespace; @observable namespace = this.defaultNamespace;
@observable quotas = AddQuotaDialog.defaultQuotas; @observable quotas = AddQuotaDialog.defaultQuotas;
constructor(props: Props) { constructor(props: AddQuotaDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -16,7 +16,7 @@ import { Table, TableCell, TableHead, TableRow } from "../table";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<ResourceQuota> { export interface ResourceQuotaDetailsProps extends KubeObjectDetailsProps<ResourceQuota> {
} }
function transformUnit(name: string, value: string): number { function transformUnit(name: string, value: string): number {
@ -58,7 +58,7 @@ function renderQuotas(quota: ResourceQuota): JSX.Element[] {
} }
@observer @observer
export class ResourceQuotaDetails extends React.Component<Props> { export class ResourceQuotaDetails extends React.Component<ResourceQuotaDetailsProps> {
render() { render() {
const { object: quota } = this.props; const { object: quota } = this.props;

View File

@ -20,11 +20,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<ResourceQuotaRouteParams> { export interface ResourceQuotasProps extends RouteComponentProps<ResourceQuotaRouteParams> {
} }
@observer @observer
export class ResourceQuotas extends React.Component<Props> { export class ResourceQuotas extends React.Component<ResourceQuotasProps> {
render() { render() {
return ( return (
<> <>

View File

@ -23,7 +23,7 @@ import { Notifications } from "../notifications";
import upperFirst from "lodash/upperFirst"; import upperFirst from "lodash/upperFirst";
import { showDetails } from "../kube-detail-params"; import { showDetails } from "../kube-detail-params";
interface Props extends Partial<DialogProps> { export interface AddSecretDialogProps extends Partial<DialogProps> {
} }
interface ISecretTemplateField { interface ISecretTemplateField {
@ -46,8 +46,8 @@ const dialogState = observable.object({
}); });
@observer @observer
export class AddSecretDialog extends React.Component<Props> { export class AddSecretDialog extends React.Component<AddSecretDialogProps> {
constructor(props: Props) { constructor(props: AddSecretDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -20,16 +20,16 @@ import { Secret } from "../../../common/k8s-api/endpoints";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<Secret> { export interface SecretDetailsProps extends KubeObjectDetailsProps<Secret> {
} }
@observer @observer
export class SecretDetails extends React.Component<Props> { export class SecretDetails extends React.Component<SecretDetailsProps> {
@observable isSaving = false; @observable isSaving = false;
@observable data: { [name: string]: string } = {}; @observable data: { [name: string]: string } = {};
@observable revealSecret = observable.set<string>(); @observable revealSecret = observable.set<string>();
constructor(props: Props) { constructor(props: SecretDetailsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -24,11 +24,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<SecretsRouteParams> { export interface SecretsProps extends RouteComponentProps<SecretsRouteParams> {
} }
@observer @observer
export class Secrets extends React.Component<Props> { export class Secrets extends React.Component<SecretsProps> {
render() { render() {
return ( return (
<> <>

View File

@ -18,11 +18,11 @@ import { KubeObjectMeta } from "../kube-object-meta";
import { MonacoEditor } from "../monaco-editor"; import { MonacoEditor } from "../monaco-editor";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<CustomResourceDefinition> { export interface CRDDetailsProps extends KubeObjectDetailsProps<CustomResourceDefinition> {
} }
@observer @observer
export class CRDDetails extends React.Component<Props> { export class CRDDetails extends React.Component<CRDDetailsProps> {
render() { render() {
const { object: crd } = this.props; const { object: crd } = this.props;

View File

@ -32,7 +32,7 @@ enum columnId {
} }
@observer @observer
export class CrdList extends React.Component { export class CustomResourceDefinitions extends React.Component {
constructor(props: {}) { constructor(props: {}) {
super(props); super(props);
makeObservable(this); makeObservable(this);

View File

@ -19,7 +19,7 @@ import { parseJsonPath } from "../../utils/jsonPath";
import { KubeObject, KubeObjectMetadata, KubeObjectStatus } from "../../../common/k8s-api/kube-object"; import { KubeObject, KubeObjectMetadata, KubeObjectStatus } from "../../../common/k8s-api/kube-object";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<KubeObject> { export interface CustomResourceDetailsProps extends KubeObjectDetailsProps<KubeObject> {
crd: CustomResourceDefinition; crd: CustomResourceDefinition;
} }
@ -44,7 +44,7 @@ function convertSpecValue(value: any): any {
} }
@observer @observer
export class CrdResourceDetails extends React.Component<Props> { export class CustomResourceDetails extends React.Component<CustomResourceDetailsProps> {
renderAdditionalColumns(resource: KubeObject, columns: AdditionalPrinterColumnsV1[]) { renderAdditionalColumns(resource: KubeObject, columns: AdditionalPrinterColumnsV1[]) {
return columns.map(({ name, jsonPath: jp }) => ( return columns.map(({ name, jsonPath: jp }) => (
<DrawerItem key={name} name={name} renderBoolean> <DrawerItem key={name} name={name} renderBoolean>

View File

@ -18,7 +18,7 @@ import { apiManager } from "../../../common/k8s-api/api-manager";
import { parseJsonPath } from "../../utils/jsonPath"; import { parseJsonPath } from "../../utils/jsonPath";
import type { CRDRouteParams } from "../../../common/routes"; import type { CRDRouteParams } from "../../../common/routes";
interface Props extends RouteComponentProps<CRDRouteParams> { export interface CustomResourceDefinitionResourcesProps extends RouteComponentProps<CRDRouteParams> {
} }
enum columnId { enum columnId {
@ -28,8 +28,8 @@ enum columnId {
} }
@observer @observer
export class CrdResources extends React.Component<Props> { export class CustomResourceDefinitionResources extends React.Component<CustomResourceDefinitionResourcesProps> {
constructor(props: Props) { constructor(props: CustomResourceDefinitionResourcesProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -7,13 +7,14 @@ import React from "react";
import { Redirect, Route, Switch } from "react-router"; import { Redirect, Route, Switch } from "react-router";
import { TabLayout } from "../layout/tab-layout"; import { TabLayout } from "../layout/tab-layout";
import { crdDefinitionsRoute, crdResourcesRoute, crdURL } from "../../../common/routes"; import { crdDefinitionsRoute, crdResourcesRoute, crdURL } from "../../../common/routes";
import { CrdList, CrdResources } from "."; import { CustomResourceDefinitions } from "./crd-list";
import { CustomResourceDefinitionResources } from "./crd-resources";
export const CustomResourcesRoute = () => ( export const CustomResourcesRoute = () => (
<TabLayout> <TabLayout>
<Switch> <Switch>
<Route component={CrdList} {...crdDefinitionsRoute} exact/> <Route component={CustomResourceDefinitions} {...crdDefinitionsRoute} exact/>
<Route component={CrdResources} {...crdResourcesRoute}/> <Route component={CustomResourceDefinitionResources} {...crdResourcesRoute}/>
<Redirect to={crdURL()}/> <Redirect to={crdURL()}/>
</Switch> </Switch>
</TabLayout> </TabLayout>

View File

@ -20,14 +20,14 @@ import { SettingLayout } from "../layout/setting-layout";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
import { Avatar } from "../avatar"; import { Avatar } from "../avatar";
interface Props extends RouteComponentProps<EntitySettingsRouteParams> { export interface EntitySettingsProps extends RouteComponentProps<EntitySettingsRouteParams> {
} }
@observer @observer
export class EntitySettings extends React.Component<Props> { export class EntitySettings extends React.Component<EntitySettingsProps> {
@observable activeTab: string; @observable activeTab: string;
constructor(props: Props) { constructor(props: EntitySettingsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);

View File

@ -19,11 +19,11 @@ import { getDetailsUrl } from "../kube-detail-params";
import { apiManager } from "../../../common/k8s-api/api-manager"; import { apiManager } from "../../../common/k8s-api/api-manager";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<KubeEvent> { export interface EventDetailsProps extends KubeObjectDetailsProps<KubeEvent> {
} }
@observer @observer
export class EventDetails extends React.Component<Props> { export class EventDetails extends React.Component<EventDetailsProps> {
render() { render() {
const { object: event } = this.props; const { object: event } = this.props;

View File

@ -34,18 +34,18 @@ enum columnId {
lastSeen = "last-seen", lastSeen = "last-seen",
} }
interface Props extends Partial<KubeObjectListLayoutProps<KubeEvent>> { export interface EventsProps extends Partial<KubeObjectListLayoutProps<KubeEvent>> {
className?: IClassName; className?: IClassName;
compact?: boolean; compact?: boolean;
compactLimit?: number; compactLimit?: number;
} }
const defaultProps: Partial<Props> = { const defaultProps: Partial<EventsProps> = {
compactLimit: 10, compactLimit: 10,
}; };
@observer @observer
export class Events extends React.Component<Props> { export class Events extends React.Component<EventsProps> {
static defaultProps = defaultProps as object; static defaultProps = defaultProps as object;
now = Date.now(); now = Date.now();
@ -63,7 +63,7 @@ export class Events extends React.Component<Props> {
[columnId.lastSeen]: event => this.now - new Date(event.lastTimestamp).getTime(), [columnId.lastSeen]: event => this.now - new Date(event.lastTimestamp).getTime(),
}; };
constructor(props: Props) { constructor(props: EventsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -12,17 +12,18 @@ import { eventStore } from "./event.store";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import type { KubeEvent } from "../../../common/k8s-api/endpoints/events.api"; import type { KubeEvent } from "../../../common/k8s-api/endpoints/events.api";
interface Props { export interface KubeEventIconProps {
object: KubeObject; object: KubeObject;
showWarningsOnly?: boolean; showWarningsOnly?: boolean;
filterEvents?: (events: KubeEvent[]) => KubeEvent[]; filterEvents?: (events: KubeEvent[]) => KubeEvent[];
} }
const defaultProps: Partial<Props> = {
const defaultProps: Partial<KubeEventIconProps> = {
showWarningsOnly: true, showWarningsOnly: true,
}; };
export class KubeEventIcon extends React.Component<Props> { export class KubeEventIcon extends React.Component<KubeEventIconProps> {
static defaultProps = defaultProps as object; static defaultProps = defaultProps as object;
render() { render() {

View File

@ -17,7 +17,7 @@ import extensionInstallationStateStoreInjectable
from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
interface Props { export interface InstallProps {
installPath: string; installPath: string;
supportedFormats: string[]; supportedFormats: string[];
onChange: (path: string) => void; onChange: (path: string) => void;
@ -42,7 +42,7 @@ const installInputValidator: InputValidator = {
), ),
}; };
const NonInjectedInstall: React.FC<Dependencies & Props> = ({ const NonInjectedInstall: React.FC<Dependencies & InstallProps> = ({
installPath, installPath,
supportedFormats, supportedFormats,
onChange, onChange,
@ -99,7 +99,7 @@ const NonInjectedInstall: React.FC<Dependencies & Props> = ({
</section> </section>
); );
export const Install = withInjectables<Dependencies, Props>( export const Install = withInjectables<Dependencies, InstallProps>(
observer(NonInjectedInstall), observer(NonInjectedInstall),
{ {
getProps: (di, props) => ({ getProps: (di, props) => ({

View File

@ -25,7 +25,7 @@ import extensionInstallationStateStoreInjectable
from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store"; import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store";
interface Props { export interface InstalledExtensionsProps {
extensions: InstalledExtension[]; extensions: InstalledExtension[];
enable: (id: LensExtensionId) => void; enable: (id: LensExtensionId) => void;
disable: (id: LensExtensionId) => void; disable: (id: LensExtensionId) => void;
@ -45,7 +45,7 @@ function getStatus(extension: InstalledExtension) {
return extension.isEnabled ? "Enabled" : "Disabled"; return extension.isEnabled ? "Enabled" : "Disabled";
} }
const NonInjectedInstalledExtensions : React.FC<Dependencies & Props> = (({ extensionDiscovery, extensionInstallationStateStore, extensions, uninstall, enable, disable }) => { const NonInjectedInstalledExtensions = observer(({ extensionDiscovery, extensionInstallationStateStore, extensions, uninstall, enable, disable }: Dependencies & InstalledExtensionsProps) => {
const filters = [ const filters = [
(extension: InstalledExtension) => extension.manifest.name, (extension: InstalledExtension) => extension.manifest.name,
(extension: InstalledExtension) => getStatus(extension), (extension: InstalledExtension) => getStatus(extension),
@ -175,15 +175,10 @@ const NonInjectedInstalledExtensions : React.FC<Dependencies & Props> = (({ exte
); );
}); });
export const InstalledExtensions = withInjectables<Dependencies, Props>( export const InstalledExtensions = withInjectables<Dependencies, InstalledExtensionsProps>(NonInjectedInstalledExtensions, {
observer(NonInjectedInstalledExtensions), getProps: (di, props) => ({
extensionDiscovery: di.inject(extensionDiscoveryInjectable),
{ extensionInstallationStateStore: di.inject(extensionInstallationStateStoreInjectable),
getProps: (di, props) => ({ ...props,
extensionDiscovery: di.inject(extensionDiscoveryInjectable), }),
extensionInstallationStateStore: di.inject(extensionInstallationStateStoreInjectable), });
...props,
}),
},
);

View File

@ -7,11 +7,11 @@ import styles from "./notice.module.scss";
import React, { DOMAttributes } from "react"; import React, { DOMAttributes } from "react";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
interface Props extends DOMAttributes<any> { export interface NoticeProps extends DOMAttributes<any> {
className?: string; className?: string;
} }
export function Notice(props: Props) { export function Notice(props: NoticeProps) {
return ( return (
<div className={cssNames(styles.notice, props.className)}> <div className={cssNames(styles.notice, props.className)}>
{props.children} {props.children}

View File

@ -21,7 +21,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import createInstallChartTabInjectable from "../dock/install-chart/create-install-chart-tab.injectable"; import createInstallChartTabInjectable from "../dock/install-chart/create-install-chart-tab.injectable";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
interface Props { export interface HelmChartDetailsProps {
chart: HelmChart; chart: HelmChart;
hideDetails(): void; hideDetails(): void;
} }
@ -37,14 +37,14 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedHelmChartDetails extends Component<Props & Dependencies> { class NonInjectedHelmChartDetails extends Component<HelmChartDetailsProps & Dependencies> {
@observable chartVersions: HelmChart[]; @observable chartVersions: HelmChart[];
@observable selectedChart?: HelmChart; @observable selectedChart?: HelmChart;
@observable readme?: string; @observable readme?: string;
private abortController?: AbortController; private abortController?: AbortController;
constructor(props: Props & Dependencies) { constructor(props: HelmChartDetailsProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -197,7 +197,7 @@ class NonInjectedHelmChartDetails extends Component<Props & Dependencies> {
} }
} }
export const HelmChartDetails = withInjectables<Dependencies, Props>( export const HelmChartDetails = withInjectables<Dependencies, HelmChartDetailsProps>(
NonInjectedHelmChartDetails, NonInjectedHelmChartDetails,
{ {

View File

@ -24,11 +24,11 @@ enum columnId {
repo = "repo", repo = "repo",
} }
interface Props extends RouteComponentProps<HelmChartsRouteParams> { export interface HelmChartsProps extends RouteComponentProps<HelmChartsRouteParams> {
} }
@observer @observer
export class HelmCharts extends Component<Props> { export class HelmCharts extends Component<HelmChartsProps> {
componentDidMount() { componentDidMount() {
helmChartStore.loadAll(); helmChartStore.loadAll();
} }

View File

@ -34,7 +34,7 @@ import releaseDetailsInjectable from "./release-details.injectable";
import releaseValuesInjectable from "./release-values.injectable"; import releaseValuesInjectable from "./release-values.injectable";
import userSuppliedValuesAreShownInjectable from "./user-supplied-values-are-shown.injectable"; import userSuppliedValuesAreShownInjectable from "./user-supplied-values-are-shown.injectable";
interface Props { export interface ReleaseDetailsProps {
hideDetails(): void; hideDetails(): void;
} }
@ -48,12 +48,12 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedReleaseDetails extends Component<Props & Dependencies> { class NonInjectedReleaseDetails extends Component<ReleaseDetailsProps & Dependencies> {
@observable saving = false; @observable saving = false;
private nonSavedValues: string; private nonSavedValues: string;
constructor(props: Props & Dependencies) { constructor(props: ReleaseDetailsProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -261,7 +261,7 @@ class NonInjectedReleaseDetails extends Component<Props & Dependencies> {
} }
} }
export const ReleaseDetails = withInjectables<Dependencies, Props>( export const ReleaseDetails = withInjectables<Dependencies, ReleaseDetailsProps>(
NonInjectedReleaseDetails, NonInjectedReleaseDetails,
{ {

View File

@ -14,7 +14,7 @@ import createUpgradeChartTabInjectable from "../dock/upgrade-chart/create-upgrad
import releaseRollbackDialogModelInjectable from "./release-rollback-dialog-model/release-rollback-dialog-model.injectable"; import releaseRollbackDialogModelInjectable from "./release-rollback-dialog-model/release-rollback-dialog-model.injectable";
import deleteReleaseInjectable from "./delete-release/delete-release.injectable"; import deleteReleaseInjectable from "./delete-release/delete-release.injectable";
interface Props extends MenuActionsProps { export interface HelmReleaseMenuProps extends MenuActionsProps {
release: HelmRelease; release: HelmRelease;
hideDetails?(): void; hideDetails?(): void;
} }
@ -25,7 +25,7 @@ interface Dependencies {
openRollbackDialog: (release: HelmRelease) => void; openRollbackDialog: (release: HelmRelease) => void;
} }
class NonInjectedHelmReleaseMenu extends React.Component<Props & Dependencies> { class NonInjectedHelmReleaseMenu extends React.Component<HelmReleaseMenuProps & Dependencies> {
remove = () => { remove = () => {
return this.props.deleteRelease(this.props.release); return this.props.deleteRelease(this.props.release);
}; };
@ -79,7 +79,7 @@ class NonInjectedHelmReleaseMenu extends React.Component<Props & Dependencies> {
} }
} }
export const HelmReleaseMenu = withInjectables<Dependencies, Props>( export const HelmReleaseMenu = withInjectables<Dependencies, HelmReleaseMenuProps>(
NonInjectedHelmReleaseMenu, NonInjectedHelmReleaseMenu,
{ {

View File

@ -20,7 +20,7 @@ import releaseRollbackDialogModelInjectable
import type { ReleaseRollbackDialogModel } from "./release-rollback-dialog-model/release-rollback-dialog-model"; import type { ReleaseRollbackDialogModel } from "./release-rollback-dialog-model/release-rollback-dialog-model";
import rollbackReleaseInjectable from "./rollback-release/rollback-release.injectable"; import rollbackReleaseInjectable from "./rollback-release/rollback-release.injectable";
interface Props extends DialogProps { export interface ReleaseRollbackDialogProps extends DialogProps {
} }
interface Dependencies { interface Dependencies {
@ -29,12 +29,12 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedReleaseRollbackDialog extends React.Component<Props & Dependencies> { class NonInjectedReleaseRollbackDialog extends React.Component<ReleaseRollbackDialogProps & Dependencies> {
@observable isLoading = false; @observable isLoading = false;
@observable revision: IReleaseRevision; @observable revision: IReleaseRevision;
@observable revisions = observable.array<IReleaseRevision>(); @observable revisions = observable.array<IReleaseRevision>();
constructor(props: Props & Dependencies) { constructor(props: ReleaseRollbackDialogProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -114,7 +114,7 @@ class NonInjectedReleaseRollbackDialog extends React.Component<Props & Dependenc
} }
} }
export const ReleaseRollbackDialog = withInjectables<Dependencies, Props>( export const ReleaseRollbackDialog = withInjectables<Dependencies, ReleaseRollbackDialogProps>(
NonInjectedReleaseRollbackDialog, NonInjectedReleaseRollbackDialog,
{ {

View File

@ -37,7 +37,7 @@ enum columnId {
updated = "update", updated = "update",
} }
interface Props extends RouteComponentProps<ReleaseRouteParams> { export interface HelmReleasesProps extends RouteComponentProps<ReleaseRouteParams> {
} }
interface Dependencies { interface Dependencies {
@ -46,7 +46,7 @@ interface Dependencies {
selectNamespace: (namespace: string) => void; selectNamespace: (namespace: string) => void;
} }
class NonInjectedHelmReleases extends Component<Dependencies & Props> { class NonInjectedHelmReleases extends Component<Dependencies & HelmReleasesProps> {
componentDidMount() { componentDidMount() {
const { match: { params: { namespace }}} = this.props; const { match: { params: { namespace }}} = this.props;
@ -223,7 +223,7 @@ class NonInjectedHelmReleases extends Component<Dependencies & Props> {
} }
} }
export const HelmReleases = withInjectables<Dependencies, Props>( export const HelmReleases = withInjectables<Dependencies, HelmReleasesProps>(
NonInjectedHelmReleases, NonInjectedHelmReleases,
{ {

View File

@ -21,7 +21,7 @@ import addNamespaceDialogModelInjectable
from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable"; from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable";
import type { NamespaceStore } from "./namespace-store/namespace.store"; import type { NamespaceStore } from "./namespace-store/namespace.store";
interface Props extends DialogProps { export interface AddNamespaceDialogProps extends DialogProps {
onSuccess?(ns: Namespace): void; onSuccess?(ns: Namespace): void;
onError?(error: any): void; onError?(error: any): void;
} }
@ -32,10 +32,10 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedAddNamespaceDialog extends React.Component<Props & Dependencies> { class NonInjectedAddNamespaceDialog extends React.Component<AddNamespaceDialogProps & Dependencies> {
@observable namespace = ""; @observable namespace = "";
constructor(props: Props & Dependencies) { constructor(props: AddNamespaceDialogProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -93,7 +93,7 @@ class NonInjectedAddNamespaceDialog extends React.Component<Props & Dependencies
} }
} }
export const AddNamespaceDialog = withInjectables<Dependencies, Props>( export const AddNamespaceDialog = withInjectables<Dependencies, AddNamespaceDialogProps>(
NonInjectedAddNamespaceDialog, NonInjectedAddNamespaceDialog,
{ {

View File

@ -29,7 +29,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import kubeWatchApiInjectable import kubeWatchApiInjectable
from "../../kube-watch-api/kube-watch-api.injectable"; from "../../kube-watch-api/kube-watch-api.injectable";
interface Props extends KubeObjectDetailsProps<Namespace> { export interface NamespaceDetailsProps extends KubeObjectDetailsProps<Namespace> {
} }
interface Dependencies { interface Dependencies {
@ -37,10 +37,10 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedNamespaceDetails extends React.Component<Props & Dependencies> { class NonInjectedNamespaceDetails extends React.Component<NamespaceDetailsProps & Dependencies> {
@observable metrics: IPodMetrics = null; @observable metrics: IPodMetrics = null;
constructor(props: Props & Dependencies) { constructor(props: NamespaceDetailsProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -132,7 +132,7 @@ class NonInjectedNamespaceDetails extends React.Component<Props & Dependencies>
} }
} }
export const NamespaceDetails = withInjectables<Dependencies, Props>( export const NamespaceDetails = withInjectables<Dependencies, NamespaceDetailsProps>(
NonInjectedNamespaceDetails, NonInjectedNamespaceDetails,
{ {

View File

@ -7,7 +7,7 @@ import "./namespace-select-filter.scss";
import React from "react"; import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { components, PlaceholderProps } from "react-select"; import { components, OptionTypeBase, PlaceholderProps } from "react-select";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { NamespaceSelect } from "./namespace-select"; import { NamespaceSelect } from "./namespace-select";
@ -23,38 +23,33 @@ interface Dependencies {
model: NamespaceSelectFilterModel; model: NamespaceSelectFilterModel;
} }
class NonInjectedNamespaceSelectFilter extends React.Component< const NonInjectedNamespaceSelectFilter = observer(({ model }: SelectProps & Dependencies) => (
SelectProps & Dependencies <div
> { onKeyUp={model.onKeyUp}
render() { onKeyDown={model.onKeyDown}
return ( onClick={model.onClick}
<div >
onKeyUp={this.props.model.onKeyUp} <NamespaceSelect
onKeyDown={this.props.model.onKeyDown} isMulti={true}
onClick={this.props.model.onClick} menuIsOpen={model.menuIsOpen}
> components={{ Placeholder }}
<NamespaceSelect showAllNamespacesOption={true}
isMulti={true} closeMenuOnSelect={false}
menuIsOpen={this.props.model.menuIsOpen} controlShouldRenderValue={false}
components={{ Placeholder }} placeholder={""}
showAllNamespacesOption={true} onChange={model.onChange}
closeMenuOnSelect={false} onBlur={model.reset}
controlShouldRenderValue={false} formatOptionLabel={formatOptionLabelFor(model)}
placeholder={""} className="NamespaceSelectFilter"
onChange={this.props.model.onChange} menuClass="NamespaceSelectFilterMenu"
onBlur={this.props.model.reset} sort={(left, right) =>
formatOptionLabel={formatOptionLabelFor(this.props.model)} +model.selectedNames.has(right.value)
className="NamespaceSelectFilter" - +model.selectedNames.has(left.value)
menuClass="NamespaceSelectFilterMenu" }
sort={(left, right) => />
+this.props.model.selectedNames.has(right.value) - </div>
+this.props.model.selectedNames.has(left.value) ));
}
/>
</div>
);
}
}
const formatOptionLabelFor = const formatOptionLabelFor =
(model: NamespaceSelectFilterModel) => (model: NamespaceSelectFilterModel) =>
@ -74,54 +69,45 @@ const formatOptionLabelFor =
return label; return label;
}; };
export const NamespaceSelectFilter = withInjectables<Dependencies, SelectProps>( export const NamespaceSelectFilter = withInjectables<Dependencies, SelectProps>(NonInjectedNamespaceSelectFilter, {
observer(NonInjectedNamespaceSelectFilter), getProps: (di, props) => ({
model: di.inject(namespaceSelectFilterModelInjectable),
...props,
}),
});
{ export interface CustomPlaceholderProps extends PlaceholderProps<OptionTypeBase, boolean> {}
getProps: (di, props) => ({
model: di.inject(namespaceSelectFilterModelInjectable),
...props,
}),
},
);
type CustomPlaceholderProps = PlaceholderProps<any, boolean>;
interface PlaceholderDependencies { interface PlaceholderDependencies {
namespaceStore: NamespaceStore; namespaceStore: NamespaceStore;
} }
const NonInjectedPlaceholder = observer( const NonInjectedPlaceholder = observer(({ namespaceStore, ...props }: CustomPlaceholderProps & PlaceholderDependencies) => {
({ namespaceStore, ...props }: CustomPlaceholderProps & PlaceholderDependencies) => { const getPlaceholder = () => {
const getPlaceholder = (): React.ReactNode => { const namespaces = namespaceStore.contextNamespaces;
const namespaces = namespaceStore.contextNamespaces;
if (namespaceStore.areAllSelectedImplicitly || !namespaces.length) { if (namespaceStore.areAllSelectedImplicitly || namespaces.length === 0) {
return <>All namespaces</>; return "All namespaces";
} }
if (namespaces.length === 1) { const prefix = namespaces.length === 1
return <>Namespace: {namespaces[0]}</>; ? "Namespace"
} : "Namespaces";
return <>Namespaces: {namespaces.join(", ")}</>; return `${prefix}: ${namespaces.join(", ")}`;
}; };
return ( return (
<components.Placeholder {...props}> <components.Placeholder {...props}>
{getPlaceholder()} {getPlaceholder()}
</components.Placeholder> </components.Placeholder>
); );
}, },
); );
const Placeholder = withInjectables<PlaceholderDependencies, CustomPlaceholderProps>( const Placeholder = withInjectables<PlaceholderDependencies, CustomPlaceholderProps>( NonInjectedPlaceholder, {
NonInjectedPlaceholder, getProps: (di, props) => ({
namespaceStore: di.inject(namespaceStoreInjectable),
{ ...props,
getProps: (di, props) => ({ }),
namespaceStore: di.inject(namespaceStoreInjectable), });
...props,
}),
},
);

View File

@ -15,14 +15,14 @@ import type { NamespaceStore } from "./namespace-store/namespace.store";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable";
interface Props extends SelectProps { export interface NamespaceSelectProps extends SelectProps {
showIcons?: boolean; showIcons?: boolean;
sort?: (a: SelectOption<string>, b: SelectOption<string>) => number; sort?: (a: SelectOption<string>, b: SelectOption<string>) => number;
showAllNamespacesOption?: boolean; // show "All namespaces" option on the top (default: false) showAllNamespacesOption?: boolean; // show "All namespaces" option on the top (default: false)
customizeOptions?(options: SelectOption[]): SelectOption[]; customizeOptions?(options: SelectOption[]): SelectOption[];
} }
const defaultProps: Partial<Props> = { const defaultProps: Partial<NamespaceSelectProps> = {
showIcons: true, showIcons: true,
}; };
@ -31,10 +31,10 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedNamespaceSelect extends React.Component<Props & Dependencies> { class NonInjectedNamespaceSelect extends React.Component<NamespaceSelectProps & Dependencies> {
static defaultProps = defaultProps as object; static defaultProps = defaultProps as object;
constructor(props: Props & Dependencies) { constructor(props: NamespaceSelectProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -88,7 +88,7 @@ class NonInjectedNamespaceSelect extends React.Component<Props & Dependencies> {
} }
} }
export const NamespaceSelect = withInjectables<Dependencies, Props>( export const NamespaceSelect = withInjectables<Dependencies, NamespaceSelectProps>(
NonInjectedNamespaceSelect, NonInjectedNamespaceSelect,
{ {

View File

@ -14,11 +14,11 @@ import { KubeObjectMeta } from "../kube-object-meta";
import { EndpointSubsetList } from "./endpoint-subset-list"; import { EndpointSubsetList } from "./endpoint-subset-list";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<Endpoint> { export interface EndpointDetailsProps extends KubeObjectDetailsProps<Endpoint> {
} }
@observer @observer
export class EndpointDetails extends React.Component<Props> { export class EndpointDetails extends React.Component<EndpointDetailsProps> {
render() { render() {
const { object: endpoint } = this.props; const { object: endpoint } = this.props;

View File

@ -14,13 +14,13 @@ import { apiManager } from "../../../common/k8s-api/api-manager";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { getDetailsUrl } from "../kube-detail-params"; import { getDetailsUrl } from "../kube-detail-params";
interface Props { export interface EndpointSubsetListProps {
subset: EndpointSubset; subset: EndpointSubset;
endpoint: Endpoint; endpoint: Endpoint;
} }
@observer @observer
export class EndpointSubsetList extends React.Component<Props> { export class EndpointSubsetList extends React.Component<EndpointSubsetListProps> {
getAddressTableRow(ip: string) { getAddressTableRow(ip: string) {
const { subset } = this.props; const { subset } = this.props;

View File

@ -20,11 +20,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<EndpointRouteParams> { export interface EndpointsProps extends RouteComponentProps<EndpointRouteParams> {
} }
@observer @observer
export class Endpoints extends React.Component<Props> { export class Endpoints extends React.Component<EndpointsProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -21,14 +21,14 @@ import { ClusterMetricsResourceType } from "../../../common/cluster-types";
import { boundMethod } from "../../utils"; import { boundMethod } from "../../utils";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<Ingress> { export interface IngressDetailsProps extends KubeObjectDetailsProps<Ingress> {
} }
@observer @observer
export class IngressDetails extends React.Component<Props> { export class IngressDetails extends React.Component<IngressDetailsProps> {
@observable metrics: IIngressMetrics = null; @observable metrics: IIngressMetrics = null;
constructor(props: Props) { constructor(props: IngressDetailsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -21,11 +21,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<IngressRouteParams> { export interface IngressesProps extends RouteComponentProps<IngressRouteParams> {
} }
@observer @observer
export class Ingresses extends React.Component<Props> { export class Ingresses extends React.Component<IngressesProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -20,11 +20,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<NetworkPoliciesRouteParams> { export interface NetworkPoliciesProps extends RouteComponentProps<NetworkPoliciesRouteParams> {
} }
@observer @observer
export class NetworkPolicies extends React.Component<Props> { export class NetworkPolicies extends React.Component<NetworkPoliciesProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -17,11 +17,11 @@ import logger from "../../../common/logger";
import type { LabelMatchExpression, LabelSelector } from "../../../common/k8s-api/kube-object"; import type { LabelMatchExpression, LabelSelector } from "../../../common/k8s-api/kube-object";
import { isEmpty } from "lodash"; import { isEmpty } from "lodash";
interface Props extends KubeObjectDetailsProps<NetworkPolicy> { export interface NetworkPolicyDetailsProps extends KubeObjectDetailsProps<NetworkPolicy> {
} }
@observer @observer
export class NetworkPolicyDetails extends React.Component<Props> { export class NetworkPolicyDetails extends React.Component<NetworkPolicyDetailsProps> {
renderIPolicyIpBlock(ipBlock: IPolicyIpBlock | undefined) { renderIPolicyIpBlock(ipBlock: IPolicyIpBlock | undefined) {
if (!ipBlock) { if (!ipBlock) {
return null; return null;

View File

@ -14,12 +14,12 @@ import { podsApi, serviceApi } from "../../../common/k8s-api/endpoints";
import { getDetailsUrl } from "../kube-detail-params"; import { getDetailsUrl } from "../kube-detail-params";
import { PortForwardMenu } from "./port-forward-menu"; import { PortForwardMenu } from "./port-forward-menu";
interface Props { export interface PortForwardDetailsProps {
portForward: PortForwardItem; portForward: PortForwardItem;
hideDetails(): void; hideDetails(): void;
} }
export class PortForwardDetails extends React.Component<Props> { export class PortForwardDetails extends React.Component<PortForwardDetailsProps> {
renderResourceName() { renderResourceName() {
const { portForward } = this.props; const { portForward } = this.props;

View File

@ -14,7 +14,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import portForwardDialogModelInjectable from "../../port-forward/port-forward-dialog-model/port-forward-dialog-model.injectable"; import portForwardDialogModelInjectable from "../../port-forward/port-forward-dialog-model/port-forward-dialog-model.injectable";
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable"; import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
interface Props extends MenuActionsProps { export interface PortForwardMenuProps extends MenuActionsProps {
portForward: PortForwardItem; portForward: PortForwardItem;
hideDetails?(): void; hideDetails?(): void;
} }
@ -24,7 +24,7 @@ interface Dependencies {
openPortForwardDialog: (item: PortForwardItem) => void; openPortForwardDialog: (item: PortForwardItem) => void;
} }
class NonInjectedPortForwardMenu extends React.Component<Props & Dependencies> { class NonInjectedPortForwardMenu extends React.Component<PortForwardMenuProps & Dependencies> {
@boundMethod @boundMethod
remove() { remove() {
const { portForward } = this.props; const { portForward } = this.props;
@ -109,7 +109,7 @@ class NonInjectedPortForwardMenu extends React.Component<Props & Dependencies> {
} }
} }
export const PortForwardMenu = withInjectables<Dependencies, Props>( export const PortForwardMenu = withInjectables<Dependencies, PortForwardMenuProps>(
NonInjectedPortForwardMenu, NonInjectedPortForwardMenu,
{ {

View File

@ -27,7 +27,7 @@ enum columnId {
status = "status", status = "status",
} }
interface Props extends RouteComponentProps<PortForwardsRouteParams> { export interface PortForwardsProps extends RouteComponentProps<PortForwardsRouteParams> {
} }
interface Dependencies { interface Dependencies {
@ -35,7 +35,7 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedPortForwards extends React.Component<Props & Dependencies> { class NonInjectedPortForwards extends React.Component<PortForwardsProps & Dependencies> {
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
@ -143,7 +143,7 @@ class NonInjectedPortForwards extends React.Component<Props & Dependencies> {
} }
} }
export const PortForwards = withInjectables<Dependencies, Props>( export const PortForwards = withInjectables<Dependencies, PortForwardsProps>(
NonInjectedPortForwards, NonInjectedPortForwards,
{ {

View File

@ -12,12 +12,12 @@ import { endpointStore } from "../+network-endpoints/endpoints.store";
import { Spinner } from "../spinner"; import { Spinner } from "../spinner";
import { showDetails } from "../kube-detail-params"; import { showDetails } from "../kube-detail-params";
interface Props { export interface ServiceDetailsEndpointProps {
endpoint: KubeObject; endpoint: KubeObject;
} }
@observer @observer
export class ServiceDetailsEndpoint extends React.Component<Props> { export class ServiceDetailsEndpoint extends React.Component<ServiceDetailsEndpointProps> {
render() { render() {
const { endpoint } = this.props; const { endpoint } = this.props;

View File

@ -26,7 +26,7 @@ import kubeWatchApiInjectable
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable"; import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
import type { KubeWatchSubscribeStoreOptions } from "../../kube-watch-api/kube-watch-api"; import type { KubeWatchSubscribeStoreOptions } from "../../kube-watch-api/kube-watch-api";
interface Props extends KubeObjectDetailsProps<Service> { export interface ServiceDetailsProps extends KubeObjectDetailsProps<Service> {
} }
interface Dependencies { interface Dependencies {
@ -35,7 +35,7 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedServiceDetails extends React.Component<Props & Dependencies> { class NonInjectedServiceDetails extends React.Component<ServiceDetailsProps & Dependencies> {
componentDidMount() { componentDidMount() {
const { object: service } = this.props; const { object: service } = this.props;
@ -137,7 +137,7 @@ class NonInjectedServiceDetails extends React.Component<Props & Dependencies> {
} }
} }
export const ServiceDetails = withInjectables<Dependencies, Props>( export const ServiceDetails = withInjectables<Dependencies, ServiceDetailsProps>(
NonInjectedServiceDetails, NonInjectedServiceDetails,
{ {

View File

@ -25,7 +25,7 @@ import portForwardStoreInjectable from "../../port-forward/port-forward-store/po
import portForwardDialogModelInjectable from "../../port-forward/port-forward-dialog-model/port-forward-dialog-model.injectable"; import portForwardDialogModelInjectable from "../../port-forward/port-forward-dialog-model/port-forward-dialog-model.injectable";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props { export interface ServicePortComponentProps {
service: Service; service: Service;
port: ServicePort; port: ServicePort;
} }
@ -36,13 +36,13 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedServicePortComponent extends React.Component<Props & Dependencies> { class NonInjectedServicePortComponent extends React.Component<ServicePortComponentProps & Dependencies> {
@observable waiting = false; @observable waiting = false;
@observable forwardPort = 0; @observable forwardPort = 0;
@observable isPortForwarded = false; @observable isPortForwarded = false;
@observable isActive = false; @observable isActive = false;
constructor(props: Props & Dependencies) { constructor(props: ServicePortComponentProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
this.checkExistingPortForwarding(); this.checkExistingPortForwarding();
@ -186,7 +186,7 @@ class NonInjectedServicePortComponent extends React.Component<Props & Dependenci
} }
} }
export const ServicePortComponent = withInjectables<Dependencies, Props>( export const ServicePortComponent = withInjectables<Dependencies, ServicePortComponentProps>(
NonInjectedServicePortComponent, NonInjectedServicePortComponent,
{ {

View File

@ -26,11 +26,11 @@ enum columnId {
status = "status", status = "status",
} }
interface Props extends RouteComponentProps<ServicesRouteParams> { export interface ServicesProps extends RouteComponentProps<ServicesRouteParams> {
} }
@observer @observer
export class Services extends React.Component<Props> { export class Services extends React.Component<ServicesProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -12,12 +12,12 @@ import React from "react";
import type { Node } from "../../../common/k8s-api/endpoints"; import type { Node } from "../../../common/k8s-api/endpoints";
import { TableCell } from "../table/table-cell"; import { TableCell } from "../table/table-cell";
interface Props { export interface NodeDetailsResourcesProps {
node: Node; node: Node;
type: "allocatable" | "capacity"; type: "allocatable" | "capacity";
} }
export class NodeDetailsResources extends React.Component<Props> { export class NodeDetailsResources extends React.Component<NodeDetailsResourcesProps> {
toMi(resource: string) { toMi(resource: string) {
if (resource?.endsWith("Ki")) { if (resource?.endsWith("Ki")) {
return `${(parseInt(resource) / 1024).toFixed(1)}Mi`; return `${(parseInt(resource) / 1024).toFixed(1)}Mi`;

View File

@ -31,7 +31,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import kubeWatchApiInjectable import kubeWatchApiInjectable
from "../../kube-watch-api/kube-watch-api.injectable"; from "../../kube-watch-api/kube-watch-api.injectable";
interface Props extends KubeObjectDetailsProps<Node> { export interface NodeDetailsProps extends KubeObjectDetailsProps<Node> {
} }
interface Dependencies { interface Dependencies {
@ -39,10 +39,10 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedNodeDetails extends React.Component<Props & Dependencies> { class NonInjectedNodeDetails extends React.Component<NodeDetailsProps & Dependencies> {
@observable metrics: Partial<IClusterMetrics>; @observable metrics: Partial<IClusterMetrics>;
constructor(props: Props & Dependencies) { constructor(props: NodeDetailsProps & Dependencies) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }
@ -184,7 +184,7 @@ class NonInjectedNodeDetails extends React.Component<Props & Dependencies> {
} }
} }
export const NodeDetails = withInjectables<Dependencies, Props>( export const NodeDetails = withInjectables<Dependencies, NodeDetailsProps>(
NonInjectedNodeDetails, NonInjectedNodeDetails,
{ {

View File

@ -37,7 +37,7 @@ enum columnId {
status = "status", status = "status",
} }
interface Props extends RouteComponentProps<NodesRouteParams> { export interface NodesRouteProps extends RouteComponentProps<NodesRouteParams> {
} }
type MetricsTooltipFormatter = (metrics: [number, number]) => string; type MetricsTooltipFormatter = (metrics: [number, number]) => string;
@ -50,11 +50,11 @@ interface UsageArgs {
} }
@observer @observer
export class NodesRoute extends React.Component<Props> { export class NodesRoute extends React.Component<NodesRouteProps> {
@observable.ref metrics: Partial<INodeMetrics> = {}; @observable.ref metrics: Partial<INodeMetrics> = {};
private metricsWatcher = interval(30, async () => this.metrics = await getMetricsForAllNodes()); private metricsWatcher = interval(30, async () => this.metrics = await getMetricsForAllNodes());
constructor(props: Props) { constructor(props: NodesRouteProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -15,7 +15,7 @@ import { Table, TableCell, TableHead, TableRow } from "../table";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<PodSecurityPolicy> { export interface PodSecurityPolicyDetailsProps extends KubeObjectDetailsProps<PodSecurityPolicy> {
} }
interface RuleGroup { interface RuleGroup {
@ -27,7 +27,7 @@ interface RuleGroup {
} }
@observer @observer
export class PodSecurityPolicyDetails extends React.Component<Props> { export class PodSecurityPolicyDetails extends React.Component<PodSecurityPolicyDetailsProps> {
renderRuleGroup( title: React.ReactNode, group: RuleGroup) { renderRuleGroup( title: React.ReactNode, group: RuleGroup) {
if (!group) return null; if (!group) return null;
const { rule, ranges } = group; const { rule, ranges } = group;

View File

@ -21,8 +21,8 @@ import { Notifications } from "../notifications";
import { type HelmRepo, HelmRepoManager } from "../../../main/helm/helm-repo-manager"; import { type HelmRepo, HelmRepoManager } from "../../../main/helm/helm-repo-manager";
import { requestOpenFilePickingDialog } from "../../ipc"; import { requestOpenFilePickingDialog } from "../../ipc";
interface Props extends Partial<DialogProps> { export interface AddHelmRepoDialogProps extends Partial<DialogProps> {
onAddRepo: Function; onAddRepo: () => void;
} }
enum FileType { enum FileType {
@ -40,11 +40,11 @@ function getEmptyRepo(): HelmRepo {
} }
@observer @observer
export class AddHelmRepoDialog extends React.Component<Props> { export class AddHelmRepoDialog extends React.Component<AddHelmRepoDialogProps> {
private static keyExtensions = ["key", "keystore", "jks", "p12", "pfx", "pem"]; private static keyExtensions = ["key", "keystore", "jks", "p12", "pfx", "pem"];
private static certExtensions = ["crt", "cer", "ca-bundle", "p7b", "p7c", "p7s", "p12", "pfx", "pem"]; private static certExtensions = ["crt", "cer", "ca-bundle", "p7b", "p7c", "p7s", "p12", "pfx", "pem"];
constructor(props: Props) { constructor(props: AddHelmRepoDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -7,7 +7,7 @@ import type { AppPreferenceRegistration } from "./app-preferences/app-preference
import React from "react"; import React from "react";
import { cssNames } from "../../../renderer/utils"; import { cssNames } from "../../../renderer/utils";
interface ExtensionSettingsProps { export interface ExtensionSettingsProps {
setting: AppPreferenceRegistration; setting: AppPreferenceRegistration;
size: "small" | "normal"; size: "small" | "normal";
} }

View File

@ -9,13 +9,13 @@ import React, { DOMAttributes } from "react";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import { Icon } from "../icon"; import { Icon } from "../icon";
interface Props extends DOMAttributes<any>{ export interface RemovableItemProps extends DOMAttributes<any>{
icon?: string; icon?: string;
onRemove: () => void; onRemove: () => void;
className?: string; className?: string;
} }
export function RemovableItem({ icon, onRemove, children, className, ...rest }: Props) { export function RemovableItem({ icon, onRemove, children, className, ...rest }: RemovableItemProps) {
return ( return (
<div className={cssNames(styles.item, "flex gaps align-center justify-space-between", className)} {...rest}> <div className={cssNames(styles.item, "flex gaps align-center justify-space-between", className)} {...rest}>
{icon && ( {icon && (

View File

@ -24,7 +24,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import kubeWatchApiInjectable import kubeWatchApiInjectable
from "../../kube-watch-api/kube-watch-api.injectable"; from "../../kube-watch-api/kube-watch-api.injectable";
interface Props extends KubeObjectDetailsProps<StorageClass> { export interface StorageClassDetailsProps extends KubeObjectDetailsProps<StorageClass> {
} }
interface Dependencies { interface Dependencies {
@ -32,7 +32,7 @@ interface Dependencies {
} }
@observer @observer
class NonInjectedStorageClassDetails extends React.Component<Props & Dependencies> { class NonInjectedStorageClassDetails extends React.Component<StorageClassDetailsProps & Dependencies> {
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
this.props.subscribeStores([ this.props.subscribeStores([
@ -96,7 +96,7 @@ class NonInjectedStorageClassDetails extends React.Component<Props & Dependencie
} }
} }
export const StorageClassDetails = withInjectables<Dependencies, Props>( export const StorageClassDetails = withInjectables<Dependencies, StorageClassDetailsProps>(
NonInjectedStorageClassDetails, NonInjectedStorageClassDetails,
{ {

View File

@ -21,11 +21,11 @@ enum columnId {
reclaimPolicy = "reclaim", reclaimPolicy = "reclaim",
} }
interface Props extends RouteComponentProps<StorageClassesRouteParams> { export interface StorageClassesProps extends RouteComponentProps<StorageClassesRouteParams> {
} }
@observer @observer
export class StorageClasses extends React.Component<Props> { export class StorageClasses extends React.Component<StorageClassesProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -23,14 +23,14 @@ import { getDetailsUrl } from "../kube-detail-params";
import { boundMethod } from "../../utils"; import { boundMethod } from "../../utils";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<PersistentVolumeClaim> { export interface PersistentVolumeClaimDetailsProps extends KubeObjectDetailsProps<PersistentVolumeClaim> {
} }
@observer @observer
export class PersistentVolumeClaimDetails extends React.Component<Props> { export class PersistentVolumeClaimDetails extends React.Component<PersistentVolumeClaimDetailsProps> {
@observable metrics: IPvcMetrics = null; @observable metrics: IPvcMetrics = null;
constructor(props: Props) { constructor(props: PersistentVolumeClaimDetailsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -28,11 +28,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<VolumeClaimsRouteParams> { export interface PersistentVolumeClaimsProps extends RouteComponentProps<VolumeClaimsRouteParams> {
} }
@observer @observer
export class PersistentVolumeClaims extends React.Component<Props> { export class PersistentVolumeClaims extends React.Component<PersistentVolumeClaimsProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -20,7 +20,7 @@ import { TableHead } from "../table/table-head";
import { volumesStore } from "./volumes.store"; import { volumesStore } from "./volumes.store";
import kebabCase from "lodash/kebabCase"; import kebabCase from "lodash/kebabCase";
interface Props { export interface VolumeDetailsListProps {
persistentVolumes: PersistentVolume[]; persistentVolumes: PersistentVolume[];
} }
@ -31,7 +31,7 @@ enum sortBy {
} }
@observer @observer
export class VolumeDetailsList extends React.Component<Props> { export class VolumeDetailsList extends React.Component<VolumeDetailsListProps> {
private sortingCallbacks = { private sortingCallbacks = {
[sortBy.name]: (volume: PersistentVolume) => volume.getName(), [sortBy.name]: (volume: PersistentVolume) => volume.getName(),
[sortBy.capacity]: (volume: PersistentVolume) => volume.getCapacity(), [sortBy.capacity]: (volume: PersistentVolume) => volume.getCapacity(),

View File

@ -17,11 +17,11 @@ import { KubeObjectMeta } from "../kube-object-meta";
import { getDetailsUrl } from "../kube-detail-params"; import { getDetailsUrl } from "../kube-detail-params";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
interface Props extends KubeObjectDetailsProps<PersistentVolume> { export interface PersistentVolumeDetailsProps extends KubeObjectDetailsProps<PersistentVolume> {
} }
@observer @observer
export class PersistentVolumeDetails extends React.Component<Props> { export class PersistentVolumeDetails extends React.Component<PersistentVolumeDetailsProps> {
render() { render() {
const { object: volume } = this.props; const { object: volume } = this.props;

View File

@ -25,11 +25,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<VolumesRouteParams> { export interface PersistentVolumesProps extends RouteComponentProps<VolumesRouteParams> {
} }
@observer @observer
export class PersistentVolumes extends React.Component<Props> { export class PersistentVolumes extends React.Component<PersistentVolumesProps> {
render() { render() {
return ( return (
<KubeObjectListLayout <KubeObjectListLayout

View File

@ -21,14 +21,14 @@ import { ClusterRoleBindingDialog } from "./dialog";
import { clusterRoleBindingsStore } from "./store"; import { clusterRoleBindingsStore } from "./store";
import { hashClusterRoleBindingSubject } from "./hashers"; import { hashClusterRoleBindingSubject } from "./hashers";
interface Props extends KubeObjectDetailsProps<ClusterRoleBinding> { export interface ClusterRoleBindingDetailsProps extends KubeObjectDetailsProps<ClusterRoleBinding> {
} }
@observer @observer
export class ClusterRoleBindingDetails extends React.Component<Props> { export class ClusterRoleBindingDetails extends React.Component<ClusterRoleBindingDetailsProps> {
selectedSubjects = new ObservableHashSet<ClusterRoleBindingSubject>([], hashClusterRoleBindingSubject); selectedSubjects = new ObservableHashSet<ClusterRoleBindingSubject>([], hashClusterRoleBindingSubject);
constructor(props: Props) { constructor(props: ClusterRoleBindingDetailsProps) {
super(props); super(props);
autoBind(this); autoBind(this);
} }

View File

@ -25,7 +25,7 @@ import { ObservableHashSet, nFircate } from "../../../utils";
import { Input } from "../../input"; import { Input } from "../../input";
import { TooltipPosition } from "../../tooltip"; import { TooltipPosition } from "../../tooltip";
interface Props extends Partial<DialogProps> { export interface ClusterRoleBindingDialogProps extends Partial<DialogProps> {
} }
interface DialogState { interface DialogState {
@ -34,12 +34,12 @@ interface DialogState {
} }
@observer @observer
export class ClusterRoleBindingDialog extends React.Component<Props> { export class ClusterRoleBindingDialog extends React.Component<ClusterRoleBindingDialogProps> {
static state = observable.object<DialogState>({ static state = observable.object<DialogState>({
isOpen: false, isOpen: false,
}); });
constructor(props: Props) { constructor(props: ClusterRoleBindingDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -23,11 +23,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<ClusterRoleBindingsRouteParams> { export interface ClusterRoleBindingsProps extends RouteComponentProps<ClusterRoleBindingsRouteParams> {
} }
@observer @observer
export class ClusterRoleBindings extends React.Component<Props> { export class ClusterRoleBindings extends React.Component<ClusterRoleBindingsProps> {
render() { render() {
return ( return (
<> <>

View File

@ -16,16 +16,16 @@ import { Notifications } from "../../notifications";
import { Wizard, WizardStep } from "../../wizard"; import { Wizard, WizardStep } from "../../wizard";
import { clusterRolesStore } from "./store"; import { clusterRolesStore } from "./store";
interface Props extends Partial<DialogProps> { export interface AddClusterRoleDialogProps extends Partial<DialogProps> {
} }
@observer @observer
export class AddClusterRoleDialog extends React.Component<Props> { export class AddClusterRoleDialog extends React.Component<AddClusterRoleDialogProps> {
static isOpen = observable.box(false); static isOpen = observable.box(false);
@observable clusterRoleName = ""; @observable clusterRoleName = "";
constructor(props: Props) { constructor(props: AddClusterRoleDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -13,11 +13,11 @@ import type { KubeObjectDetailsProps } from "../../kube-object-details";
import { KubeObjectMeta } from "../../kube-object-meta"; import { KubeObjectMeta } from "../../kube-object-meta";
import type { ClusterRole } from "../../../../common/k8s-api/endpoints"; import type { ClusterRole } from "../../../../common/k8s-api/endpoints";
interface Props extends KubeObjectDetailsProps<ClusterRole> { export interface ClusterRoleDetailsProps extends KubeObjectDetailsProps<ClusterRole> {
} }
@observer @observer
export class ClusterRoleDetails extends React.Component<Props> { export class ClusterRoleDetails extends React.Component<ClusterRoleDetailsProps> {
render() { render() {
const { object: clusterRole } = this.props; const { object: clusterRole } = this.props;

View File

@ -20,11 +20,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<ClusterRolesRouteParams> { export interface ClusterRolesProps extends RouteComponentProps<ClusterRolesRouteParams> {
} }
@observer @observer
export class ClusterRoles extends React.Component<Props> { export class ClusterRoles extends React.Component<ClusterRolesProps> {
render() { render() {
return ( return (
<> <>

View File

@ -21,11 +21,11 @@ import { roleBindingsStore } from "./store";
import { ObservableHashSet } from "../../../../common/utils/hash-set"; import { ObservableHashSet } from "../../../../common/utils/hash-set";
import { hashRoleBindingSubject } from "./hashers"; import { hashRoleBindingSubject } from "./hashers";
interface Props extends KubeObjectDetailsProps<RoleBinding> { export interface RoleBindingDetailsProps extends KubeObjectDetailsProps<RoleBinding> {
} }
@observer @observer
export class RoleBindingDetails extends React.Component<Props> { export class RoleBindingDetails extends React.Component<RoleBindingDetailsProps> {
selectedSubjects = new ObservableHashSet<RoleBindingSubject>([], hashRoleBindingSubject); selectedSubjects = new ObservableHashSet<RoleBindingSubject>([], hashRoleBindingSubject);
async componentDidMount() { async componentDidMount() {

View File

@ -26,7 +26,7 @@ import { clusterRolesStore } from "../+cluster-roles/store";
import { Input } from "../../input"; import { Input } from "../../input";
import { ObservableHashSet, nFircate } from "../../../utils"; import { ObservableHashSet, nFircate } from "../../../utils";
interface Props extends Partial<DialogProps> { export interface RoleBindingDialogProps extends Partial<DialogProps> {
} }
interface DialogState { interface DialogState {
@ -35,12 +35,12 @@ interface DialogState {
} }
@observer @observer
export class RoleBindingDialog extends React.Component<Props> { export class RoleBindingDialog extends React.Component<RoleBindingDialogProps> {
static state = observable.object<DialogState>({ static state = observable.object<DialogState>({
isOpen: false, isOpen: false,
}); });
constructor(props: Props) { constructor(props: RoleBindingDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -23,11 +23,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<RoleBindingsRouteParams> { export interface RoleBindingsProps extends RouteComponentProps<RoleBindingsRouteParams> {
} }
@observer @observer
export class RoleBindings extends React.Component<Props> { export class RoleBindings extends React.Component<RoleBindingsProps> {
render() { render() {
return ( return (
<> <>

View File

@ -18,17 +18,17 @@ import { Notifications } from "../../notifications";
import { Wizard, WizardStep } from "../../wizard"; import { Wizard, WizardStep } from "../../wizard";
import { rolesStore } from "./store"; import { rolesStore } from "./store";
interface Props extends Partial<DialogProps> { export interface AddRoleDialogProps extends Partial<DialogProps> {
} }
@observer @observer
export class AddRoleDialog extends React.Component<Props> { export class AddRoleDialog extends React.Component<AddRoleDialogProps> {
static isOpen = observable.box(false); static isOpen = observable.box(false);
@observable roleName = ""; @observable roleName = "";
@observable namespace = ""; @observable namespace = "";
constructor(props: Props) { constructor(props: AddRoleDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -13,11 +13,11 @@ import { DrawerTitle } from "../../drawer";
import type { KubeObjectDetailsProps } from "../../kube-object-details"; import type { KubeObjectDetailsProps } from "../../kube-object-details";
import { KubeObjectMeta } from "../../kube-object-meta"; import { KubeObjectMeta } from "../../kube-object-meta";
interface Props extends KubeObjectDetailsProps<Role> { export interface RoleDetailsProps extends KubeObjectDetailsProps<Role> {
} }
@observer @observer
export class RoleDetails extends React.Component<Props> { export class RoleDetails extends React.Component<RoleDetailsProps> {
render() { render() {
const { object: role } = this.props; const { object: role } = this.props;

View File

@ -20,11 +20,11 @@ enum columnId {
age = "age", age = "age",
} }
interface Props extends RouteComponentProps<RolesRouteParams> { export interface RolesProps extends RouteComponentProps<RolesRouteParams> {
} }
@observer @observer
export class Roles extends React.Component<Props> { export class Roles extends React.Component<RolesProps> {
render() { render() {
return ( return (
<> <>

View File

@ -19,17 +19,17 @@ import { Notifications } from "../../notifications";
import { Wizard, WizardStep } from "../../wizard"; import { Wizard, WizardStep } from "../../wizard";
import { serviceAccountsStore } from "./store"; import { serviceAccountsStore } from "./store";
interface Props extends Partial<DialogProps> { export interface CreateServiceAccountDialogProps extends Partial<DialogProps> {
} }
@observer @observer
export class CreateServiceAccountDialog extends React.Component<Props> { export class CreateServiceAccountDialog extends React.Component<CreateServiceAccountDialogProps> {
static isOpen = observable.box(false); static isOpen = observable.box(false);
@observable name = ""; @observable name = "";
@observable namespace = "default"; @observable namespace = "default";
constructor(props: Props) { constructor(props: CreateServiceAccountDialogProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

View File

@ -20,11 +20,11 @@ import { Spinner } from "../../spinner";
import { ServiceAccountsSecret } from "./secret"; import { ServiceAccountsSecret } from "./secret";
import { getDetailsUrl } from "../../kube-detail-params"; import { getDetailsUrl } from "../../kube-detail-params";
interface Props extends KubeObjectDetailsProps<ServiceAccount> { export interface ServiceAccountsDetailsProps extends KubeObjectDetailsProps<ServiceAccount> {
} }
@observer @observer
export class ServiceAccountsDetails extends React.Component<Props> { export class ServiceAccountsDetails extends React.Component<ServiceAccountsDetailsProps> {
@observable secrets: Secret[]; @observable secrets: Secret[];
@observable imagePullSecrets: Secret[]; @observable imagePullSecrets: Secret[];
@ -53,7 +53,7 @@ export class ServiceAccountsDetails extends React.Component<Props> {
]); ]);
} }
constructor(props: Props) { constructor(props: ServiceAccountsDetailsProps) {
super(props); super(props);
makeObservable(this); makeObservable(this);
} }

Some files were not shown because too many files have changed in this diff Show More