@mui/x-data-grid-pro
Version:
The Pro plan edition of the MUI X Data Grid components.
136 lines (135 loc) • 5.83 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridHeaderFilterMenu = GridHeaderFilterMenu;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _capitalize = _interopRequireDefault(require("@mui/utils/capitalize"));
var _HTMLElementType = _interopRequireDefault(require("@mui/utils/HTMLElementType"));
var _xDataGrid = require("@mui/x-data-grid");
var _jsxRuntime = require("react/jsx-runtime");
function GridHeaderFilterMenu({
open,
field,
target,
applyFilterChanges,
operators,
item,
id,
labelledBy,
showClearItem,
clearFilterItem
}) {
const apiRef = (0, _xDataGrid.useGridApiContext)();
const rootProps = (0, _xDataGrid.useGridRootProps)();
const hideMenu = React.useCallback(() => {
apiRef.current.hideHeaderFilterMenu();
}, [apiRef]);
if (!target) {
return null;
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_xDataGrid.GridMenu, {
position: "bottom-end",
open: open,
target: target,
onClose: hideMenu,
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(rootProps.slots.baseMenuList, {
"aria-labelledby": labelledBy,
id: id,
children: [showClearItem && [/*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseMenuItem, {
iconStart: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnMenuClearIcon, {
fontSize: "small"
}),
onClick: () => {
clearFilterItem();
hideMenu();
},
children: apiRef.current.getLocaleText('headerFilterClear')
}, "filter-menu-clear-filter"), /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseDivider, {}, "filter-menu-divider")], operators.map(op => {
const selected = op.value === item.operator;
const label = op?.headerLabel ?? apiRef.current.getLocaleText(`headerFilterOperator${(0, _capitalize.default)(op.value)}`);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseMenuItem, {
iconStart: selected ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.menuItemCheckIcon, {
fontSize: "small"
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {}),
onClick: () => {
applyFilterChanges((0, _extends2.default)({}, item, {
operator: op.value
}));
hideMenu();
},
autoFocus: selected ? open : false,
children: label
}, `${field}-${op.value}`);
})]
})
});
}
process.env.NODE_ENV !== "production" ? GridHeaderFilterMenu.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
applyFilterChanges: _propTypes.default.func.isRequired,
clearFilterItem: _propTypes.default.func.isRequired,
field: _propTypes.default.string.isRequired,
id: _propTypes.default /* @typescript-to-proptypes-ignore */.string,
item: _propTypes.default.shape({
field: _propTypes.default.string.isRequired,
id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
operator: _propTypes.default.string.isRequired,
value: _propTypes.default.any
}).isRequired,
labelledBy: _propTypes.default /* @typescript-to-proptypes-ignore */.string,
open: _propTypes.default.bool.isRequired,
operators: _propTypes.default.arrayOf(_propTypes.default.shape({
getApplyFilterFn: _propTypes.default.func.isRequired,
getValueAsString: _propTypes.default.func,
headerLabel: _propTypes.default.string,
InputComponent: _propTypes.default.elementType,
InputComponentProps: _propTypes.default.shape({
apiRef: _propTypes.default.shape({
current: _propTypes.default.object.isRequired
}),
applyValue: _propTypes.default.func,
className: _propTypes.default.string,
clearButton: _propTypes.default.node,
disabled: _propTypes.default.bool,
focusElementRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.shape({
current: _propTypes.default.any.isRequired
})]),
headerFilterMenu: _propTypes.default.node,
inputRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.shape({
current: (props, propName) => {
if (props[propName] == null) {
return null;
}
if (typeof props[propName] !== 'object' || props[propName].nodeType !== 1) {
return new Error(`Expected prop '${propName}' to be of type Element`);
}
return null;
}
})]),
isFilterActive: _propTypes.default.bool,
item: _propTypes.default.shape({
field: _propTypes.default.string.isRequired,
id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
operator: _propTypes.default.string.isRequired,
value: _propTypes.default.any
}),
onBlur: _propTypes.default.func,
onFocus: _propTypes.default.func,
slotProps: _propTypes.default.object,
tabIndex: _propTypes.default.number
}),
label: _propTypes.default.string,
requiresFilterValue: _propTypes.default.bool,
value: _propTypes.default.string.isRequired
})).isRequired,
showClearItem: _propTypes.default.bool.isRequired,
target: _HTMLElementType.default
} : void 0;