From a5bc6b53a92f46eef4b935b11bb87b699ccdd21a Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 21 Sep 2020 14:38:40 +0200 Subject: [PATCH] Reset hidden fields on confirm On confirm hidden fields are cleared, so that no "confirmed" information is attached that the user has never seen. --- modules/webapp/src/main/elm/App/Update.elm | 8 +- .../webapp/src/main/elm/Comp/ItemDetail.elm | 2 +- .../src/main/elm/Comp/ItemDetail/Update.elm | 92 ++++++++++++++++--- .../src/main/elm/Page/ItemDetail/Update.elm | 16 +++- 4 files changed, 97 insertions(+), 21 deletions(-) diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index f7734e50..a7169e7d 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -192,7 +192,13 @@ updateItemDetail lmsg model = Page.Home.Data.itemNav model.itemDetailModel.detail.item.id model.homeModel ( lm, lc, ls ) = - Page.ItemDetail.Update.update model.key model.flags inav.next lmsg model.itemDetailModel + Page.ItemDetail.Update.update + model.key + model.flags + inav.next + model.uiSettings + lmsg + model.itemDetailModel in ( { model | itemDetailModel = lm diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail.elm b/modules/webapp/src/main/elm/Comp/ItemDetail.elm index e3cb03ba..27ba1b60 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail.elm @@ -24,7 +24,7 @@ emptyModel = Comp.ItemDetail.Model.emptyModel -update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +update : Nav.Key -> Flags -> Maybe String -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update = Comp.ItemDetail.Update.update diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm index a3d6844a..22b3d0c2 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm @@ -31,7 +31,9 @@ import Comp.PersonForm import Comp.SentMails import Comp.YesNoDimmer import Data.Direction exposing (Direction) +import Data.Fields exposing (Field) import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) import DatePicker import Dict import Html exposing (..) @@ -125,10 +127,11 @@ type Msg | StartEditCorrOrgModal | StartEditPersonModal (Comp.Dropdown.Model IdName) | StartEditEquipModal + | ResetHiddenMsg Field (Result Http.Error BasicResult) -update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -update key flags next msg model = +update : Nav.Key -> Flags -> Maybe String -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +update key flags next settings msg model = case msg of Init -> let @@ -152,12 +155,18 @@ update key flags next msg model = SetItem item -> let ( m1, c1, s1 ) = - update key flags next (TagDropdownMsg (Comp.Dropdown.SetSelection item.tags)) model + update key + flags + next + settings + (TagDropdownMsg (Comp.Dropdown.SetSelection item.tags)) + model ( m2, c2, s2 ) = update key flags next + settings (DirDropdownMsg (Comp.Dropdown.SetSelection (Data.Direction.fromString item.direction @@ -172,6 +181,7 @@ update key flags next msg model = update key flags next + settings (OrgDropdownMsg (Comp.Dropdown.SetSelection (item.corrOrg @@ -186,6 +196,7 @@ update key flags next msg model = update key flags next + settings (CorrPersonMsg (Comp.Dropdown.SetSelection (item.corrPerson @@ -200,6 +211,7 @@ update key flags next msg model = update key flags next + settings (ConcPersonMsg (Comp.Dropdown.SetSelection (item.concPerson @@ -214,6 +226,7 @@ update key flags next msg model = update key flags next + settings (ConcEquipMsg (Comp.Dropdown.SetSelection (item.concEquipment @@ -225,12 +238,13 @@ update key flags next msg model = m5 ( m7, c7, s7 ) = - update key flags next AddFilesReset m6 + update key flags next settings AddFilesReset m6 ( m8, c8, s8 ) = update key flags next + settings (FolderDropdownMsg (Comp.Dropdown.SetSelection (item.folder @@ -477,7 +491,11 @@ update key flags next msg model = noSub ( model, setNotes flags model ) ConfirmItem -> - noSub ( model, Api.setConfirmed flags model.item.id SaveResp ) + let + resetCmds = + resetHiddenFields settings flags model.item.id ResetHiddenMsg + in + noSub ( model, Cmd.batch (Api.setConfirmed flags model.item.id SaveResp :: resetCmds) ) UnconfirmItem -> noSub ( model, Api.setUnconfirmed flags model.item.id SaveResp ) @@ -535,7 +553,7 @@ update key flags next msg model = noSub ( { model | deleteItemConfirm = cm }, cmd ) RequestDelete -> - update key flags next (DeleteItemConfirm Comp.YesNoDimmer.activate) model + update key flags next settings (DeleteItemConfirm Comp.YesNoDimmer.activate) model SetCorrOrgSuggestion idname -> noSub ( model, setCorrOrg flags model (Just idname) ) @@ -574,7 +592,7 @@ update key flags next msg model = |> List.map mkIdName |> Comp.Dropdown.SetOptions in - update key flags next (FolderDropdownMsg opts) model_ + update key flags next settings (FolderDropdownMsg opts) model_ GetFolderResp (Err _) -> noSub ( model, Cmd.none ) @@ -585,7 +603,7 @@ update key flags next msg model = Comp.Dropdown.SetOptions tags.items ( m1, c1, s1 ) = - update key flags next (TagDropdownMsg tagList) model + update key flags next settings (TagDropdownMsg tagList) model in ( m1, c1, s1 ) @@ -597,7 +615,7 @@ update key flags next msg model = opts = Comp.Dropdown.SetOptions orgs.items in - update key flags next (OrgDropdownMsg opts) model + update key flags next settings (OrgDropdownMsg opts) model GetOrgResp (Err _) -> noSub ( model, Cmd.none ) @@ -608,10 +626,10 @@ update key flags next msg model = Comp.Dropdown.SetOptions ps.items ( m1, c1, s1 ) = - update key flags next (CorrPersonMsg opts) model + update key flags next settings (CorrPersonMsg opts) model ( m2, c2, s2 ) = - update key flags next (ConcPersonMsg opts) m1 + update key flags next settings (ConcPersonMsg opts) m1 in ( m2, Cmd.batch [ c1, c2 ], Sub.batch [ s1, s2 ] ) @@ -626,7 +644,7 @@ update key flags next msg model = equips.items ) in - update key flags next (ConcEquipMsg opts) model + update key flags next settings (ConcEquipMsg opts) model GetEquipResp (Err _) -> noSub ( model, Cmd.none ) @@ -657,7 +675,7 @@ update key flags next msg model = noSub ( model, Cmd.none ) GetItemResp (Ok item) -> - update key flags next (SetItem item) model + update key flags next settings (SetItem item) model GetItemResp (Err _) -> noSub ( model, Cmd.none ) @@ -852,7 +870,7 @@ update key flags next msg model = DeleteAttachResp (Ok res) -> if res.success then - update key flags next ReloadItem model + update key flags next settings ReloadItem model else noSub ( model, Cmd.none ) @@ -864,6 +882,7 @@ update key flags next msg model = update key flags next + settings (DeleteAttachConfirm id Comp.YesNoDimmer.activate) model @@ -1235,6 +1254,9 @@ update key flags next msg model = EditAttachNameResp (Err _) -> noSub ( model, Cmd.none ) + ResetHiddenMsg _ _ -> + noSub ( model, Cmd.none ) + --- Helper @@ -1372,3 +1394,45 @@ setErrored model fileid = noSub : ( Model, Cmd Msg ) -> ( Model, Cmd Msg, Sub Msg ) noSub ( m, c ) = ( m, c, Sub.none ) + + +resetField : Flags -> String -> (Field -> Result Http.Error BasicResult -> msg) -> Field -> Cmd msg +resetField flags item tagger field = + case field of + Data.Fields.Tag -> + Api.setTags flags item Api.Model.ReferenceList.empty (tagger Data.Fields.Tag) + + Data.Fields.Folder -> + Api.setFolder flags item Api.Model.OptionalId.empty (tagger Data.Fields.Folder) + + Data.Fields.CorrOrg -> + Api.setCorrOrg flags item Api.Model.OptionalId.empty (tagger Data.Fields.CorrOrg) + + Data.Fields.CorrPerson -> + Api.setCorrPerson flags item Api.Model.OptionalId.empty (tagger Data.Fields.CorrPerson) + + Data.Fields.ConcPerson -> + Api.setConcPerson flags item Api.Model.OptionalId.empty (tagger Data.Fields.ConcPerson) + + Data.Fields.ConcEquip -> + Api.setConcEquip flags item Api.Model.OptionalId.empty (tagger Data.Fields.ConcEquip) + + Data.Fields.Date -> + Api.setItemDate flags item Api.Model.OptionalDate.empty (tagger Data.Fields.Date) + + Data.Fields.DueDate -> + Api.setItemDueDate flags item Api.Model.OptionalDate.empty (tagger Data.Fields.DueDate) + + Data.Fields.Direction -> + Cmd.none + + +resetHiddenFields : + UiSettings + -> Flags + -> String + -> (Field -> Result Http.Error BasicResult -> msg) + -> List (Cmd msg) +resetHiddenFields settings flags item tagger = + List.filter (Data.UiSettings.fieldHidden settings) Data.Fields.all + |> List.map (resetField flags item tagger) diff --git a/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm b/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm index 4313d988..b1a6abe9 100644 --- a/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm +++ b/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm @@ -5,18 +5,24 @@ import Browser.Navigation as Nav import Comp.ItemDetail import Comp.ItemDetail.Update import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) import Page.ItemDetail.Data exposing (Model, Msg(..)) import Scroll import Task -update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -update key flags next msg model = +update : Nav.Key -> Flags -> Maybe String -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +update key flags next settings msg model = case msg of Init id -> let ( lm, lc, ls ) = - Comp.ItemDetail.update key flags next Comp.ItemDetail.Update.Init model.detail + Comp.ItemDetail.update key + flags + next + settings + Comp.ItemDetail.Update.Init + model.detail task = Scroll.scroll "main-content" 0 0 0 0 @@ -33,7 +39,7 @@ update key flags next msg model = ItemDetailMsg lmsg -> let ( lm, lc, ls ) = - Comp.ItemDetail.update key flags next lmsg model.detail + Comp.ItemDetail.update key flags next settings lmsg model.detail in ( { model | detail = lm } , Cmd.map ItemDetailMsg lc @@ -45,7 +51,7 @@ update key flags next msg model = lmsg = Comp.ItemDetail.Update.SetItem item in - update key flags next (ItemDetailMsg lmsg) model + update key flags next settings (ItemDetailMsg lmsg) model ItemResp (Err _) -> ( model, Cmd.none, Sub.none )