2026-02-26 04:05:22 +01:00
|
|
|
import type { ComponentType, SVGAttributes } from 'react'
|
2026-02-25 17:24:21 +01:00
|
|
|
import { NoteSearchList } from './NoteSearchList'
|
2026-02-24 23:42:09 +01:00
|
|
|
import './WikilinkSuggestionMenu.css'
|
|
|
|
|
|
|
|
|
|
export interface WikilinkSuggestionItem {
|
|
|
|
|
title: string
|
|
|
|
|
onItemClick: () => void
|
|
|
|
|
noteType?: string
|
|
|
|
|
typeColor?: string
|
2026-02-26 18:43:29 +01:00
|
|
|
typeLightColor?: string
|
2026-02-26 04:05:22 +01:00
|
|
|
TypeIcon?: ComponentType<SVGAttributes<SVGSVGElement>>
|
2026-02-24 23:42:09 +01:00
|
|
|
aliases?: string[]
|
|
|
|
|
entryTitle?: string
|
|
|
|
|
path?: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface WikilinkSuggestionMenuProps {
|
|
|
|
|
items: WikilinkSuggestionItem[]
|
|
|
|
|
loadingState: 'loading-initial' | 'loading' | 'loaded'
|
|
|
|
|
selectedIndex: number | undefined
|
|
|
|
|
onItemClick?: (item: WikilinkSuggestionItem) => void
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function WikilinkSuggestionMenu({ items, selectedIndex, onItemClick }: WikilinkSuggestionMenuProps) {
|
|
|
|
|
return (
|
2026-02-25 17:24:21 +01:00
|
|
|
<div className="wikilink-menu">
|
|
|
|
|
<NoteSearchList
|
|
|
|
|
items={items}
|
|
|
|
|
selectedIndex={selectedIndex ?? 0}
|
|
|
|
|
getItemKey={(item, i) => `${item.title}-${item.path ?? i}`}
|
|
|
|
|
onItemClick={(item) => {
|
|
|
|
|
item.onItemClick()
|
|
|
|
|
onItemClick?.(item)
|
|
|
|
|
}}
|
|
|
|
|
emptyMessage="No results"
|
|
|
|
|
/>
|
2026-02-24 23:42:09 +01:00
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|