diff --git a/src/app/[orgId]/settings/sites/SitesTable.tsx b/src/app/[orgId]/settings/sites/SitesTable.tsx
index c032800f..e2fba418 100644
--- a/src/app/[orgId]/settings/sites/SitesTable.tsx
+++ b/src/app/[orgId]/settings/sites/SitesTable.tsx
@@ -27,6 +27,7 @@ import { formatAxiosError } from "@app/lib/api";
import { createApiClient } from "@app/lib/api";
import { useEnvContext } from "@app/hooks/useEnvContext";
import CreateSiteFormModal from "./CreateSiteModal";
+import { parseDataSize } from '@app/lib/dataSize';
export type SiteRow = {
id: number;
@@ -197,7 +198,12 @@ export default function SitesTable({ sites, orgId }: SitesTableProps) {
);
- }
+ },
+ sortingFn: (rowA, rowB) => {
+ const a = parseDataSize(rowA.original.mbIn);
+ const b = parseDataSize(rowB.original.mbIn);
+ return a > b ? 1 : a < b ? -1 : 0;
+ },
},
{
accessorKey: "mbOut",
@@ -213,7 +219,12 @@ export default function SitesTable({ sites, orgId }: SitesTableProps) {
);
- }
+ },
+ sortingFn: (rowA, rowB) => {
+ const a = parseDataSize(rowA.original.mbOut);
+ const b = parseDataSize(rowB.original.mbOut);
+ return a > b ? 1 : a < b ? -1 : 0;
+ },
},
{
accessorKey: "type",
diff --git a/src/lib/dataSize.ts b/src/lib/dataSize.ts
new file mode 100644
index 00000000..5ac4e4ae
--- /dev/null
+++ b/src/lib/dataSize.ts
@@ -0,0 +1,11 @@
+export function parseDataSize(sizeStr: string): number {
+ if (!sizeStr) return 0;
+ const match = sizeStr.trim().toUpperCase().match(/^([\d.]+)\s*([KMGT]?B)$/);
+ if (!match) return 0;
+ const [, numStr, unit] = match;
+ const num = parseFloat(numStr) || 0;
+ const multipliers: Record = {
+ B: 1, KB: 1024, MB: 1024**2, GB: 1024**3, TB: 1024**4,
+ };
+ return num * (multipliers[unit] || 1);
+}
\ No newline at end of file