Repository navigation
fix(plugin-detail): record page inline date / datetime edit draws the platform picker and keeps the time (objectui#12759) - #12786
Merged
Conversation
…platform picker and keep the time (objectui#12759) InlineFieldInput routed date and datetime to the native date input, a day-only control; a datetime edit re-emitted local midnight and dropped the stored time. Both now delegate to FieldEditWidget, which draws the platform date picker the grid cell, forms and dialogs draw. A date field still writes YYYY-MM-DD, and the impossible-stored-day notice is the picker's own. Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
Author
席位核对 · ACCEPT ·
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #12759
Clause-②: no
An inline edit of a
datetimefield on the record page keeps its time. The details section and the header highlights now draw the platform date picker fordateanddatetime, the same picker the grid cell, the forms, the dialogs and the kanban dialog draw since #12756.What was wrong (measured live before the fix)
InlineFieldInputrouteddateanddatetimetoDateField, the native date input, which can only hold a day. For adatetimeit wrote local midnight of the picked day.On
origin/main, with a Chromium browser inAsia/Taipei, the recordshowcase_field_zooheldf_datetime = 2026-06-17T14:30:00.000Z(22:30 local). An inline edit of the day to the 20th sent{"f_datetime":"2026-06-19T16:00:00.000Z"}and stored it. The time was lost, and the box then repainted the previous day, 06/19.What changed
packages/plugin-detail/src/InlineFieldInput.tsxdateanddatetimeare no longer excluded from theFieldEditWidgetdelegation tail, and theDateFieldbranch is removed.FieldEditWidgetalready draws the lazyDatePickerField/DateTimePickerField(thefields-date-pickerchunk). No second picker and no static import were added.dateanddatetimeleftINLINE_ROUTED_FIELD_TYPES, an internal set that is not exported from the package entry.datetimeis read as the local wall clock. A calendar pick keeps the time, typed text carries the time typed, and the write is an ISO instant.datefield still writes the plainYYYY-MM-DD(console: inline-editing a date-only field in record highlights saves the day before east of UTC — it sends local midnight as a UTC instant (the Edit form sends the plain date) #12206).InlineFieldInput) silently blanks an impossible stored day — the third editor of the objectui#10567 class #10625 / finding(fields): the date-only editor blanks an impossible stored day silently —input type=datesanitises2026-02-30to empty, andDateField/ the grid's date cell show no marker #10567) is the picker's own: an emptyaria-invalidbox, described by a notice that names the stored string.DatePickerField.tsx's "where the native input stays" comment is corrected (comment only).Live reading
Published backend
@objectstack/*@18.0.0-next.2(showcase app), this branch's console, Chromium inAsia/Taipei. PNGs and the table are onclaude/issue-12759-evidenceunderevidence/12759/.{"f_datetime":"2026-06-19T16:00:00.000Z"}{"f_datetime":"2026-06-20T14:30:00.000Z"}06/20/2026, 09:05 PM+ Save{"f_datetime":"2026-06-20T13:05:00.000Z"}{"f_datetime":"2026-06-20T13:05:00.000Z"}datefield, day 20{"f_date":"2026-06-20"}The picker shows
06/17/2026, 10:30 PMwith the placeholderMM/DD/YYYY, HH:mm AM/PM(console locale).Tests
New:
InlineFieldInput.datetimePicker-12759.test.tsx. It drives the whole record-page write: highlights strip, then save bar, thendataSource.update.2026-10-16T14:30:00.000Z;datefield saves{ due_date: '2026-10-16' };date-only-zone-pins-10183.test.tsand run in its forks child.Ported to the picker (the assertions keep their intent):
InlineFieldInput.test.tsx,InlineFieldInput.delegation.test.tsx,InlineFieldInput.impossibleDay-10625.test.tsx,InlineFieldInput.dateOnlyWriteZone-12206.test.tsx,inlineEditTypeCoverage.test.tsx(date/datetime move from routed to delegated).Ablation. Through src: vitest aliases the packages to src. Each leg checked the anchor count and the blob on disk, and each restore matched the HEAD blob with an empty
git diff HEAD.InlineFieldInput) silently blanks an impossible stored day — the third editor of the objectui#10567 class #10625 notice cases red.Runs
a286306: zone driver 29/29;6fdbc5d: 4 passed.NOT MEASURED: the whole-package
packages/plugin-detailrun hit the foreground time cap (exit 124). CI runs the full farm.Gates (local)
@object-ui/plugin-detail^...: 0type-checkplugin-detail 0, fields 0check:i18n-keys/-drift/-dead-keys0check:changeset-claims0changeset:check0check:test-path-roots0check:spec-symbols0check:new-line-citations0check-changeset-presence.mjs0check:control-bytes0Acceptance notes
INLINE_ROUTED_FIELD_TYPESis not exported from the package entry.Provenance: built by the cloud session
session_01K55FPCr5QJXCL9M28p3vvZ(claim6223418940) and opened by thedomain:uiseat 1 PM (session_011K9g23W67dy2zwnyzaoB6o) from that session's final message, because a cloud session cannot open a PR from its container. The seat replaced the dev's footer line with this line and changed nothing else.Generated by Claude Code