From 0adaeb57f3763b2e6f1c19896b46618017f8147c Mon Sep 17 00:00:00 2001 From: Aaron Bieber Date: Tue, 6 Jun 2023 13:13:16 -0600 Subject: [PATCH] ui: clear input fields on success --- assets/main.js | 282 +++++++++++++++++++++++++++---------------------- src/Main.elm | 38 ++++--- 2 files changed, 178 insertions(+), 142 deletions(-) diff --git a/assets/main.js b/assets/main.js index c9bb0b7..1c5596d 100644 --- a/assets/main.js +++ b/assets/main.js @@ -6294,6 +6294,9 @@ var $author$project$Main$addLink = function (model) { url: '/links' }); }; +var $author$project$Main$AddedWatch = function (a) { + return {$: 'AddedWatch', a: a}; +}; var $author$project$Main$addWatch = function (model) { var body = $elm$http$Http$jsonBody( $elm$json$Json$Encode$object( @@ -6309,7 +6312,7 @@ var $author$project$Main$addWatch = function (model) { return $elm$http$Http$post( { body: body, - expect: $elm$http$Http$expectWhatever($author$project$Main$AddedLink), + expect: $elm$http$Http$expectWhatever($author$project$Main$AddedWatch), url: '/watches' }); }; @@ -6375,6 +6378,22 @@ var $author$project$Main$update = F2( model, {newlink: newlink}), $elm$core$Platform$Cmd$none); + case 'AddedWatch': + if (msg.a.$ === 'Err') { + return _Utils_Tuple2( + _Utils_update( + model, + { + status: $author$project$Main$Errored('Server error adding a watch!') + }), + $elm$core$Platform$Cmd$none); + } else { + return _Utils_Tuple2( + _Utils_update( + model, + {newwatch: $author$project$Main$initialModel.newwatch}), + $author$project$Main$getWatches); + } case 'AddedLink': if (msg.a.$ === 'Err') { return _Utils_Tuple2( @@ -6695,8 +6714,9 @@ var $elm$html$Html$Events$onInput = function (tagger) { }; var $elm$html$Html$Attributes$placeholder = $elm$html$Html$Attributes$stringProperty('placeholder'); var $elm$html$Html$Attributes$type_ = $elm$html$Html$Attributes$stringProperty('type'); -var $author$project$Main$labeledTextBox = F4( - function (labelStr, placeStr, inputName, inputHandler) { +var $elm$html$Html$Attributes$value = $elm$html$Html$Attributes$stringProperty('value'); +var $author$project$Main$labeledInput = F5( + function (labelStr, placeStr, inputName, inputValue, inputHandler) { return A2( $elm$html$Html$label, _List_Nil, @@ -6710,7 +6730,8 @@ var $author$project$Main$labeledTextBox = F4( $elm$html$Html$Attributes$type_('text'), $elm$html$Html$Attributes$name(inputName), $elm$html$Html$Events$onInput(inputHandler), - $elm$html$Html$Attributes$placeholder(placeStr) + $elm$html$Html$Attributes$placeholder(placeStr), + $elm$html$Html$Attributes$value(inputValue) ]), _List_Nil) ])); @@ -6736,88 +6757,92 @@ var $elm$html$Html$Events$onCheck = function (tagger) { 'change', A2($elm$json$Json$Decode$map, tagger, $elm$html$Html$Events$targetChecked)); }; -var $author$project$Main$linkForm = function (newlink) { - return A2( - $elm$html$Html$div, - _List_Nil, - _List_fromArray( - [ - A2( - $author$project$Main$createForm, - $author$project$Main$SubmitLink, - A2( - $elm$html$Html$div, - _List_fromArray( - [ - $elm$html$Html$Attributes$class('form-content') - ]), - _List_fromArray( - [ - A2( - $elm$html$Html$div, - _List_Nil, - _List_fromArray( - [ - A4( - $author$project$Main$labeledTextBox, - 'Name: ', - 'Potato', - 'name', - function (v) { - return $author$project$Main$GotNewLink( - _Utils_update( - newlink, - {name: v})); - }), - A4( - $author$project$Main$labeledTextBox, - 'URL: ', - 'https://....', - 'url', - function (v) { - return $author$project$Main$GotNewLink( - _Utils_update( - newlink, - {url: v})); - }), - A4( - $author$project$Main$labeledTextBox, - 'Icon: ', - 'https://....', - 'logo_url', - function (v) { - return $author$project$Main$GotNewLink( - _Utils_update( - newlink, - {logo_url: v})); - }), - A2( - $elm$html$Html$label, - _List_Nil, - _List_fromArray( - [ - $elm$html$Html$text('Shared: '), - A2( - $elm$html$Html$input, - _List_fromArray( - [ - $elm$html$Html$Attributes$type_('checkbox'), - $elm$html$Html$Attributes$name('linkshared'), - $elm$html$Html$Events$onCheck( - function (v) { - return $author$project$Main$GotNewLink( - _Utils_update( - newlink, - {shared: v})); - }), - $elm$html$Html$Attributes$checked(newlink.shared) - ]), - _List_Nil) - ])) - ])) - ]))) - ])); -}; +var $author$project$Main$linkForm = F2( + function (model, newlink) { + return A2( + $elm$html$Html$div, + _List_Nil, + _List_fromArray( + [ + A2( + $author$project$Main$createForm, + $author$project$Main$SubmitLink, + A2( + $elm$html$Html$div, + _List_fromArray( + [ + $elm$html$Html$Attributes$class('form-content') + ]), + _List_fromArray( + [ + A2( + $elm$html$Html$div, + _List_Nil, + _List_fromArray( + [ + A5( + $author$project$Main$labeledInput, + 'Name: ', + 'Potato', + 'name', + model.newlink.name, + function (v) { + return $author$project$Main$GotNewLink( + _Utils_update( + newlink, + {name: v})); + }), + A5( + $author$project$Main$labeledInput, + 'URL: ', + 'https://....', + 'url', + model.newlink.url, + function (v) { + return $author$project$Main$GotNewLink( + _Utils_update( + newlink, + {url: v})); + }), + A5( + $author$project$Main$labeledInput, + 'Icon: ', + 'https://....', + 'logo_url', + model.newlink.logo_url, + function (v) { + return $author$project$Main$GotNewLink( + _Utils_update( + newlink, + {logo_url: v})); + }), + A2( + $elm$html$Html$label, + _List_Nil, + _List_fromArray( + [ + $elm$html$Html$text('Shared: '), + A2( + $elm$html$Html$input, + _List_fromArray( + [ + $elm$html$Html$Attributes$type_('checkbox'), + $elm$html$Html$Attributes$name('linkshared'), + $elm$html$Html$Events$onCheck( + function (v) { + return $author$project$Main$GotNewLink( + _Utils_update( + newlink, + {shared: v})); + }), + $elm$html$Html$Attributes$checked(newlink.shared) + ]), + _List_Nil) + ])) + ])) + ]))) + ])); + }); var $elm$html$Html$Events$onClick = function (msg) { return A2( $elm$html$Html$Events$on, @@ -6907,7 +6932,7 @@ var $author$project$Main$viewLinks = function (model) { [ A2( $author$project$Main$bar, - $author$project$Main$linkForm(model.newlink), + A2($author$project$Main$linkForm, model, model.newlink), A2( $elm$html$Html$a, _List_fromArray( @@ -7017,45 +7042,48 @@ var $author$project$Main$GotNewWatch = function (a) { return {$: 'GotNewWatch', a: a}; }; var $author$project$Main$SubmitWatch = {$: 'SubmitWatch'}; -var $author$project$Main$watchForm = function (newwatch) { - return A2( - $elm$html$Html$div, - _List_Nil, - _List_fromArray( - [ - A2( - $author$project$Main$createForm, - $author$project$Main$SubmitWatch, - A2( - $elm$html$Html$div, - _List_Nil, - _List_fromArray( - [ - A4( - $author$project$Main$labeledTextBox, - 'Item: ', - 'some string...', - 'name', - function (v) { - return $author$project$Main$GotNewWatch( - _Utils_update( - newwatch, - {name: v})); - }), - A4( - $author$project$Main$labeledTextBox, - 'Repository: ', - 'NixOS/nixpkgs', - 'repo', - function (v) { - return $author$project$Main$GotNewWatch( - _Utils_update( - newwatch, - {repo: v})); - }) - ]))) - ])); -}; +var $author$project$Main$watchForm = F2( + function (model, newwatch) { + return A2( + $elm$html$Html$div, + _List_Nil, + _List_fromArray( + [ + A2( + $author$project$Main$createForm, + $author$project$Main$SubmitWatch, + A2( + $elm$html$Html$div, + _List_Nil, + _List_fromArray( + [ + A5( + $author$project$Main$labeledInput, + 'Item: ', + 'some string...', + 'name', + model.newwatch.name, + function (v) { + return $author$project$Main$GotNewWatch( + _Utils_update( + newwatch, + {name: v})); + }), + A5( + $author$project$Main$labeledInput, + 'Repository: ', + 'NixOS/nixpkgs', + 'repo', + model.newwatch.repo, + function (v) { + return $author$project$Main$GotNewWatch( + _Utils_update( + newwatch, + {repo: v})); + }) + ]))) + ])); + }); var $author$project$Main$viewWatches = function (model) { return A2( $elm$html$Html$div, @@ -7064,7 +7092,7 @@ var $author$project$Main$viewWatches = function (model) { [ A2( $author$project$Main$bar, - $author$project$Main$watchForm(model.newwatch), + A2($author$project$Main$watchForm, model, model.newwatch), A2( $elm$html$Html$a, _List_fromArray( diff --git a/src/Main.elm b/src/Main.elm index 9b0577b..37615e6 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -3,7 +3,7 @@ module Main exposing (..) import Browser import Data import Html exposing (..) -import Html.Attributes exposing (checked, class, classList, href, name, placeholder, src, type_) +import Html.Attributes exposing (checked, class, classList, href, name, placeholder, src, type_, value) import Html.Events exposing (..) import Http import Json.Decode as Decode @@ -32,6 +32,7 @@ main = type Msg = AddedLink (Result Http.Error ()) + | AddedWatch (Result Http.Error ()) | DeletedLink (Result Http.Error ()) | DeleteLink Int | GotLinks (Result Http.Error (List Data.Link)) @@ -151,7 +152,7 @@ addWatch model = Http.post { url = "/watches" , body = body - , expect = Http.expectWhatever AddedLink + , expect = Http.expectWhatever AddedWatch } @@ -180,6 +181,12 @@ update msg model = GotNewLink newlink -> ( { model | newlink = newlink }, Cmd.none ) + AddedWatch (Err _) -> + ( { model | status = Errored "Server error adding a watch!" }, Cmd.none ) + + AddedWatch (Ok _) -> + ( { model | newwatch = initialModel.newwatch }, getWatches ) + AddedLink (Err _) -> ( { model | status = Errored "Server error adding a link!" }, Cmd.none ) @@ -353,29 +360,29 @@ repoInfoDecoder = (field "nameWithOwner" string) -watchForm : NewWatch -> Html Msg -watchForm newwatch = +watchForm : Model -> NewWatch -> Html Msg +watchForm model newwatch = div [] [ createForm SubmitWatch (div [] - [ labeledTextBox "Item: " "some string..." "name" (\v -> GotNewWatch { newwatch | name = v }) - , labeledTextBox "Repository: " "NixOS/nixpkgs" "repo" (\v -> GotNewWatch { newwatch | repo = v }) + [ labeledInput "Item: " "some string..." "name" model.newwatch.name (\v -> GotNewWatch { newwatch | name = v }) + , labeledInput "Repository: " "NixOS/nixpkgs" "repo" model.newwatch.repo (\v -> GotNewWatch { newwatch | repo = v }) ] ) ] -linkForm : NewLink -> Html Msg -linkForm newlink = +linkForm : Model -> NewLink -> Html Msg +linkForm model newlink = div [] [ createForm SubmitLink (div [ class "form-content" ] [ div [] - [ labeledTextBox "Name: " "Potato" "name" (\v -> GotNewLink { newlink | name = v }) - , labeledTextBox "URL: " "https://...." "url" (\v -> GotNewLink { newlink | url = v }) - , labeledTextBox "Icon: " "https://...." "logo_url" (\v -> GotNewLink { newlink | logo_url = v }) + [ labeledInput "Name: " "Potato" "name" model.newlink.name (\v -> GotNewLink { newlink | name = v }) + , labeledInput "URL: " "https://...." "url" model.newlink.url (\v -> GotNewLink { newlink | url = v }) + , labeledInput "Icon: " "https://...." "logo_url" model.newlink.logo_url (\v -> GotNewLink { newlink | logo_url = v }) , label [] [ text "Shared: " , input @@ -392,8 +399,8 @@ linkForm newlink = ] -labeledTextBox : String -> String -> String -> (String -> msg) -> Html msg -labeledTextBox labelStr placeStr inputName inputHandler = +labeledInput : String -> String -> String -> String -> (String -> msg) -> Html msg +labeledInput labelStr placeStr inputName inputValue inputHandler = label [] [ text labelStr , input @@ -401,6 +408,7 @@ labeledTextBox labelStr placeStr inputName inputHandler = , name inputName , onInput inputHandler , placeholder placeStr + , value inputValue ] [] ] @@ -435,7 +443,7 @@ bar left right = viewLinks : Model -> Html Msg viewLinks model = div [] - [ bar (linkForm model.newlink) (a [ onClick ReloadLinks ] [ text " ⟳" ]) + [ bar (linkForm model model.newlink) (a [ onClick ReloadLinks ] [ text " ⟳" ]) , case model.links of _ :: _ -> div @@ -450,7 +458,7 @@ viewLinks model = viewWatches : Model -> Html Msg viewWatches model = div [] - [ bar (watchForm model.newwatch) (a [ onClick ReloadWatches ] [ text " ⟳" ]) + [ bar (watchForm model model.newwatch) (a [ onClick ReloadWatches ] [ text " ⟳" ]) , case model.watches of _ :: _ -> ul [] (List.map viewWatch model.watches)