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_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;