react-application-core
Version:
A react-based application core for the business applications.
106 lines • 4.27 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UniversalLayoutBuilder = void 0;
var util_1 = require("../../../util");
var definition_1 = require("../../../definition");
var UniversalLayoutBuilder = /** @class */ (function () {
/**
* @stable [22.10.2018]
* @param {IUniversalLayoutViewBuilder<TNode>} layoutViewBuilder
*/
function UniversalLayoutBuilder(layoutViewBuilder) {
this.layoutViewBuilder = layoutViewBuilder;
this.layoutId = util_1.uuid();
}
/**
* @stable [23.01.2020]
* @param {IUniversalLayoutBuilderConfigEntity<TNode>} layoutConfig
* @returns {TNode}
*/
UniversalLayoutBuilder.prototype.build = function (layoutConfig) {
this.index = 0; // The keys should be persistent
return this.buildLayout(layoutConfig);
};
/**
* @stable [23.01.2020]
* @param {UniversalLayoutBuilderChildrenT<TNode>} _
* @returns {StringNumberT}
*/
UniversalLayoutBuilder.prototype.asClonedItemKey = function (_) {
return this.newKey;
};
/**
* @stable [22.10.2018]
* @param {IUniversalLayoutBuilderConfigEntity<TNode>} layoutConfig
* @returns {TNode}
*/
UniversalLayoutBuilder.prototype.buildLayout = function (layoutConfig) {
return layoutConfig.layout === definition_1.LayoutTypesEnum.HORIZONTAL
? this.buildHorizontalLayout(layoutConfig)
: this.buildVerticalLayout(layoutConfig);
};
/**
* @stable [23.01.2020]
* @param {IUniversalLayoutBuilderConfigEntity<TNode>} layoutConfig
* @returns {TNode}
*/
UniversalLayoutBuilder.prototype.buildHorizontalLayout = function (layoutConfig) {
var _this = this;
return this.layoutViewBuilder.buildRowView(this.key, this.filterChildren(layoutConfig).map(function (item, index) { return _this.asClonedItem(item, layoutConfig); }), layoutConfig);
};
/**
* @stable [22.10.2018]
* @param {IUniversalLayoutBuilderConfigEntity<TNode>} layoutConfig
* @returns {TNode}
*/
UniversalLayoutBuilder.prototype.buildVerticalLayout = function (layoutConfig) {
var _this = this;
return this.layoutViewBuilder.buildColumnView(this.key, this.filterChildren(layoutConfig).map(function (item) { return _this.asClonedItem(item, layoutConfig); }), layoutConfig);
};
/**
* @stable [23.01.2020]
* @param {IUniversalLayoutBuilderConfigEntity<TNode>} layoutConfig
* @returns {Array<UniversalLayoutBuilderChildrenT<TNode>>}
*/
UniversalLayoutBuilder.prototype.filterChildren = function (layoutConfig) {
return util_1.FilterUtils.notNilValuesArrayFilter.apply(util_1.FilterUtils, (layoutConfig.items || []));
};
/**
* @stable [22.10.2018]
* @param {UniversalLayoutBuilderChildrenT<TNode>} item
* @param {IUniversalLayoutBuilderConfigEntity<TNode>} layoutConfig
* @returns {TNode}
*/
UniversalLayoutBuilder.prototype.asClonedItem = function (item, layoutConfig) {
var itemAsNode = item;
var itemAsCfg = item;
return this.layoutViewBuilder.isClonedItem(item)
? (this.layoutViewBuilder.cloneItem(itemAsNode, this.layoutViewBuilder.getClonedItemProps(itemAsNode, layoutConfig, { key: this.asClonedItemKey(itemAsNode) })))
: this.buildLayout(itemAsCfg);
};
Object.defineProperty(UniversalLayoutBuilder.prototype, "key", {
/**
* @stable [23.01.2020]
* @returns {TProps}
*/
get: function () {
return { key: this.newKey };
},
enumerable: false,
configurable: true
});
Object.defineProperty(UniversalLayoutBuilder.prototype, "newKey", {
/**
* @stable [23.01.2020]
* @returns {string}
*/
get: function () {
return this.layoutId + "-" + this.index++;
},
enumerable: false,
configurable: true
});
return UniversalLayoutBuilder;
}());
exports.UniversalLayoutBuilder = UniversalLayoutBuilder;
//# sourceMappingURL=universal-layout.builder.js.map