UNPKG

ag-grid

Version:

Advanced Javascript Datagrid. Supports raw Javascript, AngularJS 1.x, AngularJS 2.0 and Web Components

120 lines (101 loc) 5 kB
var module = angular.module("example", ["agGrid"]); module.controller("exampleCtrl", function($scope) { var classRules = { // rule shouldn't apply to header or footer, so ignore when node.group = true 'bold-and-red': '!node.group && x>=5' }; var columnDefs = [ {headerName: "Person", field: 'name', width: 400, cellRenderer: { renderer: 'group' }}, {headerName: "Monday", headerGroup: 'Weekly Editable Values', field: "mon", cellRenderer: valueCellRenderer, cellClassRules: classRules}, {headerName: "Tuesday", headerGroup: 'Weekly Editable Values', field: "tue", cellRenderer: valueCellRenderer, cellClassRules: classRules}, {headerName: "Wednesday", headerGroup: 'Weekly Editable Values', field: "wed", cellRenderer: valueCellRenderer, cellClassRules: classRules}, {headerName: "Thursday", headerGroup: 'Weekly Editable Values', field: "thur", cellRenderer: valueCellRenderer, cellClassRules: classRules}, {headerName: "Friday", headerGroup: 'Weekly Editable Values', field: "fri", cellRenderer: valueCellRenderer, cellClassRules: classRules} ]; var data = [ {name: 'Saoirse Ronan', nationality: 'Irish', mon: 1, tue: 1, wed: 1, thur: 1, fri: 1}, {name: 'Colin Farrell', nationality: 'Irish',mon: 5, tue: 5, wed: 5, thur: 5, fri: 5}, {name: 'Cillian Murphy', nationality: 'Irish',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Pierce Brosnan', nationality: 'Irish',mon: 1, tue: 1, wed: 1, thur: 1, fri: 1}, {name: 'Liam Neeson', nationality: 'Irish',mon: 5, tue: 5, wed: 5, thur: 5, fri: 5}, {name: 'Gabriel Byrne', nationality: 'Irish',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Stephen Rea', nationality: 'Irish',mon: 1, tue: 1, wed: 1, thur: 1, fri: 1}, {name: 'Michael Fassbender', nationality: 'Irish',mon: 5, tue: 5, wed: 5, thur: 5, fri: 5}, {name: 'Richard Harris', nationality: 'Irish',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Brendan Gleeson', nationality: 'Irish',mon: 1, tue: 1, wed: 1, thur: 1, fri: 1}, {name: 'Colm Meaney', nationality: 'Irish',mon: 5, tue: 5, wed: 5, thur: 5, fri: 5}, {name: 'Niall Crosby', nationality: 'Irish',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Brad Pitt', nationality: 'American',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Edward Norton', nationality: 'American',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Laurence Fishburne', nationality: 'American',mon: 1, tue: 2, wed: 3, thur: 4, fri: 5}, {name: 'Bruce Willis', nationality: 'American' ,mon: 1, tue: 2, wed: 3, thur: 4, fri: 5} ]; var TEMPLATE = '<span id="text"></span> <button id="btUp">+</button> <button id="btDown">-</button>'; function valueCellRenderer(params) { if (params.node.group) { return cellRendererHeaderCell(params); } else { return cellRendererNormalCell(params); } } function cellRendererNormalCell(params) { var eSpan = document.createElement('span'); eSpan.innerHTML = TEMPLATE; eSpan.querySelector('#text').innerHTML = params.value; eSpan.querySelector('#btUp').addEventListener('click', function() { params.data[params.colDef.field]++; params.refreshCell(); params.api.recomputeAggregates(); }); eSpan.querySelector('#btDown').addEventListener('click', function() { params.data[params.colDef.field]--; params.refreshCell(); params.api.recomputeAggregates(); }); return eSpan; } function cellRendererHeaderCell(params) { if (params.value) { // print a value if it is there return params.value; } else { // otherwise print nothing (we are the header of an expanded group) return ''; } } function groupAggFunction(nodes) { var sums = { mon: 0, tue: 0, wed: 0, thur: 0, fri: 0 }; nodes.forEach(function(node) { var data = node.data; sums.mon += data.mon; sums.tue += data.tue; sums.wed += data.wed; sums.thur += data.thur; sums.fri += data.fri; }); return sums; } $scope.gridOptions = { groupKeys: ['nationality'], groupIncludeFooter: true, groupDefaultExpanded: 1, groupAggFunction: groupAggFunction, groupSuppressAutoColumn: true, columnDefs: columnDefs, rowData: data, rowSelection: 'single', enableSorting: true, onReady: function(params) { params.api.sizeColumnsToFit(); } }; });