61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
var bricks = window.bricks || {};
|
|
bricks.Tabular = class extends bricks.DynamicAccordion {
|
|
constructor(opts){
|
|
super(opts);
|
|
this.fields = this.record_view.options.fields;
|
|
}
|
|
async build_info(item, record){
|
|
if (this.record_view.widgettype != 'DataRow'){
|
|
console.log('record_view must be DataRow');
|
|
return
|
|
}
|
|
if (record){
|
|
/* data row
|
|
*/
|
|
var options = bricks.extend({}, this.record_view.options);
|
|
var fields = [];
|
|
options.fields.forEach(f => {
|
|
var newf = bricks.extend({}, f);
|
|
newf.value = record[f.name];
|
|
fields.push(newf);
|
|
});
|
|
var desc = bricks.extend({}, this.record_view);
|
|
options.fields = fields;
|
|
options.user_data = record;
|
|
desc.options = options
|
|
var dr = await bricks.widgetBuild(desc, this);
|
|
dr.render(this.editable, this.checkable, false);
|
|
dr.event_names.forEach(e => {
|
|
dr.toolbar_w.bind(e, this.record_event_handle.bind(this, e, record, dr, item));
|
|
});
|
|
} else {
|
|
var dr = await bricks.widgetBuild(this.record_view, this);
|
|
dr.render(this.editable, this.checkable, true);
|
|
dr.event_names.forEach(e => {
|
|
dr.toolbar_w.bind(e, this.record_event_handle.bind(this, e, record, dr, item));
|
|
});
|
|
}
|
|
item.add_widget(dr);
|
|
return dr;
|
|
}
|
|
record_event_handle(event_name, record, row, item){
|
|
console.log('event_name=', event_name, 'record=', record);
|
|
switch(event_name){
|
|
case 'add':
|
|
this.add_record(row, record);
|
|
break;
|
|
case 'update':
|
|
this.update_record(row, record);
|
|
break;
|
|
case 'delete':
|
|
this.delete_record(row, record);
|
|
break;
|
|
default:
|
|
this.dispatch(event_name, record);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
bricks.Factory.register('Tabular', bricks.Tabular);
|