imbric-theme 0.3.4 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/atoms/Checkbox/Checkbox.js +26 -9
  2. package/atoms/Checkbox/Checkbox.module.css +51 -0
  3. package/atoms/Checkbox/Checkbox.stories.js +4 -2
  4. package/atoms/Icon/constants.js +1 -1
  5. package/atoms/Input/Input.js +1 -0
  6. package/atoms/LinkItem/LinkItem.js +36 -0
  7. package/atoms/{Link/Link.module.css → LinkItem/LinkItem.module.css} +6 -1
  8. package/atoms/{Link/Link.stories.js → LinkItem/LinkItem.stories.js} +5 -5
  9. package/atoms/{Link → LinkItem}/__snapshots__/Link.stories.js.snap +0 -0
  10. package/atoms/{Link → LinkItem}/constants.js +0 -0
  11. package/atoms/LinkItem/index.js +3 -0
  12. package/atoms/Modal/Modal.js +9 -1
  13. package/atoms/Modal/Modal.module.css +6 -6
  14. package/hook/useAddColumn.js +40 -0
  15. package/hook/useStateDate.js +25 -0
  16. package/hook/useTable.js +45 -0
  17. package/index.js +4 -2
  18. package/layout/DynamicTable/DynamicTable.js +87 -122
  19. package/layout/DynamicTable/DynamicTable.module.css +2 -1
  20. package/layout/DynamicTable/DynamicTable.stories.js +49 -2
  21. package/layout/DynamicTable/constants.js +50 -567
  22. package/layout/Navbar/Navbar.js +1 -1
  23. package/molecules/ColumnTable/ColumnTable.js +78 -73
  24. package/molecules/ColumnTable/ColumnTable.module.css +13 -0
  25. package/molecules/ColumnTable/ColumnTable.stories.js +4 -7
  26. package/molecules/ColumnTable/constants.js +111 -1
  27. package/molecules/DatePicker/DatePicker.js +27 -14
  28. package/molecules/DatePicker/DatePicker.module.css +1 -1
  29. package/molecules/DynamicSelect/DynamicSelect.js +9 -0
  30. package/molecules/FooterTable/FooterTable.js +47 -0
  31. package/molecules/FooterTable/FooterTable.module.css +37 -0
  32. package/molecules/FooterTable/FooterTable.stories.js +23 -0
  33. package/molecules/FooterTable/constants.js +1 -0
  34. package/molecules/FooterTable/index.js +3 -0
  35. package/molecules/RowTable/RowTable.js +70 -4
  36. package/molecules/RowTable/RowTable.module.css +21 -2
  37. package/molecules/RowTable/RowTable.stories.js +7 -4
  38. package/molecules/RowTable/constants.js +318 -1
  39. package/package.json +1 -1
  40. package/atoms/Icon/file-download-svgrepo-com.svg +0 -13
  41. package/atoms/Link/Link.js +0 -33
  42. package/atoms/Link/index.js +0 -3
@@ -75,7 +75,7 @@ Navbar.propTypes = {
75
75
  children: PropTypes.any.isRequired,
76
76
  viewTabsNav: PropTypes.bool,
77
77
  viewOptionsNav: PropTypes.bool,
78
- linkLogout: PropTypes.string,
78
+ linkLogout: PropTypes.func,
79
79
  }
80
80
 
81
81
  Navbar.defaultProps = {
@@ -10,8 +10,10 @@ import Icon from '../../atoms/Icon'
10
10
  import { Horizontal, Vertical } from '../../layout/Spacer/components'
11
11
 
12
12
 
13
- export const ColumnTable = ({ getStyles, children, sortable, accessor, handleSorting, isFilter, columnUppercase, idInput, typeInput, nameInput, placeholder, value, onChange }) => {
13
+ export const ColumnTable = ({ getStyles, handleSorting, columnUppercase, onChangeInput, columnsData }) => {
14
14
 
15
+ const [sortable, setSortable] = useState(true);
16
+ const [accessor, setAccessor] = useState("");
15
17
  const [sortField, setSortField] = useState("");
16
18
  const [order, setOrder] = useState("asc");
17
19
 
@@ -33,91 +35,94 @@ export const ColumnTable = ({ getStyles, children, sortable, accessor, handleSor
33
35
 
34
36
 
35
37
  return (
36
- <th
37
- onClick={sortable ? () => handleSortingChange(accessor) : null}
38
- className={getStyles('column-table', {
39
- 'column-uppercase': columnUppercase,
40
- })}>
41
-
42
-
43
- <Paragraph
44
- size="xs"
45
- isInline
46
- >
47
- {children}
48
- </Paragraph>
49
-
50
- <Horizontal size="xs" />
51
-
52
- {cl === 'default' ?
53
- (<Icon
54
- className=""
55
- name="angleUpDown"
56
- size="xs"
57
- />
58
- ) : cl === '' ? null
59
-
60
- : cl === 'angleDown'
61
- ? (<Icon
62
- className=""
63
- name="angleDown"
64
- size="xs"
65
- />
66
- )
67
- : (<Icon
68
- className=""
69
- name="angleUp"
70
- size="xs"
71
- />
72
- )
73
- }
74
-
75
-
76
- <Vertical size="xs" />
77
-
78
- {isFilter ? (
79
-
80
- <Input
81
- isInputFilter
82
- id={idInput}
83
- value={''}
84
- type={typeInput}
85
- name={nameInput}
86
- onChange={onChange}
87
- placeholder={placeholder}
88
- />) : null
89
- }
90
-
91
- </th>
38
+
39
+ <div className={getStyles('tbl-header')}>
40
+ <table className={getStyles('table')} cellPadding="0" cellSpacing="0" border="0">
41
+ <thead>
42
+ <tr>
43
+
44
+ {columnsData.map((item) => (
45
+ item.activeView ?
46
+ // setSortable(item.sortable)
47
+ // setAccessor()
48
+ (<th
49
+ key={item.idInput}
50
+ className={getStyles('column-table', {
51
+ 'column-uppercase': columnUppercase,
52
+ })}>
53
+
54
+ <span onClick={item.sortable ? () => handleSortingChange(item.accessor) : null}>
55
+ <Paragraph
56
+ size="xs"
57
+ isInline
58
+ >
59
+ {item.title}
60
+ </Paragraph>
61
+
62
+ <Horizontal size="xs" />
63
+
64
+ {item.sortable ?
65
+
66
+ cl === "default" ?
67
+ <Icon
68
+ name="angleUpDown"
69
+ size="xs"
70
+ />
71
+ : cl === "" ? null
72
+
73
+ : cl === "angleDown"
74
+ ? <Icon
75
+ name="angleDown"
76
+ size="xs"
77
+ />
78
+
79
+ : <Icon
80
+ name="angleUp"
81
+ size="xs"
82
+ />
83
+ : null
84
+ }
85
+ </span>
86
+
87
+
88
+ <Vertical size="xs" />
89
+
90
+ {item.viewIsFilter ? (
91
+
92
+ <Input
93
+ isInputFilter
94
+ id={item.idInput}
95
+ type={item.typeFilter}
96
+ name={item.nameInput}
97
+ onChange={onChangeInput}
98
+ placeholder={item.placeholder}
99
+ />) : null
100
+ }
101
+
102
+ </th>
103
+ ) : null
104
+ ))}
105
+
106
+ </tr>
107
+ </thead>
108
+ </table>
109
+ </div>
110
+
92
111
  )
93
112
  }
94
113
 
95
114
  ColumnTable.propTypes = {
96
- sortable: PropTypes.bool.isRequired,
97
- accessor: PropTypes.string.isRequired,
98
115
  handleSorting: PropTypes.func.isRequired,
99
- children: PropTypes.string.isRequired,
100
116
  getStyles: PropTypes.func.isRequired,
101
- isFilter: PropTypes.bool,
102
117
  columnUppercase: PropTypes.bool,
103
- idInput: PropTypes.string,
104
- typeInput: PropTypes.oneOf(options.typeInput),
105
- nameInput: PropTypes.string,
106
- placeholder: PropTypes.string,
118
+ onChangeInput: PropTypes.func,
107
119
  }
108
120
 
109
121
  ColumnTable.defaultProps = {
110
122
  getStyles: () => { },
111
- children: 'NameTh',
112
- sortable: true,
113
- accessor: 'prueba',
114
123
  handleSorting: () => { },
115
124
  columnUppercase: false,
116
- isFilter: true,
117
- idInput: 'prueba',
118
- typeInput: 'text',
119
- nameInput: 'prueba',
120
- placeholder: 'placeholder'
125
+ onChangeInput: () => { },
121
126
  }
122
127
 
123
128
  export default withStyles(styles)(ColumnTable)
@@ -6,4 +6,17 @@
6
6
 
7
7
  .column-uppercase {
8
8
  text-transform: uppercase;
9
+ }
10
+
11
+ .table {
12
+ width: 100%;
13
+ table-layout: fixed;
14
+
15
+ }
16
+
17
+ .tbl-header {
18
+ /* background-color: rgba(255, 255, 255, 0.3); */
19
+ /* background-color: -webkit-linear-gradient(left, #25c481, #25b7c4);
20
+ background-color: linear-gradient(to right, #25c481, #25b7c4); */
21
+ border: 1px solid rgba(0, 0, 0, 0.1);
9
22
  }
@@ -13,15 +13,12 @@ export default {
13
13
  title: 'Molecules/ColumnTable',
14
14
  component: ColumnTable,
15
15
  args: {
16
- children: 'NameTh',
17
- sortable: true,
18
- accessor: 'prueba',
19
16
  columnUppercase: false,
20
- isFilter: true
21
- },
22
- argTypes: {
23
- typeInput: getOptionsArgTypes(options.typeInput),
17
+ columnsData: options.columns,
24
18
  },
19
+ // argTypes: {
20
+ // // typeInput: getOptionsArgTypes(options.typeInput),
21
+ // },
25
22
  }
26
23
 
27
24
  export const Default = Template.bind({})
@@ -1 +1,111 @@
1
- export const options = { typeInput: ['text', 'password', 'date', 'number'], }
1
+ export const options = {
2
+ typeInput: ['text', 'password', 'date', 'number'],
3
+
4
+ columns: [
5
+ {
6
+ activeView: true,
7
+ sortable: true,
8
+ accessor: 'timeBookingStartRealTimestamp',
9
+ subAccessor: '',
10
+ title: 'Fecha',
11
+ viewIsFilter: true,
12
+ typeFilter: 'date',
13
+ subTypeFilter: false,
14
+ idInput: 'fecha',
15
+ nameInput: 'Fecha',
16
+ placeholder: 'Fecha'
17
+ },
18
+ {
19
+ activeView: true,
20
+ sortable: true,
21
+ accessor: 'passengerName',
22
+ subAccessor: '',
23
+ title: 'Pasajero',
24
+ viewIsFilter: true,
25
+ typeFilter: 'text',
26
+ subTypeFilter: false,
27
+ idInput: 'pasajero',
28
+ nameInput: 'Pasajero',
29
+ placeholder: 'Pasajero'
30
+ },
31
+ {
32
+ activeView: true,
33
+ sortable: true,
34
+ accessor: 'origin',
35
+ subAccessor: 'addressField',
36
+ title: 'Recogida',
37
+ viewIsFilter: true,
38
+ typeFilter: 'text',
39
+ subTypeFilter: false,
40
+ idInput: 'recogida',
41
+ nameInput: 'Recogida',
42
+ placeholder: 'Recogida'
43
+ },
44
+ {
45
+ activeView: true,
46
+ sortable: true,
47
+ accessor: 'destination',
48
+ subAccessor: 'addressField',
49
+ title: 'Destino',
50
+ viewIsFilter: true,
51
+ typeFilter: 'text',
52
+ subTypeFilter: false,
53
+ idInput: 'destino',
54
+ nameInput: 'Destino',
55
+ placeholder: 'Destino'
56
+ },
57
+ {
58
+ activeView: true,
59
+ sortable: true,
60
+ accessor: 'priceCustomer',
61
+ subAccessor: '',
62
+ title: 'Precio',
63
+ viewIsFilter: true,
64
+ typeFilter: 'text',
65
+ subTypeFilter: true,
66
+ idInput: 'precio',
67
+ nameInput: 'Precio',
68
+ placeholder: 'Precio'
69
+ },
70
+ {
71
+ activeView: false,
72
+ sortable: true,
73
+ accessor: 'id',
74
+ subAccessor: '',
75
+ title: 'ID',
76
+ viewIsFilter: true,
77
+ typeFilter: 'number',
78
+ subTypeFilter: false,
79
+ idInput: 'id',
80
+ nameInput: 'id',
81
+ placeholder: 'id'
82
+ },
83
+ {
84
+ activeView: false,
85
+ sortable: true,
86
+ accessor: 'idService',
87
+ subAccessor: '',
88
+ title: 'ID Reserva',
89
+ viewIsFilter: true,
90
+ typeFilter: 'number',
91
+ subTypeFilter: false,
92
+ idInput: 'IDReserva',
93
+ nameInput: 'ID Reserva',
94
+ placeholder: 'ID Reserva'
95
+ },
96
+ {
97
+ activeView: false,
98
+ sortable: true,
99
+ accessor: 'idSupplier',
100
+ subAccessor: '',
101
+ title: 'ID Proveedor',
102
+ viewIsFilter: true,
103
+ typeFilter: 'number',
104
+ subTypeFilter: false,
105
+ idInput: 'IDProveedor',
106
+ nameInput: 'ID Proveedor',
107
+ placeholder: 'ID Proveedor'
108
+ },
109
+ ],
110
+
111
+ }
@@ -11,7 +11,7 @@ import moment from 'moment'
11
11
  import Label from '../../atoms/Label';
12
12
  import { Horizontal, Vertical } from '../../layout/Spacer/components'
13
13
  import Icon from '../../atoms/Icon';
14
-
14
+ import useStateDate from '../../hook/useStateDate';
15
15
  // import 'react-date-range/dist/styles.css'; // main css file
16
16
  // import 'react-date-range/dist/theme/default.css'; // theme css file
17
17
 
@@ -32,34 +32,45 @@ import {
32
32
  } from "date-fns";
33
33
 
34
34
 
35
- export const DatePicker = ({ getStyles, isLayoutDate }) => {
35
+
36
+ export const DatePicker = ({ getStyles, isLayoutDate, onChangeRange }) => {
36
37
 
37
38
  const [isShowCalendar, setShowCalendar] = useState(false);
38
39
 
39
- const [state, setState] = useState([
40
- {
41
- startDate: addDays(new Date(), -59),
42
- endDate: new Date(),
43
- key: 'selection',
44
- }
45
40
 
46
- ]);
41
+ const { state, setState } = useStateDate();
42
+
43
+
44
+ // const [state, setState] = useState([
45
+ // {
46
+ // startDate: addDays(new Date(), -59),
47
+ // endDate: new Date(),
48
+ // key: 'selection',
49
+ // }
50
+
51
+ // ]);
47
52
 
48
53
  moment.locale('es')
49
54
  const format = "DD/MMMM/YYYY";
50
55
 
56
+
57
+ const handleSelectRange = (item) => {
58
+ setState([item.selection])
59
+ }
60
+
51
61
  const handleSelect = (date) => {
52
62
  console.log(date); // native Date object
53
63
  console.log(state)
54
- console.log(date)
55
64
  }
56
65
 
57
66
  const handleClickOpenCalendar = () => {
58
67
  setShowCalendar(true)
68
+ // console.log(state)
59
69
  }
60
70
 
61
71
  const handleClickCloseCalendar = () => {
62
72
  setShowCalendar(false)
73
+ console.log(state)
63
74
  };
64
75
 
65
76
 
@@ -76,7 +87,7 @@ export const DatePicker = ({ getStyles, isLayoutDate }) => {
76
87
 
77
88
  (<DateRange
78
89
  editableDateInputs={true}
79
- onChange={item => setState([item.selection])}
90
+ onChange={item => useStateDate([item.selection])}
80
91
  moveRangeOnFirstSelection={false}
81
92
  ranges={state}
82
93
  />)
@@ -113,7 +124,7 @@ export const DatePicker = ({ getStyles, isLayoutDate }) => {
113
124
  <DateRangePicker
114
125
  locale={locales.es}
115
126
  dateDisplayFormat='d MMMM yyyy'
116
- onChange={item => setState([item.selection])}
127
+ onChange={ item => {handleSelectRange(item); onChangeRange(item);}}
117
128
  showSelectionPreview={false}
118
129
  moveRangeOnFirstSelection={false}
119
130
  months={2}
@@ -200,7 +211,7 @@ export const DatePicker = ({ getStyles, isLayoutDate }) => {
200
211
 
201
212
  {/* <DefinedRange
202
213
  locale={locales.es}
203
- onChange={item => setState([item.selection])}
214
+ onChange={item => useStateDate([item.selection])}
204
215
  ranges={state}
205
216
  /> */}
206
217
  </div>
@@ -213,11 +224,13 @@ export const DatePicker = ({ getStyles, isLayoutDate }) => {
213
224
  DatePicker.propTypes = {
214
225
  getStyles: PropTypes.func.isRequired,
215
226
  isLayoutDate: PropTypes.oneOf(options.typeLayoutDate),
227
+ onChangeRange: PropTypes.func
216
228
  }
217
229
 
218
230
  DatePicker.defaultProps = {
219
231
  getStyles: () => { },
220
- isLayoutDate: 'Calendar'
232
+ isLayoutDate: 'Calendar',
233
+ onChangeRange: () => { },
221
234
  }
222
235
 
223
236
  export default withStyles(styles)(DatePicker)
@@ -4,7 +4,7 @@
4
4
 
5
5
  .date-picker-input {
6
6
  display: flex;
7
- width: 70%;
7
+ /* width: 70%; */
8
8
  }
9
9
 
10
10
  .modalDatePickerRange {
@@ -43,6 +43,15 @@ export const DynamicSelect = ({ getStyles, optionsSelect, defaultValue, placehol
43
43
  paddingTop: '2px',
44
44
  }),
45
45
 
46
+ placeholder: (base) => ({
47
+ ...base,
48
+ color: 'var(--color-brand-white-lilac)',
49
+ fontWeight: 'var(--font-weight-light)',
50
+ whiteSpace: 'nowrap',
51
+ overflow: 'hidden',
52
+ textOverflow: 'ellipsis',
53
+ }),
54
+
46
55
  }
47
56
 
48
57
  // const handleChange = (value) => {
@@ -0,0 +1,47 @@
1
+ import React, { useEffect } from "react";
2
+ import PropTypes from 'prop-types'
3
+
4
+ import styles from './FooterTable.module.css'
5
+ import { options } from './constants'
6
+ import withStyles from '../../hocs/withStyles'
7
+
8
+ export const FooterTable = ({ getStyles, range, setPage, page, slice }) => {
9
+ useEffect(() => {
10
+ if (slice.length < 1 && page !== 1) {
11
+ setPage(page - 1);
12
+ }
13
+ }, [slice, page, setPage]);
14
+
15
+ return (
16
+ <div className={getStyles('footer-table')}>
17
+
18
+ <div className={styles.tableFooter}>
19
+ {range.map((el, index) => (
20
+ <button
21
+ key={index}
22
+ className={`${styles.button} ${page === el ? styles.activeButton : styles.inactiveButton
23
+ }`}
24
+ onClick={() => setPage(el)}
25
+ >
26
+ {el}
27
+ </button>
28
+ ))}
29
+ </div>
30
+
31
+ </div>
32
+
33
+
34
+ )
35
+ }
36
+
37
+ FooterTable.propTypes = {
38
+ // children: PropTypes.node.isRequired,
39
+ getStyles: PropTypes.func.isRequired,
40
+ // type: PropTypes.oneOf(options.types),
41
+ }
42
+
43
+ FooterTable.defaultProps = {
44
+ getStyles: () => { },
45
+ }
46
+
47
+ export default withStyles(styles)(FooterTable)
@@ -0,0 +1,37 @@
1
+ .footer-table {
2
+ display: flex;
3
+ }
4
+
5
+ .tableFooter {
6
+ background-color: #f1f1f1;
7
+ padding: 8px 0px;
8
+ width: 100%;
9
+ font-weight: 500;
10
+ text-align: left;
11
+ font-size: 16px;
12
+ color: #2c3e50;
13
+ border-bottom-left-radius: 15px;
14
+ border-bottom-right-radius: 15px;
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: center;
18
+ }
19
+
20
+ .button {
21
+ border: none;
22
+ padding: 7px 14px;
23
+ border-radius: 10px;
24
+ cursor: pointer;
25
+ margin-right: 4px;
26
+ margin-left: 4px;
27
+ }
28
+
29
+ .activeButton {
30
+ color: white;
31
+ background: #185adb;
32
+ }
33
+
34
+ .inactiveButton {
35
+ color: #2c3e50;
36
+ background: #f9f9f9;
37
+ }
@@ -0,0 +1,23 @@
1
+ import { FooterTable, styles, options } from '.'
2
+
3
+ import {
4
+ getTemplate,
5
+ getListTemplate,
6
+ getOptionsArgTypes,
7
+ } from '../../helpers/storybook'
8
+
9
+ const Template = getTemplate(FooterTable, styles)
10
+ const ListTemplate = getListTemplate(FooterTable, styles)
11
+
12
+ export default {
13
+ title: 'Molecules/FooterTable',
14
+ component: FooterTable,
15
+ args: {},
16
+ argTypes: {
17
+ // types: getOptionsArgTypes(options.types),
18
+ },
19
+ }
20
+
21
+ export const Default = Template.bind({})
22
+ // export const List = ListTemplate.bind({})
23
+ // List.args = { items: options.types.map((type) => ({ type })) }
@@ -0,0 +1 @@
1
+ export const options = { types: [] }
@@ -0,0 +1,3 @@
1
+ export { default, FooterTable } from './FooterTable'
2
+ export { options } from './constants'
3
+ export { default as styles } from './FooterTable.module.css'
@@ -5,18 +5,84 @@ import styles from './RowTable.module.css'
5
5
  import { options } from './constants'
6
6
  import withStyles from '../../hocs/withStyles'
7
7
 
8
- export const RowTable = ({ children, getStyles }) => {
9
- return <div className={getStyles('row-table')}>{children}</div>
8
+ import Moment from 'react-moment'
9
+ import Icon from '../../atoms/Icon'
10
+ import { Horizontal, Vertical } from '../../layout/Spacer/components'
11
+
12
+ export const RowTable = ({ getStyles, slice, columnsData }) => {
13
+ return (
14
+ <div className={getStyles('tbl-content')}>
15
+ <table className={getStyles('table')} cellPadding="0" cellSpacing="0" border="0">
16
+ <tbody>
17
+ {slice.map((item, index) => (
18
+
19
+ <tr key={index}>
20
+ {columnsData.map((itemTd) => (
21
+ itemTd.activeView ?
22
+ (
23
+
24
+
25
+ itemTd.subAccessor === 'action' ?
26
+
27
+ <td className={getStyles('td')} key={[itemTd.accessor]}>
28
+
29
+ <Icon
30
+ background="base"
31
+ name="settings"
32
+ onClick={function noRefCheck() { }}
33
+ />
34
+ <Horizontal size="xs" />
35
+ <Icon
36
+ background="base"
37
+ name="trash"
38
+ onClick={function noRefCheck() { }}
39
+ />
40
+ </td> :
41
+
42
+ itemTd.subAccessor !== '' ?
43
+
44
+ <td className={getStyles('td')} key={[itemTd.accessor]}>{item[itemTd.accessor][itemTd.subAccessor]}</td> :
45
+
46
+ itemTd.typeFilter === 'date' ?
47
+
48
+ <td className={getStyles('td')} key={[itemTd.accessor]}>
49
+ <Moment format="DD/MM/YYYY hh:mm:ss">
50
+ {item[itemTd.accessor]}
51
+ </Moment>
52
+ </td>
53
+
54
+ : itemTd.typeFilter === 'number' ?
55
+
56
+ itemTd.subTypeFilter ?
57
+
58
+ <td className={getStyles('td')} key={[itemTd.accessor]}>{item[itemTd.accessor].toFixed(2).toString().replace(/\./g, ',')} €</td>
59
+ :
60
+ <td className={getStyles('td')} key={[itemTd.accessor]}>{item[itemTd.accessor]}</td>
61
+
62
+ : itemTd.subTypeFilter ?
63
+
64
+ <td className={getStyles('td')} key={[itemTd.accessor]}>{item[itemTd.accessor].toString().replace(/\./g, ',').slice(0, 5)} €</td>
65
+ :
66
+ <td className={getStyles('td')} key={[itemTd.accessor]}>{item[itemTd.accessor]}</td>
67
+
68
+ ) : null
69
+ ))}
70
+ </tr>
71
+
72
+ ))}
73
+ </tbody>
74
+ </table>
75
+ </div>
76
+ )
10
77
  }
11
78
 
12
79
  RowTable.propTypes = {
13
- children: PropTypes.node.isRequired,
14
80
  getStyles: PropTypes.func.isRequired,
15
81
  type: PropTypes.oneOf(options.types),
16
82
  }
17
83
 
18
84
  RowTable.defaultProps = {
19
- getStyles: () => {},
85
+ getStyles: () => { },
20
86
  }
21
87
 
22
88
  export default withStyles(styles)(RowTable)