/** * @fileoverview Note item component. */ import React, { PropTypes } from 'react' import { isArray } from 'lodash' import CSSModules from 'browser/lib/CSSModules' import styles from './NoteItem.styl' /** * @description Tag element component. * @param {string} tagName * @return {React.Component} */ const TagElement = ({ tagName }) => ( #{tagName} ) /** * @description Tag element list component. * @param {Array|null} tags * @return {React.Component} */ const TagElementList = (tags) => { if (!isArray(tags)) { return [] } const tagElements = tags.map(tag => ( TagElement({tagName: tag}) )) return tagElements } /** * @description Note item component when using normal display mode. * @param {boolean} isActive * @param {Object} note * @param {Function} handleNoteClick * @param {Function} handleDragStart * @param {string} dateDisplay */ const NoteItem = ({ isActive, note, dateDisplay, handleNoteClick, handleDragStart }) => (
handleNoteClick(e, `${note.storage}-${note.key}`)} onDragStart={e => handleDragStart(e, note)} draggable='true' >
{note.type === 'SNIPPET_NOTE' ? : }
{note.title.trim().length > 0 ? note.title : Empty }
{dateDisplay}
{note.isStarred ? : '' }
{note.tags.length > 0 ? TagElementList(note.tags) : }
) NoteItem.propTypes = { isActive: PropTypes.bool.isRequired, dateDisplay: PropTypes.string.isRequired, note: PropTypes.shape({ storage: PropTypes.string.isRequired, key: PropTypes.string.isRequired, type: PropTypes.string.isRequired, title: PropTypes.string.isrequired, tags: PropTypes.array, isStarred: PropTypes.bool.isRequired }), handleNoteClick: PropTypes.func.isRequired, handleDragStart: PropTypes.func.isRequired, handleDragEnd: PropTypes.func.isRequired } export default CSSModules(NoteItem, styles)