From faf97222ea3b9d0fa1576f8dcc0c424f56682d85 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Sat, 14 Nov 2020 01:42:48 +0100 Subject: [PATCH] Make resetting search form more efficient Instead of reloading the whole menu, only empty the fields. --- .../webapp/src/main/elm/Comp/FolderSelect.elm | 19 ++++ .../webapp/src/main/elm/Comp/SearchMenu.elm | 93 ++++++++++++++++++- .../webapp/src/main/elm/Comp/TagSelect.elm | 9 ++ 3 files changed, 118 insertions(+), 3 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/FolderSelect.elm b/modules/webapp/src/main/elm/Comp/FolderSelect.elm index 35d4a3da..4e516756 100644 --- a/modules/webapp/src/main/elm/Comp/FolderSelect.elm +++ b/modules/webapp/src/main/elm/Comp/FolderSelect.elm @@ -1,7 +1,9 @@ module Comp.FolderSelect exposing ( Model , Msg + , deselect , init + , setSelected , update , updateDrop , view @@ -32,6 +34,23 @@ init selected all = } +setSelected : String -> Model -> Maybe Msg +setSelected id model = + List.filter (\fi -> fi.id == id) model.all + |> List.head + |> Maybe.map Toggle + + +deselect : Model -> Maybe Msg +deselect model = + case model.selected of + Just id -> + setSelected id model + + Nothing -> + Nothing + + --- Update diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index 926ea672..264e33c8 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -191,6 +191,40 @@ getItemSearch model = } +resetModel : Model -> Model +resetModel model = + let + emptyDropdown dm = + Comp.Dropdown.update (Comp.Dropdown.SetSelection []) dm + |> Tuple.first + + emptyFolder fm = + Comp.FolderSelect.deselect fm + |> Maybe.map (\msg -> Comp.FolderSelect.update msg fm) + |> Maybe.map Tuple.first + |> Maybe.withDefault fm + in + { model + | tagSelection = Comp.TagSelect.emptySelection + , tagSelectModel = Comp.TagSelect.reset model.tagSelectModel + , directionModel = emptyDropdown model.directionModel + , orgModel = emptyDropdown model.orgModel + , corrPersonModel = emptyDropdown model.corrPersonModel + , concPersonModel = emptyDropdown model.concPersonModel + , concEquipmentModel = emptyDropdown model.concEquipmentModel + , folderList = emptyFolder model.folderList + , selectedFolder = Nothing + , inboxCheckbox = False + , fromDate = Nothing + , untilDate = Nothing + , fromDueDate = Nothing + , untilDueDate = Nothing + , nameModel = Nothing + , allNameModel = Nothing + , fulltextModel = Nothing + } + + -- Update @@ -220,6 +254,11 @@ type Msg | ToggleNameHelp | FolderSelectMsg Comp.FolderSelect.Msg | GetFolderResp (Result Http.Error FolderList) + | SetCorrOrg IdName + | SetCorrPerson IdName + | SetConcPerson IdName + | SetConcEquip IdName + | SetFolder IdName type alias NextState = @@ -237,6 +276,26 @@ update = updateDrop : DD.Model -> Flags -> UiSettings -> Msg -> Model -> NextState updateDrop ddm flags settings msg model = + let + resetAndSet : Msg -> NextState + resetAndSet m = + let + reset = + resetModel model + + set = + updateDrop ddm + flags + settings + m + reset + in + { model = set.model + , cmd = set.cmd + , stateChange = True + , dragDrop = set.dragDrop + } + in case msg of Init -> let @@ -278,11 +337,39 @@ updateDrop ddm flags settings msg model = } ResetForm -> + { model = resetModel model + , cmd = Cmd.none + , stateChange = True + , dragDrop = DD.DragDropData ddm Nothing + } + + SetCorrOrg id -> + resetAndSet (OrgMsg (Comp.Dropdown.SetSelection [ id ])) + + SetCorrPerson id -> + resetAndSet (CorrPersonMsg (Comp.Dropdown.SetSelection [ id ])) + + SetConcPerson id -> + resetAndSet (ConcPersonMsg (Comp.Dropdown.SetSelection [ id ])) + + SetFolder id -> + case Comp.FolderSelect.setSelected id.id model.folderList of + Just lm -> + resetAndSet (FolderSelectMsg lm) + + Nothing -> + { model = model + , cmd = Cmd.none + , stateChange = False + , dragDrop = DD.DragDropData ddm Nothing + } + + SetConcEquip id -> let - next = - update flags settings Init init + equip = + Equipment id.id id.name 0 in - { next | stateChange = True } + resetAndSet (ConcEquipmentMsg (Comp.Dropdown.SetSelection [ equip ])) GetTagsResp (Ok tags) -> let diff --git a/modules/webapp/src/main/elm/Comp/TagSelect.elm b/modules/webapp/src/main/elm/Comp/TagSelect.elm index 183610c1..79d3d09e 100644 --- a/modules/webapp/src/main/elm/Comp/TagSelect.elm +++ b/modules/webapp/src/main/elm/Comp/TagSelect.elm @@ -5,6 +5,7 @@ module Comp.TagSelect exposing , Selection , emptySelection , init + , reset , update , updateDrop , viewCats @@ -75,6 +76,14 @@ init sel tags = } +reset : Model -> Model +reset model = + { model + | selectedTags = Dict.empty + , selectedCats = Dict.empty + } + + sumCategories : List TagCount -> List Category sumCategories tags = let