1
0
mirror of https://github.com/ascribe/onion.git synced 2024-12-23 01:39:36 +01:00
onion/js/stores/piece_store.js

74 lines
1.7 KiB
JavaScript
Raw Normal View History

'use strict';
import { alt } from '../alt';
2015-06-08 18:14:25 +02:00
import PieceActions from '../actions/piece_actions';
2015-05-26 10:41:41 +02:00
import PieceSource from '../sources/piece_source';
2015-05-26 10:41:41 +02:00
class PieceStore {
constructor() {
this.getInitialState();
2015-06-08 18:14:25 +02:00
this.bindActions(PieceActions);
this.registerAsync(PieceSource);
this.exportPublicMethods({
getInitialState: this.getInitialState.bind(this)
});
}
getInitialState() {
this.piece = {};
this.pieceMeta = {
err: null
};
return {
piece: this.piece,
pieceMeta: this.pieceMeta
}
}
onFetchPiece(pieceId) {
this.getInstance().lookupPiece(pieceId);
// Prevent alt from sending an empty change event when a request is sent
// off to the source
this.preventDefault();
}
onSuccessFetchPiece({ piece }) {
if (piece) {
this.onUpdatePiece(piece);
} else {
this.pieceMeta.err = new Error('Problem fetching the piece');
console.logGlobal(this.pieceMeta.err);
}
}
onErrorPiece(err) {
console.logGlobal(err);
this.pieceMeta.err = err;
}
onFlushPiece() {
this.getInitialState();
2015-05-26 10:41:41 +02:00
}
onUpdatePiece(piece) {
this.piece = piece;
this.pieceMeta.err = null;
2015-05-26 10:41:41 +02:00
}
2015-07-13 18:13:16 +02:00
onUpdateProperty({ key, value }) {
if (this.piece && key in this.piece) {
2015-07-13 18:13:16 +02:00
this.piece[key] = value;
} else {
throw new Error('There is no piece defined in PieceStore or the piece object does not have the property you\'re looking for.');
}
}
2015-05-26 13:33:35 +02:00
}
2015-05-26 10:41:41 +02:00
2015-06-15 08:44:44 +02:00
export default alt.createStore(PieceStore, 'PieceStore');