/** * 공개 본문 라이트박스 이미지 목록을 만든다. * @param {Array} blocks - Markdown 렌더링 블록 목록 * @returns {Array} 라이트박스 이미지 목록 */ export const getContentLightboxImages = (blocks) => { const images = [] for (const block of blocks || []) { if (block?.type === 'image' && block.url) { images.push({ ...block, lightboxKey: block.id }) continue } if (block?.type !== 'gallery' || !Array.isArray(block.images)) { continue } block.images.forEach((image, imageIndex) => { if (!image?.url) { return } images.push({ ...image, lightboxKey: `${block.id}:${imageIndex}` }) }) } return images } /** * 갤러리 이미지를 행 단위로 나눈다. * @param {Array} images - 갤러리 이미지 목록 * @param {number} [rowSize=3] - 행당 이미지 개수 * @returns {Array<{ startIndex: number, images: Array }>} 행 목록 */ export const getGalleryRows = (images, rowSize = 3) => { const safeImages = Array.isArray(images) ? images : [] const safeRowSize = Number.isInteger(rowSize) && rowSize > 0 ? rowSize : 3 const rows = [] for (let index = 0; index < safeImages.length; index += safeRowSize) { rows.push({ startIndex: index, images: safeImages.slice(index, index + safeRowSize) }) } return rows }