@mrii/react-table-builder
Version:
library to easily build tables using MUI grid
63 lines (59 loc) • 2.26 kB
JavaScript
;
var jsxRuntime = require('react/jsx-runtime');
var xDataGrid = require('@mui/x-data-grid');
var react = require('react');
var get = require('lodash.get');
var index = require('../../utils/string-to-label/index.js');
var index$1 = require('../custom/custom-grid-toolbar/index.js');
var index$2 = require('../custom/custom-grid-filter-panel/index.js');
var provider = require('../../context/table-builder/provider.js');
var provider$1 = require('../../context/filter/provider.js');
var provider$2 = require('../../context/translation/provider.js');
const CoreTableBuilder = /*#__PURE__*/ react.memo(/*#__PURE__*/ react.forwardRef(({ onFilterChange , children , ...props }, ref)=>{
const columns = provider.useTableBuilderColumns((s)=>s.columns);
const filters = provider$1.useTableBuilderFilters((s)=>s.filters);
const getLabel = provider$2.useTranslation((s)=>s.getFieldLabel);
const resolveColumnProps = react.useCallback((col)=>({
...col,
valueGetter: (params)=>{
const value = get(params.row, col.field, '-');
return col.valueGetter?.({
...params,
value
}) ?? value;
},
headerName: col.headerName ?? getLabel(col.field) ?? index.stringToLabel(col.field)
}), [
getLabel
]);
const resultColumns = react.useMemo(()=>columns.map(resolveColumnProps), [
columns,
resolveColumnProps
]);
const components = react.useMemo(()=>({
Toolbar: index$1.CustomGridToolbar,
FilterPanel: index$2.CustomGridFilterPanel,
...props.components
}), [
props.components
]);
react.useEffect(()=>{
onFilterChange?.(filters);
}, [
filters,
onFilterChange
]);
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(xDataGrid.DataGrid, {
ref: ref,
...props,
columns: resultColumns,
components: components
}),
children
]
});
}));
exports.CoreTableBuilder = CoreTableBuilder;
//# sourceMappingURL=index.js.map