1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _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 |
|
9 | var _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 |
|
11 |
|
12 | var _react = require("react");
|
13 |
|
14 | var _react2 = _interopRequireDefault(_react);
|
15 |
|
16 | var _immutable = require("immutable");
|
17 |
|
18 | var Immutable = _interopRequireWildcard(_immutable);
|
19 |
|
20 | var _reactRedux = require("react-redux");
|
21 |
|
22 | var _redux = require("redux");
|
23 |
|
24 | var _selectors = require("./selectors");
|
25 |
|
26 | var _selectors2 = _interopRequireDefault(_selectors);
|
27 |
|
28 | var _LoadingButton = require("./LoadingButton");
|
29 |
|
30 | var _LoadingButton2 = _interopRequireDefault(_LoadingButton);
|
31 |
|
32 | var _Messages = require("x25/Messages");
|
33 |
|
34 | function _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 |
|
36 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
37 |
|
38 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
39 |
|
40 | function _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 |
|
42 | function _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 |
|
44 | var 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 |
|
89 | var 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 |
|
212 | exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LoadPaginator); |
\ | No newline at end of file |