Files
attract/src/scripts/js/es6/common/vuecomponents/attracttable/rows/AttractRowsSourceBase.js
Tobias Johansson 5e73720d91 Vue Attract: Sort/filterable table based on Vue
Initial commit implementing sortable and filterable tables for attract
using Vue.
2019-02-12 09:08:37 +01:00

39 lines
1.1 KiB
JavaScript

let RowObjectsSourceBase = pillar.vuecomponents.table.rows.RowObjectsSourceBase;
class AttractRowsSourceBase extends RowObjectsSourceBase {
constructor(projectId, node_type, rowClass) {
super(projectId);
this.node_type = node_type;
this.rowClass = rowClass;
}
createRow(node) {
let row = new this.rowClass(node);
row.thenInit();
this.registerListeners(row);
return row;
}
initRowObjects(nodes) {
this.rowObjects = nodes.map(this.createRow.bind(this));
pillar.events.Nodes.onCreated(this.node_type, this.onNodeCreated.bind(this));
}
registerListeners(rowObject) {
pillar.events.Nodes.onDeleted(rowObject.getId(), this.onNodeDeleted.bind(this));
}
onNodeDeleted(event, nodeId) {
this.rowObjects = this.rowObjects.filter((rowObj) => {
return rowObj.getId() !== nodeId;
});
}
onNodeCreated(event, node) {
let rowObj = this.createRow(node);
this.rowObjects = this.rowObjects.concat(rowObj);
}
}
export { AttractRowsSourceBase }