react-windowed-list
Version:
A fast, versatile virtual-render list component for React
158 lines (128 loc) • 5.58 kB
JavaScript
;
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);