Repository navigation
fix(app-shell): the full-page record form save toast names the saved record - #26528
Conversation
…record Red-first pin for create and update on the /new and /edit routes. Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
…record RecordFormPage (/new and /edit) now toasts form.createdNamed / form.updatedNamed with the record's ADR-0079 display name, the same resolver, floor and keys the dialog paths in AppContent use; a record with nothing nameable keeps the object-label toast. Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
… pack Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
维护者速读改了什么:整页记录表单( 席位核对seat 2 · 2026-10-27T06:49Z · head
|
Fixes #26461
Clause-②: no
Metadata-protocol: none
维护者速读
/new、/edit路由)保存成功提示改为点名记录标题,如Task "Quarterly review" updated;复用弹窗路径同一解析器、同一无名兜底、同两个文案键,不新增文案。What
The full-page record form (
RecordFormPage, the/newand/record/ID/editroutes used by objects whose form opens as a page) now names the saved record in its success toast. It works the same way as the dialog paths that PR #26202 changed inui/packages/app-shell/src/console/AppContent.tsx(recordSaveMessage):getRecordDisplayNamefrom@object-ui/core(ADR-0079), read through this page's object, so it follows the object's declarednameField.Record #IDanswer, or an empty answer for a row with no id, is not a name, so the page falls back toform.createSuccess/form.updateSuccess(Task created successfully). The page also falls back whenonSuccessreceives no record.form.createdNamed/form.updatedNamed. They are already in all ten packs, so no locale file changes and no wording is added. As with every othert()in this file, the keys are passed without an inlinedefaultValue.ObjectFormalready hands the write's result toschema.onSuccess(result)in every layout (simple, tabbed, wizard, split), the same contractModalFormserves to the dialog path.handleSuccessnow reads that argument.Files:
ui/packages/app-shell/src/views/RecordFormPage.tsx:handleSuccess(saved)builds the named or fallback toast.ui/packages/app-shell/src/views/RecordFormPage.saveToastNamesRecord-26461.test.tsx(new): six cells. Create and update with a name, create and update at theRecord #IDfloor, update with no record handed back, and one zh cell.ui/packages/app-shell/src/views/RecordFormPage.i18n.test.tsx: the two named keys join the page's bare-keys list, which is pinned present in all ten packs..changeset/26461-record-form-page-toast.md: patch,@object-ui/app-shell.Tests
All runs are at head
4a0094b9, underscripts/pm/os-verify-lock.sh.RecordFormPage.tsxrestored tree-only to the base00a4593a, withgetRecordDisplayNamecount 0) gave 3 failed / 3 passed. The three "names the record" cells failed (expected 'Task created successfully' to be 'Task "Quarterly review" created', the update cell the same, and zhexpected 'Task更新成功' ...). The three no-name cells passed. This matches the direction written in the test header before the run. Restore:git checkout HEAD -- RecordFormPage.tsx, then the blob equals HEAD (4442d066) andgit statusis clean.RecordFormPage(the nine that exist plus the new one) gave Test Files 10 passed (10), Tests 62 passed (62).pnpm --filter @object-ui/app-shell type-check: exit 0. Itstsconfig.test.jsonincludessrc/**/*.test.tsx, so the new file is compiled.pnpm --filter '@object-ui/app-shell^...' build, VERDICT command-exit 0.Narrowed on purpose: the whole app-shell suite is left to CI
Build & E2E UI/Test Core.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 34 families. All 34 were run locally after the last commit, and--ranaccounted for 34 of 34.node scripts/check-sdui-manifest.mjs(present and intact, 106 components) and its--self-test, andpnpm --dir ui exec vitest run scripts/(178 files passed, 2 skipped; 5097 tests passed).pnpm check:type-check-debtexited 3 (PREREQUISITE NOT MET). This is NOT MEASURED, not a pass and not a finding. It is a repo-wide--re-measurethat needs a full package build behind the shared lock. CI'sLint & Repo Gatesrun is the reading of record.sdui.manifest.jsonwas not regenerated.Acceptance notes
recordSaveMessageinAppContent.tsxandhandleSuccesshere now repeat the same resolver-and-floor steps (about six lines). Extracting one shared builder would changeAppContent.tsx, which is outside this card's file surface, so it is not done here.Generated by Claude Code