<!DOCTYPE html>
<html lang="en">
<head>
    <script>var __basePath = '/';</script>
    <style media="only screen">
        html, body {
            height: 100%;
            width: 100%;
            margin: 0;
            box-sizing: border-box;
            -webkit-overflow-scrolling: touch;
        }

        html {
            position: absolute;
            top: 0;
            left: 0;
            padding: 0;
            overflow: auto;
        }

        body {
            padding: 1rem;
            overflow: auto;
        }
    </style>
            <script src="https://unpkg.com/@ag-grid-enterprise/all-modules@23.1.1/dist/ag-grid-enterprise.min.js"></script>
    </head>

<body>
    <style>
  .total-col {
    font-weight: bold;
    color: burlywood;
  }
</style>

<div id="myGrid" style="height: 100%;" class="ag-theme-alpine-dark"></div>
    <script src="CustomPinnedRowRenderer.js"></script>
    <script src="main.js"></script>
</body>
</html>
var gridOptions = {
  columnDefs: [
    { field: 'a', type: 'valueColumn', headerName: 'A (Total disabled)' },
    { field: 'b', type: 'valueColumn' },
    { field: 'c', type: 'valueColumn' },
    { field: 'd', type: 'valueColumn' },
    { field: 'e', type: 'valueColumn' },
    { field: 'f', type: 'valueColumn' },
    // {
    //   headerName: 'Total',
    //   valueGetter: 'data.a + data.b + data.c + data.d + data.e + data.f',
    //   editable: false,
    //   aggFunc: 'sum',
    //   cellClass: 'total-col',
    // },
  ],
  defaultColDef: {
    flex: 1,
    sortable: true,
    pinnedRowCellRenderer: 'customPinnedRowRenderer',
    pinnedRowCellRendererParams: {
      style: { color: 'yellow', fontWeight: 'bold'},
    },
  },
  columnTypes: {
    valueColumn: {
      editable: true,
      aggFunc: 'sum',
      valueParser: 'Number(newValue)',
      filter: 'agNumberColumnFilter',
    },
  },
  rowData: getRowData(),
  groupDefaultExpanded: 1,
  enableCellChangeFlash: true,
  animateRows: true,
  pinnedBottomRowData: createFooterData(),
  components: {
    customPinnedRowRenderer: CustomPinnedRowRenderer,
  }, 
  onGridReady: onGridReady,
  onFilterChanged: onGridReady,
};


function onGridReady(event) {
  console.log('The grid is now ready');
  // gridOptions.pinnedBottomRowData = createFooterData();
  gridOptions.api.setPinnedBottomRowData(createFooterData(gridOptions.api));
}

function getRowData() {
  var rowData = [];
  for (var i = 1; i <= 30; i++) {
    rowData.push({
      group: i < 5 ? 'A' : 'B',
      a: (i * 863) % 100,
      b: (i * 811) % 100,
      c: (i * 743) % 100,
      d: (i * 677) % 100,
      e: (i * 619) % 100,
      f: (i * 571) % 100,
    });
  }
  return rowData;
}

function sum(values, col) {
    var sum = 0;
    values.forEach( function(value) {sum += value.data[col]} );
    return sum;
}

function createFooterData(gridApi) {
  var result = [];
  var model;
  var visibleRows = [];
  if(gridApi){
    model = gridApi.getModel();
    visibleRows = model.rowsToDisplay;
  }
  console.log('model:', model);
  console.log('visibleRows:', visibleRows);  
  result.push({
    a: null,
    b: sum(visibleRows, 'b'),
    c: sum(visibleRows, 'c'),
    d: sum(visibleRows, 'd'),
    e: sum(visibleRows, 'e'),
    f: sum(visibleRows, 'f'),
  });
  console.log('result:', result);
  return result;
}

// setup the grid after the page has finished loading
document.addEventListener('DOMContentLoaded', function() {
  var gridDiv = document.querySelector('#myGrid');
  new agGrid.Grid(gridDiv, gridOptions);
});
function setStyle(element, propertyObject) {
  for (var property in propertyObject) {
    element.style[property] = propertyObject[property];
  }
}
function CustomPinnedRowRenderer() {}

CustomPinnedRowRenderer.prototype.init = function(params) {
  this.eGui = document.createElement('div');
  setStyle(this.eGui, params.style);
  this.eGui.innerHTML = params.value? params.value: null;
};

CustomPinnedRowRenderer.prototype.getGui = function() {
  return this.eGui;
};