fix: display current object name in morph relation picker after rename (#17209)

**Summary**

Issue #16963: When an object is renamed, the morph relation picker still
shows the old name.

**Root cause**

The picker used searchRecord.objectNameSingular from the GraphQL search
response, which can be stale after a rename.
The search record stores the object name at query time, not the current
metadata.

**Solution**

- Updated SingleRecordPickerMenuItem:
- Added useObjectMetadataItems to access current object metadata.
- Look up the current object metadata by morphItem.objectMetadataId.
- Use labelSingular (or nameSingular as fallback) instead of
searchRecord.objectNameSingular for display.
- Updated MultipleRecordPickerMenuItemContent:
- Use objectMetadataItem.labelSingular (already available as a prop)
instead of searchRecord.objectNameSingular.

---------

Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
This commit is contained in:
Ayesha Waseem
2026-01-22 20:40:57 +05:00
committed by GitHub
parent 1e9cd2f5c6
commit 669da1a87d
16 changed files with 146 additions and 35 deletions
@@ -119,6 +119,7 @@ describe('SearchService', () => {
const objectResults = [
{
objectNameSingular: 'person',
objectLabelSingular: 'Person',
tsRankCD: 2,
tsRank: 1,
recordId: '',
@@ -127,6 +128,7 @@ describe('SearchService', () => {
},
{
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 1,
tsRank: 1,
recordId: '',
@@ -135,6 +137,7 @@ describe('SearchService', () => {
},
{
objectNameSingular: 'regular-custom-object',
objectLabelSingular: 'Regular Custom Object',
tsRankCD: 3,
tsRank: 1,
recordId: '',
@@ -154,6 +157,7 @@ describe('SearchService', () => {
const objectResults = [
{
objectNameSingular: 'person',
objectLabelSingular: 'Person',
tsRankCD: 1,
tsRank: 1,
recordId: '',
@@ -162,6 +166,7 @@ describe('SearchService', () => {
},
{
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 1,
tsRank: 2,
recordId: '',
@@ -170,6 +175,7 @@ describe('SearchService', () => {
},
{
objectNameSingular: 'regular-custom-object',
objectLabelSingular: 'Regular Custom Object',
tsRankCD: 1,
tsRank: 3,
recordId: '',
@@ -189,6 +195,7 @@ describe('SearchService', () => {
const objectResults = [
{
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 1,
tsRank: 1,
recordId: '',
@@ -197,6 +204,7 @@ describe('SearchService', () => {
},
{
objectNameSingular: 'person',
objectLabelSingular: 'Person',
tsRankCD: 1,
tsRank: 1,
recordId: '',
@@ -205,6 +213,7 @@ describe('SearchService', () => {
},
{
objectNameSingular: 'regular-custom-object',
objectLabelSingular: 'Regular Custom Object',
tsRankCD: 1,
tsRank: 1,
recordId: '',
@@ -227,6 +236,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 0.9,
tsRank: 0.9,
recordId: 'companyId1',
@@ -243,6 +253,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 0.89,
tsRank: 0.89,
recordId: 'companyId2',
@@ -259,6 +270,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'person',
objectLabelSingular: 'Person',
tsRankCD: 0.87,
tsRank: 0.87,
recordId: 'personId1',
@@ -276,6 +288,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'person',
objectLabelSingular: 'Person',
tsRankCD: 0.87,
tsRank: 0.87,
recordId: 'personId2',
@@ -293,6 +306,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'opportunity',
objectLabelSingular: 'Opportunity',
tsRankCD: 0.87,
tsRank: 0.87,
recordId: 'opportunityId1',
@@ -311,6 +325,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'note',
objectLabelSingular: 'Note',
tsRankCD: 0.2,
tsRank: 0.2,
recordId: 'noteId1',
@@ -330,6 +345,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 0.1,
tsRank: 0.1,
recordId: 'companyId3',
@@ -362,6 +378,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'person',
objectLabelSingular: 'Person',
tsRankCD: 0.87,
tsRank: 0.87,
recordId: 'personId2',
@@ -379,6 +396,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'opportunity',
objectLabelSingular: 'Opportunity',
tsRankCD: 0.87,
tsRank: 0.87,
recordId: 'opportunityId1',
@@ -397,6 +415,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'note',
objectLabelSingular: 'Note',
tsRankCD: 0.2,
tsRank: 0.2,
recordId: 'noteId1',
@@ -416,6 +435,7 @@ describe('SearchService', () => {
{
record: {
objectNameSingular: 'company',
objectLabelSingular: 'Company',
tsRankCD: 0.1,
tsRank: 0.1,
recordId: 'companyId3',
@@ -16,6 +16,11 @@ export class SearchRecordDTO {
@IsNotEmpty()
objectNameSingular: string;
@Field(() => String)
@IsString()
@IsNotEmpty()
objectLabelSingular: string;
@Field(() => String)
@IsString()
@IsNotEmpty()
@@ -453,6 +453,7 @@ export class SearchService {
return {
recordId: record.id,
objectNameSingular: objectMetadataItem.nameSingular,
objectLabelSingular: objectMetadataItem.labelSingular,
label: this.getLabelIdentifierValue(
record,
objectMetadataItem,