ui/app/instance-initializers/store.js

103 lines
2.6 KiB
JavaScript

import Ember from 'ember';
import {normalizeType} from 'ember-api-store/utils/normalize';
import UnpurgedArrayProxy from 'ui/utils/unpurged-array-proxy';
import UnremovedArrayProxy from 'ui/utils/unremoved-array-proxy';
import ActiveArrayProxy from 'ui/utils/active-array-proxy';
import C from 'ui/utils/constants';
export function initialize(instance) {
var container = instance.container;
var application = container.lookup('application:main');
var store = container.lookup('store:main');
var session = container.lookup('service:session');
store.set('removeAfterDelete', false);
store.reopen({
baseUrl: application.apiEndpoint,
headers: function() {
var out = {};
// Please don't send us www-authenticate headers
out[C.HEADER.NO_CHALLENGE] = C.HEADER.NO_CHALLENGE_VALUE;
// Send the current project id as a header if in a project
var projectId = session.get(C.SESSION.PROJECT);
if ( projectId )
{
out[C.HEADER.PROJECT] = projectId;
}
return out;
}.property().volatile(),
// Override store.all() so that it only returns un-purged resources.
reallyAll: store.all,
all: function(type) {
type = normalizeType(type);
var proxy = UnpurgedArrayProxy.create({
sourceContent: this._group(type)
});
return proxy;
},
// find(type) && return allActive(type)
findAllActive: function(type) {
type = normalizeType(type);
var self = this;
if ( self.haveAll(type) )
{
return Ember.RSVP.resolve(self.allActive(type),'All active '+ type + ' already cached');
}
else
{
return this.find(type).then(function() {
return self.allActive(type);
});
}
},
allActive: function(type) {
type = normalizeType(type);
var proxy = ActiveArrayProxy.create({
sourceContent: this._group(type)
});
return proxy;
},
findAllUnremoved: function(type) {
type = normalizeType(type);
var self = this;
if ( self.haveAll(type) )
{
return Ember.RSVP.resolve(self.allUnremoved(type),'All unremoved '+ type + ' already cached');
}
else
{
return this.find(type).then(function() {
return self.allUnremoved(type);
});
}
},
allUnremoved: function(type) {
type = normalizeType(type);
var proxy = UnremovedArrayProxy.create({
sourceContent: this._group(type)
});
return proxy;
}
});
}
export default {
name: 'store',
after: 'ember-api-store',
initialize: initialize
};