@nlabs/gothamjs
Version:
Platform
47 lines (46 loc) • 4.91 kB
JavaScript
import { throttle } from "@nlabs/utils";
import { useEffect, useState } from "react";
const getCurrentBreakpoint = (setBreakpoint) => () => {
const breakpoints = {
values: {
lg: 1200,
md: 900,
sm: 600,
xl: 1536
}
};
const { values: { lg, md, sm, xl } } = breakpoints;
const { innerWidth } = window;
if (innerWidth < sm) {
setBreakpoint(0);
} else if (innerWidth < md) {
setBreakpoint(1);
} else if (innerWidth < lg) {
setBreakpoint(2);
} else if (innerWidth < xl) {
setBreakpoint(3);
} else {
setBreakpoint(4);
}
};
const useBreakpoint = () => {
const breakpointValues = ["xs", "sm", "md", "lg", "xl"];
const [breakpoint, setBreakpoint] = useState(0);
useEffect(() => {
const onResizeBreakpoint = getCurrentBreakpoint(setBreakpoint);
const onResize = throttle(onResizeBreakpoint, 100);
onResizeBreakpoint();
window.addEventListener("resize", onResize);
return () => window.removeEventListener("resize", onResize);
}, []);
return {
at: (size) => size === breakpointValues[breakpoint],
down: (size) => breakpointValues.indexOf(size) >= breakpoint,
up: (size) => breakpointValues.indexOf(size) <= breakpoint,
value: () => breakpointValues[breakpoint]
};
};
export {
useBreakpoint
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3VzZUJyZWFrcG9pbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3Rocm90dGxlfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGdldEN1cnJlbnRCcmVha3BvaW50ID0gKHNldEJyZWFrcG9pbnQpID0+ICgpOiB2b2lkID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHMgPSB7XG4gICAgdmFsdWVzOiB7XG4gICAgICBsZzogMTIwMCxcbiAgICAgIG1kOiA5MDAsXG4gICAgICBzbTogNjAwLFxuICAgICAgeGw6IDE1MzZcbiAgICB9XG4gIH07XG4gIGNvbnN0IHt2YWx1ZXM6IHtsZywgbWQsIHNtLCB4bH19ID0gYnJlYWtwb2ludHM7XG4gIGNvbnN0IHtpbm5lcldpZHRofSA9IHdpbmRvdztcblxuICBpZihpbm5lcldpZHRoIDwgc20pIHtcbiAgICBzZXRCcmVha3BvaW50KDApO1xuICB9IGVsc2UgaWYoaW5uZXJXaWR0aCA8IG1kKSB7XG4gICAgc2V0QnJlYWtwb2ludCgxKTtcbiAgfSBlbHNlIGlmKGlubmVyV2lkdGggPCBsZykge1xuICAgIHNldEJyZWFrcG9pbnQoMik7XG4gIH0gZWxzZSBpZihpbm5lcldpZHRoIDwgeGwpIHtcbiAgICBzZXRCcmVha3BvaW50KDMpO1xuICB9IGVsc2Uge1xuICAgIHNldEJyZWFrcG9pbnQoNCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1c2VCcmVha3BvaW50ID0gKCkgPT4ge1xuICBjb25zdCBicmVha3BvaW50VmFsdWVzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuICBjb25zdCBbYnJlYWtwb2ludCwgc2V0QnJlYWtwb2ludF0gPSB1c2VTdGF0ZSgwKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uUmVzaXplQnJlYWtwb2ludCA9IGdldEN1cnJlbnRCcmVha3BvaW50KHNldEJyZWFrcG9pbnQpO1xuICAgIGNvbnN0IG9uUmVzaXplID0gdGhyb3R0bGUob25SZXNpemVCcmVha3BvaW50LCAxMDApO1xuXG4gICAgLy8gSW5pdGFsIHNpemluZ1xuICAgIG9uUmVzaXplQnJlYWtwb2ludCgpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVzaXplKTtcblxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhdDogKHNpemU6IHN0cmluZyk6IGJvb2xlYW4gPT4gc2l6ZSA9PT0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSxcbiAgICBkb3duOiAoc2l6ZTogc3RyaW5nKTogYm9vbGVhbiA9PiBicmVha3BvaW50VmFsdWVzLmluZGV4T2Yoc2l6ZSkgPj0gYnJlYWtwb2ludCxcbiAgICB1cDogKHNpemU6IHN0cmluZyk6IGJvb2xlYW4gPT4gYnJlYWtwb2ludFZhbHVlcy5pbmRleE9mKHNpemUpIDw9IGJyZWFrcG9pbnQsXG4gICAgdmFsdWU6ICgpOiBzdHJpbmcgPT4gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XVxuICB9O1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsZ0JBQWU7QUFDdkIsU0FBUSxXQUFXLGdCQUFlO0FBRWxDLE1BQU0sdUJBQXVCLENBQUMsa0JBQWtCLE1BQVk7QUFDMUQsUUFBTSxjQUFjO0FBQUEsSUFDbEIsUUFBUTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLElBQ047QUFBQSxFQUNGO0FBQ0EsUUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLElBQUksSUFBSSxHQUFFLEVBQUMsSUFBSTtBQUNuQyxRQUFNLEVBQUMsV0FBVSxJQUFJO0FBRXJCLE1BQUcsYUFBYSxJQUFJO0FBQ2xCLGtCQUFjLENBQUM7QUFBQSxFQUNqQixXQUFVLGFBQWEsSUFBSTtBQUN6QixrQkFBYyxDQUFDO0FBQUEsRUFDakIsV0FBVSxhQUFhLElBQUk7QUFDekIsa0JBQWMsQ0FBQztBQUFBLEVBQ2pCLFdBQVUsYUFBYSxJQUFJO0FBQ3pCLGtCQUFjLENBQUM7QUFBQSxFQUNqQixPQUFPO0FBQ0wsa0JBQWMsQ0FBQztBQUFBLEVBQ2pCO0FBQ0Y7QUFFTyxNQUFNLGdCQUFnQixNQUFNO0FBQ2pDLFFBQU0sbUJBQW1CLENBQUMsTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJO0FBQ3RELFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSSxTQUFTLENBQUM7QUFFOUMsWUFBVSxNQUFNO0FBQ2QsVUFBTSxxQkFBcUIscUJBQXFCLGFBQWE7QUFDN0QsVUFBTSxXQUFXLFNBQVMsb0JBQW9CLEdBQUc7QUFHakQsdUJBQW1CO0FBRW5CLFdBQU8saUJBQWlCLFVBQVUsUUFBUTtBQUUxQyxXQUFPLE1BQU0sT0FBTyxvQkFBb0IsVUFBVSxRQUFRO0FBQUEsRUFDNUQsR0FBRyxDQUFDLENBQUM7QUFFTCxTQUFPO0FBQUEsSUFDTCxJQUFJLENBQUMsU0FBMEIsU0FBUyxpQkFBaUIsVUFBVTtBQUFBLElBQ25FLE1BQU0sQ0FBQyxTQUEwQixpQkFBaUIsUUFBUSxJQUFJLEtBQUs7QUFBQSxJQUNuRSxJQUFJLENBQUMsU0FBMEIsaUJBQWlCLFFBQVEsSUFBSSxLQUFLO0FBQUEsSUFDakUsT0FBTyxNQUFjLGlCQUFpQixVQUFVO0FBQUEsRUFDbEQ7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K