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