From 1f4ae56c1c900b8b5baba27fc5ce7c21cd721fd3 Mon Sep 17 00:00:00 2001 From: lucaronin Date: Tue, 14 Apr 2026 17:34:22 +0200 Subject: [PATCH] fix: preserve aliased link labels --- src/components/NoteItem.test.tsx | 29 ++++++++++++++++++++++ src/components/inspector/shared.test.ts | 13 ++++++++++ src/components/inspector/shared.ts | 8 +++++- src/components/note-item/PropertyChips.tsx | 3 ++- 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/components/NoteItem.test.tsx b/src/components/NoteItem.test.tsx index af196441..1d57bbec 100644 --- a/src/components/NoteItem.test.tsx +++ b/src/components/NoteItem.test.tsx @@ -281,6 +281,35 @@ describe('NoteItem', () => { expect(screen.getByTestId('property-chip-topics-0')).toHaveTextContent('AI / ML') }) + it('keeps explicit wikilink aliases in relationship chips', () => { + const linkedProject = makeEntry({ + path: '/vault/project/my-project.md', + filename: 'my-project.md', + title: 'My Project', + isA: 'Project', + }) + const sourceEntry = makeEntry({ + path: '/vault/note/source.md', + filename: 'source.md', + title: 'Source', + isA: 'Note', + relationships: { 'Belongs to': ['[[project/my-project|My Cool Project]]'] }, + }) + + render( + , + ) + + expect(screen.getByTestId('property-chip-belongs-to-0')).toHaveTextContent('My Cool Project') + }) + it('opens URL chips on Cmd+click only and keeps regular clicks inert', () => { const entry = makeEntry({ path: '/vault/note/source.md', diff --git a/src/components/inspector/shared.test.ts b/src/components/inspector/shared.test.ts index e35bc11e..4f598e18 100644 --- a/src/components/inspector/shared.test.ts +++ b/src/components/inspector/shared.test.ts @@ -22,4 +22,17 @@ describe('resolveRefProps', () => { expect(props.label).toBe('AI / ML') }) + + it('keeps explicit wikilink aliases for relationship labels', () => { + const linkedProject = makeEntry({ + path: '/vault/project/my-project.md', + filename: 'my-project.md', + title: 'My Project', + isA: 'Project', + }) + + const props = resolveRefProps('[[project/my-project|My Cool Project]]', [linkedProject], {}) + + expect(props.label).toBe('My Cool Project') + }) }) diff --git a/src/components/inspector/shared.ts b/src/components/inspector/shared.ts index 7d0b5bfb..9dfec937 100644 --- a/src/components/inspector/shared.ts +++ b/src/components/inspector/shared.ts @@ -25,13 +25,19 @@ export function entryStatusTitle(entry: VaultEntry | undefined): string | undefi return undefined } +function resolveRefLabel(ref: string, resolvedTitle: string | undefined): string { + const displayLabel = wikilinkDisplay(ref) + if (ref.includes('|')) return displayLabel + return resolvedTitle ?? displayLabel +} + export function resolveRefProps(ref: string, entries: VaultEntry[], typeEntryMap: Record) { const resolved = resolveRef(ref, entries) const refType = resolved?.isA ?? null const te = typeEntryMap[refType ?? ''] const icon = resolved?.icon return { - label: resolved?.title ?? wikilinkDisplay(ref), + label: resolveRefLabel(ref, resolved?.title), noteIcon: icon ?? null, typeColor: getTypeColor(refType, te?.color), bgColor: getTypeLightColor(refType, te?.color), diff --git a/src/components/note-item/PropertyChips.tsx b/src/components/note-item/PropertyChips.tsx index ccf668e1..9581d0c8 100644 --- a/src/components/note-item/PropertyChips.tsx +++ b/src/components/note-item/PropertyChips.tsx @@ -72,7 +72,8 @@ function resolveRelationshipChip( typeEntryMap: Record, ): PropertyChipValue | null { const targetEntry = resolveEntry(allEntries, wikilinkTarget(ref)) - const label = targetEntry?.title ?? wikilinkDisplay(ref) + const displayLabel = wikilinkDisplay(ref) + const label = ref.includes('|') ? displayLabel : (targetEntry?.title ?? displayLabel) if (!label) return null if (!targetEntry) { return {