UNPKG

grommet

Version:

focus on the essential experience

369 lines (324 loc) 10.7 kB
"use strict"; var _react = _interopRequireWildcard(require("react")); var _react2 = require("@storybook/react"); var _grommet = require("grommet"); var _themes = require("grommet/themes"); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var amountFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 2 }); var columns = [{ property: 'name', header: _react.default.createElement(_grommet.Text, null, "Name with extra"), primary: true, footer: 'Total' }, { property: 'location', header: 'Location' }, { property: 'date', header: 'Date', render: function render(datum) { return datum.date && new Date(datum.date).toLocaleDateString('en-US'); }, align: 'end' }, { property: 'percent', header: 'Percent Complete', render: function render(datum) { return _react.default.createElement(_grommet.Box, { pad: { vertical: 'xsmall' } }, _react.default.createElement(_grommet.Meter, { values: [{ value: datum.percent }], thickness: "small", size: "small" })); } }, { property: 'paid', header: 'Paid', render: function render(datum) { return amountFormatter.format(datum.paid / 100); }, align: 'end', aggregate: 'sum', footer: { aggregate: true } }]; var locations = ['Boise', 'Fort Collins', 'Los Gatos', 'Palo Alto', 'San Francisco']; var data = []; for (var i = 0; i < 40; i += 1) { data.push({ name: "Name " + (i + 1), location: locations[i % locations.length], date: "2018-07-" + (i % 30 + 1), percent: i % 11 * 10, paid: (i + 1) * 17 % 1000 }); } var DATA = [{ name: 'Alan', location: '', date: '', percent: 0, paid: 0 }, { name: 'Bryan', location: 'Fort Collins', date: '2018-06-10', percent: 30, paid: 1234 }, { name: 'Chris', location: 'Palo Alto', date: '2018-06-09', percent: 40, paid: 2345 }, { name: 'Eric', location: 'Palo Alto', date: '2018-06-11', percent: 80, paid: 3456 }, { name: 'Doug', location: 'Fort Collins', date: '2018-06-10', percent: 60, paid: 1234 }, { name: 'Jet', location: 'Palo Alto', date: '2018-06-09', percent: 40, paid: 3456 }, { name: 'Michael', location: 'Boise', date: '2018-06-11', percent: 50, paid: 1234 }, { name: 'Tracy', location: 'San Francisco', date: '2018-06-10', percent: 10, paid: 2345 }]; var SimpleDataTable = function SimpleDataTable() { return _react.default.createElement(_grommet.Grommet, { theme: _themes.grommet }, _react.default.createElement(_grommet.Box, { align: "center", pad: "large" }, _react.default.createElement(_grommet.DataTable, { columns: columns, data: DATA }))); }; var SizedDataTable = function SizedDataTable() { return _react.default.createElement(_grommet.Grommet, { theme: _themes.grommet }, _react.default.createElement(_grommet.Box, { align: "center", pad: "large" }, _react.default.createElement(_grommet.DataTable, { columns: columns, data: data, size: "medium" }))); }; var TunableDataTable = function TunableDataTable() { return _react.default.createElement(_grommet.Grommet, { theme: _themes.grommet }, _react.default.createElement(_grommet.Box, { align: "center", pad: "large" }, _react.default.createElement(_grommet.DataTable, { columns: columns.map(function (c) { return _extends({}, c, { search: c.property === 'name' || c.property === 'location' }); }), data: DATA, sortable: true, resizeable: true }))); }; var groupColumns = [].concat(columns); var first = groupColumns[0]; groupColumns[0] = _extends({}, groupColumns[1]); groupColumns[1] = _extends({}, first); groupColumns[0].footer = groupColumns[1].footer; delete groupColumns[1].footer; var GroupedDataTable = function GroupedDataTable() { return _react.default.createElement(_grommet.Grommet, { theme: _themes.grommet }, _react.default.createElement(_grommet.DataTable, { columns: groupColumns, data: DATA, groupBy: "location", sortable: true })); }; var ServedDataTable = /*#__PURE__*/ function (_Component) { _inheritsLoose(ServedDataTable, _Component); function ServedDataTable() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _Component.call.apply(_Component, [this].concat(args)) || this; _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "state", { data: DATA }); _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "onSearch", function (search) { var nextData; if (search) { var expressions = Object.keys(search).map(function (property) { return { property: property, exp: new RegExp(search[property], 'i') }; }); nextData = DATA.filter(function (d) { return !expressions.some(function (e) { return !e.exp.test(d[e.property]); }); }); } else { nextData = DATA; } _this.setState({ data: nextData }); }); return _this; } var _proto = ServedDataTable.prototype; _proto.render = function render() { var servedData = this.state.data; return _react.default.createElement(_grommet.Grommet, { theme: _themes.grommet }, _react.default.createElement(_grommet.Box, { align: "center", pad: "large" }, _react.default.createElement(_grommet.DataTable, { columns: columns.map(function (column) { return _extends({}, column, { search: column.property === 'name' || column.property === 'location' }); }), data: servedData, onSearch: this.onSearch }))); }; return ServedDataTable; }(_react.Component); var controlledColumns = columns.map(function (col) { return Object.assign({}, col); }); delete controlledColumns[0].footer; delete controlledColumns[3].footer; delete controlledColumns[4].footer; delete controlledColumns[4].aggregate; var ControlledDataTable = /*#__PURE__*/ function (_Component2) { _inheritsLoose(ControlledDataTable, _Component2); function ControlledDataTable() { var _this2; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } _this2 = _Component2.call.apply(_Component2, [this].concat(args)) || this; _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), "state", { checked: [] }); _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), "onCheck", function (event, value) { var checked = _this2.state.checked; if (event.target.checked) { checked.push(value); _this2.setState({ checked: checked }); } else { _this2.setState({ checked: checked.filter(function (item) { return item !== value; }) }); } }); _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), "onCheckAll", function (event) { return _this2.setState({ checked: event.target.checked ? DATA.map(function (datum) { return datum.name; }) : [] }); }); return _this2; } var _proto2 = ControlledDataTable.prototype; _proto2.render = function render() { var _this3 = this; var checked = this.state.checked; return _react.default.createElement(_grommet.Grommet, { theme: _themes.grommet }, _react.default.createElement(_grommet.Box, { align: "center", pad: "medium" }, _react.default.createElement(_grommet.DataTable, { columns: [{ property: 'checkbox', render: function render(datum) { return _react.default.createElement(_grommet.CheckBox, { key: datum.name, checked: checked.indexOf(datum.name) !== -1, onChange: function onChange(e) { return _this3.onCheck(e, datum.name); } }); }, header: _react.default.createElement(_grommet.CheckBox, { checked: checked.length === DATA.length, indeterminate: checked.length > 0 && checked.length < DATA.length, onChange: this.onCheckAll }), sortable: false }].concat(controlledColumns).map(function (col) { return _extends({}, col); }), data: DATA, sortable: true, size: "medium" }))); }; return ControlledDataTable; }(_react.Component); (0, _react2.storiesOf)('DataTable', module).add('Simple DataTable', function () { return _react.default.createElement(SimpleDataTable, null); }).add('Sized DataTable', function () { return _react.default.createElement(SizedDataTable, null); }).add('Tunable DataTable', function () { return _react.default.createElement(TunableDataTable, null); }).add('Grouped DataTable', function () { return _react.default.createElement(GroupedDataTable, null); }).add('Served DataTable', function () { return _react.default.createElement(ServedDataTable, null); }).add('Controlled DataTable', function () { return _react.default.createElement(ControlledDataTable, null); });