mirror of
https://github.com/fosrl/pangolin.git
synced 2025-06-26 23:28:47 +02:00
Merge pull request #867 from thijsvanloef/fix-767/unit-aware-sorting
Fix - Sort Data In/Out correctly in Sites Management page in the Pangolin Dashboard
This commit is contained in:
commit
4fc61386d3
2 changed files with 28 additions and 2 deletions
|
@ -27,6 +27,7 @@ import { formatAxiosError } from "@app/lib/api";
|
||||||
import { createApiClient } from "@app/lib/api";
|
import { createApiClient } from "@app/lib/api";
|
||||||
import { useEnvContext } from "@app/hooks/useEnvContext";
|
import { useEnvContext } from "@app/hooks/useEnvContext";
|
||||||
import CreateSiteFormModal from "./CreateSiteModal";
|
import CreateSiteFormModal from "./CreateSiteModal";
|
||||||
|
import { parseDataSize } from '@app/lib/dataSize';
|
||||||
|
|
||||||
export type SiteRow = {
|
export type SiteRow = {
|
||||||
id: number;
|
id: number;
|
||||||
|
@ -197,7 +198,9 @@ export default function SitesTable({ sites, orgId }: SitesTableProps) {
|
||||||
<ArrowUpDown className="ml-2 h-4 w-4" />
|
<ArrowUpDown className="ml-2 h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
|
sortingFn: (rowA, rowB) =>
|
||||||
|
parseDataSize(rowA.original.mbIn) - parseDataSize(rowB.original.mbIn)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "mbOut",
|
accessorKey: "mbOut",
|
||||||
|
@ -213,7 +216,9 @@ export default function SitesTable({ sites, orgId }: SitesTableProps) {
|
||||||
<ArrowUpDown className="ml-2 h-4 w-4" />
|
<ArrowUpDown className="ml-2 h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
|
sortingFn: (rowA, rowB) =>
|
||||||
|
parseDataSize(rowA.original.mbOut) - parseDataSize(rowB.original.mbOut),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "type",
|
accessorKey: "type",
|
||||||
|
|
21
src/lib/dataSize.ts
Normal file
21
src/lib/dataSize.ts
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
export function parseDataSize(sizeStr: string): number {
|
||||||
|
if (typeof sizeStr !== 'string') return 0;
|
||||||
|
|
||||||
|
const match = /^\s*([\d.]+)\s*([KMGT]?B)\s*$/i.exec(sizeStr);
|
||||||
|
if (!match) return 0;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue