@mui/x-data-grid-pro
Version:
The Pro plan edition of the Data Grid components (MUI X).
90 lines • 3.65 kB
JavaScript
import * as React from 'react';
import { useRtl } from '@mui/system/RtlProvider';
import PropTypes from 'prop-types';
import MenuItem from '@mui/material/MenuItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import { GridPinnedColumnPosition } from '@mui/x-data-grid';
import { useGridApiContext } from '../hooks/utils/useGridApiContext';
import { useGridRootProps } from '../hooks/utils/useGridRootProps';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
function GridColumnMenuPinningItem(props) {
const {
colDef,
onClick
} = props;
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
const isRtl = useRtl();
const pinColumn = React.useCallback(side => event => {
apiRef.current.pinColumn(colDef.field, side);
onClick(event);
}, [apiRef, colDef.field, onClick]);
const unpinColumn = event => {
apiRef.current.unpinColumn(colDef.field);
onClick(event);
};
const pinToLeftMenuItem = /*#__PURE__*/_jsxs(MenuItem, {
onClick: pinColumn(GridPinnedColumnPosition.LEFT),
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuPinLeftIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('pinToLeft')
})]
});
const pinToRightMenuItem = /*#__PURE__*/_jsxs(MenuItem, {
onClick: pinColumn(GridPinnedColumnPosition.RIGHT),
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuPinRightIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('pinToRight')
})]
});
if (!colDef) {
return null;
}
const side = apiRef.current.isColumnPinned(colDef.field);
if (side) {
const otherSide = side === GridPinnedColumnPosition.RIGHT ? GridPinnedColumnPosition.LEFT : GridPinnedColumnPosition.RIGHT;
const label = otherSide === GridPinnedColumnPosition.RIGHT ? 'pinToRight' : 'pinToLeft';
const Icon = side === GridPinnedColumnPosition.RIGHT ? rootProps.slots.columnMenuPinLeftIcon : rootProps.slots.columnMenuPinRightIcon;
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [/*#__PURE__*/_jsxs(MenuItem, {
onClick: pinColumn(otherSide),
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(Icon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText(label)
})]
}), /*#__PURE__*/_jsxs(MenuItem, {
onClick: unpinColumn,
children: [/*#__PURE__*/_jsx(ListItemIcon, {}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('unpin')
})]
})]
});
}
if (isRtl) {
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [pinToRightMenuItem, pinToLeftMenuItem]
});
}
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [pinToLeftMenuItem, pinToRightMenuItem]
});
}
process.env.NODE_ENV !== "production" ? GridColumnMenuPinningItem.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired
} : void 0;
export { GridColumnMenuPinningItem };