diff --git a/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/CheckpointDetailDrawer.module.css b/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/CheckpointDetailDrawer.module.css new file mode 100644 index 00000000..5a0d074c --- /dev/null +++ b/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/CheckpointDetailDrawer.module.css @@ -0,0 +1,65 @@ +/* index.tsx */ +.titleRow { + display: flex; + align-items: center; + gap: 8px; +} + +.titleJar { + font-family: monospace; + font-size: 13px; +} + +.statusPill { + font-size: 11px; + padding: 2px 8px; + border-radius: 3px; + background: var(--bg-inset); +} + +.metaLine { + font-size: 12px; + color: var(--text-muted); + line-height: 1.5; + margin-bottom: 12px; +} + +.tabContent { + margin-top: 12px; +} + +.footerRow { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; +} + +.footerHint { + font-size: 12px; + color: var(--text-muted); +} + +/* LogsPanel.tsx */ +.filterBar { + display: flex; + gap: 8px; + align-items: center; + padding: 8px 0; + font-size: 12px; +} + +.emptyState { + padding: 16px; + color: var(--text-muted); +} + +.logRow { + font-family: monospace; + font-size: 11px; + padding: 2px 0; +} + +.logTimestamp { + color: var(--text-muted); +} diff --git a/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/LogsPanel.tsx b/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/LogsPanel.tsx index d6058adf..c8256cdf 100644 --- a/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/LogsPanel.tsx +++ b/ui/src/pages/AppsTab/AppDeploymentPage/CheckpointDetailDrawer/LogsPanel.tsx @@ -2,6 +2,7 @@ import { useMemo, useState } from 'react'; import { useInfiniteApplicationLogs } from '../../../../api/queries/logs'; import type { Deployment } from '../../../../api/queries/admin/apps'; import { instanceIdsFor } from './instance-id'; +import styles from './CheckpointDetailDrawer.module.css'; interface Props { deployment: Deployment; @@ -12,7 +13,8 @@ interface Props { export function LogsPanel({ deployment, appSlug, envSlug }: Props) { const allInstanceIds = useMemo( () => instanceIdsFor(deployment, envSlug, appSlug), - [deployment, envSlug, appSlug] + // eslint-disable-next-line react-hooks/exhaustive-deps + [deployment.id, deployment.replicaStates, envSlug, appSlug] ); const [replicaFilter, setReplicaFilter] = useState<'all' | number>('all'); @@ -28,7 +30,7 @@ export function LogsPanel({ deployment, appSlug, envSlug }: Props) { return (