@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
102 lines • 4.82 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2019 GoodData Corporation
var React = require("react");
var classNames = require("classnames");
var noop = require("lodash/noop");
var List_1 = require("@gooddata/goodstrap/lib/List/List");
var Dropdown_1 = require("@gooddata/goodstrap/lib/Dropdown/Dropdown");
var DropdownItem_1 = require("./DropdownItem");
var AddTotalButton_1 = require("./AddTotalButton");
var utils_1 = require("./utils");
var layout_1 = require("../constants/layout");
var AddTotal = /** @class */ (function (_super) {
__extends(AddTotal, _super);
function AddTotal(props) {
var _this = _super.call(this, props) || this;
_this.state = {
dropdownOpened: false,
};
return _this;
}
AddTotal.prototype.componentWillUnmount = function () {
if (this.state.dropdownOpened) {
this.onOpenStateChanged(this.props.columnIndex, false);
}
};
AddTotal.prototype.render = function () {
var _this = this;
var _a = this.props, dataSource = _a.dataSource, header = _a.header, columnIndex = _a.columnIndex, headersCount = _a.headersCount, onAddTotalsRow = _a.onAddTotalsRow, onWrapperHover = _a.onWrapperHover, onButtonHover = _a.onButtonHover, addingMoreTotalsEnabled = _a.addingMoreTotalsEnabled;
var isFirstColumn = columnIndex === 0;
var isLastColumn = columnIndex === headersCount - 1;
var showAddTotalButton = utils_1.shouldShowAddTotalButton(header, isFirstColumn, addingMoreTotalsEnabled);
var dropdownAlignPoint = utils_1.getAddTotalDropdownAlignPoints(isLastColumn);
var wrapperClassNames = classNames("indigo-totals-add-wrapper", {
"dropdown-active": this.state.dropdownOpened,
});
var bodyClassName = classNames("indigo-totals-select-type-list");
var wrapperEvents = {
onMouseEnter: function () {
onWrapperHover(columnIndex, true);
},
onMouseLeave: function () {
onWrapperHover(columnIndex, false);
},
};
var addButtonProps = {
hidden: !showAddTotalButton,
onClick: function () {
_this.onOpenStateChanged(columnIndex, true);
},
onMouseEnter: function () {
onButtonHover(columnIndex, true);
},
onMouseLeave: function () {
onButtonHover(columnIndex, false);
},
};
var onOpenStateChanged = function (opened) { return _this.onOpenStateChanged(columnIndex, opened); };
var onRowItemSelect = function (item) { return onAddTotalsRow(columnIndex, item.type); };
return (React.createElement("div", __assign({ className: wrapperClassNames }, wrapperEvents),
React.createElement(Dropdown_1.default, { onOpenStateChanged: onOpenStateChanged, alignPoints: dropdownAlignPoint, button: React.createElement(AddTotalButton_1.AddTotalButton, __assign({}, addButtonProps)), body: React.createElement(Dropdown_1.DropdownBody, { List: List_1.default, dataSource: dataSource, width: layout_1.TOTALS_TYPES_DROPDOWN_WIDTH, className: bodyClassName, rowItem: React.createElement(DropdownItem_1.DropdownItem, { onSelect: onRowItemSelect }) }) })));
};
AddTotal.prototype.onOpenStateChanged = function (columnIndex, isOpened) {
this.setState({
dropdownOpened: isOpened,
});
this.props.onDropdownOpenStateChanged(columnIndex, isOpened);
};
AddTotal.defaultProps = {
onDropdownOpenStateChanged: noop,
onWrapperHover: noop,
onButtonHover: noop,
onAddTotalsRow: noop,
};
return AddTotal;
}(React.Component));
exports.AddTotal = AddTotal;
//# sourceMappingURL=AddTotal.js.map