From 239a21e57e79af69e9731606575eacfa5b299d42 Mon Sep 17 00:00:00 2001 From: Adithyan Dinesh Date: Tue, 23 Dec 2025 18:58:28 +0530 Subject: [PATCH] OPFS management tool improvements --- .../OPFSManagementTool/OPFSManagementTool.tsx | 88 +++++++++++++------ .../OPFSManagementTool/constants.ts | 27 ++++++ .../components/OPFSManagementTool/utils.ts | 70 +++++++++++++++ 3 files changed, 158 insertions(+), 27 deletions(-) diff --git a/extensions/cornerstone/src/components/OPFSManagementTool/OPFSManagementTool.tsx b/extensions/cornerstone/src/components/OPFSManagementTool/OPFSManagementTool.tsx index 4eb0d6fcce4..d6c4adb92c5 100644 --- a/extensions/cornerstone/src/components/OPFSManagementTool/OPFSManagementTool.tsx +++ b/extensions/cornerstone/src/components/OPFSManagementTool/OPFSManagementTool.tsx @@ -28,9 +28,12 @@ import { Study } from './types'; import { clearPreviousOPFSVersionData, deleteFoldersFromOPFS, + formatSize, getOPFSData, hybridGlobalFilter, + purgeOldFilesFromOPFS, } from './utils'; +import { OPFS_PURGE_METADATA } from './constants'; const columnHelper = createColumnHelper(); @@ -66,23 +69,21 @@ const columns: ColumnDef[] = [ variant="ghost" onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')} > - StudyInstanceUID - + StudyInstanceUID ); }, cell: ({ row }) =>
{row.getValue('study-uid')}
, }, - { - accessorKey: 'study-description', + columnHelper.accessor('study-description', { + accessorFn: row => row['study-description'] || '', header: ({ column }) => { return ( ); }, @@ -97,7 +98,7 @@ const columns: ColumnDef[] = [ ); }, - }, + }), columnHelper.accessor('study-modalities', { accessorFn: row => row['study-modalities'].sort().join(', '), header: ({ column }) => { @@ -106,8 +107,7 @@ const columns: ColumnDef[] = [ variant="ghost" onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')} > - Modalities - + Modalities ); }, @@ -126,18 +126,7 @@ const columns: ColumnDef[] = [ columnHelper.accessor('study-size', { accessorFn: row => { const size: number = row['study-size']; - const oneGB = 1024 * 1024 * 1024, - oneMB = 1024 * 1024, - oneKB = 1024; - - if (size >= oneGB) { - return `${(size / oneGB).toFixed(2)} GB`; - } else if (size >= oneMB) { - return `${(size / oneMB).toFixed(2)} MB`; - } else if (size >= oneKB) { - return `${(size / oneKB).toFixed(2)} KB`; - } - return `${size} bytes`; + return formatSize(size); }, sortingFn: (rowA, rowB, columnId) => { const sizeA = rowA.original[columnId]; @@ -157,27 +146,30 @@ const columns: ColumnDef[] = [ variant="ghost" onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')} > - Size - + Size ); }, cell: ({ row }) =>
{row.getValue('study-size')}
, }), columnHelper.accessor('study-last-modified', { - accessorFn: row => new Date(row['study-last-modified']).toGMTString(), + accessorFn: row => new Date(row['study-last-modified']), + sortingFn: 'datetime', header: ({ column }) => { return ( ); }, - cell: ({ row }) =>
{row.getValue('study-last-modified')}
, + cell: ({ row }) => { + const value: Date = row.getValue('study-last-modified'); + const formattedDate = value.toDateString() + ', ' + value.toLocaleTimeString(); + return
{formattedDate}
; + }, }), { id: 'actions', @@ -247,6 +239,7 @@ export default function OPFSManagementTool() { const refreshOPFSData = async () => { const fetchedData = await getOPFSData(); + table.toggleAllPageRowsSelected(false); setData(fetchedData); }; @@ -265,6 +258,19 @@ export default function OPFSManagementTool() { } }; + const purgeOldFiles = async (time: number) => { + await purgeOldFilesFromOPFS(time); + refreshOPFSData(); + }; + + const calculateTotalSize = (list: Study[]) => { + const totalSize = list.reduce((total, study) => { + return total + study['study-size']; + }, 0); + + return formatSize(totalSize); + }; + return (
@@ -300,6 +306,28 @@ export default function OPFSManagementTool() { > Debug Copy + + + + + + Files older than + {OPFS_PURGE_METADATA.map(option => ( + purgeOldFiles(option.time)} + > + {option.label} + + ))} + +
+
+ Total size: {calculateTotalSize(data)}