summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/elm/Shared/Update')
-rw-r--r--src/shared/elm/Shared/Update/Sequence.elm37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/shared/elm/Shared/Update/Sequence.elm b/src/shared/elm/Shared/Update/Sequence.elm
new file mode 100644
index 0000000..ff33ae4
--- /dev/null
+++ b/src/shared/elm/Shared/Update/Sequence.elm
@@ -0,0 +1,37 @@
+module Shared.Update.Sequence exposing (sequence)
+
+-- Elm -------------------------------------------------------------------------
+import List
+
+-- Local Module ----------------------------------------------------------------
+import Struct.Model
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+sequence_step : (
+ (Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)))
+ -> (Struct.Model.Type, (List (Cmd Struct.Event.Type)))
+ -> (Struct.Model.Type, (List (Cmd Struct.Event.Type)))
+ )
+sequence_step action (model, cmd_list) =
+ let (next_model, new_cmd) = (action model) in
+ case new_cmd of
+ Cmd.none -> (next_model, cmd_list)
+ _ -> (next_model, (cmd_list ++ new_cmds))
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+sequence : (
+ (List
+ (Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)))
+ )
+ -> (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+sequence actions model =
+ let (final_model, cmds) = (List.foldr (sequence_step) (model, []) actions) in
+ case cmds of
+ [] -> (final_model, Cmd.none)
+ [cmd] -> (final_model, cmd)
+ _ -> (final_model, (Cmd.batch cmds))