UNPKG

@thehappycoder/react-responsive-pagination

Version:
28 lines (27 loc) 1.64 kB
import React, { useRef } from 'react'; import { lastWhere, iteratorNext } from '../../helpers/iterator'; import { useWidthCalculator } from './useWidthCalculator'; import { useFoutDetector } from './useFoutDetector'; export default function MaxWidthRenderer(_a) { var maxWidth = _a.maxWidth, narrowToWideCompositionsProvider = _a.narrowToWideCompositionsProvider, View = _a.View; var widthCalculator = useWidthCalculator(View); var viewRef = useRef(null); useFoutDetector(function () { return getItemsDomElements(viewRef.current); }, 'clearCache' in widthCalculator ? widthCalculator.clearCache : function () { }); if ('measuringComponentNeedsRender' in widthCalculator) { return widthCalculator.measuringComponentNeedsRender; } var composition = getLargestFittingCompositionWithFallback(narrowToWideCompositionsProvider, widthCalculator.getWidth, maxWidth); return React.createElement(View, { items: composition, ref: viewRef }); } function getLargestFittingCompositionWithFallback(getNarrowToWideCompositions, getCompositionWidth, maxWidth) { var _a, _b; var narrowToWideCompositions = getNarrowToWideCompositions(); var firstComposition = (_a = iteratorNext(narrowToWideCompositions)) !== null && _a !== void 0 ? _a : []; var doesCompositionFit = function (composition) { return getCompositionWidth(composition) < maxWidth; }; return (_b = lastWhere(narrowToWideCompositions, doesCompositionFit)) !== null && _b !== void 0 ? _b : firstComposition; } function getItemsDomElements(viewDomElement) { return viewDomElement && Array.from(viewDomElement.children); }