brew-js-react 0.7.2 → 0.7.4
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/dialog.d.ts +8 -3
- package/dialog.js +8 -4
- package/dist/brew-js-react.js +42 -36
- package/dist/brew-js-react.js.map +1 -1
- package/dist/brew-js-react.min.js +2 -2
- package/dist/brew-js-react.min.js.map +1 -1
- package/hooks.d.ts +1 -1
- package/package.json +1 -1
- package/view.d.ts +2 -2
- package/view.js +33 -30
package/dialog.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ErrorHandler } from "zeta-dom-react";
|
|
2
2
|
|
|
3
|
+
type VFC<P = {}> = (props: P) => ReturnType<React.FC>;
|
|
3
4
|
type PartialRequired<T, K extends keyof T> = Omit<T, K> & { [P in K]-?: T[P] }
|
|
4
5
|
type VoidOrOptional<T> = [Exclude<T, undefined | void>] extends [never] ? void : Exclude<T, undefined | void>;
|
|
5
6
|
|
|
@@ -137,12 +138,12 @@ export interface DialogOptions<T, V = T | undefined> {
|
|
|
137
138
|
/**
|
|
138
139
|
* A callback that render dialog contents.
|
|
139
140
|
*/
|
|
140
|
-
onRender:
|
|
141
|
+
onRender: VFC<DialogContext<V> & this>;
|
|
141
142
|
/**
|
|
142
143
|
* Specifies wrapper component that envelops content from {@link DialogOptions.onRender},
|
|
143
144
|
* which is useful for reusable layout for dialogs.
|
|
144
145
|
*/
|
|
145
|
-
wrapper?: React.FC<DialogContext<V> & this & React.
|
|
146
|
+
wrapper?: React.FC<DialogContext<V> & this & { children: React.ReactElement }>;
|
|
146
147
|
/**
|
|
147
148
|
* An optional signal object to dismiss the dialog.
|
|
148
149
|
*
|
|
@@ -156,6 +157,10 @@ export interface DialogOptions<T, V = T | undefined> {
|
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
export interface DialogContext<V> {
|
|
160
|
+
/**
|
|
161
|
+
* Gets the root element of the dialog.
|
|
162
|
+
*/
|
|
163
|
+
dialogElement: HTMLElement;
|
|
159
164
|
/**
|
|
160
165
|
* Gets an {@link ErrorHandler} object that catches errors emitted from rendered content.
|
|
161
166
|
*/
|
|
@@ -230,4 +235,4 @@ export function openDialog<P extends DialogOptions<any, any>>(props: P): Promise
|
|
|
230
235
|
/**
|
|
231
236
|
* Renders a dialog declaratively.
|
|
232
237
|
*/
|
|
233
|
-
export function Dialog<T, V = T>(props: DialogProps<T, V>):
|
|
238
|
+
export function Dialog<T, V = T>(props: DialogProps<T, V>): React.ReactElement;
|
package/dialog.js
CHANGED
|
@@ -30,9 +30,10 @@ function createDialogElement(props, unmountAfterUse) {
|
|
|
30
30
|
(props.onOpen || noop)(root);
|
|
31
31
|
},
|
|
32
32
|
flyouthide: function () {
|
|
33
|
-
removeNode(root);
|
|
34
33
|
(props.onClose || noop)(root);
|
|
35
|
-
(unmountAfterUse
|
|
34
|
+
resolve(unmountAfterUse()).then(function () {
|
|
35
|
+
removeNode(root);
|
|
36
|
+
});
|
|
36
37
|
}
|
|
37
38
|
});
|
|
38
39
|
root.setAttribute('loading-class', '');
|
|
@@ -83,6 +84,7 @@ export function createDialog(props) {
|
|
|
83
84
|
return runAsync(dom.activeElement, props.onCommit.bind(this, value)).then(closeDialog);
|
|
84
85
|
} : closeDialog;
|
|
85
86
|
var dialogProps = extend({}, props, {
|
|
87
|
+
dialogElement: root,
|
|
86
88
|
errorHandler: scope.errorHandler,
|
|
87
89
|
closeDialog: commitDialog,
|
|
88
90
|
commitDialog: commitDialog,
|
|
@@ -118,7 +120,9 @@ export function createDialog(props) {
|
|
|
118
120
|
*/
|
|
119
121
|
export function createDialogQueue(props) {
|
|
120
122
|
var mode = props && props.mode;
|
|
121
|
-
var root = mode && createDialogElement(props)
|
|
123
|
+
var root = mode && createDialogElement(props, function () {
|
|
124
|
+
return multiple && closeFlyout(root.children);
|
|
125
|
+
});
|
|
122
126
|
var multiple = mode === 'multiple';
|
|
123
127
|
var childProps;
|
|
124
128
|
var queue = [];
|
|
@@ -187,7 +191,7 @@ export function createDialogQueue(props) {
|
|
|
187
191
|
export function Dialog(props) {
|
|
188
192
|
const _props = extend(useState({})[0], props);
|
|
189
193
|
const element = useState(function () {
|
|
190
|
-
return createDialogElement(_props);
|
|
194
|
+
return createDialogElement(_props, noop);
|
|
191
195
|
})[0];
|
|
192
196
|
useEffect(function () {
|
|
193
197
|
var opened = isFlyoutOpen(element);
|
package/dist/brew-js-react.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! brew-js-react v0.7.
|
|
1
|
+
/*! brew-js-react v0.7.4 | (c) misonou | https://misonou.github.io */
|
|
2
2
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
3
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
4
|
module.exports = factory(require("zeta-dom"), require("brew-js"), require("react"), require("react-dom"), require("zeta-dom-react"), require("waterpipe"), require("jquery"));
|
|
@@ -248,6 +248,7 @@ var _lib$util = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_
|
|
|
248
248
|
fill = _lib$util.fill,
|
|
249
249
|
freeze = _lib$util.freeze,
|
|
250
250
|
grep = _lib$util.grep,
|
|
251
|
+
util_hasOwnProperty = _lib$util.hasOwnProperty,
|
|
251
252
|
isArray = _lib$util.isArray,
|
|
252
253
|
isFunction = _lib$util.isFunction,
|
|
253
254
|
isPlainObject = _lib$util.isPlainObject,
|
|
@@ -398,9 +399,10 @@ function createDialogElement(props, unmountAfterUse) {
|
|
|
398
399
|
(props.onOpen || noop)(root);
|
|
399
400
|
},
|
|
400
401
|
flyouthide: function flyouthide() {
|
|
401
|
-
removeNode(root);
|
|
402
402
|
(props.onClose || noop)(root);
|
|
403
|
-
(unmountAfterUse
|
|
403
|
+
resolve(unmountAfterUse()).then(function () {
|
|
404
|
+
removeNode(root);
|
|
405
|
+
});
|
|
404
406
|
}
|
|
405
407
|
});
|
|
406
408
|
root.setAttribute('loading-class', '');
|
|
@@ -448,6 +450,7 @@ function createDialog(props) {
|
|
|
448
450
|
return runAsync(zeta_dom_dom.activeElement, props.onCommit.bind(this, value)).then(closeDialog);
|
|
449
451
|
} : closeDialog;
|
|
450
452
|
var dialogProps = extend({}, props, {
|
|
453
|
+
dialogElement: root,
|
|
451
454
|
errorHandler: scope.errorHandler,
|
|
452
455
|
closeDialog: commitDialog,
|
|
453
456
|
commitDialog: commitDialog,
|
|
@@ -484,7 +487,9 @@ function createDialog(props) {
|
|
|
484
487
|
*/
|
|
485
488
|
function createDialogQueue(props) {
|
|
486
489
|
var mode = props && props.mode;
|
|
487
|
-
var root = mode && createDialogElement(props)
|
|
490
|
+
var root = mode && createDialogElement(props, function () {
|
|
491
|
+
return multiple && closeFlyout(root.children);
|
|
492
|
+
});
|
|
488
493
|
var multiple = mode === 'multiple';
|
|
489
494
|
var childProps;
|
|
490
495
|
var queue = [];
|
|
@@ -554,7 +559,7 @@ function createDialogQueue(props) {
|
|
|
554
559
|
function Dialog(props) {
|
|
555
560
|
var _props = extend(useState({})[0], props);
|
|
556
561
|
var element = useState(function () {
|
|
557
|
-
return createDialogElement(_props);
|
|
562
|
+
return createDialogElement(_props, noop);
|
|
558
563
|
})[0];
|
|
559
564
|
useEffect(function () {
|
|
560
565
|
var opened = isFlyoutOpen(element);
|
|
@@ -625,10 +630,7 @@ onAppInit(function () {
|
|
|
625
630
|
view_event = e;
|
|
626
631
|
(function updateViewRecursive(next) {
|
|
627
632
|
each(next.children, function (i, v) {
|
|
628
|
-
e.waitFor(
|
|
629
|
-
v.onRender = resolve;
|
|
630
|
-
v.forceUpdate();
|
|
631
|
-
}).then(function () {
|
|
633
|
+
e.waitFor(v.renderAsync().then(function () {
|
|
632
634
|
updateViewRecursive(v);
|
|
633
635
|
}));
|
|
634
636
|
});
|
|
@@ -756,6 +758,7 @@ definePrototype(ErrorBoundary, Component, {
|
|
|
756
758
|
function ViewContainer() {
|
|
757
759
|
Component.apply(this, arguments);
|
|
758
760
|
this.views = [];
|
|
761
|
+
this.dispose = new Set();
|
|
759
762
|
}
|
|
760
763
|
ViewContainer.contextType = StateContext;
|
|
761
764
|
definePrototype(ViewContainer, Component, {
|
|
@@ -772,6 +775,7 @@ definePrototype(ViewContainer, Component, {
|
|
|
772
775
|
setImmediate(function () {
|
|
773
776
|
if (self.currentContext && !self.currentContext.active) {
|
|
774
777
|
self.unmountView();
|
|
778
|
+
combineFn(self.dispose)();
|
|
775
779
|
}
|
|
776
780
|
});
|
|
777
781
|
};
|
|
@@ -786,13 +790,22 @@ definePrototype(ViewContainer, Component, {
|
|
|
786
790
|
this.currentContext = context;
|
|
787
791
|
(this.props.rootProps.ref || {}).current = context;
|
|
788
792
|
},
|
|
793
|
+
renderAsync: function renderAsync() {
|
|
794
|
+
var self = this;
|
|
795
|
+
return new Promise(function (resolve) {
|
|
796
|
+
self.dispose.add(resolve);
|
|
797
|
+
self.forceUpdate(function () {
|
|
798
|
+
self.dispose["delete"](resolve);
|
|
799
|
+
resolve();
|
|
800
|
+
});
|
|
801
|
+
});
|
|
802
|
+
},
|
|
789
803
|
render: function render() {
|
|
790
804
|
/** @type {any} */
|
|
791
805
|
var self = this;
|
|
792
806
|
if (self.context.active) {
|
|
793
807
|
self.updateView();
|
|
794
808
|
}
|
|
795
|
-
self.onRender();
|
|
796
809
|
return self.views;
|
|
797
810
|
},
|
|
798
811
|
updateView: function updateView() {
|
|
@@ -843,10 +856,10 @@ definePrototype(ViewContainer, Component, {
|
|
|
843
856
|
}, true);
|
|
844
857
|
return animateOut(element, 'show').then(function () {
|
|
845
858
|
self.views[0] = null;
|
|
846
|
-
self.
|
|
859
|
+
return self.renderAsync();
|
|
847
860
|
});
|
|
848
861
|
});
|
|
849
|
-
always(promise
|
|
862
|
+
always(promise || delay(), function () {
|
|
850
863
|
app_app.emit('pageenter', element, {
|
|
851
864
|
pathname: context.page.path,
|
|
852
865
|
view: V
|
|
@@ -884,40 +897,33 @@ definePrototype(ViewContainer, Component, {
|
|
|
884
897
|
}) || props.defaultView;
|
|
885
898
|
}
|
|
886
899
|
});
|
|
887
|
-
fill(ViewContainer.prototype, 'abort
|
|
900
|
+
fill(ViewContainer.prototype, 'abort setActive setPage unmountView', noop);
|
|
888
901
|
function normalizePart(value, part) {
|
|
889
902
|
return isUndefinedOrNull(value) || value === '' || value === part ? '' : value[0] === part ? value : part + value;
|
|
890
903
|
}
|
|
891
904
|
function getCurrentParams(view, params) {
|
|
892
905
|
var state = routeMap.get(view);
|
|
893
906
|
if (!state.maxParams) {
|
|
894
|
-
var
|
|
907
|
+
var maxParams = {};
|
|
895
908
|
var matched = map(app_app.routes, function (v) {
|
|
896
909
|
var route = app_app.parseRoute(v);
|
|
897
|
-
var
|
|
898
|
-
|
|
899
|
-
|
|
910
|
+
var routeParams = route.params;
|
|
911
|
+
var params = {};
|
|
912
|
+
var invalid = single(routeParams, function (v, i) {
|
|
913
|
+
if (usedParams[i] && !state.matchers[i]) {
|
|
914
|
+
return v < route.minLength;
|
|
915
|
+
}
|
|
916
|
+
params[i] = true;
|
|
917
|
+
}) || single(state.matchers, function (v, i) {
|
|
918
|
+
return i !== 'remainingSegments' && !(isFunction(v) ? util_hasOwnProperty(routeParams, i) : v ? route.match(i, v) : routeParams[i] >= route.minLength);
|
|
900
919
|
});
|
|
901
|
-
return
|
|
920
|
+
return invalid ? null : extend(maxParams, params) && route;
|
|
921
|
+
});
|
|
922
|
+
var last = matched.slice(-1)[0] || {};
|
|
923
|
+
state.maxParams = ['remainingSegments'].concat(util_keys(maxParams));
|
|
924
|
+
state.minParams = map(last.params, function (v, i) {
|
|
925
|
+
return state.params[i] || v >= last.minLength ? null : i;
|
|
902
926
|
});
|
|
903
|
-
if (matched[1]) {
|
|
904
|
-
matched = grep(matched, function (v) {
|
|
905
|
-
return !single(v.params, function (v, i) {
|
|
906
|
-
return usedParams[i] && !matchers[i];
|
|
907
|
-
});
|
|
908
|
-
});
|
|
909
|
-
}
|
|
910
|
-
if (matched[0]) {
|
|
911
|
-
var last = matched.slice(-1)[0];
|
|
912
|
-
state.maxParams = util_keys(extend.apply(0, [{
|
|
913
|
-
remainingSegments: true
|
|
914
|
-
}].concat(matched.map(function (v) {
|
|
915
|
-
return v.params;
|
|
916
|
-
}))));
|
|
917
|
-
state.minParams = map(last.params, function (v, i) {
|
|
918
|
-
return state.params[i] || v >= last.minLength ? null : i;
|
|
919
|
-
});
|
|
920
|
-
}
|
|
921
927
|
}
|
|
922
928
|
return extend(pick(app_app.route, state.minParams), params && pick(params, state.maxParams), state.params);
|
|
923
929
|
}
|