application/services/version-service.js
import Immutable from 'immutable';
import alt from './../alt';
import Alt from 'alt';
import BaseService from './base-service';
import {ErrorService} from './error-service';
import {parseSrn} from './../util/strings';
import {info} from './../util/console';
/**
* Interact with version API service
*/
class VersionService extends BaseService {
updateVersion(version) {
return version;
}
updateVersions(version) {
return version;
}
/**
* Fetch single version
* @param {string} id UUID
* @param {object} opts Hash of query options
* @param {Boolean} forceUpdate If true (default) force update to version store, otherwise, don't
*/
fetchOne(content_id, version_id, opts, forceUpdate = true) {
if (forceUpdate === true) {
this.updateVersion([]);
}
return (dispatch) => {
return this.get('/v3/version/' + content_id + '/' + version_id, opts)
.then((data) => {
info('FetchOne returned', data);
this.updateVersion(data.first());
});
};
}
/**
* Fetch all versions for given UUID
* @param {string} srn valid content SRN
* @param {object} opts hash of query options
*/
fetch(srn = false, opts = {}) {
if (!opts.content && srn) {
opts.content = srn;
}
if (!opts.content) {
throw 'SRN is required';
}
return (dispatch) => {
return this.get('/v3/version', opts)
.then((data) => {
info('Fetch returned', data);
this.updateVersions(data.get('items'))
});
};
}
}
const service = alt.createActions(VersionService);
/**
* Versions Flux store. Tracks
* <ul>
* <li>version</li>
* <li>versions</li>
* </ul>
*/
class VersionsStore {
constructor() {
this.state = {
'version': Immutable.Map(),
'versions': Immutable.Map()
};
this.bindListeners({
'handleUpdateVersion': service.UPDATE_VERSION,
'handleUpdateVersions': service.UPDATE_VERSIONS
});
}
handleUpdateVersion(version) {
this.setState({'version': version});
}
handleUpdateVersions(version) {
this.setState({'versions': version});
}
}
const store = alt.createStore(VersionsStore, 'VersionsStore');
/**
* Instace wrapper if you don't or can't use the singleton action and classes.
*
* Actions and store are both under the 'versions' key.
*/
class VersionFlux extends Alt {
constructor(config = {}) {
super(config);
this.addActions('versions', VersionService);
this.addStore('versions', VersionsStore);
}
}
export {VersionFlux as default, service as VersionService, store as VersionsStore};