Repository navigation
[CMSUI] - History route #30
Description
Activity
- added04 type: enhancementmaking existing stuff bettermaking existing stuff better
on Feb 5, 2025 - added and removed04 type: enhancementmaking existing stuff bettermaking existing stuff better
on Feb 6, 2025 - added a parent issue
on Jun 4, 2026 9 remaining items
- added 6 commits that reference this issue
on Jun 11, 2026 - added a commit that references this issue
on Jun 11, 2026 Status update (2026-06-12)
PR #120 implements the history list part of this issue, including revert with a confirmation dialog and viewing older revisions, covered by unit, integration, and Playwright acceptance tests.
Done in #120
@@historyroute (QuantaTable, styled to match@@contents: breadcrumb, layout width, status dot, relative timestamps with an absolute-date tooltip).
- Per-row actions menu on versioning entries: Review changes is rendered disabled until the diff view exists, View this revision, Revert to this version (destructive red, with a confirmation dialog incl. pending and error feedback).

- "View this revision" works end to end: the content middleware resolves the
?versionquery parameter, and agetContentbug was fixed where theexpandparameter was dropped whenever a version was requested (@plone/client). - Workflow rows show the state transition Volto-style (
Publish (Private → Published), using the backend-translated state titles) — without Volto's literalundefinedwhen no previous state exists. Resolved 2026-06-12: this wording is final (see the resolved questions below). - The History toolbar button is hidden on the site root (
Plone Sitehas no history — same guard as Volto'sMore.jsx); the site root type was added to theContentTypeMapin@plone/types. - Anonymous visitors are redirected to the login on published content and cannot access old revisions (backend permission, covered by a test).
Remaining in this issue
-
Diff / "Review changes" view (per the Figma frame Operative - Review changes):
Base/Compareversion selects, unified/split display toggle, field-by-field diff (deletions red, insertions green). Data viagetHistoryVersion, comparison computed client-side. Maps to Volto'sDiff.jsx/DiffField.jsx. -
Known bug (Change notes entered in the edit form are never submitted #129): change notes entered in
@@editdo not show up in the History "Change note" column. The column renders thecommentsfield from@historycorrectly; the likely cause is that the edit form never submits the change note with the save request (Volto's form sendschangeNote).
Open questions
Resolved questions (with @pnicolli & @jmevissen) (kept for context)
Table-header
…menu — resolved 2026-06-12: deliberately NOT implemented. Likely over-designed in Figma (the designers may not have known Plone that deeply); no good use case for configurable columns on the History route.Table-header
…menu: the Figma frame has a…control in the table header, separate from the per-row actions menu.

Its menu is not shown in the design, and there is no equivalent in Volto. What should it do (column configuration)? Same as on folder contents frame on Figma? Confirm whether the History view needs it (it has only a few fixed columns).Action labels for workflow transitions — resolved 2026-06-12: the Volto-style
transition_title (prev → state)labels shipped in #120 are final; the Figma wording ("Created in Private", "Published from Private") is not adopted.Action labels for workflow transitions: the frame shows "Created in Private" and "Published from Private", but only for create/publish.

The REST@historypayload givestransition_titleand the resultingstate_title; the previous state has to be derived. Confirm the wording rule for the remaining transitions (e.g. submit, retract, reject) so the labels read well and stay translatable. Interim, shipped in #120: Volto-styletransition_title (prev → state)labels using the backend-translated state titles.Quanta
Modalwidth — resolved 2026-06-12: tracked in #130, will be fixed there later (not in this issue).Quanta
Modalwidth (filed as #130):Modal.quantahardcodesw-full max-w-[90vw]and ignores a passedclassName(unlikeDialog.quanta, which merges it). The Figma design shows much narrower confirmation modals; this affects all Quanta Modal consumers (DeleteModal,UploadModal, the revert dialog).
CMSUI stylesheets / Metropolis font — resolved 2026-06-12: will be fixed centrally later (CMSUI-wide stylesheet/layout consolidation), not in this issue.
CMSUI stylesheets / Metropolis font:
@plone/components/dist/quanta.css(which carries the Metropolisbodyfont) is only loaded by thecontentslayout route, so allcmsuiroutes render in the fallback font. Should thecmsuilayout loadbasic.css/quanta.csstoo, pending the quanta-tailwind migration?Row-actions popover — resolved 2026-06-12: will be fixed centrally later via a shared component (see the upcoming "CMSUI main template / shared layout parts" issue), not in this issue. The styling deviation from
@@contentsstays a known limitation of #120 until then.Row-actions popover: the History row menu uses the Quanta
Menuand so differs in styling and behavior from@@contents' localItemActionsPopover(icon trigger, plain popover list, red destructive item). Aligning them needs a shared actions-popover component —cmsuimust not depend oncontents, and duplicating the contents implementation was deliberately avoided. Which package should host it?The breadcrumb mirrors
@plone/contents' inline Quanta breadcrumb — resolved 2026-06-12: will be fixed centrally via the shared CMSUI layout parts, see #137.The breadcrumb mirrors
@plone/contents' inline Quanta breadcrumb instead of sharing a componentLocale strategy for dates — resolved 2026-06-12: nothing left to decide in the History route. The decision (Aurora-managed locale instead of the browser locale) and the central fix belong to #68 (Formatted Date component); the History view follows once that lands.
Locale strategy for dates: react-aria's
useDateFormatterfollows the browser locale (noI18nProvideris set), while UI strings follow the i18next app language — two locale sources on the same screen (affects@@contentsas well). Should the locale be managed by Aurora instead? (Raised in #68, the Formatted Date component port, where this needs to be decided anyway.)
Known limitations / follow-ups (deliberately out of scope for #120)
These should be solved globally in Aurora, not inline in this route:
- Workflow state colors are a local mapping (the status dot) that mirrors
@plone/contents'ReviewState; unknown states fall back to a neutral dot. Like Volto'sconfig/Workflows.js, this needs a single, configurable mapping of review state to color (custom workflows, themes), consolidated into one shared component used by both@plone/contentsand@plone/cmsui— tracked in Configurable workflow state colors #128.

- Relative-time formatting ("2 minutes ago") still lives in the view; extraction into a shared helper, like in
@plone/helpersor the utility registry, for reuse across the app is a follow-up. ?versionis honored globally by the content middleware: a hand-crafted/@@edit/...?version=NURL loads the old revision into the edit form. A guard limiting?versionto public content paths (Volto behavior: only the public view passes the version togetContent) was implemented and verified in Add History route (#30) #120, but pulled out again so the behavior can be designed separately (pathname heuristic vs. explicit per-route opt-in) — tracked in Decide how the content middleware should scope the?versionquery parameter (introduced by #120) #138.
- added a commit that references this issue
on Jun 12, 2026
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsIn Progress
- StatusShow more project fieldsNo status
- StatusShow more project fieldsIn progress
- StatusShow more project fieldsIn progress
Important
If you are not a member of the Volto Team or Developers Team in the Plone GitHub organization, then do not work on or comment on this issue.
Goal
Port the History route to the Aurora CMS UI: list a content object's revisions and let an editor view, compare, and revert them. Baseline: replicate Volto's History (
History.jsx) and Diff (Diff.jsx/DiffField.jsx), restyled with Quanta components from@plone/components.Scope
This issue covers both the history list and the diff / "Review changes" view (not split into a separate issue).
Notable changes vs. Volto
As far as I can tell, the following has changed
loader/actionover theplone.restapi@historyendpoint), not Redux.Design
Open questions and cross-cutting implementation notes have moved to the status-update comment below, so this comment stays the requirements baseline.
Status update (2026-06-12)
PR #120 implements the history list part of this issue, including revert with a confirmation dialog and viewing older revisions, covered by unit, integration, and Playwright acceptance tests.
Done in #120
@@historyroute (QuantaTable, styled to match@@contents: breadcrumb, layout width, status dot, relative timestamps with an absolute-date tooltip).?version…