mui-datagrid-full-edit
Version:
A full functioned react MUI grid component with CRUD and an easy way of @mui/x-data-grid
66 lines (64 loc) • 2.94 kB
JavaScript
;
require("core-js/modules/es.weak-map.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = GridExcelExportMenuItem;
require("core-js/modules/esnext.iterator.constructor.js");
require("core-js/modules/esnext.iterator.for-each.js");
require("core-js/modules/esnext.iterator.map.js");
require("core-js/modules/web.dom-collections.iterator.js");
var _material = require("@mui/material");
var XLSX = _interopRequireWildcard(require("xlsx"));
var React = _interopRequireWildcard(require("react"));
var _xDataGrid = require("@mui/x-data-grid");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function getExcelData(apiRef) {
// Select rows and columns
const filteredSortedRowIds = (0, _xDataGrid.gridFilteredSortedRowIdsSelector)(apiRef);
const visibleColumnsField = (0, _xDataGrid.gridVisibleColumnFieldsSelector)(apiRef);
// Format the data. Here we only keep the value
return filteredSortedRowIds.map(id => {
const row = {};
visibleColumnsField.forEach(field => {
row[field] = apiRef.current.getCellParams(id, field).value;
});
return row;
});
}
function handleExport(apiRef, columns) {
const data = getExcelData(apiRef);
const fields = columns.map(c => c.field);
const rows = data.map(row => {
const mRow = {};
for (const key of fields) {
mRow[key] = row[key];
}
return mRow;
});
const columnNames = columns.map(c => c.headerName);
const worksheet = XLSX.utils.json_to_sheet(rows);
XLSX.utils.sheet_add_aoa(worksheet, [[...columnNames]], {
origin: 'A1'
});
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
XLSX.writeFile(workbook, document.title + ".xlsx", {
compression: true
});
}
function GridExcelExportMenuItem(props) {
const apiRef = (0, _xDataGrid.useGridApiContext)();
const {
hideMenu,
columns
} = props;
return /*#__PURE__*/React.createElement(_material.MenuItem, {
onClick: () => {
handleExport(apiRef, columns);
// Hide the export menu after the export
hideMenu === null || hideMenu === void 0 || hideMenu();
}
}, "Download as Excel");
}