diff --git a/src/renderer/components/radio/radio.tsx b/src/renderer/components/radio/radio.tsx index c92439a6db..6e0ed53ba6 100644 --- a/src/renderer/components/radio/radio.tsx +++ b/src/renderer/components/radio/radio.tsx @@ -21,13 +21,13 @@ import "./radio.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames, IClassName } from "../../utils"; import uniqueId from "lodash/uniqueId"; // todo: refactor with contexts export interface RadioGroupProps { - className?: any; + className?: IClassName; value?: any; asButtons?: boolean; disabled?: boolean; @@ -51,7 +51,7 @@ export class RadioGroup extends React.Component { disabled: disabled !== undefined ? disabled : radio.props.disabled, checked: radio.props.value === value, onChange - } as any); + }); })} ); diff --git a/src/renderer/components/resource-metrics/resource-metrics.tsx b/src/renderer/components/resource-metrics/resource-metrics.tsx index 3b7a214fbb..dbb7f7a37d 100644 --- a/src/renderer/components/resource-metrics/resource-metrics.tsx +++ b/src/renderer/components/resource-metrics/resource-metrics.tsx @@ -25,18 +25,17 @@ import React, { createContext, useEffect, useState } from "react"; import { Radio, RadioGroup } from "../radio"; import { useInterval } from "../../hooks"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; -import { cssNames } from "../../utils"; +import { cssNames, IClassName } from "../../utils"; import { Spinner } from "../spinner"; -interface Props extends React.HTMLProps { - tabs: React.ReactNode[]; +interface Props { + tabs: string[] | string[][]; object?: KubeObject; loader?: () => void; interval?: number; - className?: string; - params?: { - [key: string]: any; - }; + className?: IClassName; + params?: T; + children?: React.ReactNode; } export type IResourceMetricsValue = { @@ -47,13 +46,13 @@ export type IResourceMetricsValue = { export const ResourceMetricsContext = createContext(null); -const defaultProps: Partial = { +const defaultProps: Partial> = { interval: 60 // 1 min }; ResourceMetrics.defaultProps = defaultProps; -export function ResourceMetrics({ object, loader, interval, tabs, children, className, params }: Props) { +export function ResourceMetrics({ object, loader, interval, tabs, children, className, params }: Props) { const [tabId, setTabId] = useState(0); useEffect(() => { @@ -64,36 +63,28 @@ export function ResourceMetrics({ object, loader, interval, tabs, children, clas if (loader) loader(); }, interval * 1000); - const renderContents = () => { - return ( - <> -
- setTabId(tabs.findIndex(tab => tab == value))} - > - {tabs.map((tab, index) => ( - - ))} - -
- -
- {children} -
-
-
- -
- - ); - }; - return (
- {renderContents()} +
+ setTabId(tabs.findIndex(tab => tab == value))} + > + {tabs.map((tab, index) => ( + + ))} + +
+ +
+ {children} +
+
+
+ +
); } diff --git a/src/renderer/hooks/useInterval.ts b/src/renderer/hooks/useInterval.ts index 900209a21f..fd18a7b63a 100644 --- a/src/renderer/hooks/useInterval.ts +++ b/src/renderer/hooks/useInterval.ts @@ -21,6 +21,11 @@ import { useRef, useEffect } from "react"; +/** + * Call `callback` every `delay` ms. Does not fire immediately. + * @param callback The function to call + * @param delay The number of ms between each call + */ export function useInterval(callback: () => void, delay: number) { const savedCallback = useRef<() => void>();