UNPKG

@omakase-ui/react-table

Version:
114 lines (108 loc) 4.54 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var reactTable = require('@tanstack/react-table'); var DefaultCell = function DefaultCell(_ref) { var _getValue; var getValue = _ref.getValue; return React__default.createElement("div", null, (_getValue = getValue()) != null ? _getValue : '----'); }; var DefaultEmpty = function DefaultEmpty() { return React__default.createElement("div", { className: "flex min-h-[200px] w-full items-center justify-center text-gray-500" }, "Empty"); }; function DataTable(_ref2) { var data = _ref2.data, columns = _ref2.columns, sort = _ref2.sort, onSortChange = _ref2.onSortChange, bodyClassName = _ref2.bodyClassName, _ref2$Empty = _ref2.Empty, Empty = _ref2$Empty === void 0 ? DefaultEmpty : _ref2$Empty; var defaultColumn = React.useMemo(function () { return { minSize: 30, size: 150, Cell: DefaultCell }; }, []); var table = reactTable.useReactTable({ data: data, columns: columns, defaultColumn: defaultColumn, enableColumnResizing: true, columnResizeMode: 'onChange', getCoreRowModel: reactTable.getCoreRowModel() }); var handleSortChange = function handleSortChange(columnId) { if (!onSortChange) { return; } if ((sort == null ? void 0 : sort[0]) === columnId) { if ((sort == null ? void 0 : sort[1]) === 'asc') { onSortChange([columnId, 'desc']); } else { onSortChange([columnId, 'asc']); } } else { onSortChange([columnId, 'asc']); } }; var rows = table.getRowModel().rows; return React__default.createElement("div", { className: "max-w-full overflow-x-auto p-2" }, React__default.createElement("div", Object.assign({}, { className: 'w-full rounded border align-middle ', // FIXME: some issue, https://tanstack.com/table/v8/docs/examples/react/full-width-resizable-table style: { width: table.getTotalSize() } }), React__default.createElement("div", { className: "border-b border-gray-200 " }, table.getHeaderGroups().map(function (headerGroup) { return React__default.createElement("div", Object.assign({}, { key: headerGroup.id, className: 'flex divide-x divide-gray-200' }), headerGroup.headers.map(function (header) { return React__default.createElement("div", Object.assign({}, { key: header.id, className: ' relative h-full w-full items-center px-6 py-3 text-left text-sm font-medium capitalize tracking-wider text-gray-500 hover:bg-gray-100', style: { width: header.getSize() } }, { onClick: function onClick() { return handleSortChange(header.id); }, role: "button", tabIndex: 0 }), React__default.createElement("div", null, header.isPlaceholder ? null : reactTable.flexRender(header.column.columnDef.header, header.getContext()), header.id === (sort == null ? void 0 : sort[0]) && React__default.createElement("span", { className: "ml-2" }, (sort == null ? void 0 : sort[1]) === 'asc' ? '▲' : '▼')), React__default.createElement("div", Object.assign({}, { onMouseDown: header.getResizeHandler(), onTouchStart: header.getResizeHandler(), className: "absolute right-0 top-0 z-10 inline-block h-full w-1 hover:bg-red-400 cursor-col-resize " + (header.column.getIsResizing() ? 'shadow' : '') }))); })); })), React__default.createElement("div", Object.assign({}, { className: bodyClassName }), rows.length === 0 ? React__default.createElement(Empty, null) : React__default.createElement(React__default.Fragment, null, rows.map(function (row) { return React__default.createElement("div", Object.assign({}, { key: row.id, className: 'flex group border-b last:border-b-0 hover:bg-gray-100' }), row.getVisibleCells().map(function (cell) { return React__default.createElement("div", Object.assign({}, { key: cell.id, className: 'px-6 py-4 whitespace-nowrap text-sm text-gray-500 truncate', style: { width: cell.column.getSize() } }), reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())); })); }))))); } exports.DataTable = DataTable; //# sourceMappingURL=react-table.cjs.development.js.map