react-application-core
Version:
A react-based application core for the business applications.
123 lines • 5.59 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 (Object.prototype.hasOwnProperty.call(b, 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 __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.TabPanel = void 0;
var React = require("react");
var R = require("ramda");
var util_1 = require("../../util");
var generic_component_1 = require("../base/generic.component");
var definition_1 = require("../../definition");
var TabPanel = /** @class */ (function (_super) {
__extends(TabPanel, _super);
function TabPanel() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* @stable [12.02.2020]
* @returns {JSX.Element}
*/
TabPanel.prototype.render = function () {
var _this = this;
var _a = this.originalProps, allowSingleTab = _a.allowSingleTab, className = _a.className, items = _a.items, wrapped = _a.wrapped, wrapperClassName = _a.wrapperClassName;
if (items.length <= 1 && !allowSingleTab) {
return null;
}
var activeValue = this.activeValue;
var bodyEl = (React.createElement("div", { ref: this.actualRef, className: util_1.ClsUtils.joinClassName(definition_1.TabPanelClassesEnum.TAB_PANEL, util_1.CalcUtils.calc(className)) },
items.map(function (tab, index) { return _this.asTabElement(tab, index, activeValue); }),
this.originalChildren));
if (wrapped) {
return (React.createElement("div", { className: util_1.ClsUtils.joinClassName(definition_1.TabPanelClassesEnum.TAB_PANEL_WRAPPER, util_1.CalcUtils.calc(wrapperClassName)) }, bodyEl));
}
return bodyEl;
};
/**
* @stable [28.07.2020]
*/
TabPanel.prototype.componentWillUnmount = function () {
this.onDeactivateValue();
};
/**
* @stable [28.07.2020]
* @param event
* @param tab
*/
TabPanel.prototype.onTabClick = function (event, tab) {
var onClick = this.originalProps.onClick;
this.domAccessor.cancelEvent(event);
this.onDeactivateValue();
if (util_1.TypeUtils.isFn(onClick)) {
onClick(tab);
}
};
/**
* @stable [28.07.2020]
*/
TabPanel.prototype.onDeactivateValue = function () {
var onDeactivate = this.originalProps.onDeactivate;
if (util_1.TypeUtils.isFn(onDeactivate)) {
onDeactivate(this.activeValue); // Previous value is here
}
};
/**
* @stable [12.02.2020]
* @param {ITabProps} tab
* @param {number} index
* @param {number} activeValue
* @returns {JSX.Element}
*/
TabPanel.prototype.asTabElement = function (tab, index, activeValue) {
var _this = this;
var props = this.props;
var items = props.items, renderer = props.renderer;
var isActiveTab = tab.value === activeValue;
var isAfterActiveTab = util_1.ifNotNilThanValue(items[index - 1], function (tb) { return tb.value === activeValue; }, false);
var isBeforeActiveTab = util_1.ifNotNilThanValue(items[index + 1], function (tb) { return tb.value === activeValue; }, false);
var isLastTab = index === items.length - 1;
var isFirstTab = index === 0;
var callback = function (event) { return _this.onTabClick(event, tab); };
return (React.createElement("div", { key: "rac-tab-key-" + tab.value, className: util_1.ClsUtils.joinClassName('rac-tab-panel__tab', isActiveTab ? 'rac-tab-panel__active-tab' : 'rac-tab-panel__inactive-tab', isFirstTab && 'rac-tab-panel__first-tab', isLastTab && 'rac-tab-panel__last-tab', util_1.NumberUtils.isOddNumber(index) && 'rac-tab-panel__odd-tab', isAfterActiveTab && 'rac-tab-panel__after-active-tab', isBeforeActiveTab && 'rac-tab-panel__before-active-tab'), onClick: callback }, util_1.isFn(renderer)
? renderer(tab, callback)
: (tab.icon
? (this.uiFactory.makeIcon({
className: 'rac-tab-panel__tab-icon',
type: tab.icon,
}))
: React.createElement("div", { className: 'rac-tab-panel__tab-content' }, this.t(tab.name)))));
};
Object.defineProperty(TabPanel.prototype, "activeValue", {
/**
* @stable [12.02.2020]
* @returns {number}
*/
get: function () {
var props = this.props;
var activeValue = props.activeValue, items = props.items;
if (!R.isNil(activeValue)) {
return activeValue;
}
var activeItem = items.find(function (tab) { return tab.active; });
return R.isNil(activeItem) ? items[0].value : activeItem.value;
},
enumerable: false,
configurable: true
});
TabPanel.defaultProps = {
wrapped: true,
};
return TabPanel;
}(generic_component_1.GenericComponent));
exports.TabPanel = TabPanel;
//# sourceMappingURL=tab-panel.component.js.map