ampache_react/app/reducers/paginate.js
Phyks (Lucas Verney) 9717bdc47b Store invalidation on logout
Invalidate the store at logout, emptying cached items such as artists,
albums and songs and then preventing them from quickly reappearing when
reconnecting with the same or a different account.

Closes #5.
2016-08-03 15:55:42 +02:00

51 lines
1.6 KiB
JavaScript

import Immutable from "immutable";
import { createReducer } from "../utils";
import { stateRecord } from "../models/paginate";
import { INVALIDATE_STORE } from "../actions";
const initialState = new stateRecord();
// Creates a reducer managing pagination, given the action types to handle,
// and a function telling how to extract the key from an action.
export default function paginate(types) {
if (!Array.isArray(types) || types.length !== 3) {
throw new Error("Expected types to be an array of three elements.");
}
if (!types.every(t => typeof t === "string")) {
throw new Error("Expected types to be strings.");
}
const [ requestType, successType, failureType ] = types;
return createReducer(initialState, {
[requestType]: (state) => {
return (
state
.set("isFetching", true)
.set("error", null)
);
},
[successType]: (state, payload) => {
return (
state
.set("isFetching", false)
.set("items", new Immutable.List(payload.items))
.set("error", null)
.set("nPages", payload.nPages)
.set("currentPage", payload.currentPage)
);
},
[failureType]: (state, payload) => {
return (
state
.set("isFetching", false)
.set("error", payload.error)
);
},
[INVALIDATE_STORE]: () => {
return new stateRecord();
}
});
}