Update script.js
This commit is contained in:
parent
16e786586e
commit
02f171646c
1 changed files with 98 additions and 0 deletions
|
|
@ -20325,6 +20325,13 @@ function populateBeatportTop10Releases(releases) {
|
||||||
card.style.backgroundPosition = 'center';
|
card.style.backgroundPosition = 'center';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add click handlers for individual release discovery
|
||||||
|
const releaseCards = container.querySelectorAll('.beatport-releases-top10-card[data-url]');
|
||||||
|
releaseCards.forEach((card, index) => {
|
||||||
|
card.addEventListener('click', () => handleBeatportReleaseCardClick(card, releases[index]));
|
||||||
|
card.style.cursor = 'pointer';
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -20342,3 +20349,94 @@ function showTop10ReleasesError(errorMessage) {
|
||||||
|
|
||||||
if (container) container.innerHTML = errorHtml;
|
if (container) container.innerHTML = errorHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle click on individual Top 10 Release card - create discovery process for single release
|
||||||
|
*/
|
||||||
|
async function handleBeatportReleaseCardClick(cardElement, release) {
|
||||||
|
console.log(`💿 Individual release card clicked: ${release.title} by ${release.artist}`);
|
||||||
|
|
||||||
|
if (!release.url || release.url === '#') {
|
||||||
|
showToast('No release URL available', 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Create unique identifiers for this release
|
||||||
|
const releaseHash = `release_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
||||||
|
const chartName = `${release.title} - ${release.artist}`;
|
||||||
|
|
||||||
|
showToast(`Loading ${release.title}...`, 'info');
|
||||||
|
showLoadingOverlay(`Getting tracks from ${release.title}...`);
|
||||||
|
|
||||||
|
// Check if we already have a card for this release
|
||||||
|
const existingState = Object.values(beatportChartStates).find(state =>
|
||||||
|
state.chart &&
|
||||||
|
state.chart.name === chartName &&
|
||||||
|
state.chart.chart_type === 'individual_release'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (existingState) {
|
||||||
|
console.log(`🔄 Found existing card for ${release.title}, opening existing modal`);
|
||||||
|
hideLoadingOverlay();
|
||||||
|
handleBeatportCardClick(existingState.chart.hash);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get track data from this single release
|
||||||
|
console.log(`🎵 Fetching tracks from release: ${release.url}`);
|
||||||
|
const response = await fetch('/api/beatport/scrape-releases', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
release_urls: [release.url],
|
||||||
|
source_name: `Top 10 Release: ${release.title}`
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
if (!data.success || !data.tracks || data.tracks.length === 0) {
|
||||||
|
throw new Error('No tracks found in this release');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`✅ Successfully fetched ${data.tracks.length} tracks from ${release.title}`);
|
||||||
|
|
||||||
|
// Transform to standard chart format (following the exact pattern from handleRebuildChartClick)
|
||||||
|
const chartData = {
|
||||||
|
hash: releaseHash,
|
||||||
|
name: chartName,
|
||||||
|
chart_type: 'individual_release',
|
||||||
|
track_count: data.tracks.length,
|
||||||
|
tracks: data.tracks.map(track => ({
|
||||||
|
name: cleanTrackText(track.title || 'Unknown Title'),
|
||||||
|
artists: [cleanTrackText(track.artist || 'Unknown Artist')],
|
||||||
|
album: chartName,
|
||||||
|
duration_ms: 0,
|
||||||
|
external_urls: { beatport: track.url || '' },
|
||||||
|
source: 'beatport',
|
||||||
|
// Include release metadata
|
||||||
|
release_title: release.title,
|
||||||
|
release_artist: release.artist,
|
||||||
|
release_label: release.label,
|
||||||
|
release_image: release.image_url
|
||||||
|
}))
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create Beatport playlist card (following the exact pattern)
|
||||||
|
addBeatportCardToContainer(chartData);
|
||||||
|
|
||||||
|
// Automatically open discovery modal (following the exact pattern)
|
||||||
|
hideLoadingOverlay();
|
||||||
|
handleBeatportCardClick(releaseHash);
|
||||||
|
|
||||||
|
console.log(`✅ Created individual release card and opened discovery modal for ${release.title}`);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`❌ Error handling release click for ${release.title}:`, error);
|
||||||
|
hideLoadingOverlay();
|
||||||
|
showToast(`Error loading ${release.title}: ${error.message}`, 'error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue