@progress/kendo-react-grid
Version:
KendoReact Grid package
237 lines • 7.89 kB
JavaScript
/**
* @hidden
*/
export function getNestedValue(fieldName, dataItem) {
var path = (fieldName || '').split('.');
var data = dataItem;
path.forEach(function (p) {
data = data ? data[p] : undefined;
});
return data;
}
/**
* @hidden
*/
export function flatData(output, input, footer, dataIndex, groupDefined, field, level) {
if (level === void 0) { level = 0; }
var maxLevel = level;
for (var i = 0; i < input.length; i++) {
if (!groupDefined || input[i].value === undefined || input[i].items === undefined) {
output[output.length] = {
dataIndex: ++dataIndex.index,
dataItem: input[i],
rowType: 'data',
level: level,
expanded: field === undefined || getNestedValue(field, input[i])
};
continue;
}
maxLevel = Math.max(maxLevel, level + 1);
var expanded = field === undefined ||
getNestedValue(field, input[i]) === undefined ||
getNestedValue(field, input[i]);
// header
output[output.length] = {
dataIndex: -1,
dataItem: input[i],
level: level,
rowType: 'groupHeader',
expanded: expanded
};
// children
if (expanded) {
maxLevel = Math.max(flatData(output, input[i].items, footer, dataIndex, groupDefined, field, level + 1), maxLevel);
}
// footer
if (footer === 'always' || (expanded && footer === 'visible')) {
output[output.length] = {
dataIndex: -1,
dataItem: input[i],
rowType: 'groupFooter',
level: level,
expanded: expanded
};
}
}
return maxLevel;
}
/**
* @hidden
*/
export function getIndex(event, parent) {
if (!parent || !event || !event.originalEvent) {
return -1;
}
var target = document.elementFromPoint(event.clientX, event.originalEvent.clientY);
while (target && target.parentElement !== parent) {
target = target.parentElement;
}
var children = parent.children;
for (var i = 0; i < children.length; i++) {
if (children[i] === target) {
return i;
}
}
return -1;
}
var eventKeys = [
'sortChange',
'filterChange',
'groupChange',
'pageChange',
'expandChange',
'selectionChange',
'headerSelectionChange',
'rowClick',
'itemChange',
'dataStateChange',
'columnResize',
'columnReorder'
];
var deprecatedHandlerMessage = function (oldKey, newKey) { return ("The " + oldKey + " event handler property is deprecated, " +
("use https://www.telerik.com/kendo-react-ui/components/grid/api/GridProps/#toc-" + newKey + " instead")); };
/**
* @hidden
*/
export function checkPropCompatibility(props) {
for (var index = 0; index < eventKeys.length; index++) {
var eventKey = eventKeys[index];
if (props[eventKey] !== undefined) {
var newKey = 'on' + eventKey.charAt(0).toUpperCase() + eventKey.slice(1);
console.warn(deprecatedHandlerMessage(eventKey, newKey));
}
}
}
/**
* @hidden
*/
export function mapColumns(columns) {
var columnsMap = [[]];
var stickyLeftWidth = 0;
for (var q = columns.length - 1; q >= 0; q--) {
columns[q].colSpan = columns[q].colSpan || 1;
if (columns[q].parentIndex !== -1) {
columns[columns[q].parentIndex].colSpan =
(columns[columns[q].parentIndex].colSpan || 0) + columns[q].colSpan;
}
}
var maxDepth = 0;
columns.forEach(function (d) { maxDepth = Math.max(maxDepth, d.depth); });
var rowSpan = 1;
columns.forEach(function (column, i) {
columnsMap[column.depth] = columnsMap[column.depth] || [];
var needKFirst = false;
if (columnsMap[column.depth].length === 0) {
if (rowSpan <= 1) {
rowSpan = 1 + (column.children.length > 0 ? 0 : maxDepth - column.depth);
}
else {
rowSpan--;
needKFirst = true;
}
}
column.rowSpan = 1 + (column.children.length > 0 ? 0 : maxDepth - column.depth);
column.kFirst = needKFirst;
column.index = columnsMap[column.depth].length;
columnsMap[column.depth].push(i);
if (column.locked && column.children.length === 0) {
column.left = stickyLeftWidth;
stickyLeftWidth += column.width ? parseFloat(column.width.toString()) : 0;
}
});
var nextIsLocked = false;
var stickyRightWidth = 0;
for (var i = columns.length - 1; i >= 0; i--) {
var column = columns[i];
if (column.locked && column.children.length === 0) {
column.right = stickyRightWidth;
stickyRightWidth += column.width ? parseFloat(column.width.toString()) : 0;
column.rightBorder = !nextIsLocked;
}
nextIsLocked = column.locked || false;
}
return columnsMap;
}
import { GridColumn } from '../GridColumn';
/**
* @hidden
*/
export function readColumns(elements, oldColumns, depth) {
if (depth === void 0) { depth = 0; }
var columns = [];
if (!elements) {
return [];
}
if (elements && elements.length === undefined) {
elements = [elements];
}
elements.forEach(function (columnProps, index) {
columnProps = columnProps.props ? columnProps.props : columnProps;
var oldColumn = oldColumns[index] || null;
var c = readColumns(columnProps.children, oldColumn && oldColumn.children || [], depth + 1);
columns.push(Object.assign({ depth: depth }, GridColumn.defaultProps, (c.length) ? { cell: function () { return null; }, filterCell: function () { return null; } } : {}, oldColumn ? { width: oldColumn.width, orderIndex: oldColumn.orderIndex } : {}, columnProps, {
declarationIndex: columns.length,
children: c,
rowSpan: 0,
colSpan: 0
}));
});
var comparator = function (a, b) {
return a.orderIndex === b.orderIndex ?
a.declarationIndex - b.declarationIndex :
((a.orderIndex || 0) - (b.orderIndex || 0));
};
columns.sort(comparator);
if (depth === 0) {
var ret_1 = [];
var flat_1 = function (cols, pIndex) {
return cols.forEach(function (c) {
c.parentIndex = pIndex;
flat_1(c.children, ret_1.push(c) - 1);
});
};
flat_1(columns, -1);
return ret_1;
}
return columns;
}
/**
* @hidden
*/
export function autoGenerateColumns(data, group, expandField) {
var propData = [];
if (Array.isArray(data)) {
propData = data;
}
else if (data) {
propData = data.data;
}
var columns = [];
if (propData.length > 0) {
var itemForColumnsGen = propData[0];
if (group) {
for (var i = 0; i < group.length; i++) {
itemForColumnsGen = itemForColumnsGen.items && itemForColumnsGen.items[0];
}
}
var fields = Object.getOwnPropertyNames(itemForColumnsGen);
fields.forEach(function (field) {
if (field !== expandField) {
columns.push(Object.assign({
declarationIndex: -1,
parentIndex: -1,
depth: 0,
colSpan: 0,
rowSpan: 0,
index: 0,
left: 0,
right: 0,
rightBorder: false,
children: []
}, GridColumn.defaultProps, { field: field }));
}
});
}
return columns;
}
//# sourceMappingURL=index.js.map