victory-legend
Version:
Legend Component for Victory
101 lines (98 loc) • 4.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.VictoryLegend = void 0;
var _react = _interopRequireDefault(require("react"));
var _helperMethods = require("./helper-methods");
var _victoryCore = require("victory-core");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const fallbackProps = {
orientation: "vertical",
titleOrientation: "top",
width: 450,
height: 300,
x: 0,
y: 0
};
const defaultLegendData = [{
name: "Series 1"
}, {
name: "Series 2"
}];
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
class VictoryLegendBase extends _react.default.Component {
static displayName = "VictoryLegend";
static role = "legend";
static defaultProps = {
borderComponent: /*#__PURE__*/_react.default.createElement(_victoryCore.Border, null),
data: defaultLegendData,
containerComponent: /*#__PURE__*/_react.default.createElement(_victoryCore.VictoryContainer, null),
dataComponent: /*#__PURE__*/_react.default.createElement(_victoryCore.Point, null),
groupComponent: /*#__PURE__*/_react.default.createElement("g", null),
labelComponent: /*#__PURE__*/_react.default.createElement(_victoryCore.VictoryLabel, null),
standalone: true,
theme: _victoryCore.VictoryTheme.grayscale,
titleComponent: /*#__PURE__*/_react.default.createElement(_victoryCore.VictoryLabel, null)
};
static getBaseProps(props) {
return (0, _helperMethods.getBaseProps)(props, fallbackProps);
}
static getDimensions(props) {
return (0, _helperMethods.getDimensions)(props, fallbackProps);
}
static expectedComponents = ["borderComponent", "containerComponent", "dataComponent", "groupComponent", "labelComponent", "titleComponent"];
renderChildren(props) {
const {
dataComponent,
labelComponent,
title
} = props;
const children = [];
if (props.borderComponent) {
const borderProps = this.getComponentProps(props.borderComponent, "border", "all");
const borderComponent = /*#__PURE__*/_react.default.cloneElement(props.borderComponent, borderProps);
children.push(borderComponent);
}
if (dataComponent) {
const dataComponents = this.dataKeys.map((_dataKey, index) => {
if (_dataKey === "all") {
return undefined;
}
const dataProps = this.getComponentProps(dataComponent, "data", index);
return /*#__PURE__*/_react.default.cloneElement(dataComponent, dataProps);
}).filter(comp => comp !== undefined);
children.push(...dataComponents);
}
if (title && props.titleComponent) {
const titleProps = this.getComponentProps(title, "title", "all");
const titleComponent = /*#__PURE__*/_react.default.cloneElement(props.titleComponent, titleProps);
children.push(titleComponent);
}
if (labelComponent) {
const labelComponents = this.dataKeys.map((_dataKey, index) => {
if (_dataKey === "all") {
return undefined;
}
const labelProps = this.getComponentProps(labelComponent, "labels", index);
if (labelProps.text !== undefined && labelProps.text !== null) {
return /*#__PURE__*/_react.default.cloneElement(labelComponent, labelProps);
}
return undefined;
}).filter(comp => comp !== undefined);
children.push(...labelComponents);
}
return children;
}
render() {
// @ts-expect-error Property 'role' does not exist on type 'Function'.
// Ref: https://github.com/microsoft/TypeScript/issues/32452
const {
role
} = this.constructor;
const props = _victoryCore.Helpers.modifyProps(this.props, fallbackProps, role);
const children = this.renderChildren(props);
return props.standalone ? this.renderContainer(props.containerComponent, children) : /*#__PURE__*/_react.default.cloneElement(props.groupComponent, {}, children);
}
}
const VictoryLegend = exports.VictoryLegend = (0, _victoryCore.addEvents)(VictoryLegendBase);