UNPKG

2.55 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _reselect = require("reselect");
8
9var _immutable = require("immutable");
10
11var Immutable = _interopRequireWildcard(_immutable);
12
13function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
14
15/*
16 Use to create a complex list where you need more information about
17 the item. For instance, if you DO need to fetch more data or to
18 manipulate it
19*/
20var createDataReducer = function createDataReducer(_ref) {
21 var key = _ref.key;
22
23 var getItems = function getItems(state) {
24 return state.getIn(["entities", key]);
25 },
26 getItem = (0, _reselect.createSelector)(getItems, function (state, id) {
27 return id;
28 }, function (data, id) {
29 return data.get(id) || Immutable.Map();
30 }),
31 getItemsList = (0, _reselect.createSelector)(getItems, function (data) {
32 return data.map(function (current) {
33 return current.get("Data");
34 }).toList();
35 }),
36 getItemData = (0, _reselect.createSelector)(getItems, function (state, id) {
37 return id;
38 }, function (data, id) {
39 if (typeof data === "undefined") {
40 return Immutable.Map();
41 }
42
43 return data.getIn([id, "Data"]);
44 }),
45 getItemHasError = (0, _reselect.createSelector)(getItem, function (data) {
46 if (typeof data === "undefined") {
47 return false;
48 }
49
50 return data.get("error") === true;
51 }),
52 getIsFetchingItemInfo = (0, _reselect.createSelector)(getItem, function (data) {
53 if (typeof data === "undefined") {
54 return false;
55 }
56
57 return data.get("fetching");
58 }),
59 getItemIsFetched = (0, _reselect.createSelector)(getItem, function (data) {
60 if (typeof data === "undefined") {
61 return false;
62 }
63
64 return data.get("fetched");
65 }),
66 getShouldFetchItemInfo = (0, _reselect.createSelector)(getIsFetchingItemInfo, getItemIsFetched, function (isFetching, isFetched) {
67 return !isFetched && !isFetching;
68 });
69
70 return {
71 getItems: getItems,
72 getItem: getItem,
73 getItemsList: getItemsList,
74 getItemData: getItemData,
75 getItemHasError: getItemHasError,
76 getIsFetchingItemInfo: getIsFetchingItemInfo,
77 getItemIsFetched: getItemIsFetched,
78 getShouldFetchItemInfo: getShouldFetchItemInfo
79 };
80};
81/* eslint-disable max-lines-per-function, */
82
83exports.default = createDataReducer;
\No newline at end of file