render method
ValueProvider
render(
- JSONRender render,
- DivElement output,
- dynamic node,
- dynamic nodeOriginal,
- NodeKey nodeKey,
override
Implementation
@override
ValueProvider render(JSONRender render, DivElement output, dynamic node,
dynamic nodeOriginal, NodeKey nodeKey) {
var list = (node as List).cast<Map>().toList();
var valueSet = JSONValueSet(true);
var columns = getCollectionColumns(render, nodeKey, list);
var contentClipboard = createDivInline()
..style.width = '0px'
..style.height = '0px'
..style.display = 'none';
output.style.maxWidth = '98vw';
output.style.overflow = 'auto';
var table = TableElement();
{
var tHeader = table.createTHead();
var headerRow = tHeader.addRow();
this.applyCSS(render, headerRow);
headerRow.onClick.listen((e) {
var jsonStr = render.buildJSONAsString();
print('-------------------------------------------------');
print(jsonStr);
contentClipboard.style.display = null;
contentClipboard.innerHtml = '<pre>$jsonStr</pre>';
copyElementToClipboard(contentClipboard);
contentClipboard.text = '';
contentClipboard.style.display = 'none';
});
for (var columnEntry in columns.entries) {
var columnKey = columnEntry.key;
var columnWithValue = columnEntry.value;
if ((ignoreNullColumns && !columnWithValue) ||
isIgnoredColumn(columnKey)) continue;
var cell = headerRow.addCell();
cell.text = columnKey;
cell.style.fontWeight = 'bold';
}
}
{
var tbody = table.createTBody();
for (var i = 0; i < list.length; ++i) {
var entry = list[i];
var entryNodeKey = nodeKey.append('$i');
bool valid = render.validateNode(entry, node, entryNodeKey);
if (!valid) {
valueSet.put(entryNodeKey, null);
continue;
}
var valueSetEntry = JSONValueSet();
valueSet.put(entryNodeKey, valueSetEntry.asValueProvider());
var row = tbody.addRow();
var rowCSS = i % 2 == 0 ? 'table-row1-render' : 'table-row2-render';
this.applyCSS(render, row, cssClass: rowCSS);
for (var columnEntry in columns.entries) {
var columnKey = columnEntry.key;
var columnWithValue = columnEntry.value;
if (ignoreNullColumns && !columnWithValue) {
if (entry.containsKey(columnKey)) {
assert(entry[columnKey] == null, 'Not null: ${entry[columnKey]}');
var elemNodeKey = entryNodeKey.append(columnKey);
valueSetEntry.put(elemNodeKey, valueProviderNull);
}
continue;
} else if (isIgnoredColumn(columnKey)) {
if (entry.containsKey(columnKey)) {
var val = entry[columnKey];
var elemNodeKey = entryNodeKey.append(columnKey);
valueSetEntry.put(elemNodeKey, (parent) => val);
}
continue;
}
var cell = row.addCell();
if (entry.containsKey(columnKey)) {
var val = entry[columnKey];
var elemNodeKey = entryNodeKey.append(columnKey);
if (render.isHiddenNode(elemNodeKey)) {
valueSet.put(elemNodeKey, (p) => nodeOriginal);
continue;
}
var elemContent = createDivInline();
var elemValueProvider =
render.renderNode(elemContent, val, entry, elemNodeKey);
valueSetEntry.put(elemNodeKey, elemValueProvider);
if (elemValueProvider == null) continue;
elemContent.style.verticalAlign = 'top';
cell.children.add(elemContent);
}
}
}
}
output.children.add(contentClipboard);
output.children.add(table);
this.applyCSS(render, output, extraElements: [table]);
return valueSet.asValueProvider();
}