1
0
mirror of https://github.com/ascribe/onion.git synced 2024-12-23 09:50:31 +01:00
onion/js/stores/piece_list_store.js

92 lines
3.2 KiB
JavaScript
Raw Normal View History

'use strict';
import update from 'react-addons-update';
import { alt } from '../alt';
import PieceListActions from '../actions/piece_list_actions';
2015-05-20 16:44:45 +02:00
class PieceListStore {
constructor() {
/**
* The store manages the state that is introduced by fetching
* the resource with certain parameters.
*
* This means that pieceList for example only contains pageSize-many items.
* Of course this can be altered by page as well.
*
* This is also the reason why we store a pieceListCount, which is essentially
* the number of items the resource actually - without pagination - provides.
*/
this.pieceList = [];
2015-07-13 19:12:24 +02:00
// -1 specifies that the store is currently loading
2015-07-07 09:22:46 +02:00
this.pieceListCount = -1;
this.unfilteredPieceListCount = -1;
2015-05-21 12:12:25 +02:00
this.page = 1;
2015-10-09 02:00:02 +02:00
this.pageSize = 20;
this.search = '';
this.orderBy = 'artist_name';
2015-05-21 12:12:25 +02:00
this.orderAsc = true;
this.filterBy = {};
2015-08-28 15:24:32 +02:00
this.requestActions = {};
this.bindActions(PieceListActions);
}
onUpdatePieceList({ page, pageSize, search, pieceList, orderBy, orderAsc, pieceListCount, unfilteredPieceListCount, filterBy }) {
this.page = page;
this.pageSize = pageSize;
this.search = search;
2015-05-21 12:12:25 +02:00
this.orderAsc = orderAsc;
this.orderBy = orderBy;
this.pieceListCount = pieceListCount;
this.unfilteredPieceListCount = unfilteredPieceListCount;
this.filterBy = filterBy;
/**
* Pagination - Known Issue:
* #########################
*
*
* The piece list store currently stores the open/close state of a piece list item.
*
* Once a new page is requested, this.pieceList will be overwritten, which means that the
* open/close state of a specific list item will be thrown away.
*
* This means that when opening an editionListTable on a piece, and continuing
* clicking next or back in the pagination, the editionListTable will return to its
* default value, which is "close".
*
* We did not implement this, as we're going to add pagination to pieceList at some
* point anyway. Then, this problem is automatically resolved.
*/
2015-06-12 15:00:26 +02:00
pieceList.forEach((piece, i) => {
const oldPiece = this.pieceList[i];
if (oldPiece) {
piece = update(piece, {
2015-06-12 15:00:26 +02:00
show: { $set: oldPiece.show }
});
}
2015-06-12 15:00:26 +02:00
});
this.pieceList = pieceList;
}
2015-07-09 15:44:20 +02:00
2015-08-28 15:24:32 +02:00
onUpdatePieceListRequestActions(res) {
2015-09-01 14:45:14 +02:00
this.requestActions = res.actions;
2015-07-01 19:05:47 +02:00
}
2015-07-09 15:44:20 +02:00
onUpdatePropertyForPiece({ pieceId, key, value }) {
const filteredPieceList = this.pieceList.filter((piece) => piece.id === pieceId);
2015-07-10 13:54:25 +02:00
if (filteredPieceList.length === 1) {
const piece = filteredPieceList[0];
2015-07-10 13:54:25 +02:00
piece[key] = value;
} else {
throw new Error('Could not find a matching piece in piece list since its either not there or piecelist contains duplicates.');
}
}
}
2015-06-15 08:44:44 +02:00
export default alt.createStore(PieceListStore, 'PieceListStore');