UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

39 lines (38 loc) 1.7 kB
/** * Takes image sizes and a target range and returns the url of the image within that range. * If no images fit within the range, it selects the next smallest adequate image, the original, * or the largest smaller image if no better fit exists. * * @param sizes The given FileSizes. * @param targetSizeMax The ideal image maximum width. Defaults to 180. * @param targetSizeMin The ideal image minimum width. Defaults to 40. * @param thumbnailURL The thumbnail url set in config. If passed a url, will return early with it. * @param url The url of the original file. * @param width The width of the original file. * @returns A url of the best fit file. */ export const getBestFitFromSizes = ({ sizes, targetSizeMax = 180, targetSizeMin = 40, thumbnailURL, url, width })=>{ if (thumbnailURL) { return thumbnailURL; } if (!sizes) { return url; } const bestFit = Object.values(sizes).reduce((closest, current)=>{ if (!current.width || current.width < targetSizeMin) { return closest; } if (current.width >= targetSizeMin && current.width <= targetSizeMax) { return !closest.width || current.width < closest.width || closest.width < targetSizeMin || closest.width > targetSizeMax ? current : closest; } if (!closest.width || !closest.original && closest.width < targetSizeMin && current.width > closest.width || closest.width > targetSizeMax && current.width < closest.width) { return current; } return closest; }, { original: true, url, width }); return bestFit.url || url; }; //# sourceMappingURL=getBestFitFromSizes.js.map