Skip to content

Table display performance & persistent selection#4

Merged
kelseym merged 3 commits into
mainfrom
table-display-performance
Jun 4, 2026
Merged

Table display performance & persistent selection#4
kelseym merged 3 commits into
mainfrom
table-display-performance

Conversation

@kelseym

@kelseym kelseym commented Jun 4, 2026

Copy link
Copy Markdown
Contributor
  • Subject/session checkbox selections now persist when changing operation settings. Active selection is captured between operation switch to restore selected checkboxes upon operation change.

  • Changes to data handling to render a single item set instead of the duplicate share/copy tables - reducing the DOM and HTML payload and improving page load times.

  • Builds an in-memory row index so the tree/selection walks run in O(n) instead of O(n²), taking operation switching from >30s to <1s.

  • Text filter lag reduced by computing row visibility from a model rather than read from layout. The filter is debounced and matches pre-cached text to eliminate the per-keystroke stutter.

  • Uncovered issue Some session transfers display a 'pipe error', even though they complete the reimport process successfully #3 when testing with large sessions (100s of scans). DICOM files are now piped through the stream buffer individually. Read and write errors are handled separately, allowing for clean end-of-file zip stream.

Result: load, operation switching, filtering, and select/deselect are all fast at 10k+ sessions, with no change to the data shown. Checkbox selection is retained through operation and project destination changes.

Note that ROADMAP.md was updated with the acknowledgement that a selection tree is really not the right choice for 10k item selection. A future version will include cohort building UX - either natively or via Conduit improvements.

kelseym added 3 commits June 3, 2026 19:22
Subject/session checkbox selections should persist when changing settings
Active selection is captured between operation switch to restore selected checkboxes upon operation change.
Changes to data handling to render a single item set instead of the duplicate share/copy tables - reducing the DOM and HTML payload and improving page load times.

Builds an in-memory row index so the tree/selection walks run in O(n) instead of O(n²), taking operation switching from >30s to <1s.

Improved text filter performance by computing row visibility from a model rather than read from layout. The filter is debounced and matches pre-cached text to eliminate the per-keystroke stutter.

Result: load, operation switching, filtering, and select/deselect are all fast at 10k+ sessions, with no change to the data shown.
…i-scan sessions

The streaming zip producer treated the consumer closing the pipe as a fatal error. DicomZipImporter reads the DICOM entries and closes the read end without consuming the zipped trailing central directory.
In sessions with enough scans to exceed the 64 KB pipe buffer the producer's final write threw IOException("Pipe closed"), surfacing the error in the process monitor.

- The fix separates source-read errors from write errors in the producer, and flushes the zip's central directory on close.
@kelseym kelseym requested a review from kathrynalpert June 4, 2026 20:31
@kelseym kelseym self-assigned this Jun 4, 2026
}

boolean byProject = (sourceProjectId != null);
String safeProj = byProject ? sourceProjectId.replaceAll("[^A-Za-z0-9_\\-]", "") : "";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I realize you inherited this, but It'd be nicer to do this as a parameterized query

@kelseym kelseym merged commit 880563e into main Jun 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants