UNPKG

@talend/react-components

Version:
138 lines (136 loc) 3.41 kB
import PropTypes from 'prop-types'; import { Component } from 'react'; import { listTypes } from './utils/constants'; import { rowDictionary } from './utils/dictionary'; import NoRows from './NoRows'; import ListTable from './ListTable'; import ListGrid from './ListGrid'; import propTypes from './PropTypes'; import Loader from '../Loader'; import { jsx as _jsx } from "react/jsx-runtime"; const { TABLE } = listTypes; /** * Select the ListGrid row renderer to use * @param type The row renderer type */ function getRowRenderer(type, renderers = {}) { const safeRenderer = { ...rowDictionary, ...renderers }; const rowRenderer = safeRenderer[type]; if (!rowRenderer) { const rowRendererTypes = [TABLE].concat(Object.keys(safeRenderer)); throw new Error(`Unknown row renderer in Virtualized List : ${type}. ` + `Possible values are [${rowRendererTypes}].`); } return rowRenderer; } /** * Component that maps list types to the corresponding component */ class RendererSelector extends Component { constructor(props) { super(props); this.noRowsRenderer = this.noRowsRenderer.bind(this); } noRowsRenderer() { if (this.props.inProgress) { return /*#__PURE__*/_jsx(Loader, { className: "tc-virtualizedlist-no-result" }); } const NoRowsRenderer = this.props.noRowsRenderer; return /*#__PURE__*/_jsx(NoRowsRenderer, {}); } render() { const { children, height, id, isSelected, isActive, getRowState, onRowClick, onRowDoubleClick, onScroll, rowHeight, sort, sortBy, sortDirection, type, width, disableHeader, inProgress, rowRenderers, rowCount, onRowsRendered, registerChild, scrollToIndex, scrollToAlignment, headerAction, headerHeight } = this.props; const collection = inProgress ? [] : this.props.collection; const commonProps = { children, collection, height, id, isActive, getRowState, isSelected, noRowsRenderer: this.noRowsRenderer, onRowClick, onRowDoubleClick, onScroll, rowCount, rowHeight, width, onRowsRendered, registerChild, scrollToIndex, scrollToAlignment }; let ListRenderer; let customProps; if (type === TABLE) { ListRenderer = ListTable; customProps = { disableHeader, sort, sortBy, sortDirection, headerAction, headerHeight }; } else { ListRenderer = ListGrid; const rowRenderer = getRowRenderer(type, rowRenderers); const options = rowRenderer.options || {}; customProps = { rowRenderer, ...options }; } return /*#__PURE__*/_jsx(ListRenderer, { ...commonProps, ...customProps }); } } RendererSelector.displayName = 'VirtualizedList(RendererSelector)'; RendererSelector.propTypes = { ...propTypes, height: PropTypes.number, width: PropTypes.number, rowRenderers: PropTypes.object }; RendererSelector.defaultProps = { noRowsRenderer: NoRows, // eslint-disable-line react/default-props-match-prop-types type: TABLE // eslint-disable-line react/default-props-match-prop-types }; export default RendererSelector; //# sourceMappingURL=RendererSelector.component.js.map