@blueprintjs/table
Version:
Scalable interactive table component
100 lines • 5.09 kB
JavaScript
/*
* Copyright 2017 Palantir Technologies, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { __extends } from "tslib";
import classNames from "classnames";
import * as React from "react";
import { AbstractComponent } from "@blueprintjs/core";
import * as Classes from "../common/classes";
import * as Errors from "../common/errors";
export var QuadrantType;
(function (QuadrantType) {
/**
* The main quadrant beneath any frozen rows or columns.
*/
QuadrantType["MAIN"] = "main";
/**
* The top quadrant, containing column headers and frozen rows.
*/
QuadrantType["TOP"] = "top";
/**
* The left quadrant, containing row headers and frozen columns.
*/
QuadrantType["LEFT"] = "left";
/**
* The top-left quadrant, containing the headers and cells common to both
* the frozen columns and frozen rows.
*/
QuadrantType["TOP_LEFT"] = "top-left";
})(QuadrantType || (QuadrantType = {}));
var TableQuadrant = /** @class */ (function (_super) {
__extends(TableQuadrant, _super);
function TableQuadrant() {
return _super !== null && _super.apply(this, arguments) || this;
}
TableQuadrant.prototype.render = function () {
var _a, _b, _c, _d, _e, _f;
var _g = this.props, grid = _g.grid, enableRowHeader = _g.enableRowHeader, quadrantType = _g.quadrantType, bodyRenderer = _g.bodyRenderer, enableColumnHeader = _g.enableColumnHeader;
var showFrozenRowsOnly = quadrantType === QuadrantType.TOP || quadrantType === QuadrantType.TOP_LEFT;
var showFrozenColumnsOnly = quadrantType === QuadrantType.LEFT || quadrantType === QuadrantType.TOP_LEFT;
var className = classNames(Classes.TABLE_QUADRANT, this.getQuadrantCssClass(), this.props.className);
var maybeMenu = enableRowHeader && ((_b = (_a = this.props).menuRenderer) === null || _b === void 0 ? void 0 : _b.call(_a));
var maybeRowHeader = enableRowHeader && ((_d = (_c = this.props).rowHeaderCellRenderer) === null || _d === void 0 ? void 0 : _d.call(_c, showFrozenRowsOnly));
var maybeColumnHeader = enableColumnHeader && ((_f = (_e = this.props).columnHeaderCellRenderer) === null || _f === void 0 ? void 0 : _f.call(_e, showFrozenColumnsOnly));
var body = bodyRenderer(quadrantType, showFrozenRowsOnly, showFrozenColumnsOnly);
// need to set bottom container size to prevent overlay clipping on scroll
var bottomContainerStyle = {
height: grid.getHeight(),
width: grid.getWidth(),
};
return (React.createElement("div", { className: className, style: this.props.style, ref: this.props.quadrantRef },
React.createElement("div", { className: Classes.TABLE_QUADRANT_SCROLL_CONTAINER, ref: this.props.scrollContainerRef, onScroll: this.props.onScroll, onWheel: this.props.onWheel },
React.createElement("div", { className: Classes.TABLE_TOP_CONTAINER },
maybeMenu,
maybeColumnHeader),
React.createElement("div", { className: Classes.TABLE_BOTTOM_CONTAINER, style: bottomContainerStyle },
maybeRowHeader,
React.createElement("div", { className: Classes.TABLE_QUADRANT_BODY_CONTAINER, ref: this.props.bodyRef }, body)))));
};
TableQuadrant.prototype.validateProps = function (nextProps) {
var quadrantType = nextProps.quadrantType;
if (nextProps.onScroll != null && quadrantType != null && quadrantType !== QuadrantType.MAIN) {
console.warn(Errors.QUADRANT_ON_SCROLL_UNNECESSARILY_DEFINED);
}
};
TableQuadrant.prototype.getQuadrantCssClass = function () {
switch (this.props.quadrantType) {
case QuadrantType.MAIN:
return Classes.TABLE_QUADRANT_MAIN;
case QuadrantType.TOP:
return Classes.TABLE_QUADRANT_TOP;
case QuadrantType.LEFT:
return Classes.TABLE_QUADRANT_LEFT;
case QuadrantType.TOP_LEFT:
return Classes.TABLE_QUADRANT_TOP_LEFT;
default:
return undefined;
}
};
// we want the user to explicitly pass a quadrantType. define defaultProps as a Partial to avoid
// declaring that and other required props here.
TableQuadrant.defaultProps = {
enableColumnHeader: true,
enableRowHeader: true,
};
return TableQuadrant;
}(AbstractComponent));
export { TableQuadrant };
//# sourceMappingURL=tableQuadrant.js.map