import { MEAL_SLOTS } from '../planner/mealSlots.js'; function escapeHtml(s) { return String(s) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); } const slotLabelMap = Object.fromEntries(MEAL_SLOTS.map((slot) => [slot.id, slot.label])); function slotLabelsFor(recipe) { return (recipe.allowedSlots || []) .map((id) => slotLabelMap[id]) .filter(Boolean); } function getEmptyStateHTML({ emptyStateId, title, message }) { return ` `; } function renderRecipeCard(recipe, { showSlotLabels = true, cardClassName = '' } = {}) { const labels = showSlotLabels ? slotLabelsFor(recipe) : []; const className = ['recipe-browser-card', cardClassName].filter(Boolean).join(' '); return ` `; } export function filterRecipesByQuery(recipes, query = '') { const q = query.trim().toLowerCase(); if (!q) return [...recipes]; return recipes.filter((recipe) => { const haystack = `${recipe.title} ${(recipe.tags || []).join(' ')}`.toLowerCase(); return haystack.includes(q); }); } export function getRecipeGridSectionHTML({ scrollId, gridId, emptyStateId, scrollClassName = 'relative flex-1 overflow-y-auto px-4 pt-20 pb-24 bg-[#2d2e2b]', gridClassName = 'grid grid-cols-2 gap-3 bg-[#2d2e2b]', emptyTitle = 'Brak wyników', emptyMessage = 'Zmień kryteria wyszukiwania lub filtry', } = {}) { return `
${getEmptyStateHTML({ emptyStateId, title: emptyTitle, message: emptyMessage, })}
`; } export function renderRecipeGrid({ gridEl, emptyStateEl, recipes, showSlotLabels = true, cardClassName = '', } = {}) { if (!gridEl || !emptyStateEl) return; const items = Array.isArray(recipes) ? recipes : []; gridEl.innerHTML = items .map((recipe) => renderRecipeCard(recipe, { showSlotLabels, cardClassName })) .join(''); const hasItems = items.length > 0; gridEl.classList.toggle('hidden', !hasItems); emptyStateEl.classList.toggle('hidden', hasItems); }