diff --git a/coverage/clover.xml b/coverage/clover.xml index 35ed065..b0a1701 100644 --- a/coverage/clover.xml +++ b/coverage/clover.xml @@ -1,12 +1,12 @@ - - + + - - - + + + @@ -24,85 +24,85 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + @@ -131,26 +131,26 @@ - - - - - + + + + + - - - - - + + + + + - - - - - - - - + + + + + + + + @@ -159,17 +159,17 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/coverage/lcov.info b/coverage/lcov.info index e1ab777..7c1ce05 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -4,11 +4,11 @@ FN:24,(anonymous_0) FN:25,(anonymous_1) FNF:2 FNH:2 -FNDA:64,(anonymous_0) -FNDA:64,(anonymous_1) -DA:25,64 -DA:26,64 -DA:27,64 +FNDA:65,(anonymous_0) +FNDA:65,(anonymous_1) +DA:25,65 +DA:26,65 +DA:27,65 LF:3 LH:3 BRF:0 @@ -52,39 +52,39 @@ BRH:8 end_of_record TN: SF:src/ModalController.ts -FN:35,(anonymous_0) -FN:36,(anonymous_1) -FN:40,(anonymous_2) -FN:43,(anonymous_3) -FN:51,(anonymous_4) -FN:60,(anonymous_5) -FN:92,(anonymous_6) -FN:98,(anonymous_7) -FN:125,(anonymous_8) -FN:139,(anonymous_9) -FN:156,(anonymous_10) -FN:157,(anonymous_11) -FN:158,(anonymous_12) -FN:164,(anonymous_13) -FN:165,(anonymous_14) -FN:178,(anonymous_15) -FN:184,(anonymous_16) -FN:185,(anonymous_17) -FN:196,(anonymous_18) -FN:199,(anonymous_19) -FN:211,(anonymous_20) -FN:216,(anonymous_21) -FN:222,(anonymous_22) -FN:227,(anonymous_23) +FN:39,(anonymous_0) +FN:40,(anonymous_1) +FN:44,(anonymous_2) +FN:47,(anonymous_3) +FN:55,(anonymous_4) +FN:64,(anonymous_5) +FN:96,(anonymous_6) +FN:102,(anonymous_7) +FN:129,(anonymous_8) +FN:143,(anonymous_9) +FN:160,(anonymous_10) +FN:161,(anonymous_11) +FN:162,(anonymous_12) +FN:168,(anonymous_13) +FN:169,(anonymous_14) +FN:182,(anonymous_15) +FN:188,(anonymous_16) +FN:189,(anonymous_17) +FN:200,(anonymous_18) +FN:203,(anonymous_19) +FN:215,(anonymous_20) +FN:220,(anonymous_21) +FN:226,(anonymous_22) +FN:231,(anonymous_23) FNF:24 FNH:22 -FNDA:42,(anonymous_0) -FNDA:122,(anonymous_1) -FNDA:48,(anonymous_2) -FNDA:335,(anonymous_3) +FNDA:44,(anonymous_0) +FNDA:124,(anonymous_1) +FNDA:49,(anonymous_2) +FNDA:341,(anonymous_3) FNDA:14,(anonymous_4) -FNDA:60,(anonymous_5) -FNDA:64,(anonymous_6) +FNDA:61,(anonymous_5) +FNDA:65,(anonymous_6) FNDA:14,(anonymous_7) FNDA:2,(anonymous_8) FNDA:28,(anonymous_9) @@ -98,97 +98,97 @@ FNDA:1,(anonymous_16) FNDA:4,(anonymous_17) FNDA:0,(anonymous_18) FNDA:0,(anonymous_19) -FNDA:105,(anonymous_20) +FNDA:107,(anonymous_20) FNDA:63,(anonymous_21) FNDA:291,(anonymous_22) -FNDA:122,(anonymous_23) -DA:32,42 -DA:33,42 -DA:36,122 -DA:39,42 -DA:41,48 -DA:44,335 -DA:52,14 -DA:54,14 -DA:55,14 -DA:61,60 -DA:63,34 -DA:64,34 -DA:95,64 -DA:98,64 -DA:102,64 -DA:103,30 -DA:104,30 -DA:105,4 -DA:109,60 -DA:110,3 -DA:112,60 -DA:113,60 -DA:115,60 -DA:117,60 -DA:126,2 -DA:127,2 -DA:128,2 -DA:133,2 -DA:140,28 -DA:141,28 -DA:143,28 -DA:144,14 -DA:146,14 -DA:149,14 +FNDA:124,(anonymous_23) +DA:36,44 +DA:37,44 +DA:40,124 +DA:43,44 +DA:45,49 +DA:48,341 +DA:56,14 +DA:58,14 +DA:59,14 +DA:65,61 +DA:67,35 +DA:68,35 +DA:99,65 +DA:102,65 +DA:106,65 +DA:107,30 +DA:108,30 +DA:109,4 +DA:113,61 +DA:114,3 +DA:116,61 +DA:117,61 +DA:119,61 +DA:121,61 +DA:130,2 +DA:131,2 +DA:132,2 +DA:137,2 +DA:144,28 +DA:145,28 +DA:147,28 +DA:148,14 DA:150,14 -DA:157,5 -DA:158,2 -DA:165,2 -DA:166,9 -DA:167,1 -DA:170,8 -DA:171,0 -DA:172,0 -DA:176,8 -DA:178,8 -DA:185,4 -DA:197,0 -DA:199,0 -DA:200,0 -DA:212,105 -DA:213,105 -DA:214,105 -DA:216,105 -DA:217,63 -DA:218,63 -DA:219,63 -DA:223,291 -DA:226,42 -DA:228,122 +DA:153,14 +DA:154,14 +DA:161,5 +DA:162,2 +DA:169,2 +DA:170,9 +DA:171,1 +DA:174,8 +DA:175,0 +DA:176,0 +DA:180,8 +DA:182,8 +DA:189,4 +DA:201,0 +DA:203,0 +DA:204,0 +DA:216,107 +DA:217,107 +DA:218,107 +DA:220,107 +DA:221,63 +DA:222,63 +DA:223,63 +DA:227,291 +DA:230,44 +DA:232,124 LF:59 LH:54 -BRDA:52,0,0,0 -BRDA:52,0,1,14 -BRDA:61,1,0,26 -BRDA:61,1,1,34 -BRDA:102,2,0,30 -BRDA:102,2,1,34 -BRDA:104,3,0,4 -BRDA:104,3,1,26 -BRDA:109,4,0,3 -BRDA:109,4,1,57 -BRDA:109,5,0,60 -BRDA:109,5,1,27 -BRDA:127,6,0,2 -BRDA:127,6,1,0 -BRDA:140,7,0,0 -BRDA:140,7,1,28 -BRDA:141,8,0,0 -BRDA:141,8,1,28 -BRDA:143,9,0,14 -BRDA:143,9,1,14 -BRDA:166,10,0,1 -BRDA:166,10,1,8 -BRDA:170,11,0,0 -BRDA:170,11,1,8 -BRDA:171,12,0,0 -BRDA:171,12,1,0 +BRDA:56,0,0,0 +BRDA:56,0,1,14 +BRDA:65,1,0,26 +BRDA:65,1,1,35 +BRDA:106,2,0,30 +BRDA:106,2,1,35 +BRDA:108,3,0,4 +BRDA:108,3,1,26 +BRDA:113,4,0,3 +BRDA:113,4,1,58 +BRDA:113,5,0,61 +BRDA:113,5,1,27 +BRDA:131,6,0,2 +BRDA:131,6,1,0 +BRDA:144,7,0,0 +BRDA:144,7,1,28 +BRDA:145,8,0,0 +BRDA:145,8,1,28 +BRDA:147,9,0,14 +BRDA:147,9,1,14 +BRDA:170,10,0,1 +BRDA:170,10,1,8 +BRDA:174,11,0,0 +BRDA:174,11,1,8 +BRDA:175,12,0,0 +BRDA:175,12,1,0 BRF:26 BRH:19 end_of_record @@ -201,28 +201,28 @@ FN:127,(anonymous_3) FN:130,(anonymous_4) FNF:5 FNH:4 -FNDA:64,(anonymous_0) +FNDA:65,(anonymous_0) FNDA:14,(anonymous_1) FNDA:2,(anonymous_2) -FNDA:64,(anonymous_3) +FNDA:65,(anonymous_3) FNDA:0,(anonymous_4) DA:25,3 DA:32,3 -DA:75,64 -DA:76,64 -DA:78,64 -DA:79,64 -DA:81,64 -DA:83,64 -DA:84,64 -DA:86,64 -DA:99,64 +DA:75,65 +DA:76,65 +DA:78,65 +DA:79,65 +DA:81,65 +DA:83,65 +DA:84,65 +DA:86,65 +DA:99,65 DA:100,14 DA:101,14 DA:103,14 DA:115,2 -DA:128,64 -DA:130,64 +DA:128,65 +DA:130,65 DA:131,0 LF:18 LH:17 @@ -297,17 +297,17 @@ FNF:14 FNH:14 FNDA:101,classWithModifiers FNDA:25,(anonymous_1) -FNDA:65,serialize -FNDA:65,getCircularReplacer -FNDA:236,(anonymous_4) -FNDA:236,transform -FNDA:65,replacer -FNDA:236,(anonymous_7) +FNDA:66,serialize +FNDA:66,getCircularReplacer +FNDA:246,(anonymous_4) +FNDA:246,transform +FNDA:66,replacer +FNDA:246,(anonymous_7) FNDA:36,stopPropagation FNDA:8,(anonymous_9) FNDA:1,expectToThrow FNDA:3,(anonymous_11) -FNDA:64,cyrb53 +FNDA:65,cyrb53 FNDA:2,elementClick DA:27,101 DA:28,101 @@ -315,26 +315,26 @@ DA:30,25 DA:31,25 DA:33,25 DA:34,25 -DA:39,65 -DA:42,65 -DA:43,65 -DA:44,236 -DA:45,100 +DA:39,66 +DA:42,66 +DA:43,66 +DA:44,246 +DA:45,132 DA:46,1 -DA:48,99 -DA:51,235 -DA:56,236 -DA:58,64 -DA:59,11 +DA:48,131 +DA:51,245 +DA:56,246 +DA:58,65 +DA:59,12 DA:62,53 -DA:65,172 -DA:69,65 -DA:71,65 -DA:72,236 -DA:74,236 -DA:75,236 -DA:79,65 -DA:80,65 +DA:65,181 +DA:69,66 +DA:71,66 +DA:72,246 +DA:74,246 +DA:75,246 +DA:79,66 +DA:80,66 DA:89,36 DA:90,8 DA:91,8 @@ -343,17 +343,17 @@ DA:107,1 DA:108,3 DA:110,1 DA:112,1 -DA:121,64 -DA:122,64 -DA:124,64 -DA:125,2816 -DA:127,2816 -DA:128,2816 -DA:131,64 -DA:132,64 -DA:133,64 -DA:134,64 -DA:136,64 +DA:121,65 +DA:122,65 +DA:124,65 +DA:125,3356 +DA:127,3356 +DA:128,3356 +DA:131,65 +DA:132,65 +DA:133,65 +DA:134,65 +DA:136,65 DA:140,2 DA:142,2 DA:144,2 @@ -362,19 +362,19 @@ LH:48 BRDA:28,0,0,76 BRDA:28,0,1,25 BRDA:39,1,0,0 -BRDA:39,1,1,65 -BRDA:44,2,0,100 -BRDA:44,2,1,136 -BRDA:44,3,0,236 -BRDA:44,3,1,100 +BRDA:39,1,1,66 +BRDA:44,2,0,132 +BRDA:44,2,1,114 +BRDA:44,3,0,246 +BRDA:44,3,1,132 BRDA:45,4,0,1 -BRDA:45,4,1,99 -BRDA:56,5,0,64 -BRDA:56,5,1,172 -BRDA:58,6,0,11 +BRDA:45,4,1,131 +BRDA:56,5,0,65 +BRDA:56,5,1,181 +BRDA:58,6,0,12 BRDA:58,6,1,53 -BRDA:58,7,0,64 -BRDA:58,7,1,64 +BRDA:58,7,0,65 +BRDA:58,7,1,65 BRDA:90,8,0,8 BRDA:90,8,1,0 BRDA:90,9,0,8 diff --git a/src/ModalController.ts b/src/ModalController.ts index 4f6b9ac..dbd3d08 100644 --- a/src/ModalController.ts +++ b/src/ModalController.ts @@ -28,11 +28,15 @@ interface ModalControllerEvents { update: [] } -class ModalController implements ExternalStore { +interface ModalControllerConfig { + defaultParams: Partial +} + +class ModalController implements ExternalStore { protected windows: Set = new Set protected events: EventEmitter = new EventEmitter - constructor() { + constructor(private config?: Config) { this.subscribe(() => this.refreshSnapshot()) } @@ -92,7 +96,7 @@ class ModalController implements ExternalStore { public open

(component: ModalComponent

, ...[modalParams]: ModalWindowParams

): ModalWindow

{ // `modalParams` still can be undefined, but we can't check it here. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const modalWindow = new ModalWindow(component, modalParams!) + const modalWindow = new ModalWindow(component, { ...this.config?.defaultParams, ...modalParams! }) // Using `on` instead of `then` since `then` will only be executed on the next event loop iteration. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop. modalWindow.on("close", () => this.close(modalWindow)) diff --git a/src/__tests__/ModalController.spec.ts b/src/__tests__/ModalController.spec.ts index a352b28..5f552e3 100644 --- a/src/__tests__/ModalController.spec.ts +++ b/src/__tests__/ModalController.spec.ts @@ -20,6 +20,7 @@ import { createElement, Fragment } from "react" import { act } from "react-dom/test-utils" import { ModalController } from "../ModalController" +import { ModalParams } from "../types" let Modal: ModalController = new ModalController() @@ -107,4 +108,23 @@ describe("ModalController (with container)", () => { expect(modal3.id).toBe(modal4.id) }) }) + + describe("ModalController Config", () => { + it("should apply `defaultParams`", () => { + const defaultParams: ModalParams = { + id: 1, + closable: false, + keepMounted: true, + layer: 2, + label: "TEST", + + weak: true, + fork: true + } + const controller = new ModalController({ defaultParams }) + const modal = controller.open(() => createElement(Fragment)) + + expect(modal.params).toStrictEqual(defaultParams) + }) + }) })