From 4ef69fcc74c7b9df84cfa03fa4ddbca4bdefdffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=85=E5=91=A8=E6=B6=9B?= Date: Sun, 19 Jul 2026 03:20:05 -0700 Subject: [PATCH] feat(platform-objects): surface phone number in create_user result dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The create-user response's `user` object carries `phoneNumber` only for phone-based accounts (admin-user-endpoints.ts builds it conditionally). Declaring it is safe now that objectui's ActionResultDialog skips fields whose path is absent from the payload — email-only users see no dirty Phone Number row, and (same mechanism) manually-set passwords no longer render an undefined Temporary Password row. Co-Authored-By: Claude Fable 5 --- .changeset/create-user-result-dialog-phone.md | 12 ++++++++++++ .../platform-objects/src/identity/sys-user.object.ts | 4 ++++ 2 files changed, 16 insertions(+) create mode 100644 .changeset/create-user-result-dialog-phone.md diff --git a/.changeset/create-user-result-dialog-phone.md b/.changeset/create-user-result-dialog-phone.md new file mode 100644 index 0000000000..35f305cd29 --- /dev/null +++ b/.changeset/create-user-result-dialog-phone.md @@ -0,0 +1,12 @@ +--- +'@objectstack/platform-objects': minor +--- + +feat(platform-objects): surface phone number in the create_user result dialog + +`sys_user`'s `create_user` action now declares `user.phoneNumber` in its +`resultDialog.fields`, so admins creating phone-based accounts see the +sign-in phone number alongside the email and temporary password. The +create-user response carries `phoneNumber` only for phone-based users; +objectui's ActionResultDialog skips declared fields whose path is absent +from the payload, so email-only users see no extra row. diff --git a/packages/platform-objects/src/identity/sys-user.object.ts b/packages/platform-objects/src/identity/sys-user.object.ts index c69613fd6d..ba20ee6a38 100644 --- a/packages/platform-objects/src/identity/sys-user.object.ts +++ b/packages/platform-objects/src/identity/sys-user.object.ts @@ -187,7 +187,11 @@ export const SysUser = ObjectSchema.create({ 'Copy the temporary password now — it is shown only once and never stored.', acknowledge: 'I have saved this password', fields: [ + // The dialog skips fields whose path is absent from the response, so + // conditional keys are safe to declare: phoneNumber only exists for + // phone-based users, temporaryPassword only when the server minted one. { path: 'user.email', label: 'Email', format: 'text' }, + { path: 'user.phoneNumber', label: 'Phone Number', format: 'text' }, { path: 'temporaryPassword', label: 'Temporary Password', format: 'secret' }, ], },