Spaces:
Runtime error
Runtime error
| import classNames from 'classnames'; | |
| import PropTypes from 'prop-types'; | |
| import React from 'react'; | |
| import DeleteButton from '../delete-button/delete-button.jsx'; | |
| import styles from './sprite-selector-item.css'; | |
| import {ContextMenuTrigger} from 'react-contextmenu'; | |
| import {DangerousMenuItem, ContextMenu, MenuItem} from '../context-menu/context-menu.jsx'; | |
| import {FormattedMessage} from 'react-intl'; | |
| // react-contextmenu requires unique id to match trigger and context menu | |
| let contextMenuId = 0; | |
| const SpriteSelectorItem = props => ( | |
| <ContextMenuTrigger | |
| attributes={{ | |
| className: classNames(props.className, styles.spriteSelectorItem, { | |
| [styles.isSelected]: props.selected | |
| }), | |
| onClick: props.onClick, | |
| onMouseEnter: props.onMouseEnter, | |
| onMouseLeave: props.onMouseLeave, | |
| onMouseDown: props.onMouseDown, | |
| onTouchStart: props.onMouseDown | |
| }} | |
| disable={props.preventContextMenu} | |
| id={`${props.name}-${contextMenuId}`} | |
| ref={props.componentRef} | |
| > | |
| {typeof props.number === 'undefined' ? null : ( | |
| <div className={styles.number}>{props.number}</div> | |
| )} | |
| {props.costumeURL ? ( | |
| <div className={styles.spriteImageOuter}> | |
| <div className={styles.spriteImageInner}> | |
| <img | |
| className={styles.spriteImage} | |
| draggable={false} | |
| src={props.costumeURL} | |
| /> | |
| </div> | |
| </div> | |
| ) : null} | |
| <div className={styles.spriteInfo}> | |
| <div className={styles.spriteName}>{props.name}</div> | |
| {props.details ? ( | |
| <div className={styles.spriteDetails}>{props.details}</div> | |
| ) : null} | |
| </div> | |
| {(props.selected && props.onDeleteButtonClick) ? ( | |
| <DeleteButton | |
| className={styles.deleteButton} | |
| onClick={props.onDeleteButtonClick} | |
| /> | |
| ) : null } | |
| {props.onDuplicateButtonClick || props.onDeleteButtonClick || props.onExportButtonClick ? ( | |
| <ContextMenu id={`${props.name}-${contextMenuId++}`}> | |
| {props.onDuplicateButtonClick ? ( | |
| <MenuItem onClick={props.onDuplicateButtonClick}> | |
| <FormattedMessage | |
| defaultMessage="duplicate" | |
| description="Menu item to duplicate in the right click menu" | |
| id="gui.spriteSelectorItem.contextMenuDuplicate" | |
| /> | |
| </MenuItem> | |
| ) : null} | |
| {props.onExportButtonClick ? ( | |
| <MenuItem onClick={props.onExportButtonClick}> | |
| <FormattedMessage | |
| defaultMessage="export" | |
| description="Menu item to export the selected item" | |
| id="gui.spriteSelectorItem.contextMenuExport" | |
| /> | |
| </MenuItem> | |
| ) : null } | |
| {props.onRenameButtonClick ? ( | |
| <MenuItem onClick={props.onRenameButtonClick}> | |
| <FormattedMessage | |
| defaultMessage="rename" | |
| description="Menu item to rename an item" | |
| id="tw.spriteSelectorItem.rename" | |
| /> | |
| </MenuItem> | |
| ) : null} | |
| {props.onDeleteButtonClick ? ( | |
| <DangerousMenuItem onClick={props.onDeleteButtonClick}> | |
| <FormattedMessage | |
| defaultMessage="delete" | |
| description="Menu item to delete in the right click menu" | |
| id="gui.spriteSelectorItem.contextMenuDelete" | |
| /> | |
| </DangerousMenuItem> | |
| ) : null } | |
| </ContextMenu> | |
| ) : null} | |
| </ContextMenuTrigger> | |
| ); | |
| SpriteSelectorItem.propTypes = { | |
| className: PropTypes.string, | |
| componentRef: PropTypes.func, | |
| costumeURL: PropTypes.string, | |
| details: PropTypes.string, | |
| // eslint-disable-next-line react/forbid-prop-types | |
| name: PropTypes.any, | |
| number: PropTypes.number, | |
| onClick: PropTypes.func, | |
| onDeleteButtonClick: PropTypes.func, | |
| onDuplicateButtonClick: PropTypes.func, | |
| onExportButtonClick: PropTypes.func, | |
| onRenameButtonClick: PropTypes.func, | |
| onMouseDown: PropTypes.func, | |
| onMouseEnter: PropTypes.func, | |
| onMouseLeave: PropTypes.func, | |
| preventContextMenu: PropTypes.bool, | |
| selected: PropTypes.bool.isRequired | |
| }; | |
| export default SpriteSelectorItem; | |