import React, { memo, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Calendar, Info } from 'lucide-react'; import { open as shellOpen } from '@tauri-apps/plugin-shell'; import type { BandsintownEvent } from '@/lib/api/bandsintown'; import { isoToParts } from '@/features/nowPlaying/utils/nowPlayingHelpers'; interface TourCardProps { artistName: string; enabled: boolean; loading: boolean; events: BandsintownEvent[]; onEnable: () => void; } const TourCard = memo(function TourCard({ artistName, enabled, loading, events, onEnable }: TourCardProps) { const { t } = useTranslation(); const [showAll, setShowAll] = useState(false); useEffect(() => { setShowAll(false); }, [artistName]); const TOUR_LIMIT = 5; const visible = showAll ? events : events.slice(0, TOUR_LIMIT); const hidden = Math.max(0, events.length - visible.length); return (

{t('nowPlayingInfo.onTour', 'On tour')}

{!enabled ? (
{t('nowPlayingInfo.enableBandsintownPrompt', 'See upcoming tour dates?')}
{t('nowPlayingInfo.enableBandsintownPromptDesc', 'Optional. Loads concerts for the current artist via Bandsintown.')}
) : ( <> {loading && events.length === 0 && (
{t('nowPlayingInfo.tourLoading', 'Loading…')}
)} {!loading && events.length === 0 && (
{t('nowPlayingInfo.noTourEvents', 'No upcoming shows')}
)} {visible.length > 0 && ( )} {(hidden > 0 || (showAll && events.length > TOUR_LIMIT)) && ( )}
{t('nowPlayingInfo.poweredByBandsintown', 'Tour data via Bandsintown')}
)}
); }); export default TourCard;