UNPKG

react-with-breakpoints

Version:

Utility React component for altering the visual experience of responsive and lean webpages.

50 lines 2.06 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var React = __importStar(require("react")); var utils_1 = require("./utils"); var BreakpointsProvider = function (_a) { var breakpoints = _a.breakpoints, onBreakpointChange = _a.onBreakpointChange, children = _a.children; var _b = React.useState(''), currentBreakpoint = _b[0], setCurrentBreakpoint = _b[1]; React.useLayoutEffect(function () { var debouncedResize = utils_1.debounce(handleResize, 50); window.addEventListener('resize', debouncedResize, { passive: true }); handleResize(); return function () { window.removeEventListener('resize', debouncedResize); }; }, []); React.useEffect(function () { if (onBreakpointChange) { onBreakpointChange(currentBreakpoint); } }, [currentBreakpoint]); var handleResize = function () { var clientWidth = window.innerWidth; if (clientWidth < breakpoints.small) { setCurrentBreakpoint('small'); } else if (clientWidth < breakpoints.medium) { setCurrentBreakpoint('medium'); } else if (clientWidth < breakpoints.large) { setCurrentBreakpoint('large'); } else if (clientWidth <= breakpoints.xlarge || clientWidth > breakpoints.xlarge) { setCurrentBreakpoint('xlarge'); } }; return React.createElement(utils_1.Context.Provider, { value: { currentBreakpoint: currentBreakpoint } }, children); }; BreakpointsProvider.defaultProps = { breakpoints: utils_1.airbnbBreakpoints }; BreakpointsProvider.displayName = 'BreakpointsProvider'; exports.default = BreakpointsProvider; //# sourceMappingURL=BreakpointsProvider.js.map