Files
memefast/resources/js/modules/editor/utils/timeline-template-processor.js
2025-06-17 22:58:51 +08:00

66 lines
2.3 KiB
JavaScript

// utils/timeline-template-processor.js
export const generateTimelineFromTemplate = (template, mediaStoreData) => {
const { selectedMeme, selectedBackground, currentCaption } = mediaStoreData;
// If no selections, return empty timeline
if (!selectedMeme && !selectedBackground) {
return [];
}
// Calculate duration based on template config
let maxDuration = 5; // default fallback
if (template.max_duration_based_on === 'memes' && selectedMeme?.duration) {
maxDuration = parseFloat(selectedMeme.duration);
}
// Process each timeline element
const processedTimeline = template.timeline
.map((element) => {
let processedElement = { ...element };
// Update duration for all elements
processedElement.duration = maxDuration;
// Process by element ID/type
switch (element.id) {
case 'background':
if (selectedBackground) {
processedElement.source = selectedBackground.media_url;
processedElement.name = selectedBackground.prompt || 'Background';
} else {
return null; // Skip if no background selected
}
break;
case 'meme':
if (selectedMeme) {
processedElement.source_webm = selectedMeme.webm_url;
processedElement.source_mov = selectedMeme.mov_url;
processedElement.poster = selectedMeme.webp_url;
processedElement.name = selectedMeme.name;
} else {
return null; // Skip if no meme selected
}
break;
case 'caption':
if (currentCaption) {
processedElement.text = currentCaption;
} else {
return null; // Skip if no caption
}
break;
default:
// Keep element as-is for any other types
break;
}
return processedElement;
})
.filter(Boolean); // Remove null elements
return processedTimeline;
};