TableBody.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import ActionSet from "./toolbar/ActionSet";
  2. export default class TableBody {
  3. constructor(rows, columns, rowActions, options) {
  4. this.rows = rows;
  5. this.columns = columns;
  6. this.rowActions = rowActions;
  7. this.options = options;
  8. }
  9. render() {
  10. if(this.options.selectable){
  11. return this.renderSelectable();
  12. }
  13. return this.renderDefaultTable();
  14. }
  15. renderDefaultTable(){
  16. const tbody = document.createElement('tbody');
  17. this.rows.forEach((row) => {
  18. const tr = document.createElement('tr');
  19. this.columns.forEach((column) => {
  20. const td = document.createElement('td');
  21. td.setAttribute('data-name', column.column);
  22. td.setAttribute('data-value', row[column.column]);
  23. if (column.column == 'id') {
  24. tr.setAttribute('data-value', row[column.column]);
  25. const idColumn = new ActionSet(this.rowActions, 'span', row[column.column]);
  26. td.appendChild(idColumn.render());
  27. } else {
  28. td.innerHTML = row[column.column];
  29. }
  30. tr.appendChild(td);
  31. });
  32. tbody.appendChild(tr);
  33. });
  34. return tbody;
  35. }
  36. renderSelectable(){
  37. const tbody = document.createElement('tbody');
  38. this.rows.forEach((row) => {
  39. const tr = document.createElement('tr');
  40. this.columns.forEach((column) => {
  41. const td = document.createElement('td');
  42. td.setAttribute('data-name', column.column);
  43. td.setAttribute('data-value', row[column.column]);
  44. if (column.column == 'id') {
  45. tr.setAttribute('data-value', row[column.column]);
  46. const idColumn = document.createElement('button');
  47. let payload = {'element': row, ...this.options.selectable.callbackParameters};
  48. idColumn.addEventListener('click', this.options.selectable.select.bind(null, payload));
  49. idColumn.classList.add('btn', 'btn-danger', 'btn-block');
  50. idColumn.style = "padding: 0.1rem 0.5em;";
  51. idColumn.innerHTML = 'Selecionar';
  52. td.appendChild(idColumn);
  53. } else {
  54. td.innerHTML = row[column.column];
  55. }
  56. tr.appendChild(td);
  57. });
  58. tbody.appendChild(tr);
  59. });
  60. return tbody;
  61. }
  62. }