import { useState, useCallback, useEffect } from 'react' import { EmojiPicker } from './EmojiPicker' import { isEmoji } from '../utils/emoji' interface NoteIconProps { icon: string | null editable?: boolean onSetIcon: (emoji: string) => void onRemoveIcon: () => void } export function NoteIcon({ icon, editable = true, onSetIcon, onRemoveIcon }: NoteIconProps) { const [pickerOpen, setPickerOpen] = useState(false) const [showRemove, setShowRemove] = useState(false) const hasIcon = icon && isEmoji(icon) // Listen for command palette "Set Note Icon" event useEffect(() => { if (!editable) return const handler = () => setPickerOpen(true) window.addEventListener('laputa:open-icon-picker', handler) return () => window.removeEventListener('laputa:open-icon-picker', handler) }, [editable]) const openPicker = useCallback(() => { if (!editable) return if (hasIcon) { setShowRemove(prev => !prev) } else { setPickerOpen(true) } }, [editable, hasIcon]) const handleSelect = useCallback((emoji: string) => { onSetIcon(emoji) setPickerOpen(false) setShowRemove(false) }, [onSetIcon]) const handleRemove = useCallback(() => { onRemoveIcon() setShowRemove(false) }, [onRemoveIcon]) const handleChangePicker = useCallback(() => { setShowRemove(false) setPickerOpen(true) }, []) return (
{hasIcon ? ( ) : ( editable && ( ) )} {showRemove && hasIcon && (
)} {pickerOpen && ( setPickerOpen(false)} /> )}
) }