fastlion-amis
Version:
一种MIS页面生成工具
113 lines (112 loc) • 4.28 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Grid2DRenderer = void 0;
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var factory_1 = require("../factory");
var helper_1 = require("../utils/helper");
// Grid 布局默认的这个命名方式和其它 CSS 差异太大,所以我们使用更类似其它 CSS 的命名
var justifySelfMap = {
left: 'start',
right: 'end',
center: 'center',
auto: 'stretch'
};
var alignSelfMap = {
top: 'start',
bottom: 'end',
middle: 'center',
auto: 'stretch'
};
var Grid2D = /** @class */ (function (_super) {
(0, tslib_1.__extends)(Grid2D, _super);
function Grid2D(props) {
return _super.call(this, props) || this;
}
Grid2D.prototype.renderChild = function (region, node) {
var render = this.props.render;
return render(region, node);
};
Grid2D.prototype.renderGrid = function (grid, key, length) {
var _a = this.props, itemRender = _a.itemRender, data = _a.data;
if (!(0, helper_1.isVisible)(grid, data)) {
return null;
}
var style = {
gridColumnStart: grid.x,
gridColumnEnd: grid.x + grid.w,
gridRowStart: grid.y,
gridRowEnd: grid.y + grid.h,
justifySelf: grid.align ? justifySelfMap[grid.align] : 'stretch',
alignSelf: grid.valign ? alignSelfMap[grid.valign] : 'stretch'
};
return (react_1.default.createElement("div", { key: key, style: style, className: grid.gridClassName }, itemRender
? itemRender(grid, key, length, this.props)
: this.renderChild("grid2d/" + key, grid)));
};
Grid2D.prototype.renderGrids = function () {
var _this = this;
var grids = this.props.grids;
return grids.map(function (grid, key) { return _this.renderGrid(grid, key, grids.length); });
};
Grid2D.prototype.render = function () {
var _a = this.props, grids = _a.grids, cols = _a.cols, gap = _a.gap, gapRow = _a.gapRow, width = _a.width, rowHeight = _a.rowHeight;
var templateColumns = new Array(cols);
templateColumns.fill('1fr');
var maxRow = 0;
// 计算最大有多少行
grids.forEach(function (grid, index) {
var row = grid.y + grid.h - 1;
if (row > maxRow) {
maxRow = row;
}
});
var templateRows = new Array(maxRow);
templateRows.fill(rowHeight);
// 根据 grid 中的设置自动更新行列高度
grids.forEach(function (grid) {
if (grid.width) {
templateColumns[grid.x - 1] = Number.isInteger(grid.width)
? grid.width + 'px'
: grid.width;
}
if (grid.height) {
templateRows[grid.y - 1] = Number.isInteger(grid.height)
? grid.height + 'px'
: grid.height;
}
});
var style = {
display: 'grid',
columnGap: gap,
rowGap: typeof gapRow === 'undefined' ? gap : gapRow,
width: width,
gridTemplateColumns: templateColumns.join(' '),
gridTemplateRows: templateRows.join(' ')
};
return react_1.default.createElement("div", { style: style }, this.renderGrids());
};
Grid2D.propsList = ['grids'];
Grid2D.defaultProps = {
cols: 12,
width: 'auto',
gap: 0,
rowHeight: '3.125rem'
};
return Grid2D;
}(react_1.default.Component));
exports.default = Grid2D;
var Grid2DRenderer = /** @class */ (function (_super) {
(0, tslib_1.__extends)(Grid2DRenderer, _super);
function Grid2DRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
Grid2DRenderer = (0, tslib_1.__decorate)([
(0, factory_1.Renderer)({
type: 'grid-2d'
})
], Grid2DRenderer);
return Grid2DRenderer;
}(Grid2D));
exports.Grid2DRenderer = Grid2DRenderer;
//# sourceMappingURL=./renderers/Grid2D.js.map
;