import runMiddlewares from '~/utils/runMiddlewares'; import { Middleware } from '~/types'; interface Props { [key: number | string]: Middleware[] } const middlewaresToRerun = ['slidesPerView', 'spaceBetween']; const breakpoints = (props: Props): Middleware => ({ name: 'breakpoints', callback(slider) { const allBreakpoints = Object.keys(props) .map(Number) .sort((a, b) => b - a); const middlewares: { [key: string]: Middleware } = {}; let currentBreakpoint = null; for (const breakpoint of allBreakpoints) { if (window.innerWidth <= breakpoint) { currentBreakpoint = breakpoint; props[breakpoint].forEach((middleware) => { middlewares[middleware.name] = middleware; }); } } slider.middlewares .filter((middleware) => middlewaresToRerun.includes(middleware.name)) .forEach((middleware) => { if (middlewares[middleware.name]) return; middlewares[middleware.name] = middleware; }); if (!currentBreakpoint) return; runMiddlewares(Object.values(middlewares), slider); }, }); export default breakpoints;