import React, { useCallback, useMemo } from 'react'; import { Button, SkeletonText } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { formatDate, showModal } from '@openmrs/esm-framework'; import { type StickyNoteObs } from './sticky-note.resource'; import { decodeHtmlEntities } from './utils'; import DeleteStickyNote from './delete-sticky-note-button.component'; import EditStickyNote from './edit-sticky-note-button.component'; import styles from './sticky-note-panel.scss'; interface StickyNotePanelProps { isLoading: boolean; error: Error | undefined; mutate: () => void; note: StickyNoteObs | undefined; onClose: () => void; patientUuid: string; } const StickyNotePanel: React.FC = ({ error, isLoading, mutate, note, onClose, patientUuid }) => { const { t } = useTranslation(); const decodedValue = useMemo(() => (note ? decodeHtmlEntities(note.value) : ''), [note]); const handleEdit = useCallback(() => { if (!note) { return; } const dispose = showModal('sticky-note-modal', { close: () => dispose(), existingNote: note, mutate, patientUuid, }); }, [mutate, note, patientUuid]); if (isLoading) { return (
); } if (error) { return (

{t('errorLoadingStickyNote', "Couldn't load sticky note.")}

); } if (!note) { return null; } const creatorDisplay = note.auditInfo?.creator?.display; return (

{decodedValue}

{formatDate(new Date(note.obsDatetime), { mode: 'wide' })} {creatorDisplay ? ` ยท ${creatorDisplay}` : ''}
); }; export default StickyNotePanel;