@furystack/shades 3.7.3 → 4.0.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/dist/component-factory.spec.js +68 -11
- package/dist/component-factory.spec.js.map +1 -1
- package/dist/components/lazy-load.spec.d.ts +2 -0
- package/dist/components/lazy-load.spec.d.ts.map +1 -0
- package/dist/components/lazy-load.spec.js +83 -0
- package/dist/components/lazy-load.spec.js.map +1 -0
- package/dist/components/route-link.d.ts.map +1 -1
- package/dist/components/route-link.js.map +1 -1
- package/dist/components/route-link.spec.d.ts +2 -0
- package/dist/components/route-link.spec.d.ts.map +1 -0
- package/dist/components/route-link.spec.js +38 -0
- package/dist/components/route-link.spec.js.map +1 -0
- package/dist/components/router.d.ts +4 -2
- package/dist/components/router.d.ts.map +1 -1
- package/dist/components/router.js +35 -26
- package/dist/components/router.js.map +1 -1
- package/dist/components/router.spec.d.ts +2 -0
- package/dist/components/router.spec.d.ts.map +1 -0
- package/dist/components/router.spec.js +93 -0
- package/dist/components/router.spec.js.map +1 -0
- package/dist/services/location-service.d.ts +1 -1
- package/dist/services/location-service.d.ts.map +1 -1
- package/dist/services/location-service.js +3 -2
- package/dist/services/location-service.js.map +1 -1
- package/dist/services/location-service.spec.js +29 -3
- package/dist/services/location-service.spec.js.map +1 -1
- package/dist/services/screen-service.d.ts +1 -1
- package/dist/services/screen-service.d.ts.map +1 -1
- package/dist/services/screen-service.js +5 -5
- package/dist/services/screen-service.js.map +1 -1
- package/dist/services/screen-service.spec.d.ts +2 -0
- package/dist/services/screen-service.spec.d.ts.map +1 -0
- package/dist/services/screen-service.spec.js +34 -0
- package/dist/services/screen-service.spec.js.map +1 -0
- package/dist/shade-resources.integration.spec.d.ts +2 -0
- package/dist/shade-resources.integration.spec.d.ts.map +1 -0
- package/dist/shade-resources.integration.spec.js +62 -0
- package/dist/shade-resources.integration.spec.js.map +1 -0
- package/dist/shade.d.ts +2 -0
- package/dist/shade.d.ts.map +1 -1
- package/dist/shade.js +22 -6
- package/dist/shade.js.map +1 -1
- package/dist/shades.integration.spec.d.ts +2 -0
- package/dist/shades.integration.spec.d.ts.map +1 -0
- package/dist/shades.integration.spec.js +123 -0
- package/dist/shades.integration.spec.js.map +1 -0
- package/package.json +8 -5
- package/src/component-factory.spec.tsx +97 -14
- package/src/components/lazy-load.spec.tsx +117 -0
- package/src/components/route-link.spec.tsx +50 -0
- package/src/components/route-link.tsx +2 -1
- package/src/components/router.spec.tsx +130 -0
- package/src/components/router.tsx +38 -29
- package/src/services/location-service.spec.ts +37 -3
- package/src/services/location-service.tsx +3 -2
- package/src/services/screen-service.spec.ts +39 -0
- package/src/services/screen-service.ts +1 -1
- package/src/shade-resources.integration.spec.tsx +94 -0
- package/src/shade.ts +29 -9
- package/src/shades.integration.spec.tsx +156 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,4CAA6C;AAC7C,yBAAoC;AACpC,iCAA6B;AAE7B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,
|
|
1
|
+
{"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":";;AAAA,+BAA+C;AAE/C,MAAM,CAAC,WAAW,GAAG,kBAAW,CAAA;AAChC,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAA;AAEvC,8CAA4C;AAC5C,4CAA6C;AAC7C,yBAAoC;AACpC,iCAA6B;AAE7B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAA;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,QAAQ,GAAG,IAAI,aAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAA;IACrE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAA;IAE/C,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAe,CAAC,CAAA;YACxC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,kBAAe,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAe,CAAC,CAAA;YACxC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;YAC/C,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;YACpC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;YACvC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAE3C,iEAAiE;YACjE,+EAA+E;YAC/E,8CAA8C;YAC9C,0DAA0D;YAC1D,8CAA8C;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -6,7 +6,7 @@ export declare type Breakpoint = {
|
|
|
6
6
|
minSize: number;
|
|
7
7
|
maxSize?: number;
|
|
8
8
|
};
|
|
9
|
-
export declare class
|
|
9
|
+
export declare class ScreenService implements Disposable {
|
|
10
10
|
private getOrientation;
|
|
11
11
|
readonly breakpoints: {
|
|
12
12
|
[K in ScreenSize]: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE,oBAAY,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAEnD,oBAAY,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF,qBACa,
|
|
1
|
+
{"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE,oBAAY,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAEnD,oBAAY,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF,qBACa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,cAAc,CAAyF;IAE/G,SAAgB,WAAW,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE;KAAE,CAMtE;IAEM,OAAO;IAId,SAAgB,UAAU,EAAE;QAC1B,OAAO,EAAE;aAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC;SAAE,CAAA;KACzD,CAQA;IAED,OAAO,CAAC,iBAAiB;IAIlB,WAAW,4CAAuE;IAEzF,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,aAAa;;CAWtB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ScreenService = exports.ScreenSizes = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const inject_1 = require("@furystack/inject");
|
|
6
6
|
const utils_1 = require("@furystack/utils");
|
|
7
7
|
exports.ScreenSizes = ['xs', 'sm', 'md', 'lg', 'xl'];
|
|
8
|
-
let
|
|
8
|
+
let ScreenService = class ScreenService {
|
|
9
9
|
constructor() {
|
|
10
10
|
this.getOrientation = () => (window.matchMedia('(orientation:landscape').matches ? 'landscape' : 'portrait');
|
|
11
11
|
this.breakpoints = {
|
|
@@ -44,9 +44,9 @@ let Screen = class Screen {
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
|
-
|
|
47
|
+
ScreenService = (0, tslib_1.__decorate)([
|
|
48
48
|
(0, inject_1.Injectable)({ lifetime: 'singleton' }),
|
|
49
49
|
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
50
|
-
],
|
|
51
|
-
exports.
|
|
50
|
+
], ScreenService);
|
|
51
|
+
exports.ScreenService = ScreenService;
|
|
52
52
|
//# sourceMappingURL=screen-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;AAAA,8CAA8C;AAC9C,4CAA8D;AAEjD,QAAA,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAOlE,IAAa,
|
|
1
|
+
{"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;AAAA,8CAA8C;AAC9C,4CAA8D;AAEjD,QAAA,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAOlE,IAAa,aAAa,GAA1B,MAAa,aAAa;IA4CxB;QA3CQ,mBAAc,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAE/F,gBAAW,GAA+C;YACxE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACnB,CAAA;QAMe,eAAU,GAEtB;YACF,OAAO,EAAE;gBACP,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAC/D;SACF,CAAA;QAMM,gBAAW,GAAG,IAAI,uBAAe,CAA2B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAEjF,qBAAgB,GAAG,GAAG,EAAE;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC,CAAA;QAUC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IApCM,OAAO;QACZ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7D,CAAC;IAcO,iBAAiB,CAAC,IAAgB;QACxC,OAAO,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAQO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAChD,mBAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC;CAMF,CAAA;AAhDY,aAAa;IADzB,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,aAAa,CAgDzB;AAhDY,sCAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-service.spec.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const util_1 = require("util");
|
|
4
|
+
global.TextEncoder = util_1.TextEncoder;
|
|
5
|
+
global.TextDecoder = util_1.TextDecoder;
|
|
6
|
+
const inject_1 = require("@furystack/inject");
|
|
7
|
+
const utils_1 = require("@furystack/utils");
|
|
8
|
+
const screen_service_1 = require("./screen-service");
|
|
9
|
+
const jsdom_1 = require("jsdom");
|
|
10
|
+
describe('ScreenService', () => {
|
|
11
|
+
const oldDoc = document;
|
|
12
|
+
beforeAll(() => {
|
|
13
|
+
globalThis.document = new jsdom_1.JSDOM().window.document;
|
|
14
|
+
window.matchMedia = () => ({ matches: true });
|
|
15
|
+
});
|
|
16
|
+
afterAll(() => {
|
|
17
|
+
globalThis.document = oldDoc;
|
|
18
|
+
});
|
|
19
|
+
beforeEach(() => (document.body.innerHTML = '<div id="root"></div>'));
|
|
20
|
+
afterEach(() => (document.body.innerHTML = ''));
|
|
21
|
+
it('Shuld be constructed', async () => {
|
|
22
|
+
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
23
|
+
const s = i.getInstance(screen_service_1.ScreenService);
|
|
24
|
+
expect(s).toBeInstanceOf(screen_service_1.ScreenService);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
it('Shuld update state on events', async () => {
|
|
28
|
+
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
29
|
+
i.getInstance(screen_service_1.ScreenService);
|
|
30
|
+
/** TODO */
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=screen-service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-service.spec.js","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":";;AAAA,+BAA+C;AAE/C,MAAM,CAAC,WAAW,GAAG,kBAAW,CAAA;AAChC,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAA;AAEvC,8CAA4C;AAC5C,4CAA6C;AAC7C,qDAAgD;AAChD,iCAA6B;AAE7B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAA;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,QAAQ,GAAG,IAAI,aAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAA;QACjD,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAU,CAAA,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAA;IACrE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAA;IAE/C,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,8BAAa,CAAC,CAAA;YACtC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,8BAAa,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,CAAC,CAAC,WAAW,CAAC,8BAAa,CAAC,CAAA;YAC5B,WAAW;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shade-resources.integration.spec.d.ts","sourceRoot":"","sources":["../src/shade-resources.integration.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const inject_1 = require("@furystack/inject");
|
|
4
|
+
const util_1 = require("util");
|
|
5
|
+
global.TextEncoder = util_1.TextEncoder;
|
|
6
|
+
global.TextDecoder = util_1.TextDecoder;
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
const initialize_1 = require("./initialize");
|
|
9
|
+
const shade_1 = require("./shade");
|
|
10
|
+
const shade_component_1 = require("./shade-component");
|
|
11
|
+
const utils_1 = require("@furystack/utils");
|
|
12
|
+
describe('Shade Resources integration tests', () => {
|
|
13
|
+
const oldDoc = document;
|
|
14
|
+
beforeAll(() => {
|
|
15
|
+
globalThis.document = new jsdom_1.JSDOM().window.document;
|
|
16
|
+
});
|
|
17
|
+
afterAll(() => {
|
|
18
|
+
globalThis.document = oldDoc;
|
|
19
|
+
});
|
|
20
|
+
beforeEach(() => (document.body.innerHTML = '<div id="root"></div>'));
|
|
21
|
+
afterEach(() => (document.body.innerHTML = ''));
|
|
22
|
+
it('Should update the component based on a custom observable value change', () => {
|
|
23
|
+
const injector = new inject_1.Injector();
|
|
24
|
+
const rootElement = document.getElementById('root');
|
|
25
|
+
const renderCounter = jest.fn();
|
|
26
|
+
const obs1 = new utils_1.ObservableValue(0);
|
|
27
|
+
const obs2 = new utils_1.ObservableValue('a');
|
|
28
|
+
const ExampleComponent = (0, shade_1.Shade)({
|
|
29
|
+
resources: ({ element }) => [
|
|
30
|
+
obs1.subscribe((val1) => (element.querySelector('#val1').innerHTML = val1.toString()), true),
|
|
31
|
+
obs2.subscribe((val2) => (element.querySelector('#val2').innerHTML = val2.toString()), true),
|
|
32
|
+
],
|
|
33
|
+
render: () => {
|
|
34
|
+
renderCounter();
|
|
35
|
+
return ((0, shade_component_1.createComponent)("div", null,
|
|
36
|
+
(0, shade_component_1.createComponent)("div", { id: "val1" }),
|
|
37
|
+
(0, shade_component_1.createComponent)("div", { id: "val2" })));
|
|
38
|
+
},
|
|
39
|
+
shadowDomName: 'shades-example-resource',
|
|
40
|
+
});
|
|
41
|
+
expect(obs1.getObservers().length).toBe(0);
|
|
42
|
+
expect(obs2.getObservers().length).toBe(0);
|
|
43
|
+
(0, initialize_1.initializeShadeRoot)({
|
|
44
|
+
injector,
|
|
45
|
+
rootElement,
|
|
46
|
+
jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
|
|
47
|
+
});
|
|
48
|
+
expect(document.body.innerHTML).toBe('<div id="root"><shades-example-resource><div><div id="val1">0</div><div id="val2">a</div></div></shades-example-resource></div>');
|
|
49
|
+
expect(obs1.getObservers().length).toBe(1);
|
|
50
|
+
expect(obs2.getObservers().length).toBe(1);
|
|
51
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
52
|
+
obs1.setValue(1);
|
|
53
|
+
expect(document.body.innerHTML).toBe('<div id="root"><shades-example-resource><div><div id="val1">1</div><div id="val2">a</div></div></shades-example-resource></div>');
|
|
54
|
+
obs2.setValue('b');
|
|
55
|
+
expect(document.body.innerHTML).toBe('<div id="root"><shades-example-resource><div><div id="val1">1</div><div id="val2">b</div></div></shades-example-resource></div>');
|
|
56
|
+
document.body.innerHTML = '';
|
|
57
|
+
expect(obs1.getObservers().length).toBe(0);
|
|
58
|
+
expect(obs2.getObservers().length).toBe(0);
|
|
59
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=shade-resources.integration.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shade-resources.integration.spec.js","sourceRoot":"","sources":["../src/shade-resources.integration.spec.tsx"],"names":[],"mappings":"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"}
|
package/dist/shade.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Disposable } from '@furystack/utils';
|
|
1
2
|
import { Injector } from '@furystack/inject';
|
|
2
3
|
import { ChildrenList, RenderOptions } from './models';
|
|
3
4
|
export declare type ShadeOptions<TProps, TState> = {
|
|
@@ -21,6 +22,7 @@ export declare type ShadeOptions<TProps, TState> = {
|
|
|
21
22
|
* Will be executed when the element is detached from the DOM.
|
|
22
23
|
*/
|
|
23
24
|
onDetach?: (options: RenderOptions<TProps, TState>) => void;
|
|
25
|
+
resources?: (options: RenderOptions<TProps, TState>) => Disposable[];
|
|
24
26
|
} & (unknown extends TState ? {} : {
|
|
25
27
|
/**
|
|
26
28
|
* The initial state of the component
|
package/dist/shade.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAkB,aAAa,EAAE,MAAM,UAAU,CAAA;AAEtE,oBAAY,YAAY,CAAC,MAAM,EAAE,MAAM,IAAI;IACzC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IAE/D;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAE/E;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAE3D;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAE3D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,UAAU,EAAE,CAAA;CACrE,GAAG,CAAC,OAAO,SAAS,MAAM,GACvB,EAAE,GACF;IACE;;OAEG;IACH,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAA;CAC5E,CAAC,CAAA;AAEN;;;;;GAKG;AACH,eAAO,MAAM,KAAK,iIA4KjB,CAAA"}
|
package/dist/shade.js
CHANGED
|
@@ -33,19 +33,26 @@ const Shade = (o) => {
|
|
|
33
33
|
this.getRenderOptions = () => {
|
|
34
34
|
const props = this.props.getValue() || {};
|
|
35
35
|
const getState = () => this.state.getValue();
|
|
36
|
-
|
|
36
|
+
const updateState = (stateChanges, skipRender) => {
|
|
37
|
+
const currentState = this.state.getValue();
|
|
38
|
+
const newState = { ...currentState, ...stateChanges };
|
|
39
|
+
if (JSON.stringify(currentState) !== JSON.stringify(newState)) {
|
|
40
|
+
this.state.setValue(newState);
|
|
41
|
+
!skipRender && this.updateComponent();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const returnValue = {
|
|
37
45
|
props,
|
|
38
46
|
getState,
|
|
39
47
|
injector: this.injector,
|
|
40
|
-
updateState
|
|
41
|
-
this.state.setValue({ ...this.state.getValue(), ...newState });
|
|
42
|
-
!skipRender && this.updateComponent();
|
|
43
|
-
},
|
|
48
|
+
updateState,
|
|
44
49
|
children: this.shadeChildren.getValue(),
|
|
45
50
|
element: this,
|
|
46
51
|
};
|
|
52
|
+
return returnValue;
|
|
47
53
|
};
|
|
48
54
|
this.cleanup = undefined;
|
|
55
|
+
this.resources = [];
|
|
49
56
|
this.props = new utils_1.ObservableValue();
|
|
50
57
|
this.state = new utils_1.ObservableValue();
|
|
51
58
|
}
|
|
@@ -59,11 +66,16 @@ const Shade = (o) => {
|
|
|
59
66
|
this.state.dispose();
|
|
60
67
|
this.shadeChildren.dispose();
|
|
61
68
|
this.cleanup && this.cleanup();
|
|
69
|
+
Object.values(this.resources).forEach((s) => s.dispose());
|
|
70
|
+
}
|
|
71
|
+
createResources() {
|
|
72
|
+
var _a;
|
|
73
|
+
this.resources.push(...(((_a = o.resources) === null || _a === void 0 ? void 0 : _a.call(o, this.getRenderOptions())) || []));
|
|
62
74
|
}
|
|
63
75
|
/**
|
|
64
76
|
* Updates the component in the DOM.
|
|
65
77
|
*/
|
|
66
|
-
|
|
78
|
+
updateComponent() {
|
|
67
79
|
const newJsx = this.render(this.getRenderOptions());
|
|
68
80
|
// const selectionState = this.getSelectionState()
|
|
69
81
|
if (this.hasChildNodes()) {
|
|
@@ -82,6 +94,7 @@ const Shade = (o) => {
|
|
|
82
94
|
o.getInitialState &&
|
|
83
95
|
this.state.setValue(o.getInitialState({ props: this.props.getValue(), injector: this.injector }));
|
|
84
96
|
this.updateComponent();
|
|
97
|
+
this.createResources();
|
|
85
98
|
const cleanupResult = o.constructed && o.constructed(this.getRenderOptions());
|
|
86
99
|
if (cleanupResult instanceof Promise) {
|
|
87
100
|
cleanupResult.then((cleanup) => (this.cleanup = cleanup));
|
|
@@ -125,6 +138,9 @@ const Shade = (o) => {
|
|
|
125
138
|
}
|
|
126
139
|
});
|
|
127
140
|
}
|
|
141
|
+
else {
|
|
142
|
+
throw Error(`A custom shade with shadow DOM name '${o.shadowDomName}' has already been registered!`);
|
|
143
|
+
}
|
|
128
144
|
return (props, children) => {
|
|
129
145
|
const el = document.createElement(customElementName, {
|
|
130
146
|
...props,
|
package/dist/shade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shades.integration.spec.d.ts","sourceRoot":"","sources":["../src/shades.integration.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const inject_1 = require("@furystack/inject");
|
|
4
|
+
const util_1 = require("util");
|
|
5
|
+
global.TextEncoder = util_1.TextEncoder;
|
|
6
|
+
global.TextDecoder = util_1.TextDecoder;
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
const initialize_1 = require("./initialize");
|
|
9
|
+
const shade_1 = require("./shade");
|
|
10
|
+
const shade_component_1 = require("./shade-component");
|
|
11
|
+
describe('Shades integration tests', () => {
|
|
12
|
+
const oldDoc = document;
|
|
13
|
+
beforeAll(() => {
|
|
14
|
+
globalThis.document = new jsdom_1.JSDOM().window.document;
|
|
15
|
+
});
|
|
16
|
+
afterAll(() => {
|
|
17
|
+
globalThis.document = oldDoc;
|
|
18
|
+
});
|
|
19
|
+
beforeEach(() => (document.body.innerHTML = '<div id="root"></div>'));
|
|
20
|
+
afterEach(() => (document.body.innerHTML = ''));
|
|
21
|
+
it('Should mount a custom component to a Shade root', () => {
|
|
22
|
+
const injector = new inject_1.Injector();
|
|
23
|
+
const rootElement = document.getElementById('root');
|
|
24
|
+
const ExampleComponent = (0, shade_1.Shade)({ render: () => (0, shade_component_1.createComponent)("div", null, "Hello"), shadowDomName: 'shades-example' });
|
|
25
|
+
(0, initialize_1.initializeShadeRoot)({
|
|
26
|
+
injector,
|
|
27
|
+
rootElement,
|
|
28
|
+
jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
|
|
29
|
+
});
|
|
30
|
+
expect(document.body.innerHTML).toBe('<div id="root"><shades-example><div>Hello</div></shades-example></div>');
|
|
31
|
+
});
|
|
32
|
+
it('Should mount nested Shades components', () => {
|
|
33
|
+
const injector = new inject_1.Injector();
|
|
34
|
+
const rootElement = document.getElementById('root');
|
|
35
|
+
const ExampleComponent = (0, shade_1.Shade)({
|
|
36
|
+
render: ({ children }) => (0, shade_component_1.createComponent)("div", null, children),
|
|
37
|
+
shadowDomName: 'shades-example-2',
|
|
38
|
+
});
|
|
39
|
+
const ExampleSubs = (0, shade_1.Shade)({
|
|
40
|
+
render: ({ props }) => (0, shade_component_1.createComponent)("div", null, props.no),
|
|
41
|
+
shadowDomName: 'shades-example-sub',
|
|
42
|
+
});
|
|
43
|
+
(0, initialize_1.initializeShadeRoot)({
|
|
44
|
+
injector,
|
|
45
|
+
rootElement,
|
|
46
|
+
jsxElement: ((0, shade_component_1.createComponent)(ExampleComponent, null,
|
|
47
|
+
(0, shade_component_1.createComponent)(ExampleSubs, { no: 1 }),
|
|
48
|
+
(0, shade_component_1.createComponent)(ExampleSubs, { no: 2 }),
|
|
49
|
+
(0, shade_component_1.createComponent)(ExampleSubs, { no: 3 }))),
|
|
50
|
+
});
|
|
51
|
+
expect(document.body.innerHTML).toBe('<div id="root"><shades-example-2><div><shades-example-sub><div></div></shades-example-sub><shades-example-sub><div></div></shades-example-sub><shades-example-sub><div></div></shades-example-sub></div></shades-example-2></div>');
|
|
52
|
+
});
|
|
53
|
+
it("Should execute the constructed and constructed's cleanup callback", () => {
|
|
54
|
+
const injector = new inject_1.Injector();
|
|
55
|
+
const rootElement = document.getElementById('root');
|
|
56
|
+
const cleanup = jest.fn();
|
|
57
|
+
const constructed = jest.fn(() => cleanup);
|
|
58
|
+
const ExampleComponent = (0, shade_1.Shade)({
|
|
59
|
+
constructed,
|
|
60
|
+
render: () => (0, shade_component_1.createComponent)("div", null, "Hello"),
|
|
61
|
+
});
|
|
62
|
+
(0, initialize_1.initializeShadeRoot)({
|
|
63
|
+
injector,
|
|
64
|
+
rootElement,
|
|
65
|
+
jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
|
|
66
|
+
});
|
|
67
|
+
expect(constructed).toBeCalled();
|
|
68
|
+
expect(cleanup).not.toBeCalled();
|
|
69
|
+
document.body.innerHTML = '';
|
|
70
|
+
expect(cleanup).toBeCalled();
|
|
71
|
+
});
|
|
72
|
+
it('Should execute the onAttach and onDetach callbacks', () => {
|
|
73
|
+
const injector = new inject_1.Injector();
|
|
74
|
+
const rootElement = document.getElementById('root');
|
|
75
|
+
const onAttach = jest.fn();
|
|
76
|
+
const onDetach = jest.fn();
|
|
77
|
+
const ExampleComponent = (0, shade_1.Shade)({
|
|
78
|
+
onAttach,
|
|
79
|
+
onDetach,
|
|
80
|
+
render: () => (0, shade_component_1.createComponent)("div", null, "Hello"),
|
|
81
|
+
});
|
|
82
|
+
(0, initialize_1.initializeShadeRoot)({
|
|
83
|
+
injector,
|
|
84
|
+
rootElement,
|
|
85
|
+
jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
|
|
86
|
+
});
|
|
87
|
+
expect(onAttach).toBeCalled();
|
|
88
|
+
expect(onDetach).not.toBeCalled();
|
|
89
|
+
document.body.innerHTML = '';
|
|
90
|
+
expect(onDetach).toBeCalled();
|
|
91
|
+
});
|
|
92
|
+
it('Should update state', () => {
|
|
93
|
+
const injector = new inject_1.Injector();
|
|
94
|
+
const rootElement = document.getElementById('root');
|
|
95
|
+
const ExampleComponent = (0, shade_1.Shade)({
|
|
96
|
+
getInitialState: () => ({ count: 0 }),
|
|
97
|
+
render: ({ getState, updateState }) => {
|
|
98
|
+
const { count } = getState();
|
|
99
|
+
return ((0, shade_component_1.createComponent)("div", null,
|
|
100
|
+
"Count is ",
|
|
101
|
+
getState().count.toString(),
|
|
102
|
+
(0, shade_component_1.createComponent)("button", { id: "plus", onclick: () => updateState({ count: count + 1 }) }, "+"),
|
|
103
|
+
(0, shade_component_1.createComponent)("button", { id: "minus", onclick: () => updateState({ count: count - 1 }) }, "-")));
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
(0, initialize_1.initializeShadeRoot)({
|
|
107
|
+
injector,
|
|
108
|
+
rootElement,
|
|
109
|
+
jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
|
|
110
|
+
});
|
|
111
|
+
const plus = () => { var _a; return (_a = document.getElementById('plus')) === null || _a === void 0 ? void 0 : _a.click(); };
|
|
112
|
+
const minus = () => { var _a; return (_a = document.getElementById('minus')) === null || _a === void 0 ? void 0 : _a.click(); };
|
|
113
|
+
expect(document.body.innerHTML).toContain('Count is 0');
|
|
114
|
+
plus();
|
|
115
|
+
expect(document.body.innerHTML).toContain('Count is 1');
|
|
116
|
+
plus();
|
|
117
|
+
expect(document.body.innerHTML).toContain('Count is 2');
|
|
118
|
+
minus();
|
|
119
|
+
minus();
|
|
120
|
+
expect(document.body.innerHTML).toContain('Count is 0');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=shades.integration.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shades.integration.spec.js","sourceRoot":"","sources":["../src/shades.integration.spec.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/shades",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.4",
|
|
4
4
|
"description": "Google Authentication Provider for FuryStack",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -28,14 +28,17 @@
|
|
|
28
28
|
"url": "https://github.com/furystack/furystack/issues"
|
|
29
29
|
},
|
|
30
30
|
"homepage": "https://github.com/furystack/furystack",
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"jsdom": "^19.0.0"
|
|
33
|
+
},
|
|
31
34
|
"dependencies": {
|
|
32
|
-
"@furystack/core": "^10.4.
|
|
33
|
-
"@furystack/inject": "^
|
|
34
|
-
"@furystack/utils": "^
|
|
35
|
+
"@furystack/core": "^10.4.5",
|
|
36
|
+
"@furystack/inject": "^5.0.2",
|
|
37
|
+
"@furystack/utils": "^2.0.2",
|
|
35
38
|
"path-to-regexp": "^6.2.0",
|
|
36
39
|
"tslib": "^2.3.1",
|
|
37
40
|
"uuid": "^8.3.2"
|
|
38
41
|
},
|
|
39
42
|
"typings": "./dist/index.d.ts",
|
|
40
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "c06b94b4dc91dd3e37ba682e95e71a969e9454d2"
|
|
41
44
|
}
|
|
@@ -1,22 +1,105 @@
|
|
|
1
1
|
import { createComponent } from './shade-component'
|
|
2
2
|
import './jsx'
|
|
3
|
+
import { Shade } from './shade'
|
|
4
|
+
import { Injector } from '@furystack/inject'
|
|
3
5
|
|
|
4
6
|
describe('Shades Component Factory', () => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
describe('HTML Elements', () => {
|
|
8
|
+
it('Should create a simple component', () => {
|
|
9
|
+
const component = <div>test</div>
|
|
10
|
+
expect(component).toBeInstanceOf(HTMLDivElement)
|
|
11
|
+
expect(component.innerHTML).toBe('test')
|
|
12
|
+
expect(component.outerHTML).toBe('<div>test</div>')
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('Should apply styles', () => {
|
|
16
|
+
const component = <div style={{ color: 'red' }}>a</div>
|
|
17
|
+
expect(component).toBeInstanceOf(HTMLDivElement)
|
|
18
|
+
expect(component.style.color).toBe('red')
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('Should apply data attributes', () => {
|
|
22
|
+
const component = <div data-testid="asd-123">a</div>
|
|
23
|
+
expect(component).toBeInstanceOf(HTMLDivElement)
|
|
24
|
+
expect(component.getAttribute('data-testid')).toBe('asd-123')
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('Should create a nested component', () => {
|
|
28
|
+
const component = (
|
|
29
|
+
<div style={{ display: 'flex' }}>
|
|
30
|
+
<h1>Hi, I'm a header</h1>
|
|
31
|
+
<p>paragraph... {['a', 'b', 'c']}</p>
|
|
32
|
+
<a target="_blank" href="https://google.com">
|
|
33
|
+
link
|
|
34
|
+
</a>
|
|
35
|
+
</div>
|
|
36
|
+
)
|
|
37
|
+
expect(component).toBeInstanceOf(HTMLDivElement)
|
|
38
|
+
expect(component.childElementCount).toBe(3)
|
|
39
|
+
expect(component.innerHTML).toBe(
|
|
40
|
+
`<h1>Hi, I'm a header</h1><p>paragraph... abc</p><a target="_blank" href="https://google.com">link</a>`,
|
|
41
|
+
)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('Should attach listeners', () => {
|
|
45
|
+
const onclick = jest.fn()
|
|
46
|
+
const component = <div onclick={onclick}></div>
|
|
47
|
+
expect(component.onclick).toBe(onclick)
|
|
48
|
+
})
|
|
8
49
|
})
|
|
9
50
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
</
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
51
|
+
describe('Shade components', () => {
|
|
52
|
+
it('Should render a basic component', () => {
|
|
53
|
+
const Example = Shade({ render: () => <div /> })
|
|
54
|
+
|
|
55
|
+
const component = (
|
|
56
|
+
<div>
|
|
57
|
+
<Example />
|
|
58
|
+
</div>
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
const shade = component.firstElementChild as JSX.Element
|
|
62
|
+
expect(shade.props.getValue()).toBe(null)
|
|
63
|
+
expect(shade.state.getValue()).toBe(undefined)
|
|
64
|
+
expect(shade.shadeChildren.getValue()).toStrictEqual([])
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('Should render a component with props', () => {
|
|
68
|
+
const Example = Shade<{ foo: string; injector: Injector }>({ render: ({ props }) => <div>{props.foo}</div> })
|
|
69
|
+
|
|
70
|
+
const component = (
|
|
71
|
+
<div>
|
|
72
|
+
<Example foo="example" injector={new Injector()} />
|
|
73
|
+
</div>
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
const shade = component.firstElementChild as JSX.Element
|
|
77
|
+
|
|
78
|
+
shade.callConstructed()
|
|
79
|
+
|
|
80
|
+
expect(shade.props.getValue().foo).toStrictEqual('example')
|
|
81
|
+
expect(shade.state.getValue()).toBe(undefined)
|
|
82
|
+
expect(shade.shadeChildren.getValue()).toStrictEqual([])
|
|
83
|
+
|
|
84
|
+
expect(shade.innerHTML).toBe('<div>example</div>')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('Should render a component with state', () => {
|
|
88
|
+
const Example = Shade<unknown, { foo: string }>({
|
|
89
|
+
getInitialState: () => ({ foo: 'example' }),
|
|
90
|
+
render: () => <div />,
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
const component = (
|
|
94
|
+
<div>
|
|
95
|
+
<Example injector={new Injector()} />
|
|
96
|
+
</div>
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
const shade = component.firstElementChild as JSX.Element
|
|
100
|
+
shade.callConstructed()
|
|
101
|
+
expect(shade.state.getValue()).toStrictEqual({ foo: 'example' })
|
|
102
|
+
expect(shade.shadeChildren.getValue()).toStrictEqual([])
|
|
103
|
+
})
|
|
21
104
|
})
|
|
22
105
|
})
|