diff --git a/frontend/plugins/kubepanel/src/components/kube/kube-badge.tsx b/frontend/plugins/kubepanel/src/components/kube/kube-badge.tsx index 0103359d4c8..80f676c98de 100644 --- a/frontend/plugins/kubepanel/src/components/kube/kube-badge.tsx +++ b/frontend/plugins/kubepanel/src/components/kube/kube-badge.tsx @@ -21,7 +21,7 @@ export const KubeBadge = ({ const { offsetWidth = 0, scrollWidth = 0 } = elem.current ?? {}; setIsExpandable(expandable && offsetWidth < scrollWidth); - }, [expandable, elem.current]); + }, [expandable]); const onClick = (e: React.MouseEvent) => { console.log(e.target); @@ -36,15 +36,18 @@ export const KubeBadge = ({ return (
- {label} + + {label} +
); }; diff --git a/frontend/plugins/kubepanel/src/components/kube/reactive-duration.tsx b/frontend/plugins/kubepanel/src/components/kube/reactive-duration.tsx index 709ba75dc8b..94518419644 100644 --- a/frontend/plugins/kubepanel/src/components/kube/reactive-duration.tsx +++ b/frontend/plugins/kubepanel/src/components/kube/reactive-duration.tsx @@ -45,11 +45,11 @@ export const ReactiveDuration = ({ timestamp, compact = true }: ReactiveDuration if (!timestamp) { return <><unknown>; } - const [duration, setDuration] = useState(0); - const [ms, setMs] = useState(1000); - const timestampSeconds = new Date(timestamp).getTime(); + const [duration, setDuration] = useState(Date.now() - timestampSeconds); + const [ms, setMs] = useState(computeUpdateInterval(timestampSeconds, compact)); + useEffect(() => { const interval = setInterval(() => { const nextMs = computeUpdateInterval(timestampSeconds, compact); diff --git a/frontend/plugins/kubepanel/src/constants/theme.ts b/frontend/plugins/kubepanel/src/constants/theme.ts new file mode 100644 index 00000000000..9750a5235bf --- /dev/null +++ b/frontend/plugins/kubepanel/src/constants/theme.ts @@ -0,0 +1,13 @@ +import { ThemeConfig } from 'antd'; + +export const theme: ThemeConfig = { + components: { + Menu: { + itemSelectedBg: '#9699B41A', + itemColor: '#485058' + }, + Collapse: { + headerPadding: 0 + } + } +}; diff --git a/frontend/plugins/kubepanel/src/pages/api/update.ts b/frontend/plugins/kubepanel/src/pages/api/update.ts index 0e41c1fb983..5d26c55504f 100644 --- a/frontend/plugins/kubepanel/src/pages/api/update.ts +++ b/frontend/plugins/kubepanel/src/pages/api/update.ts @@ -7,7 +7,7 @@ import { jsonRes } from '@/services/backend/response'; import { NextApiRequest, NextApiResponse } from 'next'; import yaml from 'js-yaml'; import { mustGetTypedProperty } from '@/utils/api'; -import { isString } from 'lodash'; +import { entries, isString } from 'lodash'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { @@ -30,6 +30,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) name, resourceData ); + console.log(data); jsonRes(res, { code: 200, diff --git a/frontend/plugins/kubepanel/src/pages/kubepanel/components/action-button/update-editor-modal.tsx b/frontend/plugins/kubepanel/src/pages/kubepanel/components/action-button/update-editor-modal.tsx index 626a088e5bf..adc7843f752 100644 --- a/frontend/plugins/kubepanel/src/pages/kubepanel/components/action-button/update-editor-modal.tsx +++ b/frontend/plugins/kubepanel/src/pages/kubepanel/components/action-button/update-editor-modal.tsx @@ -1,8 +1,8 @@ import { KubeObject } from '@/k8slens/kube-object'; import { ApiResp } from '@/services/kubernet'; +import { dumpKubeObject } from '@/utils/yaml'; import { Editor } from '@monaco-editor/react'; import { Button, Modal, message } from 'antd'; -import yaml from 'js-yaml'; import { editor } from 'monaco-editor'; import { useEffect, useRef, useState } from 'react'; @@ -42,13 +42,7 @@ const UpdateEditorModal = ({ updateRequest(); }, [clickedUpdate]); - const editorValue = yaml.dump({ - apiVersion: obj.apiVersion, - kind: obj.kind, - metadata: obj.metadata, - status: obj.status, - spec: obj.spec - }); + const editorValue = dumpKubeObject(obj); return ( <> diff --git a/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer-collapse.tsx b/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer-collapse.tsx index 0e404a558a4..81208a789a6 100644 --- a/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer-collapse.tsx +++ b/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer-collapse.tsx @@ -1,5 +1,5 @@ import { DrawerItem } from '@/pages/kubepanel/components/drawer/drawer-item'; -import { Collapse, ConfigProvider } from 'antd'; +import { Collapse } from 'antd'; interface Props { children: React.ReactNode; @@ -11,28 +11,14 @@ interface Props { const DrawerCollapse = ({ children, header }: Props) => { if (!header) return null; return ( - - + } + key="1" > - } - key="1" - > - {children} - - - + {children} + + ); }; diff --git a/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer.tsx b/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer.tsx index e500b81167a..2ada0eb88ee 100644 --- a/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer.tsx +++ b/frontend/plugins/kubepanel/src/pages/kubepanel/components/drawer/drawer.tsx @@ -13,8 +13,9 @@ const Drawer = ({ title, children, open, onClose }: Props) => { open={open} closeIcon={} title={{title}} - width="60vh" + width="550px" onClose={onClose} + destroyOnClose >
{children}
diff --git a/frontend/plugins/kubepanel/src/pages/kubepanel/components/layout.tsx b/frontend/plugins/kubepanel/src/pages/kubepanel/components/layout.tsx index 84f37bf5689..3ee3baca765 100644 --- a/frontend/plugins/kubepanel/src/pages/kubepanel/components/layout.tsx +++ b/frontend/plugins/kubepanel/src/pages/kubepanel/components/layout.tsx @@ -1,5 +1,6 @@ -import { Layout } from 'antd'; +import { ConfigProvider, Layout } from 'antd'; import ResourceSideNav, { SideNavItemKey } from './sidebar/sidebar'; +import { theme } from '@/constants/theme'; const { Header, Footer, Sider, Content } = Layout; @@ -10,13 +11,15 @@ interface Props { export default function AppLayout({ children, onClickSideNavItem }: Props) { return ( - - - - + - {children} + + + + + {children} + - + ); } diff --git a/frontend/plugins/kubepanel/src/utils/yaml.ts b/frontend/plugins/kubepanel/src/utils/yaml.ts new file mode 100644 index 00000000000..e0e7fee6f9b --- /dev/null +++ b/frontend/plugins/kubepanel/src/utils/yaml.ts @@ -0,0 +1,13 @@ +import { KubeObject } from '@/k8slens/kube-object'; +import { dump } from 'js-yaml'; +import { PartialDeep } from 'type-fest'; + +export function dumpKubeObject(obj: PartialDeep) { + const objWithoutFunction: Record = {}; + for (const [key, value] of Object.entries(obj)) { + if (typeof value !== 'function') { + objWithoutFunction[key] = value; + } + } + return dump(objWithoutFunction); +}