react-application-core
Version:
A react-based application core for the business applications.
166 lines • 7.54 kB
JavaScript
"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 __());
};
})();
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 });
exports.Button = void 0;
var React = require("react");
var R = require("ramda");
var util_1 = require("../../util");
var definition_1 = require("../../definition");
var link_1 = require("../link");
var generic_component_1 = require("../base/generic.component");
var Button = /** @class */ (function (_super) {
__extends(Button, _super);
function Button() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* @stable [13.05.2020]
* @returns {JSX.Element}
*/
Button.prototype.render = function () {
var _this = this;
var iconLeftAligned = this.originalProps.iconLeftAligned;
var $mergedProps = this.mergedProps;
var $text = this.getText($mergedProps);
var $hasContent = this.hasContent($text);
var $hasIcon = this.hasIcon($mergedProps);
var className = this.getClassName($mergedProps, $hasContent, $hasIcon);
if ($mergedProps.to) {
return (React.createElement(link_1.Link, { to: $mergedProps.to, style: $mergedProps.style, className: className }, $text));
}
var $disabled = this.isDisabled($mergedProps);
var $iconElement = $hasIcon && this.getIconElement($mergedProps);
return (React.createElement(definition_1.UniversalIdProviderContext.Consumer, null, function (identificator) { return (React.createElement("button", __assign({ id: _this.getId(identificator), ref: _this.actualRef, type: $mergedProps.type, title: $mergedProps.title, style: $mergedProps.style, className: className, disabled: $disabled }, util_1.PropsUtils.buildClickHandlerProps($mergedProps.onClick, !$disabled, $mergedProps.touched), { onMouseEnter: $mergedProps.onMouseEnter, onMouseLeave: $mergedProps.onMouseLeave }),
iconLeftAligned && $iconElement,
_this.getContentElement($hasContent, $text),
!iconLeftAligned && $iconElement)); }));
};
/**
* @stable [13.05.2020]
*/
Button.prototype.blur = function () {
this.actualRef.current.blur(); // document.activeElement === body
};
// TODO
Button.prototype.getId = function (identificator) {
if (R.isNil(identificator)) {
return identificator;
}
var names = [this.props.text];
return names.map(function (name) { return (name || '').split(' ').map(function (part) { return (part[0] || '').toLowerCase(); }).join('-'); }).join('-');
};
/**
* @stable [13.05.2020]
* @param {boolean} $hasContent
* @param {string} $text
* @returns {JSX.Element}
*/
Button.prototype.getContentElement = function ($hasContent, $text) {
return ($hasContent && (React.createElement("div", { className: definition_1.ButtonClassesEnum.BUTTON_CONTENT },
$text && this.t($text),
this.props.children)));
};
/**
* @stable [13.05.2020]
* @param {IButtonProps} $mergedProps
* @returns {JSX.Element}
*/
Button.prototype.getIconElement = function ($mergedProps) {
var error = $mergedProps.error, icon = $mergedProps.icon, progress = $mergedProps.progress;
return this.uiFactory.makeIcon({
type: progress
? definition_1.IconsEnum.SPINNER
: (error ? definition_1.IconsEnum.EXCLAMATION_CIRCLE : icon),
});
};
/**
* @stable [13.05.2020]
* @param {IButtonProps} $mergedProps
* @returns {string}
*/
Button.prototype.getText = function ($mergedProps) {
var error = $mergedProps.error, errorMessage = $mergedProps.errorMessage, progress = $mergedProps.progress, progressMessage = $mergedProps.progressMessage, text = $mergedProps.text;
return (progress
? (progressMessage || this.settings.messages.WAITING)
: (error
? (errorMessage || this.settings.messages.ERROR)
: text));
};
/**
* @stable [13.05.2020]
* @param {IButtonProps} $mergedProps
* @param {boolean} $hasContent
* @param {boolean} $hasIcon
* @returns {string}
*/
Button.prototype.getClassName = function ($mergedProps, $hasContent, $hasIcon) {
return util_1.ClsUtils.joinClassName(definition_1.ButtonClassesEnum.BUTTON, util_1.CalcUtils.calc($mergedProps.className), $hasContent ? definition_1.ButtonClassesEnum.BUTTON_FILLED : definition_1.ButtonClassesEnum.BUTTON_NOT_FILLED, util_1.WrapperUtils.isFull($mergedProps) && definition_1.ButtonClassesEnum.FULL_BUTTON, util_1.WrapperUtils.isDecorated($mergedProps) && $hasIcon && definition_1.ButtonClassesEnum.BUTTON_DECORATED, $mergedProps.mini && definition_1.ButtonClassesEnum.BUTTON_MINI, $mergedProps.outlined && definition_1.ButtonClassesEnum.BUTTON_OUTLINED, $mergedProps.raised && definition_1.ButtonClassesEnum.BUTTON_RAISED);
};
/**
* @stable [13.05.2020]
* @param text
* @returns {boolean}
*/
Button.prototype.hasContent = function (text) {
return util_1.ObjectUtils.isObjectNotEmpty(this.props.children) || util_1.ObjectUtils.isObjectNotEmpty(text);
};
/**
* @stable [02.06.2020]
* @param {IButtonProps} $mergedProps
* @returns {boolean}
*/
Button.prototype.hasIcon = function ($mergedProps) {
return util_1.ConditionUtils.ifNotNilThanValue($mergedProps, function (entity) { return !R.isNil(entity.icon) && entity.icon !== false; }, false);
};
/**
* @stable [13.05.2020]
* @param {IButtonProps} $mergedProps
* @returns {boolean}
*/
Button.prototype.isDisabled = function ($mergedProps) {
return util_1.WrapperUtils.isDisabled($mergedProps) || util_1.WrapperUtils.inProgress($mergedProps);
};
Object.defineProperty(Button.prototype, "componentsSettingsProps", {
/**
* @stable [02.06.2020]
* @returns {IButtonProps}
*/
get: function () {
return this.componentsSettings.button;
},
enumerable: false,
configurable: true
});
Button.defaultProps = {
full: false,
iconLeftAligned: true,
touched: false,
type: 'button',
};
return Button;
}(generic_component_1.GenericComponent));
exports.Button = Button;
//# sourceMappingURL=button.component.js.map