Skip to content

feat: bucket versioning management + per-object version history - #74

Merged
DGINXREAL merged 17 commits into
mainfrom
feat/bucket-versioning
Oct 8, 2026
Merged

DGINXREAL merged 17 commits into
mainfrom
feat/bucket-versioning

Conversation

@noidee-dev

Copy link
Copy Markdown
Contributor

Summary

Adds S3 object-versioning support in two parts:

Part A — bucket versioning management

  • New "Versioning" navigation section (alongside CORS and Object Lock), driven by the sidebar account/bucket selectors.
  • Shows the bucket's versioning status (Unversioned / Enabled / Suspended) and lets the user enable or suspend versioning. Suspend is confirm-gated and the UI explains that versioning can only be suspended, never fully removed, once enabled.

Part B — per-object versions

  • A "Versions" button in the file details panel opens a dismissible dialog listing every version and delete marker of the selected object.
  • Per-row actions: download a specific version, restore an older version (non-destructive copy-to-latest), permanently delete a version, and remove a delete marker ("undelete"). Destructive actions are confirm-gated.

Supporting change

  • The shared Modal wrapper is now Esc-stack-aware: only the top-most modal dismisses on Escape, fixing Esc closing both dialogs when a confirmation is nested (this feature is the first to nest one).

i18n added across all six locales (en/de/fr/pl/nl/ro).

Implementation notes

  • Mirrors the existing bucket-config pattern (s3/* module → typed IPC channel → preload → query/mutation hook → component) used by CORS and Object Lock.
  • presignGet / downloadObject gained an optional versionId (backward compatible; omitting it is unchanged behaviour). Six new IPC channels are additive.

Testing

  • Full suite green (592 tests), tsc --noEmit clean, npm run lint 0 errors.
  • Each change was reviewed per-task plus a whole-branch review (verdict: ready to merge); destructive actions verified confirm-gated with the correct version id, and the Modal stacking change verified safe across all existing dialogs.

Follow-ups (non-blocking)

  • A few i18n copy nuances (e.g. the FR section title wording; delete-marker confirmation wording for non-latest markers).
  • The per-version presign-URL path exists and is tested but isn't surfaced in the UI yet (download only).

🤖 Generated with Claude Code

noidee-dev and others added 17 commits October 6, 2026 13:27
Design for S3 object-versioning in two parts: a "Versioning" nav section
to view status and enable/suspend versioning per bucket, and a per-object
versions dialog to download, restore, permanently delete versions and
remove delete markers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ion tests

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…r order

Each Modal registers its own document keydown listener. A modal that
dismisses itself unmounts synchronously and leaves the stack, so a
listener that ran afterwards saw the modal beneath it as top-most and
dismissed it too. The handler now claims the event with preventDefault
and ignores events that are already defaultPrevented.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…over

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…t, drop dead keys

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@noidee-dev
noidee-dev requested a review from DGINXREAL October 6, 2026 17:23
@DGINXREAL
DGINXREAL merged commit 23581e7 into main Oct 8, 2026
1 check passed
@DGINXREAL
DGINXREAL deleted the feat/bucket-versioning branch October 8, 2026 05:18
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