we integrated the example into our app, this is the adapted code:
class TreeModel extends bryntum.grid.GridRowModel {
static get fields() {
return [
'Id',
'Name',
{ name : 'StartDate', dateFormat : 'YYYY-MM-DD' },
'Duration',
'PercentDone',
// Remap the built in readOnly field to use our locked field as its data source
{ name : 'readOnly', dataSource : 'Locked' }
];
}
}
TreeModel.idField = 'Id';
var view = Ext.create('Ext.Panel',{
layout : 'fit',
height:'100%',
id:'structureSurferGrid',
items : [
{
title : 'Bryntum Grid',
xtype : 'bryntumtreegridpanel',
itemId : 'grid',
reference : 'treeGridPanel',
features : {
cellEdit : true,
filter : true,
stripe : true,
tree : true,
regionResize : true
},
loadMask : 'Loading tree data...',
columns : [
{
text : 'Name',
field : 'Name',
width : 400,
type : 'tree',
locked : true //Set locked to true then the column will be displayed on the left side of the grid
},
{
type : 'widget',
text : 'Widget column',
field : 'PercentDone',
width : 150,
locked : true,
widgets : [{ type : 'slider', showValue : false }]
},
{
text : 'Percent',
type : 'percent',
field : 'PercentDone',
locked : true,
width : 250
},
{
text : 'Start',
field : 'StartDate',
width : 150,
type : 'date',
format : 'YYYY-MM-DD'
},
{
text : 'End',
field : 'StartDate',
width : 150,
renderer : ({ value, record }) => value && bryntum.grid.DateHelper.format(bryntum.grid.DateHelper.add(value, record.Duration, 'day'), 'YYYY-MM-DD'), //Calculate the endDate based on duration
editor : false //Switch editing off.
},
{
text : 'Duration',
field : 'Duration',
width : 150,
type : 'number',
unit : ' days'
},
{
text : 'Number of Subtasks',
editor : false,
field : 'children',
width : 150,
type : 'number',
renderer : ({ value }) => value ? value.length : 0
},
{
text : 'Started',
field : 'PercentDone',
width : 150,
renderer : ({ value }) => value > 0 ? 'Yes' : 'No',
editor : false
},
{
text : 'In Progress',
field : 'PercentDone',
width : 150,
renderer : ({ value }) => value > 0 && value < 100 ? 'Yes' : 'No',
editor : false
},
{
text : 'Complete',
field : 'PercentDone',
width : 150,
renderer : ({ value }) => value === 100 ? 'Yes' : 'No',
editor : false
},
{
text : 'Reference',
field : 'Id',
width : 150,
renderer : ({ value }) => '#' + bryntum.grid.StringHelper.encodeHtml(value),
editor : false
}
],
store : {
modelClass : TreeModel,
readUrl : 'data/data.json', //Because readUrl is used, an AjaxStore will be initiated
autoLoad : true
}
}
]
});
view.down('#grid')._grid._element.addEventListener('change', e => {
if (e.target.type === 'range') {
const slider = e.target,
record = view.down('#grid')._grid.getRecordFromElement(slider);
record.PercentDone = slider.value;
}
}, true);
the grid shows the structure exactly like in the example but without data (see both screenshots). Any idea ?