UNPKG

strapi-plugin-content-manager

Version:

A powerful UI to easily manage your data.

112 lines (102 loc) 3.48 kB
/** * * Table * */ import React from 'react'; import PropTypes from 'prop-types'; import { toString } from 'lodash'; import TableDelete from 'components/TableDelete'; import TableHeader from 'components/TableHeader'; import TableRow from 'components/TableRow'; import TableEmpty from 'components/TableEmpty'; import TableLoading from 'components/TableLoading'; import styles from './styles.scss'; class Table extends React.Component { render() { const rows = this.props.records.length === 0 ? ( <TableEmpty filters={this.props.filters} colspan={this.props.enableBulkActions ? this.props.headers.length + 1 : this.props.headers.length} contentType={this.props.routeParams.slug} search={this.props.search} /> ) : this.props.records.map((record, key) => ( <TableRow enableBulkActions={this.props.enableBulkActions} onChange={this.props.onClickSelect} key={key} destination={`${this.props.route.path.replace(':slug', this.props.routeParams.slug)}/${record[this.props.primaryKey]}`} headers={this.props.headers} record={record} history={this.props.history} primaryKey={this.props.primaryKey} onDelete={this.props.handleDelete} redirectUrl={this.props.redirectUrl} value={this.props.entriesToDelete.indexOf(toString(record.id)) !== -1} /> )); const entriesToDeleteNumber = this.props.entriesToDelete.length; return ( <table className={`table ${styles.table}`}> <TableHeader enableBulkActions={this.props.enableBulkActions} onClickSelectAll={this.props.onClickSelectAll} value={this.props.deleteAllValue} headers={this.props.headers} onChangeSort={this.props.onChangeSort} sort={this.props.sort} primaryKey={this.props.primaryKey} entriesToDelete={this.props.entriesToDelete} /> <tbody> { entriesToDeleteNumber > 0 && ( <TableDelete colspan={this.props.headers.length + 1} number={entriesToDeleteNumber} onToggleDeleteAll={this.props.onToggleDeleteAll} /> )} {this.props.showLoader ? <TableLoading colspan={this.props.headers.length + 1} /> : rows} </tbody> </table> ); } } Table.contextTypes = { router: PropTypes.object.isRequired, }; Table.defaultProps = { enableBulkActions: true, entriesToDelete: [], handleDelete: () => {}, search: '', showLoader: false, }; Table.propTypes = { deleteAllValue: PropTypes.bool.isRequired, enableBulkActions: PropTypes.bool, entriesToDelete: PropTypes.array, filters: PropTypes.array.isRequired, handleDelete: PropTypes.func, headers: PropTypes.array.isRequired, history: PropTypes.object.isRequired, onChangeSort: PropTypes.func.isRequired, onClickSelect: PropTypes.func.isRequired, onClickSelectAll: PropTypes.func.isRequired, onToggleDeleteAll: PropTypes.func.isRequired, primaryKey: PropTypes.string.isRequired, records: PropTypes.oneOfType([ PropTypes.array, PropTypes.object, ]).isRequired, redirectUrl: PropTypes.string.isRequired, route: PropTypes.object.isRequired, routeParams: PropTypes.object.isRequired, search: PropTypes.string, showLoader: PropTypes.bool, sort: PropTypes.string.isRequired, }; export default Table;