import { X } from 'lucide-react' import { PropsWithChildren } from 'react' import { Mentionable, MentionableBlock, MentionableCurrentFile, MentionableFile, MentionableFolder, MentionableImage, MentionableUrl, MentionableVault, } from '../../../types/mentionable' import { getMentionableIcon } from './utils/get-metionable-icon' function BadgeBase({ children, onDelete, onClick, isFocused, }: PropsWithChildren<{ onDelete: () => void onClick: () => void isFocused: boolean }>) { return (
{children}
{ evt.stopPropagation() onDelete() }} >
) } function FileBadge({ mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableFile onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return (
{Icon && ( )} {mentionable.file.name}
) } function FolderBadge({ mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableFolder onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return (
{Icon && ( )} {mentionable.folder.name}
) } function VaultBadge({ // eslint-disable-next-line @typescript-eslint/no-unused-vars mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableVault onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return ( {/* TODO: Update style */}
{Icon && ( )} Vault
) } function CurrentFileBadge({ mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableCurrentFile onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return mentionable.file ? (
{Icon && ( )} {mentionable.file.name}
{' (Current file)'}
) : null } function BlockBadge({ mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableBlock onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return (
{Icon && ( )} {mentionable.file.name}
{` (${mentionable.startLine}:${mentionable.endLine})`}
) } function UrlBadge({ mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableUrl onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return (
{Icon && ( )} {mentionable.url}
) } function ImageBadge({ mentionable, onDelete, onClick, isFocused, }: { mentionable: MentionableImage onDelete: () => void onClick: () => void isFocused: boolean }) { const Icon = getMentionableIcon(mentionable) return (
{Icon && ( )} {mentionable.name}
) } export default function MentionableBadge({ mentionable, onDelete, onClick, isFocused = false, }: { mentionable: Mentionable onDelete: () => void onClick: () => void isFocused?: boolean }) { switch (mentionable.type) { case 'file': return ( ) case 'folder': return ( ) case 'vault': return ( ) case 'current-file': return ( ) case 'block': return ( ) case 'url': return ( ) case 'image': return ( ) } }