UNPKG

18 kBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) {
2 if(typeof exports === 'object' && typeof module === 'object')
3 module.exports = factory(require("react"), require("react-redux"), require("lodash/lang"), require("./actions.js"), require("./pageUtils.js"), require("./router.js"), require("reselect"), require("./shouldGoBack.js"));
4 else if(typeof define === 'function' && define.amd)
5 define(["react", "react-redux", "lodash/lang", "./actions.js", "./pageUtils.js", "./router.js", "reselect", "./shouldGoBack.js"], factory);
6 else if(typeof exports === 'object')
7 exports["components.js"] = factory(require("react"), require("react-redux"), require("lodash/lang"), require("./actions.js"), require("./pageUtils.js"), require("./router.js"), require("reselect"), require("./shouldGoBack.js"));
8 else
9 root["components.js"] = factory(root["react"], root["react-redux"], root["lodash/lang"], root["./actions.js"], root["./pageUtils.js"], root["./router.js"], root["reselect"], root["./shouldGoBack.js"]);
10})(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_13__, __WEBPACK_EXTERNAL_MODULE_14__, __WEBPACK_EXTERNAL_MODULE_15__, __WEBPACK_EXTERNAL_MODULE_16__, __WEBPACK_EXTERNAL_MODULE_17__, __WEBPACK_EXTERNAL_MODULE_18__) {
11return /******/ (function(modules) { // webpackBootstrap
12/******/ // The module cache
13/******/ var installedModules = {};
14
15/******/ // The require function
16/******/ function __webpack_require__(moduleId) {
17
18/******/ // Check if module is in cache
19/******/ if(installedModules[moduleId])
20/******/ return installedModules[moduleId].exports;
21
22/******/ // Create a new module (and put it into the cache)
23/******/ var module = installedModules[moduleId] = {
24/******/ exports: {},
25/******/ id: moduleId,
26/******/ loaded: false
27/******/ };
28
29/******/ // Execute the module function
30/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
32/******/ // Flag the module as loaded
33/******/ module.loaded = true;
34
35/******/ // Return the exports of the module
36/******/ return module.exports;
37/******/ }
38
39
40/******/ // expose the modules object (__webpack_modules__)
41/******/ __webpack_require__.m = modules;
42
43/******/ // expose the module cache
44/******/ __webpack_require__.c = installedModules;
45
46/******/ // __webpack_public_path__
47/******/ __webpack_require__.p = "";
48
49/******/ // Load entry module and return exports
50/******/ return __webpack_require__(0);
51/******/ })
52/************************************************************************/
53/******/ ([
54/* 0 */
55/***/ function(module, exports, __webpack_require__) {
56
57 'use strict';
58
59 Object.defineProperty(exports, "__esModule", {
60 value: true
61 });
62 exports.UrlSync = exports._UrlSync = exports.Form = exports._Form = exports.BackAnchor = exports.Anchor = exports._BackAnchor = exports._Anchor = undefined;
63
64 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; }; }();
65
66 var _react = __webpack_require__(2);
67
68 var _react2 = _interopRequireDefault(_react);
69
70 var _reactRedux = __webpack_require__(5);
71
72 var _reselect = __webpack_require__(17);
73
74 var _lang = __webpack_require__(13);
75
76 var _actions = __webpack_require__(14);
77
78 var navigationActions = _interopRequireWildcard(_actions);
79
80 var _router = __webpack_require__(16);
81
82 var _pageUtils = __webpack_require__(15);
83
84 var _shouldGoBack = __webpack_require__(18);
85
86 var _shouldGoBack2 = _interopRequireDefault(_shouldGoBack);
87
88 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; } }
89
90 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
91
92 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
93
94 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; }
95
96 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; }
97
98 var T = _react2.default.PropTypes;
99
100 var isNewTabClick = function isNewTabClick(e) {
101 return e.metaKey || e.ctrlKey || e.button === 1 || e.button === 4;
102 };
103
104 // ****** Anchor
105
106 var _Anchor = exports._Anchor = function (_React$Component) {
107 _inherits(_Anchor, _React$Component);
108
109 function _Anchor() {
110 var _Object$getPrototypeO;
111
112 var _temp, _this, _ret;
113
114 _classCallCheck(this, _Anchor);
115
116 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
117 args[_key] = arguments[_key];
118 }
119
120 return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_Anchor)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.handleClick = function (e) {
121 if (isNewTabClick(e)) {
122 return;
123 }
124 e.stopPropagation();
125 e.preventDefault();
126
127 var url = _this.props.href.split('?')[0];
128 var queryParams = (0, _pageUtils.extractQuery)(_this.props.href);
129
130 _this.props.navigateToPage(url, queryParams);
131 }, _temp), _possibleConstructorReturn(_this, _ret);
132 }
133
134 _createClass(_Anchor, [{
135 key: 'render',
136 value: function render() {
137 var _props = this.props;
138 var href = _props.href;
139 var className = _props.className;
140 var style = _props.style;
141 var children = _props.children;
142
143
144 return _react2.default.createElement(
145 'a',
146 {
147 href: href,
148 className: className,
149 style: style,
150 onClick: this.handleClick
151 },
152 children
153 );
154 }
155 }]);
156
157 return _Anchor;
158 }(_react2.default.Component);
159
160 _Anchor.propTypes = {
161 href: T.string,
162 noop: T.bool,
163 className: T.string,
164 style: T.object,
165 navigateToPage: T.func
166 };
167 _Anchor.defaultProps = {
168 href: '#',
169 noop: false,
170 navigateToPage: function navigateToPage() {}
171 };
172 ;
173
174 var _BackAnchor = exports._BackAnchor = function (_React$Component2) {
175 _inherits(_BackAnchor, _React$Component2);
176
177 function _BackAnchor() {
178 var _Object$getPrototypeO2;
179
180 var _temp2, _this2, _ret2;
181
182 _classCallCheck(this, _BackAnchor);
183
184 for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
185 args[_key2] = arguments[_key2];
186 }
187
188 return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO2 = Object.getPrototypeOf(_BackAnchor)).call.apply(_Object$getPrototypeO2, [this].concat(args))), _this2), _this2.handleClick = function (e) {
189 if (isNewTabClick(e)) {
190 return;
191 }
192 e.stopPropagation();
193 e.preventDefault();
194
195 var _this2$props = _this2.props;
196 var urlHistory = _this2$props.urlHistory;
197 var currentIndex = _this2$props.currentIndex;
198 var href = _this2$props.href;
199 var referrer = _this2$props.referrer;
200 var backupHref = _this2$props.backupHref;
201
202
203 var unParsedUrl = href === _BackAnchor.AUTO_ROUTE ? referrer || backupHref : href;
204 var url = unParsedUrl.split('?')[0];
205 var queryParams = (0, _pageUtils.extractQuery)(unParsedUrl);
206
207 if ((0, _shouldGoBack2.default)(urlHistory, currentIndex, url, queryParams)) {
208 history.back();
209 } else {
210 _this2.props.navigateToPage(url, queryParams);
211 }
212 }, _temp2), _possibleConstructorReturn(_this2, _ret2);
213 }
214
215 _createClass(_BackAnchor, [{
216 key: 'render',
217 value: function render() {
218 var _props2 = this.props;
219 var href = _props2.href;
220 var className = _props2.className;
221 var style = _props2.style;
222 var children = _props2.children;
223 var referrer = _props2.referrer;
224 var backupHref = _props2.backupHref;
225
226 var renderHref = href === _BackAnchor.AUTO_ROUTE ? referrer || backupHref : href;
227
228 return _react2.default.createElement(
229 'a',
230 {
231 href: renderHref,
232 className: className,
233 style: style,
234 onClick: this.handleClick
235 },
236 children
237 );
238 }
239 }]);
240
241 return _BackAnchor;
242 }(_react2.default.Component);
243
244 _BackAnchor.propTypes = {
245 href: T.string,
246 backupHref: T.string,
247 noop: T.bool,
248 className: T.string,
249 style: T.object,
250 referrer: T.string,
251 navigateToPage: T.func
252 };
253 _BackAnchor.defaultProps = {
254 href: '#',
255 backupHref: '#',
256 noop: false,
257 referrer: '',
258 navigateToPage: function navigateToPage() {}
259 };
260 _BackAnchor.AUTO_ROUTE = '__backanchor-auto-route';
261 ;
262
263 var anchorSelector = (0, _reselect.createSelector)(function (state) {
264 return state.platform.history;
265 }, function (state) {
266 return state.platform.currentPageIndex;
267 }, function (state) {
268 return state.platform.currentPage.referrer;
269 }, function (urlHistory, currentIndex, referrer) {
270 return { urlHistory: urlHistory, currentIndex: currentIndex, referrer: referrer };
271 });
272
273 var anchorDispatcher = function anchorDispatcher(dispatch) {
274 return {
275 navigateToPage: function navigateToPage(url, queryParams) {
276 return dispatch(navigationActions.navigateToUrl(_router.METHODS.GET, url, { queryParams: queryParams }));
277 }
278 };
279 };
280
281 var Anchor = exports.Anchor = (0, _reactRedux.connect)(null, anchorDispatcher)(_Anchor);
282 var BackAnchor = exports.BackAnchor = (0, _reactRedux.connect)(anchorSelector, anchorDispatcher)(_BackAnchor);
283 BackAnchor.AUTO_ROUTE = _BackAnchor.AUTO_ROUTE;
284
285 // ****** Form
286 var getValues = function getValues(form) {
287 if (!form || form.nodeName.toLowerCase() !== 'form') {
288 return {};
289 }
290
291 return Array.from(form.elements).reduce(function (values, el) {
292 if (el.name) {
293 switch (el.type) {
294 case 'checkbox':
295 {
296 if (!values[el.name]) values[el.name] = [];
297 if (el.value) values[el.name].push(el.value);
298 break;
299 }
300 case 'select-multiple':
301 {
302 values[el.name] = Array.from(el.options).map(function (o) {
303 return o.value;
304 });
305 }
306 case 'radio':
307 {
308 if (el.checked) values[el.name] = el.value;
309 }
310 default:
311 {
312 values[el.name] = el.value;
313 break;
314 }
315 }
316 }
317 return values;
318 }, {});
319 };
320
321 var _Form = exports._Form = function (_React$Component3) {
322 _inherits(_Form, _React$Component3);
323
324 function _Form() {
325 var _Object$getPrototypeO3;
326
327 var _temp3, _this3, _ret3;
328
329 _classCallCheck(this, _Form);
330
331 for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
332 args[_key3] = arguments[_key3];
333 }
334
335 return _ret3 = (_temp3 = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO3 = Object.getPrototypeOf(_Form)).call.apply(_Object$getPrototypeO3, [this].concat(args))), _this3), _this3.handleSubmit = function (e) {
336 e.preventDefault();
337
338 var form = e.target;
339 _this3.props.onSubmit(_this3.props.action, _this3.props.method, getValues(form));
340 }, _temp3), _possibleConstructorReturn(_this3, _ret3);
341 }
342
343 _createClass(_Form, [{
344 key: 'render',
345 value: function render() {
346 var _props3 = this.props;
347 var className = _props3.className;
348 var action = _props3.action;
349 var method = _props3.method;
350 var style = _props3.style;
351 var children = _props3.children;
352
353
354 return _react2.default.createElement(
355 'form',
356 {
357 className: className,
358 action: action,
359 method: method,
360 style: style,
361 onSubmit: this.handleSubmit
362 },
363 children
364 );
365 }
366 }]);
367
368 return _Form;
369 }(_react2.default.Component);
370
371 _Form.propTypes = {
372 action: T.string.isRequired,
373 method: T.oneOf([_router.METHODS.POST, _router.METHODS.PUT, _router.METHODS.DELETE, _router.METHODS.PATCH]),
374 className: T.string,
375 style: T.object,
376 onSubmit: T.func
377 };
378 _Form.defaultProps = {
379 method: _router.METHODS.POST,
380 onSubmit: function onSubmit() {}
381 };
382
383
384 var formDispatcher = function formDispatcher(dispatch) {
385 return {
386 onSubmit: function onSubmit(url, method, bodyParams) {
387 return dispatch(navigationActions.navigateToUrl(method, url, { bodyParams: bodyParams }));
388 }
389 };
390 };
391
392 var Form = exports.Form = (0, _reactRedux.connect)(null, formDispatcher)(_Form);
393
394 // ****** UrlSync
395
396 var _UrlSync = exports._UrlSync = function (_React$Component4) {
397 _inherits(_UrlSync, _React$Component4);
398
399 function _UrlSync() {
400 _classCallCheck(this, _UrlSync);
401
402 return _possibleConstructorReturn(this, Object.getPrototypeOf(_UrlSync).apply(this, arguments));
403 }
404
405 _createClass(_UrlSync, [{
406 key: 'componentDidMount',
407 value: function componentDidMount() {
408 var _this5 = this;
409
410 var handlePopstate = function handlePopstate() {
411 var pathname = self.location.pathname;
412 var currentQuery = (0, _pageUtils.extractQuery)(self.location.search);
413 var currentHash = {}; // TODO: address how hashes are displayed
414 var pageIndex = -1;
415
416 for (var i = _this5.props.history.length - 1; i >= 0; i--) {
417 var hist = _this5.props.history[i];
418 if (hist.url === pathname && (0, _lang.isEqual)(hist.queryParams, currentQuery)) {
419 pageIndex = i;
420 break;
421 }
422 }
423
424 if (pageIndex > -1) {
425 _this5.props.gotoPageIndex(pageIndex);
426 } else {
427 // can't find the url, just navigate
428 _this5.props.navigateToPage(pathname, currentQuery, currentHash);
429 }
430 };
431
432 self.addEventListener('popstate', handlePopstate);
433 self.addEventListener('hashchange', handlePopstate);
434 }
435 }, {
436 key: 'componentWillUpdate',
437 value: function componentWillUpdate(nextProps) {
438 var currentQuery = (0, _pageUtils.extractQuery)(self.location.search);
439 var pageIndex = nextProps.pageIndex;
440 var history = nextProps.history;
441
442 var page = history[pageIndex];
443 var newUrl = page.url;
444 var newQuery = page.queryParams;
445 var newHash = page.hashParams;
446
447 if (self.location.pathname !== newUrl || !(0, _lang.isEqual)(currentQuery, newQuery)) {
448 if (self.history && self.history.pushState) {
449 var newHref = newUrl;
450 if (!(0, _lang.isEmpty)(newQuery)) newHref += (0, _pageUtils.createQuery)(newQuery);
451 self.history.pushState({}, '', newHref);
452 } else {
453 self.location = newUrl;
454 }
455 }
456 }
457 }, {
458 key: 'render',
459 value: function render() {
460 return false;
461 }
462 }]);
463
464 return _UrlSync;
465 }(_react2.default.Component);
466
467 _UrlSync.propTypes = {
468 pageIndex: T.number.isRequired,
469 history: T.array.isRequired,
470 gotoPageIndex: T.func,
471 navigateToPage: T.func
472 };
473 _UrlSync.defaultProps = {
474 gotoPageIndex: function gotoPageIndex() {},
475 navigateToPage: function navigateToPage() {}
476 };
477 ;
478
479 var urlSelector = (0, _reselect.createSelector)(function (state) {
480 return state.platform.currentPageIndex;
481 }, function (state) {
482 return state.platform.history;
483 }, function (pageIndex, history) {
484 return { pageIndex: pageIndex, history: history };
485 });
486
487 var urlDispatcher = function urlDispatcher(dispatch) {
488 return {
489 gotoPageIndex: function gotoPageIndex(index) {
490 return dispatch(navigationActions.gotoPageIndex(index));
491 },
492 navigateToPage: function navigateToPage(url, queryParams, hashParams) {
493 return dispatch(navigationActions.navigateToUrl(_router.METHODS.GET, url, { queryParams: queryParams, hashParams: hashParams }));
494 }
495 };
496 };
497
498 var UrlSync = exports.UrlSync = (0, _reactRedux.connect)(urlSelector, urlDispatcher)(_UrlSync);
499
500/***/ },
501/* 1 */,
502/* 2 */
503/***/ function(module, exports) {
504
505 module.exports = require("react");
506
507/***/ },
508/* 3 */,
509/* 4 */,
510/* 5 */
511/***/ function(module, exports) {
512
513 module.exports = require("react-redux");
514
515/***/ },
516/* 6 */,
517/* 7 */,
518/* 8 */,
519/* 9 */,
520/* 10 */,
521/* 11 */,
522/* 12 */,
523/* 13 */
524/***/ function(module, exports) {
525
526 module.exports = require("lodash/lang");
527
528/***/ },
529/* 14 */
530/***/ function(module, exports) {
531
532 module.exports = __WEBPACK_EXTERNAL_MODULE_14__;
533
534/***/ },
535/* 15 */
536/***/ function(module, exports) {
537
538 module.exports = __WEBPACK_EXTERNAL_MODULE_15__;
539
540/***/ },
541/* 16 */
542/***/ function(module, exports) {
543
544 module.exports = __WEBPACK_EXTERNAL_MODULE_16__;
545
546/***/ },
547/* 17 */
548/***/ function(module, exports) {
549
550 module.exports = require("reselect");
551
552/***/ },
553/* 18 */
554/***/ function(module, exports) {
555
556 module.exports = __WEBPACK_EXTERNAL_MODULE_18__;
557
558/***/ }
559/******/ ])
560});
561;
\No newline at end of file