@@ -35,7 +35,17 @@ export function updatePiped<Model, Msg>(
3535 model : Model ,
3636 ...updates : readonly UpdateFunction < Model , Msg > [ ]
3737) : [ Model , Cmd < Msg > ] {
38- return genericUpdatePiped ( Cmd . batch , model , ...updates ) ;
38+ const none : Cmd < Msg > = Cmd . none ( ) ;
39+ const combine = ( cmd1 : Cmd < Msg > , cmd2 : Cmd < Msg > ) => {
40+ const none1 = isNone ( cmd1 ) ;
41+ const none2 = isNone ( cmd2 ) ;
42+ return none1 && none2 ? cmd1 : none1 ? cmd2 : none2 ? cmd1 : Cmd . batch ( [ cmd1 , cmd2 ] ) ;
43+ } ;
44+ return genericUpdatePiped ( combine , none , model , ...updates ) ;
45+ }
46+
47+ function isNone < Msg > ( cmd : Cmd < Msg > ) : boolean {
48+ return cmd . constructor . name === 'CmdNone' ;
3949}
4050
4151export type GenericUpdateFunction < Model , Cmd > = ( model : Model ) => [ Model , Cmd ] ;
@@ -45,17 +55,17 @@ export type GenericUpdateFunction<Model, Cmd> = (model: Model) => [Model, Cmd];
4555 * See updatePiped().
4656 */
4757export function genericUpdatePiped < Model , Cmd > (
48- batch : ( cmds : readonly Cmd [ ] ) => Cmd ,
58+ combine : ( cmd1 : Cmd , cmd2 : Cmd ) => Cmd ,
59+ none : Cmd ,
4960 model : Model ,
5061 ...updates : readonly GenericUpdateFunction < Model , Cmd > [ ]
5162) : [ Model , Cmd ] {
52- const cmd0 : Cmd = batch ( [ ] ) ;
5363 return updates . reduce < [ Model , Cmd ] > (
5464 ( acc : [ Model , Cmd ] , update : GenericUpdateFunction < Model , Cmd > ) => {
5565 const [ model0 , cmd0 ] = acc ;
5666 const [ model1 , cmd1 ] = update ( model0 ) ;
57- return [ model1 , batch ( [ cmd0 , cmd1 ] ) ] ;
67+ return [ model1 , combine ( cmd0 , cmd1 ) ] ;
5868 } ,
59- [ model , cmd0 ] ,
69+ [ model , none ] ,
6070 ) ;
6171}
0 commit comments