@ozen-ui/kit
Version:
React component library
66 lines (65 loc) • 2.9 kB
JavaScript
import { __assign, __read, __values } from "tslib";
import { useState, useCallback, useDebugValue } from 'react';
import { breakpointVariant, } from '../../types/Breakpoints';
import { useDeprecatedHook } from '../useDeprecated';
import { useIsomorphicEffect } from '../useIsomorphicEffect';
var breakpoint = {
xs: '(min-width: 0px)',
s: '(min-width: 640px)',
m: '(min-width: 1024px)',
l: '(min-width: 1280px)',
};
/**
* @deprecated Хук устарел. Для замены используйте useBreakpointsNext
*/
export function useBreakpoints() {
useDeprecatedHook('useBreakpoints');
var _a = __read(useState(breakpointVariant.reduce(function (acc, key) {
var _a;
return (__assign(__assign({}, acc), (_a = {}, _a[key] = window.matchMedia(breakpoint[key]).matches, _a)));
}, {})), 2), matches = _a[0], setMatches = _a[1];
var updateMatches = useCallback(function (key) { return function (e) {
setMatches(function (prevMatches) {
var _a;
return (__assign(__assign({}, prevMatches), (_a = {}, _a[key] = e.matches, _a)));
});
}; }, []);
useIsomorphicEffect(function () {
var e_1, _a;
var matchMedias = [];
try {
for (var breakpointVariant_1 = __values(breakpointVariant), breakpointVariant_1_1 = breakpointVariant_1.next(); !breakpointVariant_1_1.done; breakpointVariant_1_1 = breakpointVariant_1.next()) {
var key = breakpointVariant_1_1.value;
var matchMedia_1 = window.matchMedia(breakpoint[key]);
var func = updateMatches(key);
matchMedia_1.addEventListener('change', func);
matchMedias.push({ matchMedia: matchMedia_1, func: func });
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (breakpointVariant_1_1 && !breakpointVariant_1_1.done && (_a = breakpointVariant_1.return)) _a.call(breakpointVariant_1);
}
finally { if (e_1) throw e_1.error; }
}
return function () {
var e_2, _a;
try {
for (var matchMedias_1 = __values(matchMedias), matchMedias_1_1 = matchMedias_1.next(); !matchMedias_1_1.done; matchMedias_1_1 = matchMedias_1.next()) {
var _b = matchMedias_1_1.value, matchMedia_2 = _b.matchMedia, func = _b.func;
matchMedia_2.removeEventListener('change', func);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (matchMedias_1_1 && !matchMedias_1_1.done && (_a = matchMedias_1.return)) _a.call(matchMedias_1);
}
finally { if (e_2) throw e_2.error; }
}
};
}, []);
useDebugValue(matches);
return matches;
}