@thehappycoder/react-responsive-pagination
Version:
React component for responsive pagination
38 lines (37 loc) • 2.09 kB
JavaScript
;
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_1 = __importStar(require("react"));
var iterator_1 = require("../../helpers/iterator");
var useWidthCalculator_1 = require("./useWidthCalculator");
var useFoutDetector_1 = require("./useFoutDetector");
function MaxWidthRenderer(_a) {
var maxWidth = _a.maxWidth, narrowToWideCompositionsProvider = _a.narrowToWideCompositionsProvider, View = _a.View;
var widthCalculator = useWidthCalculator_1.useWidthCalculator(View);
var viewRef = react_1.useRef(null);
useFoutDetector_1.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_1.default.createElement(View, { items: composition, ref: viewRef });
}
exports.default = MaxWidthRenderer;
function getLargestFittingCompositionWithFallback(getNarrowToWideCompositions, getCompositionWidth, maxWidth) {
var _a, _b;
var narrowToWideCompositions = getNarrowToWideCompositions();
var firstComposition = (_a = iterator_1.iteratorNext(narrowToWideCompositions)) !== null && _a !== void 0 ? _a : [];
var doesCompositionFit = function (composition) {
return getCompositionWidth(composition) < maxWidth;
};
return (_b = iterator_1.lastWhere(narrowToWideCompositions, doesCompositionFit)) !== null && _b !== void 0 ? _b : firstComposition;
}
function getItemsDomElements(viewDomElement) {
return viewDomElement && Array.from(viewDomElement.children);
}