Skip to content

fix(ui): align Bulk Import detail actions with design - #748

Merged
smunini merged 1 commit into
mainfrom
bugfix/733-bulk-import-detail-actions
Aug 28, 2026
Merged

fix(ui): align Bulk Import detail actions with design#748
smunini merged 1 commit into
mainfrom
bugfix/733-bulk-import-detail-actions

Conversation

@Gordex2014

@Gordex2014 Gordex2014 commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Replace the manifests table with headerless rows that preserve the full URL while ellipsizing it visually.
  • Keep Submit visible on each row and move row-specific Abort and Remove actions into an accessible overflow menu.
  • Replace the removed Submit All control with a working Most recent and Oldest sort menu.
  • Use the shared menu, button, and dialog patterns from the UI instead of page-specific control geometry.
  • Align Edit, Delete, Abort, and Complete with the approved detail composition and add a working Edit Submission dialog.
  • Remove the extra card around the manifests collection. The section now uses the design's divider while each manifest keeps its own row boundary.
  • Enforce submission and manifest action eligibility in rendered controls and direct POST handlers.
  • Abort submitted manifests through a replace-only Bulk Submit kickoff without adding an empty replacement manifest.

State behavior

  • Unsent manifests can be submitted but not aborted.
  • Accepted manifests can be aborted but cannot be submitted again.
  • Aborted manifests remain visible. Submit and Abort are disabled while Remove remains available.
  • Failed submission attempts remain retryable.
  • Completed and stopped submissions disable protocol actions while keeping local Edit, Delete, and Remove operations.
  • Submission Log records attempts, recipient responses, polling progress, terminal state changes, replacements, and aborts. The persisted log keeps the latest 100 entries.

Compatibility

Validation

  • cargo fmt --all -- --check
  • git diff --check
  • cargo test -p helios-ui
    • 97 unit tests passed.
    • 29 Bulk Import HTTP tests passed.
    • All remaining helios-ui integration suites passed.
  • cargo test -p helios-rest --test bulk_submit
    • 20 tests passed.
  • cargo build --bin hfs
  • Bulk Import Playwright coverage: 14 tests passed.
  • Focused WCAG 2.2 AA coverage: 4 tests passed across light and dark themes.
  • Focused JavaScript-disabled coverage: 2 tests passed.

QA evidence

The captures below show, in order:

  1. Final detail layout without an exterior manifests card.
  2. Standard compact sort control.
  3. Manifest row overflow actions.
  4. Edit Submission dialog.
01-overview-light 02-sort-menu-light 03-row-actions-light 04-edit-dialog-light

Closes #733

Closes #734

Depends on #744

Base automatically changed from bugfix/728-unify-button-size-scale to main August 28, 2026 00:48
@smunini
smunini merged commit f7a22f1 into main Aug 28, 2026
2 checks passed
@smunini
smunini deleted the bugfix/733-bulk-import-detail-actions branch August 28, 2026 00:50
smunini added a commit that referenced this pull request Aug 28, 2026
Resolve bulk-import template conflicts with main's #748 (bulk import
detail actions): keep the dialog::modal/dialog::field macros from this
branch and extend them with a marker param (data-bulk-import-add-manifest
on the Add Manifest <details>) and an initial_focus param
(data-addbox-initial-focus on each dialog's first field); keep main's
terminal-state disabled Add Manifest button as raw markup.

Claude-Session: https://claude.ai/code/session_01SqiFJQiTqM5tVwEqxuKbW8
angela-helios added a commit that referenced this pull request Aug 28, 2026
The first heal gave #748's ruleless hook class its own padding, which
broke the very parity its spec enforces - the two empty states must
share one computed signature. A selector hook is not vocabulary: it
moves to data-empty=manifests, the class list returns to the bare shared
.empty-state, and the page object, nojs spec, and Rust assert follow.
smunini added a commit that referenced this pull request Aug 28, 2026
Both sides independently replaced #748's ruleless
.bulk-import-manifest-empty marker class with a data attribute. Keeps
main's data-bulk-import-manifest-empty, which matches the page's
existing data-bulk-import-* hooks; the template, page object, nojs spec,
and Rust assert all follow it.

Claude-Session: https://claude.ai/code/session_0169dqJaApLYpi5vSzD5MEvk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants