Repository navigation
feat(fields): action-param and bulk-action dialogs draw the platform date picker (objectui#12642) - #12663
Conversation
…date picker fieldWidgetMap's `date` / `datetime` entries now load DatePickerField / DateTimePickerField, so getLazyFieldWidget (ActionParamDialog, the grid's BulkActionDialog, the console FormPage) and registerField (the record form) resolve the same face. FORM_FACE_LOADERS, the form-only override, is gone and registerField is back to the plain loader. The written value is unchanged. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VKCrtATqjvhepLgQ12oShR
…w the date picker ActionParamDialog, BulkActionDialog and the console FormPage now render `date` / `datetime` through the platform picker; their pins type into its text box and assert the same written value as before (`YYYY-MM-DD`, an ISO instant). The Action designer's preview mock draws a date-picker shape for both, so its "draws what the runtime draws" pin stays true. The plugin-detail zone pin's form control drives the picker too. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VKCrtATqjvhepLgQ12oShR
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VKCrtATqjvhepLgQ12oShR
REWORK round 1 → PR #12663 ·
|
ℹ️ Console Performance Budget — not measuredThis run did not produce a console bundle to measure, so there is no pass/fail verdict for the performance budget. This is not a budget violation. Nothing was measured — the numbers a real violation would carry are simply absent.
See the workflow run for details. 📦 Bundle Size Report
Size Limits
|
… native date input Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VKCrtATqjvhepLgQ12oShR
REWORK round 1, item 2 (added) ·
|
ℹ️ Console Performance Budget — not measuredThis run did not produce a console bundle to measure, so there is no pass/fail verdict for the performance budget. This is not a budget violation. Nothing was measured — the numbers a real violation would carry are simply absent.
See the workflow run for details. 📦 Bundle Size Report
Size Limits
|
…ort ledger fieldWidgetMap now loads the date picker for `date` / `datetime`, so the map no longer dynamically imports DateField / DateTimeField (which FieldEditWidget imports statically). Their INEFFECTIVE_DYNAMIC_IMPORT warnings stopped firing; the ledger asks for the two entries to be deleted. 43 -> 41. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VKCrtATqjvhepLgQ12oShR
✅ 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
|
席位核对 · ACCEPT ·
|
Fixes #12642
Clause-②: no
What changes
fieldWidgetMap'sdate/datetimeentries now load the platform date picker (widgets/date-picker/DatePickerField.tsx:DatePickerField/DateTimePickerField). Everything that resolves a field widget through the map now draws the same face, the text box in the display locale's format with a calendar popover that record forms have drawn since #12641:getLazyFieldWidget:ActionParamDialog, the grid'sBulkActionDialog, and the consoleFormPage(a consumer the card's census did not name).registerField/registerAllFields: the record form.FORM_FACE_LOADERS, the form-only override, is deleted, andregisterFieldis back toReact.lazy(loader). One field type, one face.YYYY-MM-DDfordate, an ISO instant fordatetime.fieldWidgetMap's keys (and soRegisteredFieldWidgetType/FORM_FIELD_TYPES) are the same, and no type, prop, export or language-pack key is added.ActionPreview.tsx) draws a date-picker shape fordate/datetimeparams, so its "draws what the runtime draws" pin stays true.Live declarations this reaches (objectstack
34b740f):examples/app-tododefer_task.new_due_date(date) andset_reminder.reminder_date(datetime), andexamples/app-showcase's Action Param Galleryp_date.Pins
app-shellActionParamDialog.test:dateanddatetimerender the picker (noinput[type=date]/datetime-local) and resolve2026-07-19and the ISO instant the platform validator accepts.plugin-gridbulkActionDialogParams.test:dateanddatetimerender the picker, and the row patch is{ due: '2026-10-20' }and the ISO instant.app-shellActionDesigner.paramVocabulary.test: thedate/datetimeexpectation isdate-picker.apps/consoleFormPage.sharedWidgets-10179.test: blur commits the picker, and the value is still2026-03-04.plugin-detailInlineFieldInput.dateOnlyWriteZone-12206.test: its form-widget control drives the picker. It ran green in the forks zone children throughscripts/__tests__/date-only-zone-pins-10183.test.ts.recordFormDatePicker-12622is unchanged and green.Ablation (on-disk proof via
ablation-replace.mjs; tests resolve@object-ui/fieldstosrc)git diff HEADempty.FORM_FACE_LOADERS): the 4 dialog and bulk pins are red, and the record-form pin is green. Restore OK.paramVocabularydate and datetime red. Restore OK.Item 2 (inline editors, list filters): measured, not built
FieldEditWidget'sdateentry for the picker and drove the realObjectGrid.2026-10-20on both Enter and a click outside.data-table.tsx, the pointerdown capture listener and the wrapper's Enter handler).FilterBuilderis in@object-ui/components, which cannot import@object-ui/fields.plugin-viewFilterUIhas no@object-ui/fieldsdependency, andDatePickerFieldis not exported from the fields barrel.Item 3 (
@object-ui/components' unusedDatePickerexport) is the maintainer's call and is not touched here.Tests and gates (at
626ad92)registerField/registerAllFields/getLazyFieldWidget/ the date picker, pluspackages/fields/src/widgets, app-shell utils,ActionParamDialog*, metadata-admin previews, plugin-gridbulk*andinlineEdit*, plugin-detail__tests__, kanbanRequiredFieldsDialog, consoleFormPage*, the schema-catalog form-field census): Test Files 601 passed | 2 skipped, Tests 6848 passed | 22 skipped.date-only-zone-pins-10183: 28 passed.type-checkfor@object-ui/fields,app-shell,plugin-gridandplugin-detailexits 0.check-changeset-presence,check:changeset-claims,changeset:check,check:test-path-rootsandcheck:spec-symbolseach exit 0.eslint --no-inline-configover the 8 changed files adds no error. The 2 errors it reports inActionPreview.tsxexist identically on the base.packages/plugin-gridandpackages/plugin-form. Each hit the 290s timeout set on its run, so the targeted set above stands in and CI runs the full farm.Acceptance notes
.changeset/12622-form-date-picker.mdno longer says the dialogs keep the native input (c184df4). 43 → 41 ineffective dynamic imports; DateField / DateTimeField no longer defeated (fieldWidgetMapnow loads the date picker, so itsimport()of those two widgets is gone; the two entries are deleted fromDEFEATED_LAZY_FIELD_WIDGETS, as the ledger asks;bf6bcbe). The eager closure is 39 bytes smaller (3,169,404 against 3,169,443 gzipped bytes).FORM_FACE_LOADERS:apps/console/vite.config.ts(thefields-date-pickerchunk group) andscripts/check-eager-closure-budget.mjs(its carve-out row). The carve-out itself still holds, because the map loaders areimport()calls. Only the wording is stale..changeset/12622-form-date-picker.mdsaysgetLazyFieldWidgetkeeps the native input. This PR's changeset states the new behaviour.InlineFieldInput.tsx's comment "DateFieldis its widget too" (about the Edit form) is now stale.FormPage.sharedWidgets-10179pins the written value, not the face, so it stays green under ablation A. The face pins are the ones listed above.Provenance: built by the cloud session
session_01VKCrtATqjvhepLgQ12oShR(claim6213750416) 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 changed nothing in the text.Generated by Claude Code