bricks/bricks/tabular.js
2024-05-07 16:53:57 +08:00

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);