import clsx from 'clsx'; import dayjs from 'dayjs'; import React from 'react'; import { marked } from 'marked'; import { useEnv } from '@/context/EnvContext'; import { BookNote } from '@/types/book'; import { useSettingsStore } from '@/store/settingsStore'; import { useReaderStore } from '@/store/readerStore'; import { useNotebookStore } from '@/store/notebookStore'; import { useBookDataStore } from '@/store/bookDataStore'; import { useTranslation } from '@/hooks/useTranslation'; import { useResponsiveSize } from '@/hooks/useResponsiveSize'; import { eventDispatcher } from '@/utils/event'; import useScrollToItem from '../../hooks/useScrollToItem'; interface BooknoteItemProps { bookKey: string; item: BookNote; } const BooknoteItem: React.FC = ({ bookKey, item }) => { const _ = useTranslation(); const { envConfig } = useEnv(); const { settings } = useSettingsStore(); const { getConfig, saveConfig, updateBooknotes } = useBookDataStore(); const { getProgress, getView, getViewsById } = useReaderStore(); const { setNotebookEditAnnotation, setNotebookVisible } = useNotebookStore(); const separatorWidth = useResponsiveSize(3); const { text, cfi, note } = item; const progress = getProgress(bookKey); const { isCurrent, viewRef } = useScrollToItem(cfi, progress); const handleClickItem = (event: React.MouseEvent) => { event.preventDefault(); eventDispatcher.dispatch('navigate', { bookKey, cfi }); getView(bookKey)?.goTo(cfi); if (note) { setNotebookVisible(true); } }; const deleteNote = (note: BookNote) => { if (!bookKey) return; const config = getConfig(bookKey); if (!config) return; const { booknotes = [] } = config; booknotes.forEach((item) => { if (item.id === note.id) { item.deletedAt = Date.now(); const views = getViewsById(bookKey.split('-')[0]!); views.forEach((view) => view?.addAnnotation(item, true)); } }); const updatedConfig = updateBooknotes(bookKey, booknotes); if (updatedConfig) { saveConfig(envConfig, bookKey, updatedConfig, settings); } }; const editNote = (note: BookNote) => { setNotebookVisible(true); setNotebookEditAnnotation(note); }; return (
  • {item.note && (
    )}
    {item.note && (
    )}
    {text || ''}
    e.stopPropagation()} >
    {dayjs(item.createdAt).fromNow()}
    {item.note && (
    {_('Edit')}
    )}
    {_('Delete')}
  • ); }; export default BooknoteItem;