<eg-grid-field label="[% l('Issuance') %]" path="issuance.label" visible></eg-grid-field>
<eg-grid-field label="[% l('Barcode') %]" path="unit.barcode" visible></eg-grid-field>
<eg-grid-field label="[% l('Publication Date') %]" path="issuance.date_published" visible>{{item.issuance.date_published|date:'shortDate'}}</eg-grid-field>
- <eg-grid-field label="[% l('Status') %]" path="status" visible></eg-grid-field>
- <eg-grid-field label="[% l('Date Expected') %]" path="date_expected" visible>{{item.date_expected|date:'shortDate'}}</eg-grid-field>
- <eg-grid-field label="[% l('Date Received') %]" path="date_received" visible>{{item.date_received|date:'shortDate'}}</eg-grid-field>
+ <eg-grid-field label="[% l('Status') %]" path="status" sortable visible></eg-grid-field>
+ <eg-grid-field label="[% l('Date Expected') %]" path="date_expected" sortable visible>{{item.date_expected|date:'shortDate'}}</eg-grid-field>
+ <eg-grid-field label="[% l('Date Received') %]" path="date_received" sortable visible>{{item.date_received|date:'shortDate'}}</eg-grid-field>
<eg-grid-field label="[% l('Holding Type') %]" path="issuance.holding_type" visible></eg-grid-field>
<eg-grid-field label="[% l('Route To') %]" path="stream.routing_label"></eg-grid-field>
<eg-grid-field label="[% l('Receiving Template') %]" path="stream.distribution.receive_unit_template.name" visible></eg-grid-field>
activateItem : function (item) { } // TODO
};
+ function compileSort(sort) {
+ if (sort && angular.isArray(sort) && sort.length == 1) {
+ if (angular.isObject(sort[0])) {
+ for (key in sort[0]) {
+ return {
+ 'class' : 'sitem',
+ field : key,
+ direction : sort[0][key]
+ };
+ }
+ } else {
+ return { 'class': 'sitem', field: sort[0] };
+ }
+ }
+ }
+ var current_sort = [];
$scope.itemGridProvider = egGridDataProvider.instance({
get : function(offset, count) {
var self = this;
- if (egSerialsCoreSvc.itemList.length >= offset + count) { // if there's anything on the requested page, notify
+ if (angular.equals(current_sort, self.sort) && egSerialsCoreSvc.itemList.length >= offset + count) { // if there's anything on the requested page, notify
return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count);
} else { // else try to fetch another page
- return egSerialsCoreSvc.fetchItemsForSubPaged(
- $scope.ssubId,
- _paging_filter,
- egSerialsCoreSvc.itemList.length,
- count + offset - egSerialsCoreSvc.itemList.length
- ).then(function() {
- return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count);
- });
+ if (angular.equals(current_sort, self.sort)) {
+ return egSerialsCoreSvc.fetchItemsForSubPaged(
+ $scope.ssubId,
+ _paging_filter,
+ egSerialsCoreSvc.itemList.length,
+ count + offset - egSerialsCoreSvc.itemList.length,
+ compileSort(self.sort)
+ ).then(function() {
+ return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count);
+ });
+ } else {
+ current_sort = self.sort;
+ return egSerialsCoreSvc.fetchItemsForSub(
+ $scope.ssubId,
+ _paging_filter,
+ null,
+ compileSort(self.sort)
+ ).then(function() {
+ return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count);
+ });
+ }
}
}
});
});
}
- service.fetchItemsForSubPaged = function(subId,filter,offset,limit) {
+ service.fetchItemsForSubPaged = function(subId,filter,offset,limit,sort) {
return service.fetchItemsForSub(
subId,
filter,
- { limit : limit, offset : offset, paging : true }
+ { limit : limit, offset : offset, paging : true },
+ sort
);
}
// Creates an inverted tree from item to sub
- service.fetchItemsForSub = function(subId,filter,options) {
+ service.fetchItemsForSub = function(subId,filter,options,sort) {
var deferred = $q.defer(); // side-effects only, otherwise the grid is wonky
if (!filter) filter = {};
sitem : ['issuance','editor','creator','unit','url']
}
});
+ if (sort) {
+ angular.extend(options, {
+ order_by : [sort]
+ });
+ }
egCore.pcrud.search(
'sitem', filter, options,
});
// ... then sort it
- service.itemList = orderByFilter(hashList, ['"issuance.date_published"', '"stream.distribution.holding_lib.name"', '"id"']);
+ if (sort) {
+ service.itemList = hashList;
+ } else {
+ service.itemList = orderByFilter(hashList, ['"issuance.date_published"', '"stream.distribution.holding_lib.name"', '"id"']);
+ }
deferred.resolve();
});