Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 318320ab3f fix: use correct labels and icons for Note/Task relations on custom objects
https://sonarly.com/issue/20169?type=bug

When creating custom Data Model objects, the auto-generated Note and Task relation fields use the raw object plural labels ("Note Targets", "Task Targets") and a hardcoded generic icon (`IconBuildingSkyscraper`) instead of the user-friendly labels ("Notes", "Tasks") and appropriate icons (`IconNotes`, `IconCheckbox`) used by standard objects.

Fix: Added a `sourceFieldOverridesByRelationObjectNameSingular` mapping that provides the correct user-friendly labels and icons for each default relation type on custom objects, matching exactly what standard objects (Company, Person, etc.) use:

- `noteTarget` → label "Notes", icon "IconNotes" (was "Note Targets" / "IconBuildingSkyscraper")
- `taskTarget` → label "Tasks", icon "IconCheckbox" (was "Task Targets" / "IconBuildingSkyscraper")
- `attachment` → label "Attachments", icon "IconFileImport" (was "Attachments" / "IconBuildingSkyscraper")
- `timelineActivity` → label "Timeline Activities", icon "IconTimelineEvent" (was "Timeline Activities" / "IconBuildingSkyscraper")
- `favorite` → label "Favorites", icon "IconHeart" (was "Favorites" / "IconBuildingSkyscraper")

The map is typed as `Record<(typeof DEFAULT_RELATIONS_OBJECTS_STANDARD_IDS)[number], ...>` so the compiler will require an entry for any new default relation object added in the future.

**Note:** This fix only applies to newly created custom objects. Existing custom objects that already have the wrong labels and icons will retain them. A data migration or upgrade command would be needed to fix existing custom objects.
2026-03-31 15:13:25 +00:00
@@ -21,6 +21,20 @@ import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-mi
import { type UniversalFlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-field-metadata.type';
import { type UniversalFlatObjectMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-object-metadata.type';
const sourceFieldOverridesByRelationObjectNameSingular: Record<
(typeof DEFAULT_RELATIONS_OBJECTS_STANDARD_IDS)[number],
{ label: string; icon: string }
> = {
noteTarget: { label: 'Notes', icon: 'IconNotes' },
taskTarget: { label: 'Tasks', icon: 'IconCheckbox' },
attachment: { label: 'Attachments', icon: 'IconFileImport' },
timelineActivity: {
label: 'Timeline Activities',
icon: 'IconTimelineEvent',
},
favorite: { label: 'Favorites', icon: 'IconHeart' },
};
const morphIdByRelationObjectNameSingular = {
timelineActivity:
STANDARD_OBJECTS.timelineActivity.morphIds.targetMorphId.morphId,
@@ -120,10 +134,16 @@ export const buildDefaultRelationFlatFieldMetadatasForCustomObject = ({
morphId,
targetFieldName: fieldName,
createFieldInput: {
icon: 'IconBuildingSkyscraper',
icon:
sourceFieldOverridesByRelationObjectNameSingular[
objectMetadataNameSingular
].icon,
type: FieldMetadataType.RELATION,
name: targetFlatObjectMetadata.namePlural,
label: capitalize(targetFlatObjectMetadata.labelPlural),
label:
sourceFieldOverridesByRelationObjectNameSingular[
objectMetadataNameSingular
].label,
isSystem: false,
relationCreationPayload: {
type: RelationType.ONE_TO_MANY,