Advertisement
Guest User

itemctrl

a guest
Aug 2nd, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. var controllersModule = require('../_index');
  4.  
  5. /**
  6.  * @ngInject
  7.  */
  8. function ItemCtrl($stateParams, api, PaginationService, $scope, $log, _, $state) {
  9.   // ViewModel
  10.   var vm = this;
  11.   vm.pagination = PaginationService.get();
  12.   if($stateParams.page) {
  13.     vm.pagination.currentPage = parseInt($stateParams.page, 10);
  14.   }
  15.   if($stateParams.itemsPerPage) {
  16.     vm.pagination.itemsPerPage = parseInt($stateParams.itemsPerPage, 10);
  17.   }
  18.   vm.orderBy = $stateParams.orderBy || 'id DESC';
  19.   vm.items = null;
  20.   vm.filtereditems = [];
  21.   vm.userId = parseInt($stateParams.userId) || null;
  22.  
  23.   vm.filter = {
  24.     text: $stateParams.text || '',
  25.     do: function() {
  26.       vm.pagination.currentPage = 1;
  27.       vm.doFilter();
  28.     },
  29.     clear: function() {
  30.       vm.filter.text = null;
  31.       vm.doFilter();
  32.     }
  33.   };
  34.  
  35.   vm.doFilter = function() {
  36.     vm.filteredItems = vm.items;
  37.     var stateParams = {};
  38.  
  39.     //Filtering
  40.     if(vm.filter.text && vm.filter.text !== '' && vm.filter.text.length >= 3) {
  41.       vm.filteredItems = _.filter(vm.filteredItems, function(item) {
  42.         function compare(string) {
  43.           if(!string) {
  44.             return false;
  45.           }
  46.           return (string || '').toLowerCase().indexOf(vm.filter.text.toLowerCase()) >= 0;
  47.         }
  48.  
  49.         if(
  50.           compare(item.name) ||
  51.           compare(item.type)
  52.         ) {
  53.           return true;
  54.         }
  55.  
  56.         return false;
  57.       });
  58.       stateParams.text = vm.filter.text;
  59.     } else {
  60.       stateParams.text = null;
  61.     }
  62.  
  63.     if(vm.userId){
  64.       stateParams.userId = vm.userId;
  65.       vm.filteredItems = _.filter(vm.filteredItems, function (item){
  66.         return item.ownerId === vm.userId;
  67.       });
  68.     }
  69.  
  70.     //Order
  71.     if(vm.orderBy && vm.orderBy.indexOf('DESC') > -1) {
  72.       vm.filteredItems = _.sortBy(vm.filteredItems, vm.orderBy.substring(0, vm.orderBy.indexOf(' DESC'))).reverse();
  73.     } else if(vm.orderBy) {
  74.       vm.filteredItems = _.sortBy(vm.filteredItems, vm.orderBy);
  75.     }
  76.     if(vm.orderBy) {
  77.       stateParams.orderBy = vm.orderBy;
  78.     } else {
  79.       stateParams.orderBy = null;
  80.     }
  81.  
  82.     //Pagination
  83.     vm.pagination.totalItems = vm.filteredItems.length;
  84.     if(vm.pagination.currentPage && vm.pagination.itemsPerPage) {
  85.       vm.filteredItems = _.slice(vm.filteredItems, (vm.pagination.currentPage - 1) * vm.pagination.itemsPerPage, vm.pagination.currentPage * vm.pagination.itemsPerPage + 1);
  86.       stateParams.page = vm.pagination.currentPage;
  87.       stateParams.itemsPerPage = vm.pagination.itemsPerPage;
  88.     }
  89.     if(vm.userId){
  90.       $state.go('index.itemsOfUser', stateParams, {notify: false});
  91.     }
  92.     else{
  93.       $state.go('index.items', stateParams, {notify: false});
  94.     }
  95.   };
  96.  
  97.   vm.load = function() {
  98.     api.getItems(function(items) {
  99.       vm.items = items;
  100.       vm.pagination.totalItems = items.length;
  101.       vm.doFilter();
  102.     }, function(errorResponse) {
  103.       $log.error('Loading items failed.', errorResponse);
  104.     });
  105.   };
  106.  
  107.   vm.load();
  108.  
  109.   $scope.$watch(function(){
  110.     return vm.orderBy;
  111.   }, vm.doFilter);
  112.   $scope.$watchCollection(function() {
  113.     return vm.pagination;
  114.   }, vm.doFilter);
  115.  
  116. }
  117.  
  118. controllersModule.controller('ItemCtrl', ItemCtrl);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement