react-photoswipe-gallery
Version:
React component wrapper around PhotoSwipe
34 lines • 1.11 kB
JavaScript
import sortNodes from "./sort-nodes.js";
import ensureRefPassed from "./ensure-ref-passed.js";
import entryItemRefIsElement from "./entry-item-ref-is-element.js";
import itemToSlide from "./item-to-slide.js";
import { NoRefError } from "../no-ref-error.js";
const getSlidesAndIndexFromItemsRefs = (items, targetRef, targetId, itemIndex) => {
const entries = Array.from(items.current);
if (typeof itemIndex === 'number' && (entries[itemIndex] === undefined || !entryItemRefIsElement(entries[itemIndex]))) {
throw new NoRefError(`Failed to open at index ${itemIndex}`);
}
const {
slides,
index
} = entries.map(ensureRefPassed).sort(([{
current: a
}], [{
current: b
}]) => sortNodes(a, b)).reduce((acc, entry, i) => {
const [ref, itemData] = entry;
if (targetRef === ref || itemData.id !== undefined && String(itemData.id) === targetId) {
acc.index = i;
}
acc.slides.push(itemToSlide(itemData, ref));
return acc;
}, {
slides: [],
index: itemIndex || null
});
return {
slides,
index
};
};
export default getSlidesAndIndexFromItemsRefs;