brew-js-react 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -183,6 +183,7 @@ __webpack_require__.d(src_namespaceObject, {
183
183
  "matchView": () => (matchView),
184
184
  "navigateTo": () => (navigateTo),
185
185
  "redirectTo": () => (redirectTo),
186
+ "registerErrorView": () => (registerErrorView),
186
187
  "registerView": () => (registerView),
187
188
  "renderView": () => (renderView),
188
189
  "useAnimateMixin": () => (useAnimateMixin),
@@ -261,6 +262,7 @@ var _lib$util = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_
261
262
  setIntervalSafe = _lib$util.setIntervalSafe,
262
263
  setImmediate = _lib$util.setImmediate,
263
264
  setImmediateOnce = _lib$util.setImmediateOnce,
265
+ _throws = _lib$util["throws"],
264
266
  throwNotFunction = _lib$util.throwNotFunction,
265
267
  errorWithCode = _lib$util.errorWithCode,
266
268
  isErrorWithCode = _lib$util.isErrorWithCode,
@@ -567,8 +569,57 @@ var routeMap = new Map();
567
569
  var usedParams = {};
568
570
  var sortedViews = [];
569
571
  var StateContext = /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createContext(Object.freeze({
572
+ container: root,
570
573
  active: true
571
574
  }));
575
+ var errorView;
576
+
577
+ function ErrorBoundary() {
578
+ external_commonjs_react_commonjs2_react_amd_react_root_React_.Component.apply(this, arguments);
579
+ this.state = {};
580
+ }
581
+
582
+ ErrorBoundary.contextType = StateContext;
583
+ definePrototype(ErrorBoundary, external_commonjs_react_commonjs2_react_amd_react_root_React_.Component, {
584
+ componentDidCatch: function componentDidCatch(error) {
585
+ var self = this;
586
+
587
+ if (errorView && !self.state.error) {
588
+ self.setState({
589
+ error: error
590
+ });
591
+ } else {
592
+ zeta_dom_dom.emit('error', self.context.container, {
593
+ error: error
594
+ }, true);
595
+ }
596
+ },
597
+ render: function render() {
598
+ var self = this;
599
+ var props = {
600
+ view: self.context.view,
601
+ error: self.state.error,
602
+ reset: self.reset.bind(self)
603
+ };
604
+ var onComponentLoaded = self.props.onComponentLoaded;
605
+
606
+ if (props.error) {
607
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(errorView, {
608
+ onComponentLoaded: onComponentLoaded,
609
+ viewProps: props
610
+ });
611
+ }
612
+
613
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(props.view, {
614
+ onComponentLoaded: onComponentLoaded
615
+ });
616
+ },
617
+ reset: function reset() {
618
+ this.setState({
619
+ error: null
620
+ });
621
+ }
622
+ });
572
623
 
573
624
  function ViewContainer() {
574
625
  external_commonjs_react_commonjs2_react_amd_react_root_React_.Component.apply(this, arguments);
@@ -587,11 +638,6 @@ definePrototype(ViewContainer, external_commonjs_react_commonjs2_react_amd_react
587
638
  self.forceUpdate();
588
639
  }));
589
640
  },
590
- componentDidCatch: function componentDidCatch(error) {
591
- zeta_dom_dom.emit('error', this.parentElement || root, {
592
- error: error
593
- }, true);
594
- },
595
641
  render: function render() {
596
642
  /** @type {any} */
597
643
  var self = this;
@@ -628,9 +674,20 @@ definePrototype(ViewContainer, external_commonjs_react_commonjs2_react_amd_react
628
674
  });
629
675
  }
630
676
 
631
- var resolve;
632
- var promise = new Promise(function (resolve_) {
633
- resolve = resolve_;
677
+ var onComponentLoaded;
678
+ var promise = new Promise(function (resolve) {
679
+ onComponentLoaded = resolve;
680
+ });
681
+ var initElement = executeOnce(function (element) {
682
+ self.currentElement = element;
683
+ state.container = element;
684
+ promise.then(function () {
685
+ animateIn(element, 'show');
686
+ app_app.emit('pageenter', element, {
687
+ pathname: app_app.path
688
+ }, true);
689
+ });
690
+ notifyAsync(element, promise);
634
691
  });
635
692
  var state = {
636
693
  view: V
@@ -638,20 +695,11 @@ definePrototype(ViewContainer, external_commonjs_react_commonjs2_react_amd_react
638
695
  var view = /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(StateContext.Provider, {
639
696
  key: routeMap.get(V).id,
640
697
  value: state
641
- }, /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(ViewStateContainer, null, /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(V, {
642
- rootProps: self.props.rootProps,
643
- onComponentLoaded: executeOnce(function (element) {
644
- self.currentElement = element;
645
- self.parentElement = element.parentElement;
646
- setImmediate(function () {
647
- resolve();
648
- animateIn(element, 'show');
649
- app_app.emit('pageenter', element, {
650
- pathname: app_app.path
651
- }, true);
652
- });
653
- })
654
- })));
698
+ }, /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(ViewStateContainer, null, /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement('div', extend({}, self.props.rootProps, {
699
+ ref: initElement
700
+ }), /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(ErrorBoundary, {
701
+ onComponentLoaded: onComponentLoaded
702
+ }))));
655
703
  extend(self, {
656
704
  currentPath: app_app.path,
657
705
  currentView: view,
@@ -659,7 +707,6 @@ definePrototype(ViewContainer, external_commonjs_react_commonjs2_react_amd_react
659
707
  setActive: defineObservableProperty(state, 'active', true, true)
660
708
  });
661
709
  (self.waitFor || noop)(promise);
662
- notifyAsync(self.parentElement || root, promise);
663
710
  }
664
711
 
665
712
  var child = /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(external_commonjs_react_commonjs2_react_amd_react_root_React_.Fragment, null, self.prevView, self.currentView);
@@ -696,7 +743,9 @@ function getCurrentParams(view, includeAll, params) {
696
743
 
697
744
  if (matched[0]) {
698
745
  var last = matched.slice(-1)[0];
699
- state.maxParams = util_keys(extend.apply(0, [{}].concat(matched.map(function (v) {
746
+ state.maxParams = util_keys(extend.apply(0, [{
747
+ remainingSegments: true
748
+ }].concat(matched.map(function (v) {
700
749
  return v.params;
701
750
  }))));
702
751
  state.minParams = map(last.params, function (v, i) {
@@ -720,6 +769,41 @@ function matchViewParams(view, route) {
720
769
  });
721
770
  }
722
771
 
772
+ function createViewComponent(factory) {
773
+ var promise;
774
+ throwNotFunction(factory);
775
+
776
+ if (factory.prototype instanceof external_commonjs_react_commonjs2_react_amd_react_root_React_.Component) {
777
+ factory = external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement.bind(null, factory);
778
+ }
779
+
780
+ return function (props) {
781
+ var viewProps = Object.freeze(props.viewProps || {});
782
+ var children = !promise && factory(viewProps);
783
+
784
+ if (isThenable(children)) {
785
+ promise = children;
786
+ children = null;
787
+ }
788
+
789
+ var state = (0,external_zeta_dom_react_.useAsync)(function () {
790
+ return promise.then(function (s) {
791
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(s["default"], viewProps);
792
+ });
793
+ }, !!promise)[1];
794
+
795
+ if (!promise || !state.loading) {
796
+ props.onComponentLoaded();
797
+
798
+ if (state.error) {
799
+ throw state.error;
800
+ }
801
+ }
802
+
803
+ return children || state.value || /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(external_commonjs_react_commonjs2_react_amd_react_root_React_.Fragment);
804
+ };
805
+ }
806
+
723
807
  function useViewContainerState() {
724
808
  return external_commonjs_react_commonjs2_react_amd_react_root_React_.useContext(StateContext);
725
809
  }
@@ -741,20 +825,7 @@ function matchView(path, views) {
741
825
  }) || undefined;
742
826
  }
743
827
  function registerView(factory, routeParams) {
744
- var Component = function Component(props) {
745
- var state = (0,external_zeta_dom_react_.useAsync)(factory);
746
- var ref = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useRef)();
747
-
748
- if (state[0] || state[1].error) {
749
- (props.onComponentLoaded || noop)(ref.current);
750
- }
751
-
752
- return /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement('div', extend({}, props.rootProps, {
753
- ref: (0,external_zeta_dom_react_.combineRef)(ref, state[1].elementRef),
754
- children: state[0] && /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(state[0]["default"])
755
- }));
756
- };
757
-
828
+ var Component = createViewComponent(factory);
758
829
  routeParams = extend({}, routeParams);
759
830
  each(routeParams, function (i, v) {
760
831
  usedParams[i] = true;
@@ -768,13 +839,16 @@ function registerView(factory, routeParams) {
768
839
  matchCount: util_keys(routeParams).length,
769
840
  matchers: routeParams,
770
841
  params: pick(routeParams, function (v) {
771
- return typeof v === 'string';
842
+ return isUndefinedOrNull(v) || typeof v === 'string';
772
843
  })
773
844
  });
774
845
  sortedViews.push(Component);
775
846
  sortedViews.sort(sortViews);
776
847
  return Component;
777
848
  }
849
+ function registerErrorView(factory) {
850
+ errorView = createViewComponent(factory);
851
+ }
778
852
  function renderView() {
779
853
  var views = makeArray(arguments);
780
854
  var rootProps = isFunction(views[0]) ? {} : views.shift();
@@ -793,7 +867,7 @@ function linkTo(view, params) {
793
867
  return '/';
794
868
  }
795
869
 
796
- var newParams = extend(getCurrentParams(view), getCurrentParams(view, true, params), state.params);
870
+ var newParams = extend(getCurrentParams(view), getCurrentParams(view, true, params || {}), state.params);
797
871
  return app_app.route.getPath(newParams);
798
872
  }
799
873
  function navigateTo(view, params) {
@@ -879,7 +953,7 @@ function useRouteParam(name, defaultValue) {
879
953
  }, [name, defaultValue]);
880
954
  ref.current = value;
881
955
 
882
- if (!value && defaultValue !== undefined) {
956
+ if (defaultValue !== undefined && (!value || name === 'remainingSegments' && value === '/')) {
883
957
  app_app.navigate(route.getPath(extend({}, route, kv(name, defaultValue))), true);
884
958
  }
885
959