| 1 |
const asImage = (image) => { |
| 2 |
if (typeof image === 'string') return image ? { url: image } : null; |
| 3 |
return typeof image?.url === 'string' && image.url ? image : null; |
| 4 |
}; |
| 5 |
|
| 6 |
const asImages = (images) => |
| 7 |
Array.isArray(images) ? images.map(asImage).filter(Boolean) : []; |
| 8 |
|
| 9 |
// Sites launched before the banner picks stored one flat list of urls. |
| 10 |
export const normalizeSiteImages = (siteImages) => |
| 11 |
!siteImages || Array.isArray(siteImages) |
| 12 |
? { hero: [], general: asImages(siteImages) } |
| 13 |
: { |
| 14 |
hero: asImages(siteImages.hero), |
| 15 |
general: asImages(siteImages.general), |
| 16 |
}; |
| 17 |
|
| 18 |
export const siteImageUrlsByType = (siteImages) => { |
| 19 |
const { hero, general } = normalizeSiteImages(siteImages); |
| 20 |
const urls = (images) => images.map(({ url }) => url); |
| 21 |
return { hero: urls(hero), general: urls(general) }; |
| 22 |
}; |
| 23 |
|
| 24 |
export const siteImageUrls = (siteImages) => { |
| 25 |
const { hero, general } = siteImageUrlsByType(siteImages); |
| 26 |
return [...hero, ...general]; |
| 27 |
}; |
| 28 |
|