import React, { useState } from 'react'; import Icon, { SourceIcon } from './Icon'; import LinksSentence from './LinksSentence'; import { Dater, dater } from './Dater'; import URILink from './URILink'; import ContextMenuTrigger from './ContextMenu/ContextMenuTrigger'; import ErrorBoundary from './ErrorBoundary'; import { isTouchDevice } from '../util/helpers'; import { I18n, i18n } from '../locale'; import AddedFrom from './AddedFrom'; const MiddleColumn = ({ context, item: { added_from, added_by, played_at, } = {}, }) => { let content; switch (context?.type) { case 'history': { content = (
{ played_at ? ( ) : ('-') }
); break; } case 'queue': { content = ( ); break; } default: return null; } return (
{content}
); } const Track = ({ item, context, stream_title, play_state, is_selected, is_dropping, can_sort, show_source_icon, getItemIndex, events, }) => { const index = getItemIndex(); if (!item) return null; let className = 'list__item list__item--track mouse-draggable mouse-selectable mouse-contextable'; const track_details = []; if (item.artists) { track_details.push(
  • {item.artists ? : '-'}
  • , ); } else if (item.playing && stream_title) { track_details.push(
  • {stream_title}
  • , ); } if (item.album) { track_details.push(
  • {item.album.uri ? {item.album.name} : {item.album.name} }
  • , ); } // If we're touchable, and can sort this tracklist let drag_zone = null; if (isTouchDevice() && can_sort) { className += ' list__item--has-drag-zone'; drag_zone = ( ); } const track_middle_column = ; if (is_selected(index)) className += ' list__item--selected'; if (is_dropping(index)) className += ' list__item--dropping'; if (can_sort) className += ' list__item--can-sort'; if (item.type !== undefined) className += ` list__item--${item.type}`; if (item.playing) className += ' list__item--playing'; if (item.loading) className += ' list__item--loading'; if (item.is_playable === false) className += ' list__item--disabled'; if (track_middle_column) className += ' list__item--has-middle-column'; if (track_details.length > 0) className += ' list__item--has-details'; const onClick = (e) => events.onClick(item, index, e); const onDoubleClick = (e) => events.onDoubleClick(item, index, e); const onContextMenu = (e) => events.onContextMenu(item, index, e); const onDragStart = (e) => events.onDragStart(item, index, e); const onDragEnter = (e) => events.onDragEnter(item, index, e); const onDragLeave = (e) => events.onDragLeave(item, index, e); const onDrop = (e) => events.onDrop(item, index, e); return (
    console.debug("DROP")} draggable="true" >
    {item.name ? item.name : {item.uri}} {item.playing && }
    {track_details && (
      {track_details}
    )}
    {track_middle_column}
    {drag_zone} {item.is_explicit && {i18n('track.explicit').toUpperCase()}} {item.is_playable === false && {i18n('track.unplayable').toUpperCase()}} {(context?.type === 'album' || context?.type === 'artist') && item.track_number && (   {item.track_number} )} {item.duration ? : '-'} {show_source_icon && ( )}
    ); } export default Track;