@mhmdaljefri/revogrid
Version:
Virtual reactive data grid component - RevoGrid.
133 lines (121 loc) • 2.89 kB
JavaScript
function generateHeader(index) {
const asciiFirstLetter = 65;
const lettersCount = 26;
let div = index + 1;
let label = '';
let pos;
while (div > 0) {
pos = (div - 1) % lettersCount;
label = String.fromCharCode(asciiFirstLetter + pos) + label;
div = parseInt(((div - pos) / lettersCount).toString(), 10);
}
return label.toLowerCase();
}
function naturalSort(prop,a,b) {
return a[prop].localeCompare(b[prop],"en",{numeric:true})
}
const DEFAULT_CONFIG = {
topPinned: [],
groupedHeader: false,
bottomPinned: [],
colPinStart: [],
colPinEnd: [],
rowDrag: 0,
rows: 0,
cols: 0,
order: undefined,
};
export function generateFakeDataObject(config = {}) {
const {
topPinned,
bottomPinned,
colPinStart,
colPinEnd,
groupedHeader,
rowDrag,
rows,
cols,
order,
} = {
...DEFAULT_CONFIG,
...config,
};
const result = [];
const columns = {};
const all = cols * rows;
for (let j = 0; j < all; j++) {
let rgCol = j % cols;
let rgRow = (j / cols) | 0;
if (!result[rgRow]) {
result[rgRow] = {};
if (rgRow % 2) {
result[rgRow].key = 'a';
} else {
result[rgRow].key = 'b';
}
}
if (!columns[rgCol]) {
columns[rgCol] = {
name: generateHeader(rgCol),
prop: rgCol,
sortable: true,
size: 200,
cellCompare: (rgCol % 2) == 0 ? naturalSort : undefined
};
// apply config
if (colPinStart.indexOf(j) > -1) {
columns[rgCol].pin = 'colPinStart';
}
// apply config
if (colPinEnd.indexOf(j) > -1) {
columns[rgCol].pin = 'colPinEnd';
}
}
result[rgRow][rgCol] = `${rgRow}:${rgCol}`; // rgRow % 5 ? rgCol : rgRow % 3 ? (rgCol % 3 ? 2 : 3) : rgRow; // rgRow + ':' + rgCol;
if (rgCol === 1) {
result[rgRow][rgCol] = 'A';
}
// apply config
if (rgCol === rowDrag) {
columns[rgCol].rowDrag = true;
}
// apply config
if (rgCol === order) {
columns[rgCol].order = 'asc';
}
}
// apply config
const pinnedTopRows = topPinned.map(i => ({ ...result[i] }));
// apply config
const pinnedBottomRows = bottomPinned.map(i => ({ ...result[i] }));
let headers = Object.keys(columns).map(k => columns[k]);
if (groupedHeader) {
const grouped = headers.splice(1, 4);
const grouped2 = grouped.splice(0, 2);
grouped.push({
name: 'Grouped2',
children: grouped2,
});
headers.splice(
6,
0,
...[
{
name: 'Grouped',
children: grouped,
},
],
);
const grouped4 = headers.splice(1, 3);
headers.splice(1, 0, ...[{
name: 'Grouped3',
children: grouped4
}]);
}
return {
rows: result,
pinnedTopRows,
pinnedBottomRows,
headers,
};
}