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.
- package/dist/brew-js-react.js +115 -41
- package/dist/brew-js-react.js.map +1 -1
- package/dist/brew-js-react.min.js +1 -1
- package/dist/brew-js-react.min.js.map +1 -1
- package/hooks.js +1 -1
- package/package.json +4 -9
- package/view.d.ts +31 -0
- package/view.js +277 -225
package/dist/brew-js-react.js
CHANGED
|
@@ -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
|
|
632
|
-
var promise = new Promise(function (
|
|
633
|
-
|
|
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(
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
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, [{
|
|
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 =
|
|
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 &&
|
|
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
|
|