UNPKG

react-application-core

Version:

A react-based application core for the business applications.

123 lines 5.59 kB
"use strict"; 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