@talend/react-components
Version:
Set of react components.
138 lines (136 loc) • 3.41 kB
JavaScript
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