@talend/react-components
Version:
Set of react components.
122 lines (120 loc) • 3.61 kB
JavaScript
import PropTypes from 'prop-types';
import { Action } from '../Actions';
import OverlayTrigger from '../OverlayTrigger';
import { getTheme } from '../theme';
import PieChartIcon, { pieChartIconPropTypes } from './PieChartIcon.component';
import pieChartCssModule from './PieChart.module.scss';
import { jsx as _jsx } from "react/jsx-runtime";
const theme = getTheme(pieChartCssModule);
/**
* This function add an OverlayTrigger wrapping the button if defined
* @param {Element} btn the current button
* @param {string} overlayPlacement the overlay placement
* @param {Element} overlayComponent the overlay component
* @param {string} overlayId the id to be set for the overlay
* @param {callback} overlayRef the callback to be set for the overlay to bind ref
*/
export function decorateWithOverlay(btn, overlayPlacement, overlayComponent, overlayId, overlayRef) {
if (!overlayComponent) {
return btn;
}
return /*#__PURE__*/_jsx("span", {
children: /*#__PURE__*/_jsx(OverlayTrigger, {
trigger: "click",
rootClose: true,
placement: overlayPlacement,
overlay: /*#__PURE__*/_jsx("div", {
id: overlayId,
children: overlayComponent
}),
ref: overlayRef,
children: btn
})
});
}
/**
* This function wrap the event when we don't have an overlay component
* @param {function} mouseEvent the event to wrap ( mouseClick )
* @param {Element} overlayComponent tell if there is an overlay component
* @param {string} label the label of the component
* @param {object} rest the rest of the props
* @param {object} model the model of the component
*/
export function wrapMouseEvent(mouseEvent, overlayComponent, label, rest, model) {
if (overlayComponent || !mouseEvent) {
return null;
}
return event => mouseEvent(event, {
action: {
label,
...rest
},
model
});
}
export default function PieChartButtonComponent({
available,
buttonRef,
className,
display,
hideLabel,
label,
labelIndex,
loading,
minimumPercentage,
model,
onClick,
onMouseDown,
overlayComponent,
overlayId,
overlayPlacement,
overlayRef,
size,
...rest
}) {
if (!available) {
return null;
}
const rClick = wrapMouseEvent(onClick, overlayComponent, label, rest, model);
const rMouseDown = wrapMouseEvent(onMouseDown, overlayComponent, label, rest, model);
const btn = /*#__PURE__*/_jsx(Action, {
className: theme('tc-pie-chart-button', className),
onMouseDown: rMouseDown,
onClick: rClick,
buttonRef: buttonRef,
bsStyle: "link",
role: "button",
...rest,
children: /*#__PURE__*/_jsx(PieChartIcon, {
display: display,
hideLabel: hideLabel,
labelIndex: labelIndex,
loading: loading,
minimumPercentage: minimumPercentage,
model: model,
size: size
})
});
return decorateWithOverlay(btn, overlayPlacement, overlayComponent, overlayId, overlayRef);
}
PieChartButtonComponent.propTypes = {
...pieChartIconPropTypes,
available: PropTypes.bool,
buttonRef: PropTypes.func,
className: PropTypes.string,
getComponent: PropTypes.func,
label: PropTypes.string,
onClick: PropTypes.func,
onMouseDown: PropTypes.func,
overlayComponent: PropTypes.element,
overlayId: PropTypes.string,
overlayPlacement: OverlayTrigger.propTypes.placement,
overlayRef: PropTypes.func
};
PieChartButtonComponent.defaultProps = {
available: true,
overlayId: 'pie-chart-popover',
overlayPlacement: 'bottom'
};
PieChartButtonComponent.displayName = 'PieChartButton';
//# sourceMappingURL=PieChartButton.component.js.map