diff --git a/src/components/Kubernetes/ReplicaSetList.tsx b/src/components/Kubernetes/ReplicaSetList.tsx index 32ce4087..5b674183 100644 --- a/src/components/Kubernetes/ReplicaSetList.tsx +++ b/src/components/Kubernetes/ReplicaSetList.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui"; -import { Scale, Pencil, Trash2, FileText } from "lucide-react"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Button } from "@/components/ui"; +import { Scale, Pencil, Trash2, FileText, Settings } from "lucide-react"; import type { ReplicaSetInfo } from "@/lib/tauriCommands"; import { scaleReplicasetCmd, @@ -12,6 +12,9 @@ import { ConfirmDeleteDialog } from "./ConfirmDeleteDialog"; import { ScaleModal } from "./ScaleModal"; import { EditResourceModal } from "./EditResourceModal"; import { WorkloadLogsModal } from "./WorkloadLogsModal"; +import { useColumnConfig } from "@/hooks/useColumnConfig"; +import { DEFAULT_COLUMNS } from "@/config/defaultColumns"; +import { ColumnConfigModal } from "@/components/tables/ColumnConfigModal"; interface ReplicaSetListProps { replicaSets: ReplicaSetInfo[]; @@ -39,6 +42,11 @@ export function ReplicaSetList({ const [activeModal, setActiveModal] = useState(null); const [isActing, setIsActing] = useState(false); const [actionError, setActionError] = useState(null); + const [showColumnConfig, setShowColumnConfig] = useState(false); + + // Configurable columns + const columnConfig = useColumnConfig("replicasets", DEFAULT_COLUMNS.replicasets); + const { isColumnVisible } = columnConfig; const openEdit = async (rs: ReplicaSetInfo) => { setActionError(null); @@ -67,40 +75,65 @@ export function ReplicaSetList({ {actionError && (

{actionError}

)} +
+
+ {replicaSets.length} {replicaSets.length === 1 ? "replica set" : "replica sets"} +
+ +
- Name - Namespace - Replicas - Ready - Age - Labels - Actions + {isColumnVisible("name") && Name} + {isColumnVisible("namespace") && Namespace} + {isColumnVisible("desired") && Desired} + {isColumnVisible("current") && Current} + {isColumnVisible("ready") && Ready} + {isColumnVisible("age") && Age} + {isColumnVisible("labels") && Labels} + {isColumnVisible("actions") && Actions} {replicaSets.length === 0 ? ( - + No replica sets found ) : ( replicaSets.map((rs) => ( - {rs.name} - {rs.namespace} - {rs.replicas} - {rs.ready} - {rs.age} - - {Object.entries(rs.labels) - .map(([k, v]) => `${k}=${v}`) - .join(", ")} - - + {isColumnVisible("name") && ( + {rs.name} + )} + {isColumnVisible("namespace") && ( + {rs.namespace} + )} + {isColumnVisible("desired") && {rs.replicas}} + {isColumnVisible("current") && {rs.replicas}} + {isColumnVisible("ready") && {rs.ready}} + {isColumnVisible("age") && ( + {rs.age} + )} + {isColumnVisible("labels") && ( + + {Object.entries(rs.labels) + .map(([k, v]) => `${k}=${v}`) + .join(", ")} + + )} + {isColumnVisible("actions") && ( + - + + )} )) )} @@ -184,6 +218,23 @@ export function ReplicaSetList({ onConfirm={handleDelete} /> )} + + ); } diff --git a/src/components/Kubernetes/ReplicationControllerList.tsx b/src/components/Kubernetes/ReplicationControllerList.tsx index defa64e9..35c24599 100644 --- a/src/components/Kubernetes/ReplicationControllerList.tsx +++ b/src/components/Kubernetes/ReplicationControllerList.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui"; -import { Scale, Pencil, Trash2, FileText } from "lucide-react"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Button } from "@/components/ui"; +import { Scale, Pencil, Trash2, FileText, Settings } from "lucide-react"; import type { ReplicationControllerInfo } from "@/lib/tauriCommands"; import { scaleReplicationcontrollerCmd, @@ -12,6 +12,9 @@ import { ConfirmDeleteDialog } from "./ConfirmDeleteDialog"; import { ScaleModal } from "./ScaleModal"; import { EditResourceModal } from "./EditResourceModal"; import { WorkloadLogsModal } from "./WorkloadLogsModal"; +import { useColumnConfig } from "@/hooks/useColumnConfig"; +import { DEFAULT_COLUMNS } from "@/config/defaultColumns"; +import { ColumnConfigModal } from "@/components/tables/ColumnConfigModal"; interface ReplicationControllerListProps { items: ReplicationControllerInfo[]; @@ -36,6 +39,11 @@ export function ReplicationControllerList({ const [activeModal, setActiveModal] = useState(null); const [isActing, setIsActing] = useState(false); const [actionError, setActionError] = useState(null); + const [showColumnConfig, setShowColumnConfig] = useState(false); + + // Configurable columns + const columnConfig = useColumnConfig("replicationcontrollers", DEFAULT_COLUMNS.replicationcontrollers); + const { isColumnVisible } = columnConfig; const openEdit = async (rc: ReplicationControllerInfo) => { setActionError(null); @@ -69,17 +77,31 @@ export function ReplicationControllerList({ {actionError && (

{actionError}

)} +
+
+ {items.length} {items.length === 1 ? "replication controller" : "replication controllers"} +
+ +
- Name - Namespace - Desired - Current - Ready - Age - Actions + {isColumnVisible("name") && Name} + {isColumnVisible("namespace") && Namespace} + {isColumnVisible("desired") && Desired} + {isColumnVisible("current") && Current} + {isColumnVisible("ready") && Ready} + {isColumnVisible("age") && Age} + {isColumnVisible("actions") && Actions} @@ -92,13 +114,20 @@ export function ReplicationControllerList({ ) : ( items.map((rc) => ( - {rc.name} - {rc.namespace} - {rc.desired} - {rc.current} - {rc.ready} - {rc.age} - + {isColumnVisible("name") && ( + {rc.name} + )} + {isColumnVisible("namespace") && ( + {rc.namespace} + )} + {isColumnVisible("desired") && {rc.desired}} + {isColumnVisible("current") && {rc.current}} + {isColumnVisible("ready") && {rc.ready}} + {isColumnVisible("age") && ( + {rc.age} + )} + {isColumnVisible("actions") && ( + - + + )} )) )} @@ -182,6 +212,22 @@ export function ReplicationControllerList({ onConfirm={handleDelete} /> )} + + ); }