1 | import React from 'react';
|
2 | import PropTypes from 'prop-types';
|
3 | import classNames from 'classnames';
|
4 | import { mapToCssModules, tagPropType } from './utils';
|
5 |
|
6 | const propTypes = {
|
7 |
|
8 | bordered: PropTypes.bool,
|
9 |
|
10 | borderless: PropTypes.bool,
|
11 |
|
12 | className: PropTypes.string,
|
13 |
|
14 | cssModule: PropTypes.object,
|
15 |
|
16 | dark: PropTypes.bool,
|
17 |
|
18 | hover: PropTypes.bool,
|
19 | innerRef: PropTypes.oneOfType([
|
20 | PropTypes.func,
|
21 | PropTypes.string,
|
22 | PropTypes.object,
|
23 | ]),
|
24 |
|
25 | responsive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
|
26 | responsiveTag: tagPropType,
|
27 |
|
28 | size: PropTypes.string,
|
29 |
|
30 | striped: PropTypes.bool,
|
31 |
|
32 | tag: tagPropType,
|
33 | };
|
34 |
|
35 | function Table(props) {
|
36 | const {
|
37 | className,
|
38 | cssModule,
|
39 | size,
|
40 | bordered,
|
41 | borderless,
|
42 | striped,
|
43 | dark,
|
44 | hover,
|
45 | responsive,
|
46 | tag: Tag = 'table',
|
47 | responsiveTag: ResponsiveTag = 'div',
|
48 | innerRef,
|
49 | ...attributes
|
50 | } = props;
|
51 |
|
52 | const classes = mapToCssModules(
|
53 | classNames(
|
54 | className,
|
55 | 'table',
|
56 | size ? 'table-' + size : false,
|
57 | bordered ? 'table-bordered' : false,
|
58 | borderless ? 'table-borderless' : false,
|
59 | striped ? 'table-striped' : false,
|
60 | dark ? 'table-dark' : false,
|
61 | hover ? 'table-hover' : false,
|
62 | ),
|
63 | cssModule,
|
64 | );
|
65 |
|
66 | const table = <Tag {...attributes} ref={innerRef} className={classes} />;
|
67 |
|
68 | if (responsive) {
|
69 | const responsiveClassName = mapToCssModules(
|
70 | responsive === true
|
71 | ? 'table-responsive'
|
72 | : `table-responsive-${responsive}`,
|
73 | cssModule,
|
74 | );
|
75 |
|
76 | return (
|
77 | <ResponsiveTag className={responsiveClassName}>{table}</ResponsiveTag>
|
78 | );
|
79 | }
|
80 |
|
81 | return table;
|
82 | }
|
83 |
|
84 | Table.propTypes = propTypes;
|
85 |
|
86 | export default Table;
|
87 |
|
\ | No newline at end of file |