In DynamicForm you create the property _rowTable in items.
Could you make this property readable in development mode?
Could you make this property readable in development mode?
getRowTable = function () {
return this.items?._rowTable ? this.items._rowTable.map(row => row.slice()) : null;
}
import ISC_CLASS from "../ISC_CLASS";
import { DynamicForm } from 'smartclient-pro/react';
let isc = window.isc;
class CustomForm extends DynamicForm {
static ISC_CLASS_NAME = "CustomForm";
static IS_CLASS = true;
static PROPERTY_TYPES = {};
static init = function () {
this.Super("init", arguments);
for (const field of this.getFields()) {
if (field.width === "*") {
field.calcWidth = true;
}
}
};
static buildRowItems = function (create) {
if (!this.isVisible()) return;
if (!create && this.rowsTable) return this.rowsTable;
var items = this.getItems();
var numCols = this.numCols || 2;
var rowTable = [];
var currentRow = 0;
var currentCol = 0;
for (var itemNum = 0; itemNum < items.length; itemNum++) {
var item = items[itemNum];
if (!item.isVisible()) continue;
var itemCols = item.getColSpan ? item.getColSpan() : (item.colSpan || 1);
var itemRows = item.getRowSpan ? item.getRowSpan() : (item.rowSpan || 1);
if (!itemCols || !itemRows) continue;
if (!isNaN(itemCols)) itemCols = parseInt(itemCols);
if (itemCols == null) itemCols = 1;
if (!isNaN(itemRows)) itemRows = parseInt(itemRows);
if (itemRows == null) itemRows = 1;
var requiredCols = (itemCols === "*") ? 1 : itemCols;
if (item.showTitle) {
requiredCols += (item.getTitleColSpan ? item.getTitleColSpan() : 1);
if (itemCols !== "*") itemCols += (item.getTitleColSpan ? item.getTitleColSpan() : 1);
}
var startRow = (item.isStartRow ? item.isStartRow() : item.startRow);
var endRow = (item.isEndRow ? item.isEndRow() : item.endRow);
var placeRow = null, placeCol = null;
if (item._startRow = (currentCol >= numCols || (startRow && currentCol != 0))) {
currentRow++;
currentCol = 0;
}
if (currentRow < rowTable.length) {
for (; currentRow < rowTable.length; currentRow++) {
var rowSlots = rowTable[currentRow];
if (!rowSlots) break;
for (; currentCol < numCols; currentCol++) {
if (rowSlots[currentCol] != null) continue;
for (var j = currentCol; j < numCols; j++) {
if (rowSlots[j] != null) break;
if ((j - currentCol) + 1 >= requiredCols) {
placeRow = currentRow;
placeCol = currentCol;
break;
}
}
if (placeCol != null) break;
}
if (placeCol != null) break;
currentCol = 0;
item._startRow = true;
}
}
if (placeCol == null) {
placeRow = currentRow;
placeCol = 0;
item._startRow = true;
}
currentCol = placeCol;
if (itemCols === "*") itemCols = numCols - currentCol;
if (!isc.isA.Number(itemRows)) itemRows = 1;
for (var r = currentRow; r < currentRow + itemRows; r++) {
if (!rowTable[r]) rowTable[r] = [];
for (var c = currentCol; c < currentCol + itemCols; c++) {
rowTable[r][c] = item;
}
}
currentCol += itemCols;
if (endRow) currentCol = numCols;
}
var rows = rowTable.map(function (cells) {
var unique = [];
for (var i = 0; i < cells.length; i++) {
var it = cells[i];
if (it && !unique.contains(it)) unique.push(it);
}
return unique;
});
return this.rowsTable = rows;
}
static drawn = function () {
this.setItemsWidths();
};
static resized = function () {
this.setItemsWidths();
};
static setItemWidth(item, width) {
if (item.getWidth() !== width) {
item.setWidth(width);
const canvas = item.canvas;
if (canvas) {
canvas.setWidth(width);
}
}
}
static setItemsWidths() {
setTimeout(() => {
const rowsTable = this.buildRowItems();
if (!rowsTable) return;
const patternWidth = this.getInnerContentWidth();
if (this.prevWidth !== patternWidth) {
this.prevWidth = patternWidth;
for (const rowItems of rowsTable) {
const starItems = [];
let fixedWidth = this.cellPadding * (rowItems.length + 1);
for (const item of rowItems) {
if (item.calcWidth) {
starItems.push(item);
}
}
const starWidth = starItems.length > 0 ? Math.floor((patternWidth - fixedWidth) / starItems.length) : 0;
for (const item of rowItems) {
if (starItems.includes(item)) {
this.setItemWidth(item, starWidth);
}
}
}
}
}, 0);
}
}
ISC_CLASS.registerClass(CustomForm, DynamicForm);
export default CustomForm;
Comment