+ {visible.map((raw, i) => renderSingleBadge(raw, i))}
+ {overflow.length > 0 && (
+
+
+ +{overflow.length}
+
+
+
+
+
+ {overflow.map((raw, i) => renderSingleBadge(raw, i))}
+
+
+
+
+
+ )}
+
+ );
+}
diff --git a/packages/core/src/components/data-table/cell-renderers.tsx b/packages/core/src/components/data-table/cell-renderers.tsx
index b6598462..414b4526 100644
--- a/packages/core/src/components/data-table/cell-renderers.tsx
+++ b/packages/core/src/components/data-table/cell-renderers.tsx
@@ -1,9 +1,8 @@
import type { ReactNode } from "react";
import { Link } from "react-router";
-import { Badge } from "@/components/badge";
+import { BadgeList } from "@/components/badge-list";
import type {
BadgeCellOptions,
- BadgeVariant,
Column,
DateCellOptions,
LinkCellOptions,
@@ -49,8 +48,18 @@ function toDate(value: unknown): Date | null {
}
function renderText(value: unknown): ReactNode {
- if (isEmpty(value)) return PLACEHOLDER;
- return String(value);
+ switch (true) {
+ case isEmpty(value):
+ return PLACEHOLDER;
+ case typeof value === "boolean":
+ return value ? "✓" : "✗";
+ case value instanceof Date:
+ return value.toLocaleDateString();
+ case typeof value === "object":
+ return JSON.stringify(value);
+ default:
+ return String(value);
+ }
}
function renderNumber(value: unknown, options: NumberCellOptions | undefined): ReactNode {
@@ -79,7 +88,10 @@ function renderMoney