From 26207bd9511691c6bb9551eb8bc22fec0f060600 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Sun, 8 Jun 2025 00:07:49 +0200 Subject: [PATCH 1/3] add datasize helper and add correct sorting to sitestable --- src/app/[orgId]/settings/sites/SitesTable.tsx | 15 +++++++++++++-- src/lib/dataSize.ts | 11 +++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/lib/dataSize.ts 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 From f2e461a1ee2827de148083bec21015281daaa70b Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Mon, 9 Jun 2025 13:06:08 +0200 Subject: [PATCH 2/3] improve readability --- src/app/[orgId]/settings/sites/SitesTable.tsx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/app/[orgId]/settings/sites/SitesTable.tsx b/src/app/[orgId]/settings/sites/SitesTable.tsx index e2fba418..b266b162 100644 --- a/src/app/[orgId]/settings/sites/SitesTable.tsx +++ b/src/app/[orgId]/settings/sites/SitesTable.tsx @@ -199,11 +199,8 @@ 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; - }, + sortingFn: (rowA, rowB) => + parseDataSize(rowA.original.mbIn) - parseDataSize(rowB.original.mbIn) }, { accessorKey: "mbOut", @@ -220,11 +217,8 @@ 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; - }, + sortingFn: (rowA, rowB) => + parseDataSize(rowA.original.mbOut) - parseDataSize(rowB.original.mbOut), }, { accessorKey: "type", From 96151de814459a420e0c94a81226190f48767c0e Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Mon, 9 Jun 2025 13:18:22 +0200 Subject: [PATCH 3/3] improve readability --- src/lib/dataSize.ts | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/lib/dataSize.ts b/src/lib/dataSize.ts index 5ac4e4ae..67439d31 100644 --- a/src/lib/dataSize.ts +++ b/src/lib/dataSize.ts @@ -1,11 +1,21 @@ export function parseDataSize(sizeStr: string): number { - if (!sizeStr) return 0; - const match = sizeStr.trim().toUpperCase().match(/^([\d.]+)\s*([KMGT]?B)$/); + if (typeof sizeStr !== 'string') return 0; + + const match = /^\s*([\d.]+)\s*([KMGT]?B)\s*$/i.exec(sizeStr); 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); + + const [ , numStr, unitRaw ] = match; + const num = parseFloat(numStr); + if (isNaN(num)) return 0; + + const unit = unitRaw.toUpperCase(); + const multipliers = { + B: 1, + KB: 1024, + MB: 1024 ** 2, + GB: 1024 ** 3, + TB: 1024 ** 4, + } as const; + + return num * (multipliers[unit as keyof typeof multipliers] ?? 1); } \ No newline at end of file