Skip to content

fix: 6.5.0 user requirements - #5618

Merged
brunozoric merged 37 commits into
release/6.5.0from
bruno/fix/6.5.0/svens-notes
Sep 8, 2026
Merged

brunozoric merged 37 commits into
release/6.5.0from
bruno/fix/6.5.0/svens-notes

Conversation

@brunozoric

@brunozoric brunozoric commented Aug 28, 2026 •

Copy link
Copy Markdown
Contributor

Changes requested

  1. Bug: creating a revision doesn't refresh the list.
  2. Make the version number more prominent in the revision list.
  3. List of available actions on the revision list are also not correct at times.
  4. Missing info - who created the revision, who published it on the revision list.
  5. Add unpublish option on the list and the 3-dots menu. (regardless if the current revision I'm viewing is published or not)
  6. Alert bar if someone is looking at an older revision, and not the latest. Show a message something like: You're looking at revision Exposing query method. #3, the latest is entity/entities attribute - autoSave setting #5 (link).
  7. Add a label of the status of the revision - currently only shown as tooltip.
  8. Ability to set a note for a draft, not just on publish. Also the ability to edit the note afterwards.
  9. Add a date below the live field when the content when it was last published or republished. Add sorting on that date.

Summary

Revision drawer & list

  • Revision list refresh: List re-fetches after creating, deleting, unpublishing, or editing a note — instead of staying stale.
  • Delete confirmation fix: Changed falsy check to strict === false — the dialog resolves with undefined on confirm, not true.
  • Version number in title: Revision rows now show #N · Title instead of burying the version in the description.
  • Correct action visibility: Permission checks use the row's revision (not the form's loaded entry). Delete available on all revisions including published/locked — matches API behavior.
  • Created-by / published-by info: Shows "Created by X on Y" and "Published by X on Y" per revision.
  • Unpublish action: Added to the 3-dots menu on published revision rows, with confirmation dialog and list refresh.
  • Older revision alert: Warning banner when viewing a non-latest revision with a "go to latest" link.
  • Visible status tag: Each revision row shows a colored Tag — Draft, Published, or Previously published.
  • Add/edit revision note: "Add note" / "Edit note" action in the 3-dots menu for all revisions via a new dialog.
  • Drawer stays open when dialog opens: onInteractOutside prevents the Radix Drawer from closing when a confirmation dialog overlay is clicked.

Content entries table

  • Last-published date on Live column: Shows a relative timestamp below the Live tag (both base and scheduler CellLive override).
  • Live column sortable: Clicking the Live column header sorts by lastPublishedOn. The column name stays "live" (for scheduler override compatibility) with a sort field mapping in ContentEntriesDataSource.

Entry form

  • New revision URL navigation: Clicking "+ New Revision" on a locked entry now navigates to the newly created revision.

Scheduler

  • Timezone-aware date picker: The schedule dialog now uses the dateTimeTz picker type with a timezone dropdown. Users can pick a time in any timezone — the picker converts to UTC before sending to the backend. Switching timezone adjusts the display without changing the scheduled moment.
  • Consistent UTC offset format: All scheduler date displays (alert bar, table tooltip, rescheduling dialog) now show UTC+02:00 format via a shared formatUtcOffset helper, replacing the browser's inconsistent GMT+2 output from Intl.
  • showTimezone prop on DatePicker: New optional prop (default false) that renders the browser's timezone label below the date input.

API fixes

  • updateRevision storage operation: New method that writes only the specific revision record without syncing to latest. Fixes a bug where updateRevisionDescription on an older revision wiped the latest revision's values. Implemented in DDB, DDB-ES, and SQL backends.
  • Clear live on published revision delete: Deleting the currently published revision no longer leaves a stale live pointer on the new latest entry.
  • Pattern validator null flags: new RegExp(regex, null) crashed the validator. Falsy flags are now coerced to undefined.
  • Preserve error data and stack in crud layer: Stopped wrapping Result errors in WebinyError — the original error is rethrown directly so data (validation field details), code, and stack are preserved through to the GraphQL error response. Also removed the dead "VALIDATION_FAILED" code check from CreateEntryUseCase.

admin-ui

  • DateTimeTz picker fixes: extractTimezone and formatDateForDisplay now handle Date objects. Timezone helpers extracted to timezoneHelpers.ts. The picker emits plain UTC ISO strings and displays time in the selected timezone.

Test plan

  • Unit tests for RevisionsListPresenter (create refresh, delete refresh, confirmation)
  • API test proving updateRevisionDescription on an older revision preserves the latest revision's values
  • API test proving live field is cleared after deleting a published revision
  • Unit tests for pattern validator with null/undefined/empty/valid flags
  • yarn build passes
  • All existing tests pass
  • Manual: open revision drawer → create revision → list updates immediately
  • Manual: delete a revision → confirm → list updates, navigation to remaining revision
  • Manual: unpublish from the 3-dots menu on a published revision
  • Manual: add/edit a note on an older revision → verify latest revision content is intact
  • Manual: view an older revision → warning banner with "go to latest" link appears
  • Manual: click "+ New Revision" on a locked entry → URL updates to the new revision
  • Manual: Live column shows last-published date and is sortable
  • Manual: create entry with custom pattern validation (null flags) → proper error with field details
  • Manual: schedule publish/unpublish → timezone dropdown works, switching TZ adjusts display, UTC value stays correct
  • Manual: scheduled action alerts show consistent UTC+XX:XX format

🤖 Generated with Claude Code

@brunozoric brunozoric changed the title Bruno/fix/6.5.0/svens notes fix: 6.5.0 user requirements Aug 28, 2026
brunozoric and others added 18 commits September 3, 2026 10:30
…list

Show "Created by X on Y" instead of "Last modified by". Add a
"Published by X on Y" line for revisions that have been published.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire UnpublishEntryUseCase into RevisionsListPresenter and add an
"Unpublish" menu item on published revision rows with a confirmation
dialog. Refreshes the revision list after a successful unpublish.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Display a warning banner when the user is viewing a revision that is
not the latest, with a link to navigate to the latest revision.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show a Tag with the revision status (Draft, Published, Previously
published) in the title row, replacing the tooltip-only indicator.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add an "Add note" / "Edit note" action in the revision 3-dots menu
for all revisions. Opens a dialog pre-filled with the current note,
saves via UpdateRevisionDescriptionUseCase, and refreshes the list.

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

When clicking "+ New Revision" on a locked entry, the URL now updates
to the newly created revision instead of staying on the old one.

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

Display the last published date below the Live tag in the entries
table. Rename column to lastPublishedOn so sorting by publish date
works via the standard column sort mechanism.

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

Failing test: updating the revision description on an older revision
causes the latest revision's user-written values to become null.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…t revision corruption

Add a new `updateRevision` storage operation that writes only the
specific revision record without syncing entry-level meta to the
latest record. The existing `update` operation's latest-sync logic
corrupts the latest revision's values when updating a non-latest
revision (field keys converted from storage format are written back
without re-conversion).

UpdateRevisionDescriptionUseCase now uses UpdateRevisionRepository
backed by `updateRevision` instead of the full `update` pipeline.

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

Add updateRevision storage operation to DDB-ES and SQL backends.
Fix CellLive Text size prop from "xs" to "sm".

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

Add UnpublishEntryUseCase and UpdateRevisionDescriptionUseCase mock
registrations to the test setup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…er CellLive override

Add lastPublishedOn timestamp to LiveTag so the date shows regardless
of whether the scheduler plugin is active. Drop sortable from the
Live column since the column name "live" does not map to a sortable
API field.

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

The Radix Dialog underlying the Drawer fires onInteractOutside when a
confirmation dialog overlay is clicked, closing the drawer. Prevent
this by checking if the interaction target is inside a dialog element.

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

Failing test: after deleting the published latest revision, the list
query still returns live: { version: 3 } instead of null.

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

When deleting the currently published revision and promoting a
previous revision as latest, the live field was copied from the
deleted entry. Now it is cleared so the entry no longer appears live.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@brunozoric
brunozoric force-pushed the bruno/fix/6.5.0/svens-notes branch from a373978 to b922fc7 Compare September 3, 2026 08:30
brunozoric and others added 10 commits September 4, 2026 13:19
RegExp constructor throws when flags is null. Coerce falsy flags to
undefined so the constructor uses its default (no flags).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Stop wrapping Result errors in WebinyError — rethrow the original
error directly so data (validation field details), code, and stack
are preserved through to the GraphQL error response.

Also removed the dead "VALIDATION_FAILED" code check from
CreateEntryUseCase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Map column name "live" to API sort field "lastPublishedOn" in the
ContentEntriesDataSource sort mapper. Re-enable sortable on the
Live column.

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

The scheduler's BrowserConfig overrides the Live column without
sortable, resetting it to false. Add sortable={true} to match
the base column.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Display the browser's timezone (e.g. "Timezone: Europe/Zagreb") in the
DatePicker description so users know which timezone the scheduled time
refers to.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add an optional showTimezone prop (default false) that renders the
browser timezone below the date input. Use it in the scheduler
dialog instead of a description hack.

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

Add timeZoneName: "short" to the date formatter calls in
ScheduledActionAlert and ScheduledTag so users see which timezone
the scheduled time refers to (e.g. "09/11/2026, 04:00 GMT+2").

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add timeZoneName: "short" to the date formatter in the schedule
dialog presenter so the "already scheduled at" message includes
the timezone for both publish and unpublish actions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Switch scheduler date picker from dateTimeLocal to dateTimeTz, which
includes a built-in timezone dropdown. Users can now schedule in any
timezone without manual conversion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
extractTimezone and formatDateForDisplay crashed when value was a
Date object instead of a string. Guard extractTimezone against
non-string input and convert Date to ISO string in the dateTimeTz
display formatter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
brunozoric and others added 3 commits September 7, 2026 11:45
…meTz picker

Extract utcToTimezoneDate, naiveDateToUtcIso, and parseToDate into
timezoneHelpers.ts. The dateTimeTz picker now emits plain UTC ISO
strings (.000Z) instead of appending the timezone offset, and
displays the time in the selected timezone by shifting the UTC date.

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

Switching timezone now only changes the display — the underlying UTC
moment stays the same. Previously it re-emitted a new UTC value from
the displayed time + new timezone, effectively changing the scheduled
moment.

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

Replace Intl's timeZoneName: "short" (which outputs "GMT+2") with a
shared formatUtcOffset helper that outputs "UTC+02:00", matching the
timezone dropdown labels.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@brunozoric brunozoric self-assigned this Sep 7, 2026
@brunozoric brunozoric added this to the 6.5.0 milestone Sep 7, 2026
brunozoric and others added 6 commits September 7, 2026 14:30
…lumn

Show the published date as a tooltip on the Live tag instead of
below it, reducing row height. Also removed a stray file path
string in the base CellLive.

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

Move formatUtcOffset from app-scheduler to @webiny/app-admin so all
packages can use it. Add UTC offset to the Live column published-date
tooltip in both the base CellLive and scheduler LiveTag.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire PublishEntryUseCase into RevisionsListPresenter and add a
"Publish" menu item on non-published revision rows. Uses the
existing publish confirmation dialog with optional revision note.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Type the confirmation.confirm call with { revisionDescription }
generic so the result is properly typed instead of void.

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

Add patchEntryMeta to the form presenter to update the entry's meta
without a full reload. After publish/unpublish from the revision
drawer, the form header and dropdown immediately reflect the new
status by patching the local entry state.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add patchEntryMeta delegation to the record-locking and workflows
decorators so the method is available through the decorator chain.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@brunozoric
brunozoric marked this pull request as ready for review September 8, 2026 10:19
@brunozoric
brunozoric merged commit e4de895 into release/6.5.0 Sep 8, 2026
70 of 71 checks passed
@brunozoric
brunozoric deleted the bruno/fix/6.5.0/svens-notes branch September 25, 2026 08:22
adrians5j added a commit that referenced this pull request Oct 6, 2026
Co-authored-by: Bruno Zorić <bruno.zoric@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant