();
+ const { isPaidUser } = usePaidStatus();
+ const isLabelFeatureEnabled = isPaidUser(tierMatrix.labels);
+
const [isRefreshing, startTransition] = useTransition();
const [isNavigatingToAddPage, startNavigation] = useTransition();
const [siteFilterOpen, setSiteFilterOpen] = useState(false);
@@ -233,120 +220,6 @@ export default function ProxyResourcesTable({
}
}
- function TargetStatusCell({
- targets,
- healthStatus
- }: {
- targets?: TargetHealth[];
- healthStatus?: string;
- }) {
- const overallStatus = healthStatus;
-
- if (!targets || targets.length === 0) {
- return (
-
-
-
- {t("resourcesTableNoTargets")}
-
-
- );
- }
-
- const monitoredTargets = targets.filter(
- (t) => t.enabled && t.healthStatus && t.healthStatus !== "unknown"
- );
- const unknownTargets = targets.filter(
- (t) => !t.enabled || !t.healthStatus || t.healthStatus === "unknown"
- );
-
- return (
-
-
-
-
-
- {monitoredTargets.length > 0 && (
- <>
- {monitoredTargets.map((target) => (
-
-
-
- {target.siteName
- ? `${target.siteName} (${target.ip}:${target.port})`
- : `${target.ip}:${target.port}`}
-
-
- {target.healthStatus}
-
-
- ))}
- >
- )}
- {unknownTargets.length > 0 && (
- <>
- {unknownTargets.map((target) => (
-
-
-
- {target.siteName
- ? `${target.siteName} (${target.ip}:${target.port})`
- : `${target.ip}:${target.port}`}
-
-
- {!target.enabled
- ? t("disabled")
- : t("resourcesTableNotMonitored")}
-
-
- ))}
- >
- )}
-
-
- );
- }
-
const proxyColumns: ExtendedColumnDef[] = [
{
accessorKey: "name",
@@ -653,6 +526,28 @@ export default function ProxyResourcesTable({
/>
)
},
+ ...(isLabelFeatureEnabled
+ ? [
+ {
+ id: "labels",
+ accessorKey: "labels",
+ header: () => (
+
+ {t("labels")}
+
+ ),
+ cell: ({ row }: { row: { original: ResourceRow } }) => {
+ return (
+ //
+ <>>
+ );
+ }
+ }
+ ]
+ : []),
{
id: "actions",
enableHiding: false,
@@ -800,7 +695,11 @@ export default function ProxyResourcesTable({
isRefreshing={isRefreshing || isFiltering}
isNavigatingToAddPage={isNavigatingToAddPage}
enableColumnVisibility
- columnVisibility={{ niceId: false, protocol: false }}
+ columnVisibility={{
+ niceId: false,
+ protocol: false,
+ labels: false
+ }}
stickyLeftColumn="name"
stickyRightColumn="actions"
/>
@@ -808,6 +707,118 @@ export default function ProxyResourcesTable({
);
}
+function TargetStatusCell({
+ targets,
+ healthStatus
+}: {
+ targets?: TargetHealth[];
+ healthStatus?: string;
+}) {
+ const overallStatus = healthStatus;
+ const t = useTranslations();
+
+ if (!targets || targets.length === 0) {
+ return (
+
+
+ {t("resourcesTableNoTargets")}
+
+ );
+ }
+
+ const monitoredTargets = targets.filter(
+ (t) => t.enabled && t.healthStatus && t.healthStatus !== "unknown"
+ );
+ const unknownTargets = targets.filter(
+ (t) => !t.enabled || !t.healthStatus || t.healthStatus === "unknown"
+ );
+
+ return (
+
+
+
+
+
+ {monitoredTargets.length > 0 && (
+ <>
+ {monitoredTargets.map((target) => (
+
+
+
+ {target.siteName
+ ? `${target.siteName} (${target.ip}:${target.port})`
+ : `${target.ip}:${target.port}`}
+
+
+ {target.healthStatus}
+
+
+ ))}
+ >
+ )}
+ {unknownTargets.length > 0 && (
+ <>
+ {unknownTargets.map((target) => (
+
+
+
+ {target.siteName
+ ? `${target.siteName} (${target.ip}:${target.port})`
+ : `${target.ip}:${target.port}`}
+
+
+ {!target.enabled
+ ? t("disabled")
+ : t("resourcesTableNotMonitored")}
+
+
+ ))}
+ >
+ )}
+
+
+ );
+}
+
type ResourceEnabledFormProps = {
resource: ResourceRow;
onToggleResourceEnabled: (
@@ -847,3 +858,26 @@ function ResourceEnabledForm({
);
}
+
+function StatusIcon({
+ status,
+ className = ""
+}: {
+ status: string | undefined | null;
+ className?: string;
+}) {
+ const iconClass = `h-4 w-4 ${className}`;
+
+ switch (status) {
+ case "healthy":
+ return ;
+ case "degraded":
+ return ;
+ case "unhealthy":
+ return ;
+ case "unknown":
+ return ;
+ default:
+ return null;
+ }
+}