UNPKG

react-windowed-list

Version:

A fast, versatile virtual-render list component for React

158 lines (128 loc) 5.58 kB
'use strict'; exports.__esModule = true; exports.WindowedListRenderer = exports.PARM_OPTIONS = exports.DEFAULT_PARM_OPTIONS = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // external dependencies // constants // instance methods // lifecycle methods // utils var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactParm = require('react-parm'); var _remeasure = require('remeasure'); var _constants = require('./constants'); var _instanceMethods = require('./instanceMethods'); var _lifecycleMethods = require('./lifecycleMethods'); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var DEFAULT_PARM_OPTIONS = exports.DEFAULT_PARM_OPTIONS = { // state state: { from: 0, itemsPerRow: 0, size: 0 }, // lifecycle methods onConstruct: _lifecycleMethods.onConstruct, componentDidMount: _lifecycleMethods.componentDidMount, componentDidUpdate: _lifecycleMethods.componentDidUpdate, componentWillUnmount: _lifecycleMethods.componentWillUnmount, // instance values cache: {}, outerContainer: null, reconcileFrameAfterUpdate: null, unstableTimeoutId: null, updateCounter: 0, updateCounterTimeoutId: null, // instance methods getItemSizeAndItemsPerRow: _instanceMethods.getItemSizeAndItemsPerRow, getScrollOffset: _instanceMethods.getScrollOffset, getScrollParent: _instanceMethods.getScrollParent, getSizeOfListItem: _instanceMethods.getSizeOfListItem, getSpaceBefore: _instanceMethods.getSpaceBefore, getStartAndEnd: _instanceMethods.getStartAndEnd, getVisibleRange: _instanceMethods.getVisibleRange, renderItems: _instanceMethods.renderItems, scrollAround: _instanceMethods.scrollAround, scrollTo: _instanceMethods.scrollTo, setReconcileFrameAfterUpdate: _instanceMethods.setReconcileFrameAfterUpdate, setScroll: _instanceMethods.setScroll, setStateIfAppropriate: _instanceMethods.setStateIfAppropriate, updateFrame: _instanceMethods.updateFrame, updateScrollParent: _instanceMethods.updateScrollParent, updateSimpleFrame: _instanceMethods.updateSimpleFrame, updateUniformFrame: _instanceMethods.updateUniformFrame, updateVariableFrame: _instanceMethods.updateVariableFrame }; var PARM_OPTIONS = exports.PARM_OPTIONS = _constants.HAS_NEW_LIFECYCLE_METHODS ? _extends({}, DEFAULT_PARM_OPTIONS, { getSnapshotBeforeUpdate: _lifecycleMethods.getSnapshotBeforeUpdate }) : _extends({}, DEFAULT_PARM_OPTIONS, { componentWillReceiveProps: _lifecycleMethods.componentWillReceiveProps }); var WindowedListRenderer = exports.WindowedListRenderer = (0, _reactParm.createComponent)(function (_ref, _ref2) { var axis = _ref.axis, length = _ref.length, type = _ref.type, usePosition = _ref.usePosition, useTranslate3d = _ref.useTranslate3d; var getSpaceBefore = _ref2.getSpaceBefore, renderItems = _ref2.renderItems, _ref2$state = _ref2.state, from = _ref2$state.from, itemsPerRow = _ref2$state.itemsPerRow; return type === _constants.VALID_TYPES.SIMPLE ? renderItems() : _react2.default.createElement( 'div', { style: _constants.OUTER_CONTAINER_STYLE }, _react2.default.createElement( 'div', { style: (0, _utils.getInnerContainerStyle)(axis, length, itemsPerRow, getSpaceBefore) }, _react2.default.createElement( 'div', { style: (0, _utils.getListContainerStyle)(axis, usePosition, useTranslate3d, from, getSpaceBefore) }, renderItems() ) ) ); }, PARM_OPTIONS); WindowedListRenderer.displayName = 'WindowedListRenderer'; WindowedListRenderer.propTypes = { axis: _propTypes2.default.oneOf(_constants.VALID_AXIS_VALUES).isRequired, containerRenderer: _propTypes2.default.func.isRequired, debounceReconciler: _propTypes2.default.number, getEstimatedItemSize: _propTypes2.default.func, getItemSize: _propTypes2.default.func, getScrollParent: _propTypes2.default.func, initialIndex: _propTypes2.default.number.isRequired, isHidden: _propTypes2.default.bool.isRequired, isLazy: _propTypes2.default.bool.isRequired, itemRenderer: _propTypes2.default.func.isRequired, length: _propTypes2.default.number.isRequired, pageSize: _propTypes2.default.number.isRequired, threshold: _propTypes2.default.number.isRequired, type: _propTypes2.default.oneOf(_constants.VALID_TYPE_VALUES).isRequired, usePosition: _propTypes2.default.bool.isRequired, useStaticSize: _propTypes2.default.bool.isRequired, useTranslate3d: _propTypes2.default.bool.isRequired }; WindowedListRenderer.defaultProps = { axis: _constants.VALID_AXES.Y, containerRenderer: _utils.DefaultContainerRenderer, initialIndex: 0, isHidden: false, isLazy: false, itemRenderer: _utils.DefaultItemRenderer, length: 0, minSize: 1, pageSize: 10, threshold: 100, type: _constants.VALID_TYPES.SIMPLE, usePosition: false, useStaticSize: false, useTranslate3d: false }; if (_constants.HAS_NEW_LIFECYCLE_METHODS) { WindowedListRenderer.getDerivedStateFromProps = _lifecycleMethods.getDerivedStateFromProps; } exports.default = (0, _remeasure.measure)(['height', 'width'], { namespace: '__windowedListMeasurements' })(WindowedListRenderer);