UNPKG

8.09 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
10// /* eslint-disable no-unused-vars */
11
12var _react = require("react");
13
14var _react2 = _interopRequireDefault(_react);
15
16var _immutable = require("immutable");
17
18var Immutable = _interopRequireWildcard(_immutable);
19
20var _reactRedux = require("react-redux");
21
22var _redux = require("redux");
23
24var _selectors = require("./selectors");
25
26var _selectors2 = _interopRequireDefault(_selectors);
27
28var _LoadingButton = require("./LoadingButton");
29
30var _LoadingButton2 = _interopRequireDefault(_LoadingButton);
31
32var _Messages = require("x25/Messages");
33
34function _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; } }
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
39
40function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
41
42function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
43
44var mapStateToProps = function mapStateToProps(state, _ref) {
45 var token = _ref.token,
46 settings = _ref.settings;
47
48 var _selectors$getPaginat = _selectors2.default.getPaginators(state, settings.key),
49 list = _selectors$getPaginat.list,
50 entities = _selectors$getPaginat.entities;
51
52 var currentPage = _selectors2.default.getCurrentView(list, token),
53 isFetching = _selectors2.default.isPageFetching(list, token, currentPage),
54 isFetched = _selectors2.default.isPageFetched(list, token, currentPage),
55 isNextFetching = _selectors2.default.isPageFetching(list, token, currentPage + 1),
56 isNextFetched = _selectors2.default.isPageFetched(list, token, currentPage + 1),
57 resultsUpTo = _selectors2.default.getResultsUpToPage(list, token, entities, currentPage, settings.rowsPerLoad),
58 items = settings.manipulateItems(resultsUpTo),
59 total = _selectors2.default.getCurrentTotalResultsCount(list, token),
60 hasProblems = _selectors2.default.hasPageProblems(list, token, currentPage);
61
62 var shouldLoadNext = !isNextFetched && !isNextFetching;
63
64 return {
65 paginator: Immutable.Map({
66 currentPage: currentPage,
67 hasProblems: hasProblems,
68 isFetched: isFetched,
69 isFetching: isFetching,
70 items: items,
71 shouldLoadNext: shouldLoadNext,
72 total: total
73 })
74 };
75},
76 mapDispatchToProps = function mapDispatchToProps(dispatch, _ref2) {
77 var token = _ref2.token,
78 settings = _ref2.settings;
79 return _extends({}, (0, _redux.bindActionCreators)({
80 resetView: settings.resetView,
81 changeView: settings.changeView
82 }, dispatch), {
83 loadData: function loadData(page) {
84 dispatch(settings.requestPage(page, token));
85 }
86 });
87};
88
89var LoadPaginator = function (_Component) {
90 _inherits(LoadPaginator, _Component);
91
92 function LoadPaginator(props) {
93 _classCallCheck(this, LoadPaginator);
94
95 var _this = _possibleConstructorReturn(this, (LoadPaginator.__proto__ || Object.getPrototypeOf(LoadPaginator)).call(this, props));
96
97 _this.handleLoadMoreClick = function () {
98 var _this$props = _this.props,
99 paginator = _this$props.paginator,
100 token = _this$props.token,
101 changeView = _this$props.changeView,
102 loadData = _this$props.loadData;
103
104
105 var currentPage = paginator.get("currentPage"),
106 hasProblems = paginator.get("hasProblems"),
107 shouldLoadNext = paginator.get("shouldLoadNext");
108
109 if (hasProblems) {
110 loadData(currentPage);
111 } else {
112 changeView({
113 token: token,
114 view: currentPage + 1
115 });
116
117 if (shouldLoadNext) {
118 loadData(currentPage + 1);
119 }
120 }
121 };
122 return _this;
123 }
124
125 _createClass(LoadPaginator, [{
126 key: "UNSAFE_componentWillMount",
127 value: function UNSAFE_componentWillMount() {
128 var _props = this.props,
129 paginator = _props.paginator,
130 loadData = _props.loadData;
131
132
133 var isFetched = paginator.get("isFetched"),
134 isFetching = paginator.get("isFetching"),
135 currentPage = paginator.get("currentPage");
136
137 var shouldFetch = !isFetched && !isFetching;
138
139 if (shouldFetch) {
140 loadData(currentPage);
141 }
142 }
143 }, {
144 key: "UNSAFE_componentWillReceiveProps",
145 value: function UNSAFE_componentWillReceiveProps(nextProps) {
146 var loadData = nextProps.loadData,
147 paginator = nextProps.paginator;
148
149
150 var isFetched = paginator.get("isFetched"),
151 isFetching = paginator.get("isFetching"),
152 currentPage = paginator.get("currentPage");
153
154 var shouldFetch = !isFetched && !isFetching;
155
156 if (shouldFetch) {
157 loadData(currentPage);
158 }
159 }
160 }, {
161 key: "shouldComponentUpdate",
162 value: function shouldComponentUpdate(nextProps) {
163 return this.props.paginator !== nextProps.paginator;
164 }
165 }, {
166 key: "componentWillUnmount",
167 value: function componentWillUnmount() {
168 this.props.resetView(this.props.token);
169 }
170 }, {
171 key: "render",
172 value: function render() {
173 var paginator = this.props.paginator;
174
175
176 var items = paginator.get("items"),
177 hasProblems = paginator.get("hasProblems"),
178 currentPage = paginator.get("currentPage"),
179 isFetching = paginator.get("isFetching"),
180 total = paginator.get("total");
181
182 var isEmpty = items.size === 0,
183 showLoading = total !== items.size;
184
185 if (isEmpty && isFetching) {
186 return _react2.default.createElement(_Messages.LoadingMessage, { message: "Preiau datele..." });
187 }
188
189 if (hasProblems && currentPage === 1) {
190 return _react2.default.createElement(_Messages.LargeErrorMessage, {
191 message: "Nu pot prelua datele",
192 onRetry: this.handleLoadMoreClick
193 });
194 }
195
196 return _react2.default.createElement(
197 _react2.default.Fragment,
198 null,
199 _react2.default.cloneElement(this.props.children, this.props),
200 showLoading ? _react2.default.createElement(_LoadingButton2.default, {
201 hasProblems: hasProblems,
202 isFetching: isFetching,
203 onLoadMoreClick: this.handleLoadMoreClick
204 }) : null
205 );
206 }
207 }]);
208
209 return LoadPaginator;
210}(_react.Component);
211
212exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LoadPaginator);
\No newline at end of file