@servicetitan/react-ioc 17.0.1 → 17.1.0
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/await.d.ts +7 -0
- package/dist/await.d.ts.map +1 -0
- package/dist/await.js +25 -0
- package/dist/await.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/react-ioc.d.ts +1 -0
- package/dist/react-ioc.d.ts.map +1 -1
- package/dist/react-ioc.js +35 -16
- package/dist/react-ioc.js.map +1 -1
- package/dist/store.d.ts +8 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +18 -0
- package/dist/store.js.map +1 -0
- package/package.json +3 -3
- package/src/__tests__/react-ioc.test.tsx +0 -1
- package/src/await.tsx +26 -0
- package/src/index.ts +1 -0
- package/src/react-ioc.tsx +46 -16
- package/src/store.ts +10 -0
package/dist/await.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"await.d.ts","sourceRoot":"","sources":["../src/await.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAyC,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAkBhC,CAAC"}
|
package/dist/await.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Await = void 0;
|
|
13
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
14
|
+
const react_1 = require("react");
|
|
15
|
+
const Await = ({ promises, fallback = (0, jsx_runtime_1.jsx)("h2", { children: "Loading..." }, void 0), children }) => {
|
|
16
|
+
const Lazy = (0, react_1.useMemo)(() => (0, react_1.lazy)(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
yield Promise.all(promises);
|
|
18
|
+
return {
|
|
19
|
+
default: ({ children }) => children,
|
|
20
|
+
};
|
|
21
|
+
})), [promises]);
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)(react_1.Suspense, Object.assign({ fallback: fallback }, { children: (0, jsx_runtime_1.jsx)(Lazy, { children: children }, void 0) }), void 0));
|
|
23
|
+
};
|
|
24
|
+
exports.Await = Await;
|
|
25
|
+
//# sourceMappingURL=await.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"await.js","sourceRoot":"","sources":["../src/await.tsx"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,iCAAkE;AAO3D,MAAM,KAAK,GAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,gEAAmB,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5F,MAAM,IAAI,GAAG,IAAA,eAAO,EAChB,GAAG,EAAE,CACD,IAAA,YAAI,EAAK,GAAS,EAAE;QAChB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAwB;SACtD,CAAC;IACN,CAAC,CAAA,CAAC,EACN,CAAC,QAAQ,CAAC,CACb,CAAC;IAEF,OAAO,CACH,uBAAC,gBAAQ,kBAAC,QAAQ,EAAE,QAAQ,gBACxB,uBAAC,IAAI,cAAE,QAAQ,WAAQ,YAChB,CACd,CAAC;AACN,CAAC,CAAC;AAlBW,QAAA,KAAK,SAkBhB"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.optional = exports.inject = exports.injectable = exports.Container = exports.rootContainer = void 0;
|
|
13
|
+
exports.Store = exports.optional = exports.inject = exports.injectable = exports.Container = exports.rootContainer = void 0;
|
|
14
14
|
__exportStar(require("./react-ioc"), exports);
|
|
15
15
|
var container_context_1 = require("./container-context");
|
|
16
16
|
Object.defineProperty(exports, "rootContainer", { enumerable: true, get: function () { return container_context_1.rootContainer; } });
|
|
@@ -19,4 +19,6 @@ Object.defineProperty(exports, "Container", { enumerable: true, get: function ()
|
|
|
19
19
|
Object.defineProperty(exports, "injectable", { enumerable: true, get: function () { return inversify_1.injectable; } });
|
|
20
20
|
Object.defineProperty(exports, "inject", { enumerable: true, get: function () { return inversify_1.inject; } });
|
|
21
21
|
Object.defineProperty(exports, "optional", { enumerable: true, get: function () { return inversify_1.optional; } });
|
|
22
|
+
var store_1 = require("./store");
|
|
23
|
+
Object.defineProperty(exports, "Store", { enumerable: true, get: function () { return store_1.Store; } });
|
|
22
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,uCAAgF;AAAvE,sGAAA,SAAS,OAAA;AAAc,uGAAA,UAAU,OAAA;AAAE,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,uCAAgF;AAAvE,sGAAA,SAAS,OAAA;AAAc,uGAAA,UAAU,OAAA;AAAE,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAC5D,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
|
package/dist/react-ioc.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ interface ValueProviderConfigEntry<T> {
|
|
|
18
18
|
export interface ProviderInterface {
|
|
19
19
|
singletons?: ProviderConfigEntry<any>[];
|
|
20
20
|
instances?: ProviderConfigEntry<any>[];
|
|
21
|
+
fallback?: JSX.Element;
|
|
21
22
|
}
|
|
22
23
|
export interface ProviderComponentInterface extends ProviderInterface {
|
|
23
24
|
parentContainer: Container;
|
package/dist/react-ioc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-ioc.d.ts","sourceRoot":"","sources":["../src/react-ioc.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIH,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,EAAE,EACL,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"react-ioc.d.ts","sourceRoot":"","sources":["../src/react-ioc.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIH,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,EAAE,EACL,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,WAAW,CAAC;AAIhE,OAAO,kBAAkB,CAAC;AAE1B,oBAAY,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEvF,oBAAY,WAAW,CAAC,CAAC,IAAI,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AACtD,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAEzE;AAED,aAAK,mBAAmB,CAAC,CAAC,IACpB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GACrB,wBAAwB,CAAC,CAAC,CAAC,GAC3B,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAElC,UAAU,wBAAwB,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACnC;AAED,UAAU,wBAAwB,CAAC,CAAC;IAChC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC;CACf;AAoBD,MAAM,WAAW,iBAAiB;IAC9B,UAAU,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACjE,eAAe,EAAE,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAC/B,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACpC,eAAe,EAAE,aAAa,GAAG,SAAS,CAAC;CAC9C;AAED,aAAK,cAAc,CAAC,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEpG,aAAK,gBAAgB,GAAG,CACpB,MAAM,EAAE,iBAAiB,KACxB,CAAC,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAEtE,eAAO,MAAM,OAAO,kBASM,CAAC;AAE3B,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAQ1C,CAAC;AAiHF,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,WACzD,GAAG,OAAO,MAAM,KAAG,IAAI,CAgClD;AAED,aAAK,MAAM,CAAC,CAAC,IAAI;KACZ,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AA0BF,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAEpE;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,cAE5E"}
|
package/dist/react-ioc.js
CHANGED
|
@@ -5,6 +5,8 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const inversify_1 = require("inversify");
|
|
7
7
|
const container_context_1 = require("./container-context");
|
|
8
|
+
const store_1 = require("./store");
|
|
9
|
+
const await_1 = require("./await");
|
|
8
10
|
require("reflect-metadata");
|
|
9
11
|
function symbolToken(key, global = true) {
|
|
10
12
|
return global ? Symbol.for(key) : Symbol(key);
|
|
@@ -30,6 +32,12 @@ class ProviderComponent extends react_1.Component {
|
|
|
30
32
|
writable: true,
|
|
31
33
|
value: void 0
|
|
32
34
|
});
|
|
35
|
+
Object.defineProperty(this, "promises", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: []
|
|
40
|
+
});
|
|
33
41
|
Object.defineProperty(this, "bind", {
|
|
34
42
|
enumerable: true,
|
|
35
43
|
configurable: true,
|
|
@@ -50,33 +58,44 @@ class ProviderComponent extends react_1.Component {
|
|
|
50
58
|
configurable: true,
|
|
51
59
|
writable: true,
|
|
52
60
|
value: (entry) => {
|
|
53
|
-
if (
|
|
61
|
+
if (isValueProviderConfigEntry(entry)) {
|
|
54
62
|
return this.container.unbind(entry.provide);
|
|
55
63
|
}
|
|
56
|
-
|
|
64
|
+
const identifier = isClassProviderConfigEntry(entry) ? entry.provide : entry;
|
|
65
|
+
const instance = this.container.get(identifier);
|
|
66
|
+
if (instance instanceof store_1.Store && instance.dispose) {
|
|
67
|
+
instance.dispose();
|
|
68
|
+
}
|
|
69
|
+
return this.container.unbind(identifier);
|
|
57
70
|
}
|
|
58
71
|
});
|
|
72
|
+
const { parentContainer, singletons = [], instances = [] } = props;
|
|
59
73
|
this.container = new inversify_1.Container();
|
|
60
|
-
this.container.parent =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
74
|
+
this.container.parent = parentContainer;
|
|
75
|
+
singletons.map(this.bind).forEach(binding => {
|
|
76
|
+
binding.inSingletonScope();
|
|
77
|
+
});
|
|
78
|
+
instances.forEach(this.bind);
|
|
79
|
+
for (const entry of [...singletons, ...instances]) {
|
|
80
|
+
if (isValueProviderConfigEntry(entry)) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const identifier = isClassProviderConfigEntry(entry) ? entry.provide : entry;
|
|
84
|
+
const instance = this.container.get(identifier);
|
|
85
|
+
if (instance instanceof store_1.Store && instance.initialize) {
|
|
86
|
+
this.promises.push(instance.initialize());
|
|
87
|
+
}
|
|
68
88
|
}
|
|
69
89
|
}
|
|
70
90
|
componentWillUnmount() {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (this.props.instances) {
|
|
75
|
-
this.props.instances.forEach(this.unbind);
|
|
91
|
+
const { singletons = [], instances = [] } = this.props;
|
|
92
|
+
for (const entry of [...singletons, ...instances]) {
|
|
93
|
+
this.unbind(entry);
|
|
76
94
|
}
|
|
77
95
|
}
|
|
78
96
|
render() {
|
|
79
|
-
|
|
97
|
+
const { fallback, children } = this.props;
|
|
98
|
+
return ((0, jsx_runtime_1.jsx)(container_context_1.ContainerContext.Provider, Object.assign({ value: this.container }, { children: this.promises.length ? ((0, jsx_runtime_1.jsx)(await_1.Await, Object.assign({ promises: this.promises, fallback: fallback }, { children: children }), void 0)) : (children) }), void 0));
|
|
80
99
|
}
|
|
81
100
|
}
|
|
82
101
|
const INJECTION = Symbol.for('INJECTION');
|
package/dist/react-ioc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-ioc.js","sourceRoot":"","sources":["../src/react-ioc.tsx"],"names":[],"mappings":";;;;AAAA,iCASe;AACf,yCAAgE;AAChE,2DAAuD;AACvD,4BAA0B;AAK1B,SAAgB,WAAW,CAAI,GAAW,EAAE,MAAM,GAAG,IAAI;IACrD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAFD,kCAEC;AAiBD,SAAS,0BAA0B,CAC/B,KAA6B;IAE7B,OAAO,CACH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAC1D,CAAC;AACN,CAAC;AAED,SAAS,0BAA0B,CAC/B,KAA6B;IAE7B,OAAO,CACH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAC1D,CAAC;AACN,CAAC;
|
|
1
|
+
{"version":3,"file":"react-ioc.js","sourceRoot":"","sources":["../src/react-ioc.tsx"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAE1B,8BACsB,KAAK;CAAG;AAE9B,MAAM,WAAW,KAAK;IAClB,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,IAAI,CAAC;CACpB"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Store = void 0;
|
|
10
|
+
const inversify_1 = require("inversify");
|
|
11
|
+
require("reflect-metadata");
|
|
12
|
+
let Store = class Store {
|
|
13
|
+
};
|
|
14
|
+
Store = __decorate([
|
|
15
|
+
(0, inversify_1.injectable)()
|
|
16
|
+
], Store);
|
|
17
|
+
exports.Store = Store;
|
|
18
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAAuC;AACvC,4BAA0B;AAG1B,IAAsB,KAAK,GAA3B,MAAsB,KAAK;CAAG,CAAA;AAAR,KAAK;IAD1B,IAAA,sBAAU,GAAE;GACS,KAAK,CAAG;AAAR,sBAAK"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/react-ioc",
|
|
3
|
-
"version": "17.0
|
|
3
|
+
"version": "17.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"homepage": "https://docs.st.dev/docs/frontend/react-ioc",
|
|
6
6
|
"repository": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"reflect-metadata": "~0.1.13"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@types/react": "~17.0.
|
|
22
|
+
"@types/react": "~17.0.26",
|
|
23
23
|
"react": "~17.0.2"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"cli": {
|
|
32
32
|
"webpack": false
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "212b3ade787b7bc0fb6aaacb60ca422bc7bbbd70"
|
|
35
35
|
}
|
|
@@ -96,7 +96,6 @@ describe('[IOC tests]', () => {
|
|
|
96
96
|
{ provide: ANOTHER_STORE_TOKEN, useClass: AnotherStore },
|
|
97
97
|
{ provide: PLAIN_OBJECT_TOKEN, useValue: { success: true } },
|
|
98
98
|
]}
|
|
99
|
-
instances={[Object]}
|
|
100
99
|
>
|
|
101
100
|
<SampleConsumer setContainer={setContainer} />
|
|
102
101
|
</Provider>
|
package/src/await.tsx
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FC, lazy, ReactElement, Suspense, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface AwaitProps {
|
|
4
|
+
promises: Promise<void>[];
|
|
5
|
+
fallback?: JSX.Element;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const Await: FC<AwaitProps> = ({ promises, fallback = <h2>Loading...</h2>, children }) => {
|
|
9
|
+
const Lazy = useMemo(
|
|
10
|
+
() =>
|
|
11
|
+
lazy<FC>(async () => {
|
|
12
|
+
await Promise.all(promises);
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
default: ({ children }) => children as ReactElement,
|
|
16
|
+
};
|
|
17
|
+
}),
|
|
18
|
+
[promises]
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<Suspense fallback={fallback}>
|
|
23
|
+
<Lazy>{children}</Lazy>
|
|
24
|
+
</Suspense>
|
|
25
|
+
);
|
|
26
|
+
};
|
package/src/index.ts
CHANGED
package/src/react-ioc.tsx
CHANGED
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
} from 'react';
|
|
11
11
|
import { Container, interfaces, METADATA_KEY } from 'inversify';
|
|
12
12
|
import { ContainerContext } from './container-context';
|
|
13
|
+
import { Store } from './store';
|
|
14
|
+
import { Await } from './await';
|
|
13
15
|
import 'reflect-metadata';
|
|
14
16
|
|
|
15
17
|
export type Token<T> = SymbolToken<T> | interfaces.Newable<T> | interfaces.Abstract<T>;
|
|
@@ -55,6 +57,7 @@ function isValueProviderConfigEntry<T>(
|
|
|
55
57
|
export interface ProviderInterface {
|
|
56
58
|
singletons?: ProviderConfigEntry<any>[];
|
|
57
59
|
instances?: ProviderConfigEntry<any>[];
|
|
60
|
+
fallback?: JSX.Element;
|
|
58
61
|
}
|
|
59
62
|
|
|
60
63
|
export interface ProviderComponentInterface extends ProviderInterface {
|
|
@@ -96,26 +99,39 @@ export const Provider: FC<ProviderInterface> = props => (
|
|
|
96
99
|
class ProviderComponent extends Component<ProviderComponentInterface> {
|
|
97
100
|
private container: Container;
|
|
98
101
|
|
|
102
|
+
private promises: Promise<void>[] = [];
|
|
103
|
+
|
|
99
104
|
constructor(props: ProviderComponentInterface) {
|
|
100
105
|
super(props);
|
|
106
|
+
|
|
107
|
+
const { parentContainer, singletons = [], instances = [] } = props;
|
|
108
|
+
|
|
101
109
|
this.container = new Container();
|
|
102
|
-
this.container.parent =
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
this.container.parent = parentContainer;
|
|
111
|
+
|
|
112
|
+
singletons.map(this.bind).forEach(binding => {
|
|
113
|
+
binding.inSingletonScope();
|
|
114
|
+
});
|
|
115
|
+
instances.forEach(this.bind);
|
|
116
|
+
|
|
117
|
+
for (const entry of [...singletons, ...instances]) {
|
|
118
|
+
if (isValueProviderConfigEntry(entry)) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const identifier = isClassProviderConfigEntry(entry) ? entry.provide : entry;
|
|
123
|
+
const instance = this.container.get(identifier);
|
|
124
|
+
if (instance instanceof Store && instance.initialize) {
|
|
125
|
+
this.promises.push(instance.initialize());
|
|
126
|
+
}
|
|
110
127
|
}
|
|
111
128
|
}
|
|
112
129
|
|
|
113
130
|
componentWillUnmount() {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
this.props.instances.forEach(this.unbind);
|
|
131
|
+
const { singletons = [], instances = [] } = this.props;
|
|
132
|
+
|
|
133
|
+
for (const entry of [...singletons, ...instances]) {
|
|
134
|
+
this.unbind(entry);
|
|
119
135
|
}
|
|
120
136
|
}
|
|
121
137
|
|
|
@@ -133,17 +149,31 @@ class ProviderComponent extends Component<ProviderComponentInterface> {
|
|
|
133
149
|
};
|
|
134
150
|
|
|
135
151
|
unbind = (entry: ProviderConfigEntry<any>): void => {
|
|
136
|
-
if (
|
|
152
|
+
if (isValueProviderConfigEntry(entry)) {
|
|
137
153
|
return this.container.unbind(entry.provide);
|
|
138
154
|
}
|
|
139
155
|
|
|
140
|
-
|
|
156
|
+
const identifier = isClassProviderConfigEntry(entry) ? entry.provide : entry;
|
|
157
|
+
const instance = this.container.get(identifier);
|
|
158
|
+
if (instance instanceof Store && instance.dispose) {
|
|
159
|
+
instance.dispose();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return this.container.unbind(identifier);
|
|
141
163
|
};
|
|
142
164
|
|
|
143
165
|
render() {
|
|
166
|
+
const { fallback, children } = this.props;
|
|
167
|
+
|
|
144
168
|
return (
|
|
145
169
|
<ContainerContext.Provider value={this.container}>
|
|
146
|
-
{this.
|
|
170
|
+
{this.promises.length ? (
|
|
171
|
+
<Await promises={this.promises} fallback={fallback}>
|
|
172
|
+
{children}
|
|
173
|
+
</Await>
|
|
174
|
+
) : (
|
|
175
|
+
children
|
|
176
|
+
)}
|
|
147
177
|
</ContainerContext.Provider>
|
|
148
178
|
);
|
|
149
179
|
}
|