grommet
Version:
focus on the essential experience
74 lines (73 loc) • 2.64 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
import React from 'react';
import { Box, DataTable, CheckBox } from 'grommet';
// Source code for the data can be found here
// https://github.com/grommet/grommet/blob/master/src/js/components/DataTable/stories/data.js
import { columns, DATA } from './data';
var controlledColumns = columns.map(function (col) {
return _extends({}, col);
});
delete controlledColumns[0].footer;
delete controlledColumns[3].footer;
delete controlledColumns[4].footer;
delete controlledColumns[4].aggregate;
export var ControlledDataTable = function ControlledDataTable() {
var _React$useState = React.useState([]),
checked = _React$useState[0],
setChecked = _React$useState[1];
var onCheck = function onCheck(event, value) {
if (event.target.checked) {
setChecked([].concat(checked, [value]));
} else {
setChecked(checked.filter(function (item) {
return item !== value;
}));
}
};
var onCheckAll = function onCheckAll(event) {
return setChecked(event.target.checked ? DATA.map(function (datum) {
return datum.name;
}) : []);
};
return (
/*#__PURE__*/
// Uncomment <Grommet> lines when using outside of storybook
// <Grommet theme={grommet}>
React.createElement(Box, {
align: "center",
pad: "medium"
}, /*#__PURE__*/React.createElement(DataTable, {
columns: [{
property: 'checkbox',
render: function render(_ref) {
var name = _ref.name;
return /*#__PURE__*/React.createElement(CheckBox, {
key: name,
checked: checked.indexOf(name) !== -1,
onChange: function onChange(e) {
return onCheck(e, name);
},
"aria-label": "row checkbox"
});
},
header: /*#__PURE__*/React.createElement(CheckBox, {
checked: checked.length === DATA.length,
indeterminate: checked.length > 0 && checked.length < DATA.length,
onChange: onCheckAll,
"aria-label": "header checkbox"
}),
sortable: false
}].concat(controlledColumns).map(function (col) {
return _extends({}, col);
}),
data: DATA,
sortable: true,
size: "medium"
}))
// </Grommet>
);
};
ControlledDataTable.storyName = 'Controlled';
export default {
title: 'Visualizations/DataTable/Controlled'
};