Skip to content

Instantly share code, notes, and snippets.

@Agnishom
Created July 18, 2018 06:46
Show Gist options
  • Select an option

  • Save Agnishom/d7e8ad081139fd4fe892fb35c7c52db5 to your computer and use it in GitHub Desktop.

Select an option

Save Agnishom/d7e8ad081139fd4fe892fb35c7c52db5 to your computer and use it in GitHub Desktop.
Elm Arch
update : Msg -> Model -> (Model, Cmd Msg, Maybe LoadingCounter)
update =
case msg of
Produce cmd -> (model, cmd, Just Increment)
Consume -> (model, Cmd.none, Just Decrement)
msg ->
let
(newModel, newCmd) = realUpdate msg model
in
(newModel, newCmd, Nothing)
realUpdate : Msg -> Model -> (Model, Cmd Msg)
realUpdate msg model =
let
computeProgress data =
(*) 100
<| toFloat data.bytes / toFloat data.bytesExpected
in
case msg of
Reload url (Ok _) -> (model, [Navigation.load url], Nothing)
Reload url (Err err) -> ({ model | error = Error (toString err) }, Cmd.none)
UpdatePageState (Ok pageState) ->
let
newSnippets = populateSnippets pageState
in
({model
| pageState = Just pageState
, snippets = if List.isEmpty newSnippets then List.singleton emptyConvenientSnippet else newSnippets
, propro = if List.isEmpty newSnippets then False else True
, loading = Decrement
}, Cmd.none, Nothing)
UpdatePageState (Err err) -> ({ model | error = Error (toString err) }, Consume)
AddSnippet -> ({ model | snippets = model.snippets ++ [defaultSnippet] }, Cmd.none)
RemoveSnippet j -> ((removeSnippet j model), Cmd.none)
ChangeHF j hf -> ((changeHF j hf model), Cmd.none)
ChangeSnippet j s -> ((changeSnippet j s model), Cmd.none, Nothing)
ChangeConditionString j s -> ((changeConditionString j s model), Cmd.none)
ChangeConditionKind j s -> ((changeConditionKind j s model), Cmd.none)
ChangeGlobalHeader s -> ((changeGlobalHeader s model), Cmd.none)
ChangeGlobalFooter s -> ((changeGlobalFooter s model), Cmd.none)
AddFiles files -> ((addFiles files model), Cmd.none)
RemoveFile j -> ((removeFile j model), Cmd.none)
ToggleProNess -> ({ model | propro = not model.propro }, Cmd.none)
Save -> (model, [save model])
UpdateList filename -> (updateList filename model, deleteFile filename)
DeleteFile (Ok _) -> (model, Cmd.none)
_ -> (model, Cmd.none)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment