Skip to content

Commit 50b1268

Browse files
author
Artem Ignatev
committed
Release 1.3.0
BREAKING CHANGES: * removed `DecoratedWatchedController` (use `ControllerWithCustomActionTypes` instead of it); * changed generic of `Action`, now by default Payload is `undefined` (before it was `any`); * removed type `ActionWithCallback`; Features: * added `ControllerWithCustomActionTypes` type for customized action types; * improved `watcher` type;
1 parent 6346da0 commit 50b1268

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+2040
-389
lines changed

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,53 @@
11
# Changelog
22

3+
### 1.3.0
4+
5+
BREAKING CHANGES:
6+
* removed `DecoratedWatchedController` (use `ControllerWithCustomActionTypes` instead of it);
7+
* changed generic of `Action`, now by default Payload is `undefined` (before it was `any`);
8+
* removed type `ActionWithCallback`;
9+
10+
Features:
11+
* added `ControllerWithCustomActionTypes` type for customized action types:
12+
```ts
13+
import { Action, ControllerBase, ControllerWithCustomActionTypes, watch, WatchedController } from '@tomas_light/react-redux-controller';
14+
15+
type MyState = {};
16+
type OpenUserActionPayload = { userID: string };
17+
18+
@watch
19+
class MyController extends ControllerBase<MyState> {
20+
@watch
21+
check(action: Action) {}
22+
23+
@watch
24+
loadUsers() {}
25+
26+
@watch('openUserForEditing')
27+
openUser(action: Action<OpenUserActionPayload>) {}
28+
}
29+
30+
const myController: Omit<WatchedController<MyController>, 'openUserForEditing'> &
31+
ControllerWithCustomActionTypes<{
32+
openUserForEditing: OpenUserActionPayload;
33+
}> = MyController as any;
34+
35+
export { myController as MyController };
36+
```
37+
* improved `watcher` type;
38+
39+
Bugfix:
40+
* fixed type bug, when you have to pass something to action creator in case:
41+
```
42+
class Controller {
43+
@watch
44+
myMethod(action: Action) {/*...*/}
45+
}
46+
47+
dispatch(Controller.myMethod(null)); // before
48+
dispatch(Controller.myMethod()); // after
49+
```
50+
351
### 1.2.0
452

553
BREAKING CHANGES:

coverage/clover.xml

Lines changed: 335 additions & 11 deletions
Large diffs are not rendered by default.

coverage/coverage-final.json

Lines changed: 23 additions & 1 deletion
Large diffs are not rendered by default.

coverage/lcov-report/index.html

Lines changed: 80 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,30 @@ <h1>All files</h1>
2323
<div class='clearfix'>
2424

2525
<div class='fl pad1y space-right2'>
26-
<span class="strong">60% </span>
26+
<span class="strong">95.02% </span>
2727
<span class="quiet">Statements</span>
28-
<span class='fraction'>3/5</span>
28+
<span class='fraction'>248/261</span>
2929
</div>
3030

3131

3232
<div class='fl pad1y space-right2'>
33-
<span class="strong">100% </span>
33+
<span class="strong">90.14% </span>
3434
<span class="quiet">Branches</span>
35-
<span class='fraction'>0/0</span>
35+
<span class='fraction'>64/71</span>
3636
</div>
3737

3838

3939
<div class='fl pad1y space-right2'>
40-
<span class="strong">33.33% </span>
40+
<span class="strong">88.71% </span>
4141
<span class="quiet">Functions</span>
42-
<span class='fraction'>1/3</span>
42+
<span class='fraction'>55/62</span>
4343
</div>
4444

4545

4646
<div class='fl pad1y space-right2'>
47-
<span class="strong">60% </span>
47+
<span class="strong">95.16% </span>
4848
<span class="quiet">Lines</span>
49-
<span class='fraction'>3/5</span>
49+
<span class='fraction'>236/248</span>
5050
</div>
5151

5252

@@ -61,7 +61,7 @@ <h1>All files</h1>
6161
</div>
6262
</template>
6363
</div>
64-
<div class='status-line medium'></div>
64+
<div class='status-line high'></div>
6565
<div class="pad1">
6666
<table class="coverage-summary">
6767
<thead>
@@ -79,18 +79,78 @@ <h1>All files</h1>
7979
</tr>
8080
</thead>
8181
<tbody><tr>
82-
<td class="file medium" data-value="Middleware.ts"><a href="Middleware.ts.html">Middleware.ts</a></td>
83-
<td data-value="60" class="pic medium">
84-
<div class="chart"><div class="cover-fill" style="width: 60%"></div><div class="cover-empty" style="width: 40%"></div></div>
82+
<td class="file high" data-value="src"><a href="src/index.html">src</a></td>
83+
<td data-value="92.05" class="pic high">
84+
<div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
8585
</td>
86-
<td data-value="60" class="pct medium">60%</td>
87-
<td data-value="5" class="abs medium">3/5</td>
86+
<td data-value="92.05" class="pct high">92.05%</td>
87+
<td data-value="88" class="abs high">81/88</td>
88+
<td data-value="81.82" class="pct high">81.82%</td>
89+
<td data-value="22" class="abs high">18/22</td>
90+
<td data-value="80" class="pct high">80%</td>
91+
<td data-value="25" class="abs high">20/25</td>
92+
<td data-value="91.57" class="pct high">91.57%</td>
93+
<td data-value="83" class="abs high">76/83</td>
94+
</tr>
95+
96+
<tr>
97+
<td class="file high" data-value="src/controller"><a href="src/controller/index.html">src/controller</a></td>
98+
<td data-value="93.55" class="pic high">
99+
<div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
100+
</td>
101+
<td data-value="93.55" class="pct high">93.55%</td>
102+
<td data-value="93" class="abs high">87/93</td>
103+
<td data-value="92.31" class="pct high">92.31%</td>
104+
<td data-value="26" class="abs high">24/26</td>
105+
<td data-value="92" class="pct high">92%</td>
106+
<td data-value="25" class="abs high">23/25</td>
107+
<td data-value="94.19" class="pct high">94.19%</td>
108+
<td data-value="86" class="abs high">81/86</td>
109+
</tr>
110+
111+
<tr>
112+
<td class="file high" data-value="src/decorators"><a href="src/decorators/index.html">src/decorators</a></td>
113+
<td data-value="100" class="pic high">
114+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115+
</td>
116+
<td data-value="100" class="pct high">100%</td>
117+
<td data-value="49" class="abs high">49/49</td>
118+
<td data-value="93.75" class="pct high">93.75%</td>
119+
<td data-value="16" class="abs high">15/16</td>
120+
<td data-value="100" class="pct high">100%</td>
121+
<td data-value="10" class="abs high">10/10</td>
122+
<td data-value="100" class="pct high">100%</td>
123+
<td data-value="48" class="abs high">48/48</td>
124+
</tr>
125+
126+
<tr>
127+
<td class="file high" data-value="src/hooks"><a href="src/hooks/index.html">src/hooks</a></td>
128+
<td data-value="100" class="pic high">
129+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
130+
</td>
131+
<td data-value="100" class="pct high">100%</td>
132+
<td data-value="14" class="abs high">14/14</td>
133+
<td data-value="100" class="pct high">100%</td>
134+
<td data-value="2" class="abs high">2/2</td>
135+
<td data-value="100" class="pct high">100%</td>
136+
<td data-value="1" class="abs high">1/1</td>
137+
<td data-value="100" class="pct high">100%</td>
138+
<td data-value="14" class="abs high">14/14</td>
139+
</tr>
140+
141+
<tr>
142+
<td class="file high" data-value="src/types"><a href="src/types/index.html">src/types</a></td>
143+
<td data-value="100" class="pic high">
144+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
145+
</td>
146+
<td data-value="100" class="pct high">100%</td>
147+
<td data-value="17" class="abs high">17/17</td>
148+
<td data-value="100" class="pct high">100%</td>
149+
<td data-value="5" class="abs high">5/5</td>
150+
<td data-value="100" class="pct high">100%</td>
151+
<td data-value="1" class="abs high">1/1</td>
88152
<td data-value="100" class="pct high">100%</td>
89-
<td data-value="0" class="abs high">0/0</td>
90-
<td data-value="33.33" class="pct low">33.33%</td>
91-
<td data-value="3" class="abs low">1/3</td>
92-
<td data-value="60" class="pct medium">60%</td>
93-
<td data-value="5" class="abs medium">3/5</td>
153+
<td data-value="17" class="abs high">17/17</td>
94154
</tr>
95155

96156
</tbody>
@@ -101,7 +161,7 @@ <h1>All files</h1>
101161
<div class='footer quiet pad2 space-top1 center small'>
102162
Code coverage generated by
103163
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104-
at Tue Jan 03 2023 12:57:00 GMT+0100 (Central European Standard Time)
164+
at Tue Jan 03 2023 23:18:07 GMT+0100 (Central European Standard Time)
105165
</div>
106166
<script src="prettify.js"></script>
107167
<script>

coverage/lcov-report/src/AppAction.ts.html

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,30 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
2323
<div class='clearfix'>
2424

2525
<div class='fl pad1y space-right2'>
26-
<span class="strong">78.79% </span>
26+
<span class="strong">86.11% </span>
2727
<span class="quiet">Statements</span>
28-
<span class='fraction'>26/33</span>
28+
<span class='fraction'>31/36</span>
2929
</div>
3030

3131

3232
<div class='fl pad1y space-right2'>
33-
<span class="strong">50% </span>
33+
<span class="strong">60% </span>
3434
<span class="quiet">Branches</span>
35-
<span class='fraction'>2/4</span>
35+
<span class='fraction'>3/5</span>
3636
</div>
3737

3838

3939
<div class='fl pad1y space-right2'>
40-
<span class="strong">64.29% </span>
40+
<span class="strong">78.57% </span>
4141
<span class="quiet">Functions</span>
42-
<span class='fraction'>9/14</span>
42+
<span class='fraction'>11/14</span>
4343
</div>
4444

4545

4646
<div class='fl pad1y space-right2'>
47-
<span class="strong">78.13% </span>
47+
<span class="strong">85.71% </span>
4848
<span class="quiet">Lines</span>
49-
<span class='fraction'>25/32</span>
49+
<span class='fraction'>30/35</span>
5050
</div>
5151

5252

@@ -61,7 +61,7 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
6161
</div>
6262
</template>
6363
</div>
64-
<div class='status-line medium'></div>
64+
<div class='status-line high'></div>
6565
<pre><table class="coverage">
6666
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
6767
<a name='L2'></a><a href='#L2'>2</a>
@@ -143,7 +143,13 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
143143
<a name='L78'></a><a href='#L78'>78</a>
144144
<a name='L79'></a><a href='#L79'>79</a>
145145
<a name='L80'></a><a href='#L80'>80</a>
146-
<a name='L81'></a><a href='#L81'>81</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
146+
<a name='L81'></a><a href='#L81'>81</a>
147+
<a name='L82'></a><a href='#L82'>82</a>
148+
<a name='L83'></a><a href='#L83'>83</a>
149+
<a name='L84'></a><a href='#L84'>84</a>
150+
<a name='L85'></a><a href='#L85'>85</a>
151+
<a name='L86'></a><a href='#L86'>86</a>
152+
<a name='L87'></a><a href='#L87'>87</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
147153
<span class="cline-any cline-neutral">&nbsp;</span>
148154
<span class="cline-any cline-neutral">&nbsp;</span>
149155
<span class="cline-any cline-yes">7x</span>
@@ -155,6 +161,8 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
155161
<span class="cline-any cline-neutral">&nbsp;</span>
156162
<span class="cline-any cline-neutral">&nbsp;</span>
157163
<span class="cline-any cline-neutral">&nbsp;</span>
164+
<span class="cline-any cline-neutral">&nbsp;</span>
165+
<span class="cline-any cline-neutral">&nbsp;</span>
158166
<span class="cline-any cline-yes">38x</span>
159167
<span class="cline-any cline-yes">38x</span>
160168
<span class="cline-any cline-yes">38x</span>
@@ -166,7 +174,7 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
166174
<span class="cline-any cline-neutral">&nbsp;</span>
167175
<span class="cline-any cline-neutral">&nbsp;</span>
168176
<span class="cline-any cline-neutral">&nbsp;</span>
169-
<span class="cline-any cline-no">&nbsp;</span>
177+
<span class="cline-any cline-yes">1x</span>
170178
<span class="cline-any cline-neutral">&nbsp;</span>
171179
<span class="cline-any cline-neutral">&nbsp;</span>
172180
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -208,13 +216,17 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
208216
<span class="cline-any cline-yes">33x</span>
209217
<span class="cline-any cline-neutral">&nbsp;</span>
210218
<span class="cline-any cline-yes">99x</span>
219+
<span class="cline-any cline-yes">33x</span>
220+
<span class="cline-any cline-yes">33x</span>
221+
<span class="cline-any cline-neutral">&nbsp;</span>
222+
<span class="cline-any cline-yes">66x</span>
211223
<span class="cline-any cline-neutral">&nbsp;</span>
212224
<span class="cline-any cline-neutral">&nbsp;</span>
213225
<span class="cline-any cline-yes">33x</span>
214226
<span class="cline-any cline-yes">9x</span>
215227
<span class="cline-any cline-neutral">&nbsp;</span>
216228
<span class="cline-any cline-yes">33x</span>
217-
<span class="cline-any cline-no">&nbsp;</span>
229+
<span class="cline-any cline-yes">1x</span>
218230
<span class="cline-any cline-neutral">&nbsp;</span>
219231
<span class="cline-any cline-yes">33x</span>
220232
<span class="cline-any cline-yes">15x</span>
@@ -226,30 +238,32 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
226238
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Container, IHaveDependencies } from '../../cheap-di';
227239
import { Action, ActionMaybeWithContainer, ActionFactory } from './types';
228240
&nbsp;
229-
export class AppAction&lt;TPayload = any&gt; implements ActionMaybeWithContainer&lt;TPayload&gt; {
241+
export class AppAction&lt;Payload = undefined&gt; implements ActionMaybeWithContainer&lt;Payload&gt; {
230242
type: any;
231-
payload: TPayload;
243+
payload: Payload;
232244
&nbsp;
233245
readonly actions: (Action | ActionFactory)[];
234-
stopPropagation?: boolean;
246+
&nbsp;
247+
stopPropagation: boolean;
248+
&nbsp;
235249
container?: Container &amp; IHaveDependencies;
236250
&nbsp;
237-
constructor(type: string, payload?: TPayload) {
251+
constructor(type: string, payload?: Payload) {
238252
this.type = type;
239-
this.payload = payload as TPayload;
253+
this.payload = payload as Payload;
240254
this.actions = [];
241255
this.stopPropagation = false;
242256
}
243257
&nbsp;
244-
static addNextActions(appAction: Action, ...actions: (Action | ActionFactory)[]) {
258+
static addNextActions&lt;Payload&gt;(appAction: Action&lt;Payload&gt;, ...actions: (Action | ActionFactory)[]) {
245259
appAction.actions.push(...actions);
246260
}
247261
&nbsp;
248-
<span class="fstat-no" title="function not covered" > static </span>stop(appAction: Action): void {
249-
<span class="cstat-no" title="statement not covered" > appAction.stopPropagation = true;</span>
262+
static stop&lt;Payload&gt;(appAction: Action&lt;Payload&gt;): void {
263+
(appAction as AppAction&lt;Payload&gt;).stopPropagation = true;
250264
}
251265
&nbsp;
252-
static getActions(appAction: Action): ActionFactory[] {
266+
static getActions&lt;Payload&gt;(appAction: Action&lt;Payload&gt;): ActionFactory[] {
253267
<span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(appAction.actions)) {
254268
<span class="cstat-no" title="statement not covered" > return [];</span>
255269
}
@@ -274,9 +288,9 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
274288
<span class="cstat-no" title="statement not covered" > return AppAction.getActions(this);</span>
275289
}
276290
&nbsp;
277-
toPlainObject(): Action {
278-
const keys = Object.keys(this) as (keyof AppAction)[];
279-
const plainObject = {} as Action;
291+
toPlainObject(): Action&lt;Payload&gt; {
292+
const keys = Object.keys(this) as (keyof AppAction&lt;Payload&gt;)[];
293+
const plainObject = {} as Action&lt;Payload&gt;;
280294
&nbsp;
281295
keys.forEach((key) =&gt; {
282296
// skip property
@@ -287,14 +301,18 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
287301
plainObject[key as any] = this[key];
288302
return;
289303
}
304+
if (key === 'stopPropagation') {
305+
plainObject[key as any] = this[key];
306+
return;
307+
}
290308
plainObject[key] = this[key];
291309
});
292310
&nbsp;
293311
plainObject.addNextActions = function (...actions: Action[]) {
294312
AppAction.addNextActions(this, ...actions);
295313
};
296-
plainObject.stop = <span class="fstat-no" title="function not covered" >function () {</span>
297-
<span class="cstat-no" title="statement not covered" > AppAction.stop(this);</span>
314+
plainObject.stop = function () {
315+
AppAction.stop(this);
298316
};
299317
plainObject.getActions = function () {
300318
return AppAction.getActions(this);
@@ -310,7 +328,7 @@ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> AppActi
310328
<div class='footer quiet pad2 space-top1 center small'>
311329
Code coverage generated by
312330
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
313-
at Tue Jan 03 2023 12:52:22 GMT+0100 (Central European Standard Time)
331+
at Tue Jan 03 2023 23:18:07 GMT+0100 (Central European Standard Time)
314332
</div>
315333
<script src="../prettify.js"></script>
316334
<script>

0 commit comments

Comments
 (0)