<!doctype html>
<html ng-app="app">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/4.0.3/ui-grid.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/4.0.3/ui-grid.min.css" type="text/css">
    
    <link rel='stylesheet' href='style.css'>
  </head>
  <body>

<div ng-controller="MainCtrl">
  <h3>Custom Filter Example</h3>
 <div>Custom Name Filter: <input type="text" ng-model="nameFilter">
      <button ng-click="filterName()">Filter By Name</button></div>
      
<div>Custom Company Filter: <input type="text" ng-model="companyFilter">
      <button ng-click="filterCompany()">Filter By Company</button>
      <button ng-click="filterReset()">Reset</button>
      </div>
      
  <br>
  <div id="grid1" ui-grid="gridOptions" 
     ui-grid-pagination
     ui-grid-grouping
     ui-grid-selection
     ui-grid-save-state ></div>
      
</div>
    <script src="script.js"></script>
  </body>
</html>
// Code goes here
//http://ui-grid.info/docs/#/tutorial/098_contributing_to_ui-grid
//https://github.com/angular-ui/ui-grid/wiki/Defining-Columns
//http://ui-grid.info/
var app = angular.module('app', ['ui.grid', 'ui.grid.saveState', 'ui.grid.pagination', 'ui.grid.grouping', 'ui.grid.selection']);


app.factory('dataService', function($http){
    return {
        getData: function() {
            return $http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/500_complex.json');
        }
    };
});

app.controller('MainCtrl', ['$scope', '$http', 'dataService', function ($scope, $http, dataService) {
  
  getGridData();
  //$scope.originalData =   getGridData();
  function getGridData(){
    dataService.getData().success(function(data){
      $scope.gridOptions.data = data;    
    });
  }
  
  $scope.gridOptions = {
    enableFiltering: true,
    paginationPageSizes: [5, 10, 15],
    paginationPageSize: 15,
    enableSorting: true,
     enableRowSelection: true,
    isRowSelectable : function(row) {
    if (row.entity.gender == 'male') {
      console.log('selected');
      return false;
    } else {
      console.log('not selected');
      return true;
    }
  },
    columnDefs: [
      
      { field: 'name', enableFiltering: false },
      { field: 'gender', enableFiltering: false, enableSorting: false, grouping:{groupPriority: 1}, sort: { priority: 1, direction: 'asc' },   },
      { field: 'company', enableFiltering: false, enableSorting: false, },
      { field: 'email', enableFiltering: false, enableSorting: false },
      { field: 'phone', enableFiltering: false, enableSorting: false },
      { field: 'age', enableFiltering: false, enableSorting: false }
    ],
        onRegisterApi: function(gridApi){ 
            $scope.gridApi = gridApi;
    }
  };
  
  $scope.state = {};
  $scope.saveState = function() {
    $scope.state = $scope.gridApi.saveState.save();
  };
  $scope.filterName = function(){
    $scope.state = $scope.gridApi.saveState.save();
    $scope.state.columns[0].filters[0] = {term: $scope.nameFilter || '*'};
    $scope.gridApi.saveState.restore( $scope, $scope.state );
   
  };
  $scope.filterCompany = function(){
    $scope.state = $scope.gridApi.saveState.save();
    $scope.state.columns[2].filters[0] = {term: $scope.companyFilter || '*'};
    $scope.gridApi.saveState.restore( $scope, $scope.state );
  };
  
  $scope.filterReset = function(){
    //$scope.gridOptions.data = $scope.originalData;
    $scope.gridApi.grid.clearAllFilters();
  };
  
}]);
/* Styles go here */

.grid {
  width: 650px;
  height: 400px;
}