UNPKG

@faceless-ui/slider

Version:

A React library for building every kind of slider

62 lines 2.29 kB
export const reducer = (state, action) => { const newState = Object.assign({}, state); const { currentSlideIndex, selectedSlideIndex, slides, } = state; const { type, payload, } = action; switch (type) { case 'UPDATE_SLIDE': { const { slide, } = payload; if (slide) { const { index: slideIndex, } = slide; newState.slides[slideIndex] = slide; } break; } case 'GO_TO_SLIDE_INDEX': { const { index, } = payload; if (typeof index === 'number') { newState.scrollIndex = index; } break; } case 'GO_TO_NEXT_SLIDE': { const { loop, isFullyScrolled } = payload; const currentIndex = selectedSlideIndex || currentSlideIndex; const nextIndex = currentIndex + 1; const hasNext = nextIndex < slides.length; let indexToUse = nextIndex; if (!hasNext || isFullyScrolled) { if (loop) indexToUse = 0; // first slide else indexToUse = slides.length - 1; // last slide } newState.scrollIndex = indexToUse; break; } case 'GO_TO_PREV_SLIDE': { const { loop, } = payload; const currentIndex = selectedSlideIndex || currentSlideIndex; const prevIndex = currentIndex - 1; const hasPrev = prevIndex >= 0; let indexToUse = prevIndex; if (!hasPrev) { if (loop) indexToUse = slides.length - 1; else indexToUse = 0; } newState.scrollIndex = indexToUse; break; } default: { break; } } const allIntersections = state === null || state === void 0 ? void 0 : state.slides.map(({ isIntersecting }) => isIntersecting); let newSlideIndex = allIntersections.indexOf(true); // first intersecting slide if (newSlideIndex === -1) newSlideIndex = 0; // if none intersection, use first slide newState.currentSlideIndex = newSlideIndex; return newState; }; //# sourceMappingURL=reducer.js.map