@shopify/polaris
Version:
Shopify’s admin product component library
37 lines (33 loc) • 1.27 kB
JavaScript
import React, { useState, useCallback, useEffect, useMemo } from 'react';
import { debounce } from '../../utilities/debounce.js';
import { navigationBarCollapsed } from '../../utilities/breakpoints.js';
import { MediaQueryContext } from '../../utilities/media-query/context.js';
import { EventListener } from '../EventListener/EventListener.js';
const MediaQueryProvider = function MediaQueryProvider({
children
}) {
const [isNavigationCollapsed, setIsNavigationCollapsed] = useState(false);
// eslint-disable-next-line react-hooks/exhaustive-deps
const handleResize = useCallback(debounce(() => {
if (isNavigationCollapsed !== navigationBarCollapsed().matches) {
setIsNavigationCollapsed(!isNavigationCollapsed);
}
}, 40, {
trailing: true,
leading: true,
maxWait: 40
}), [isNavigationCollapsed]);
useEffect(() => {
setIsNavigationCollapsed(navigationBarCollapsed().matches);
}, []);
const context = useMemo(() => ({
isNavigationCollapsed
}), [isNavigationCollapsed]);
return /*#__PURE__*/React.createElement(MediaQueryContext.Provider, {
value: context
}, /*#__PURE__*/React.createElement(EventListener, {
event: "resize",
handler: handleResize
}), children);
};
export { MediaQueryProvider };