office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
115 lines (113 loc) • 6.26 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = require("react");
var Utilities_1 = require("../../Utilities");
var index_1 = require("../../utilities/selection/index");
var Check_1 = require("../../Check");
var Icon_1 = require("../../Icon");
var GroupSpacer_1 = require("./GroupSpacer");
var Spinner_1 = require("../../Spinner");
var FocusZone_1 = require("../../FocusZone");
var stylesImport = require("./GroupHeader.scss");
var styles = stylesImport;
var GroupHeader = (function (_super) {
tslib_1.__extends(GroupHeader, _super);
function GroupHeader(props) {
var _this = _super.call(this, props) || this;
_this.state = {
isCollapsed: (_this.props.group && _this.props.group.isCollapsed),
isLoadingVisible: false
};
return _this;
}
GroupHeader.prototype.componentWillReceiveProps = function (newProps) {
if (newProps.group) {
var newCollapsed = newProps.group.isCollapsed;
var isGroupLoading = newProps.headerProps && newProps.headerProps.isGroupLoading;
var newLoadingVisible = !newCollapsed && isGroupLoading && isGroupLoading(newProps.group);
this.setState({
isCollapsed: newCollapsed,
isLoadingVisible: newLoadingVisible
});
}
};
GroupHeader.prototype.render = function () {
var _a = this.props, group = _a.group, groupLevel = _a.groupLevel, viewport = _a.viewport, selectionMode = _a.selectionMode, loadingText = _a.loadingText, isSelected = _a.isSelected, selected = _a.selected, isCollapsedGroupSelectVisible = _a.isCollapsedGroupSelectVisible;
var _b = this.state, isCollapsed = _b.isCollapsed, isLoadingVisible = _b.isLoadingVisible;
if (isCollapsedGroupSelectVisible === undefined) {
isCollapsedGroupSelectVisible = true;
}
var canSelectGroup = selectionMode === index_1.SelectionMode.multiple;
var isSelectionCheckVisible = canSelectGroup && (isCollapsedGroupSelectVisible || !(group && group.isCollapsed));
var currentlySelected = isSelected || selected;
if (!group) {
return null;
}
return (React.createElement("div", { className: Utilities_1.css('ms-GroupHeader', styles.root, (_c = {},
_c['is-selected ' + styles.rootIsSelected] = currentlySelected,
_c)), style: viewport ? { minWidth: viewport.width } : {}, onClick: this._onHeaderClick, "aria-label": group.ariaLabel || group.name, "data-is-focusable": true },
React.createElement(FocusZone_1.FocusZone, { className: styles.groupHeaderContainer, direction: FocusZone_1.FocusZoneDirection.horizontal },
isSelectionCheckVisible ? (React.createElement("button", { type: 'button', className: Utilities_1.css('ms-GroupHeader-check', styles.check), "data-selection-toggle": true, onClick: this._onToggleSelectGroupClick },
React.createElement(Check_1.Check, { checked: currentlySelected }))) : (selectionMode !== index_1.SelectionMode.none ? GroupSpacer_1.GroupSpacer({ count: 1 }) : null),
GroupSpacer_1.GroupSpacer({ count: groupLevel }),
React.createElement("div", { className: Utilities_1.css('ms-GroupHeader-dropIcon', styles.dropIcon) },
React.createElement(Icon_1.Icon, { iconName: 'Tag' })),
React.createElement("button", { type: 'button', className: Utilities_1.css('ms-GroupHeader-expand', styles.expand), onClick: this._onToggleCollapse },
React.createElement(Icon_1.Icon, { className: Utilities_1.css(isCollapsed && ('is-collapsed ' + styles.expandIsCollapsed)), iconName: 'ChevronDown' })),
React.createElement("div", { className: Utilities_1.css('ms-GroupHeader-title', styles.title) },
React.createElement("span", null, group.name),
React.createElement("span", { className: styles.headerCount },
"(",
group.count,
group.hasMoreData && '+',
")")),
React.createElement("div", { className: Utilities_1.css('ms-GroupHeader-loading', styles.loading, isLoadingVisible && ('is-loading ' + styles.loadingIsVisible)) },
React.createElement(Spinner_1.Spinner, { label: loadingText })))));
var _c;
};
GroupHeader.prototype._onToggleCollapse = function (ev) {
var _a = this.props, group = _a.group, onToggleCollapse = _a.onToggleCollapse, isGroupLoading = _a.isGroupLoading;
var isCollapsed = this.state.isCollapsed;
var newCollapsed = !isCollapsed;
var newLoadingVisible = !newCollapsed && isGroupLoading && isGroupLoading(group);
this.setState({
isCollapsed: newCollapsed,
isLoadingVisible: newLoadingVisible
});
if (onToggleCollapse) {
onToggleCollapse(group);
}
ev.stopPropagation();
ev.preventDefault();
};
GroupHeader.prototype._onToggleSelectGroupClick = function (ev) {
var _a = this.props, onToggleSelectGroup = _a.onToggleSelectGroup, group = _a.group;
if (onToggleSelectGroup) {
onToggleSelectGroup(group);
}
ev.preventDefault();
ev.stopPropagation();
};
GroupHeader.prototype._onHeaderClick = function () {
var _a = this.props, group = _a.group, onGroupHeaderClick = _a.onGroupHeaderClick, onToggleSelectGroup = _a.onToggleSelectGroup;
if (onGroupHeaderClick) {
onGroupHeaderClick(group);
}
else if (onToggleSelectGroup) {
onToggleSelectGroup(group);
}
};
return GroupHeader;
}(Utilities_1.BaseComponent));
tslib_1.__decorate([
Utilities_1.autobind
], GroupHeader.prototype, "_onToggleCollapse", null);
tslib_1.__decorate([
Utilities_1.autobind
], GroupHeader.prototype, "_onToggleSelectGroupClick", null);
tslib_1.__decorate([
Utilities_1.autobind
], GroupHeader.prototype, "_onHeaderClick", null);
exports.GroupHeader = GroupHeader;
//# sourceMappingURL=GroupHeader.js.map
;