From 57ab050cf7abd386c0fbd5235bada3cb1b2c99da Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 21 Sep 2020 13:47:35 +0200 Subject: [PATCH 1/4] Remove hidden fields from item details --- .../src/main/elm/Comp/ItemDetail/View.elm | 86 +++++++++++-------- 1 file changed, 51 insertions(+), 35 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm index efef7f41..396507d8 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm @@ -553,7 +553,7 @@ renderItemInfo : UiSettings -> Model -> Html Msg renderItemInfo settings model = let date = - div + ( div [ class "item" , title "Item Date" ] @@ -561,9 +561,11 @@ renderItemInfo settings model = |> Util.Time.formatDate |> text ] + , Data.UiSettings.fieldVisible settings Data.Fields.Date + ) duedate = - div + ( div [ class "item" , title "Due Date" ] @@ -572,9 +574,12 @@ renderItemInfo settings model = |> Maybe.withDefault "" |> text ] + , Data.UiSettings.fieldVisible settings Data.Fields.DueDate + && Util.Maybe.nonEmpty model.item.dueDate + ) corr = - div + ( div [ class "item" , title "Correspondent" ] @@ -585,9 +590,12 @@ renderItemInfo settings model = |> Util.String.withDefault "(None)" |> text ] + , Data.UiSettings.fieldVisible settings Data.Fields.CorrOrg + || Data.UiSettings.fieldVisible settings Data.Fields.CorrPerson + ) conc = - div + ( div [ class "item" , title "Concerning" ] @@ -598,9 +606,12 @@ renderItemInfo settings model = |> Util.String.withDefault "(None)" |> text ] + , Data.UiSettings.fieldVisible settings Data.Fields.ConcEquip + || Data.UiSettings.fieldVisible settings Data.Fields.ConcPerson + ) itemfolder = - div + ( div [ class "item" , title "Folder" ] @@ -609,21 +620,28 @@ renderItemInfo settings model = |> Maybe.withDefault "-" |> text ] + , Data.UiSettings.fieldVisible settings Data.Fields.Folder + ) src = - div + ( div [ class "item" , title "Source" ] [ text model.item.source ] + , True + ) in div [ class "ui fluid container" ] (h2 [ class "ui header" ] [ i - [ class (Data.Direction.iconFromString model.item.direction) + [ classList + [ ( Data.Direction.iconFromString model.item.direction, True ) + , ( "hidden invisible", Data.UiSettings.fieldHidden settings Data.Fields.Direction ) + ] , title model.item.direction ] [] @@ -638,20 +656,17 @@ renderItemInfo settings model = [ text "New!" ] , div [ class "sub header" ] - [ div [ class "ui horizontal bulleted list" ] <| - List.append + [ div [ class "ui horizontal bulleted list" ] + (List.filter Tuple.second [ date , corr , conc , itemfolder , src + , duedate ] - (if Util.Maybe.isEmpty model.item.dueDate then - [] - - else - [ duedate ] - ) + |> List.map Tuple.first + ) ] ] ] @@ -661,25 +676,29 @@ renderItemInfo settings model = renderTags : UiSettings -> Model -> List (Html Msg) renderTags settings model = - case model.item.tags of - [] -> - [] + if Data.UiSettings.fieldHidden settings Data.Fields.Tag then + [] - _ -> - [ div [ class "ui right aligned fluid container" ] <| - List.map - (\t -> - div - [ classList - [ ( "ui tag label", True ) - , ( Data.UiSettings.tagColorString t settings, True ) + else + case model.item.tags of + [] -> + [] + + _ -> + [ div [ class "ui right aligned fluid container" ] <| + List.map + (\t -> + div + [ classList + [ ( "ui tag label", True ) + , ( Data.UiSettings.tagColorString t settings, True ) + ] ] - ] - [ text t.name - ] - ) - model.item.tags - ] + [ text t.name + ] + ) + model.item.tags + ] renderEditMenu : UiSettings -> Model -> List (Html Msg) @@ -759,9 +778,6 @@ renderEditForm settings model = fieldVisible field = Data.UiSettings.fieldVisible settings field - fieldHidden field = - Data.UiSettings.fieldHidden settings field - optional fields html = if List.map fieldVisible fields From 9958d228bd112a0a6bfe359f5f8f9354d8fdb033 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 21 Sep 2020 14:08:13 +0200 Subject: [PATCH 2/4] Remove hidden fields from list view --- .../webapp/src/main/elm/Comp/ItemCardList.elm | 66 ++++++++++++++----- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/ItemCardList.elm b/modules/webapp/src/main/elm/Comp/ItemCardList.elm index dbfbfc50..17c4bf5d 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCardList.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCardList.elm @@ -14,6 +14,7 @@ import Api.Model.ItemLight exposing (ItemLight) import Api.Model.ItemLightGroup exposing (ItemLightGroup) import Api.Model.ItemLightList exposing (ItemLightList) import Data.Direction +import Data.Fields import Data.Flags exposing (Flags) import Data.Icons as Icons import Data.Items @@ -169,6 +170,9 @@ viewItem current settings item = newColor = "blue" + + fieldHidden f = + Data.UiSettings.fieldHidden settings f in a ([ classList @@ -183,15 +187,21 @@ viewItem current settings item = ++ DD.draggable ItemDDMsg item.id ) [ div [ class "content" ] - [ div - [ class "header" - , Data.Direction.labelFromMaybe item.direction - |> title - ] - [ dirIcon - , Util.String.underscoreToSpace item.name - |> text - ] + [ if fieldHidden Data.Fields.Direction then + div [ class "header" ] + [ Util.String.underscoreToSpace item.name |> text + ] + + else + div + [ class "header" + , Data.Direction.labelFromMaybe item.direction + |> title + ] + [ dirIcon + , Util.String.underscoreToSpace item.name + |> text + ] , div [ classList [ ( "ui right corner label", True ) @@ -202,16 +212,19 @@ viewItem current settings item = ] [ i [ class "exclamation icon" ] [] ] - , div [ class "meta" ] - [ span [] - [ Util.Time.formatDate item.date |> text + , div + [ classList + [ ( "meta", True ) + , ( "invisible hidden", fieldHidden Data.Fields.Date ) ] ] + [ Util.Time.formatDate item.date |> text + ] , div [ class "meta description" ] [ div [ classList [ ( "ui right floated tiny labels", True ) - , ( "invisible hidden", item.tags == [] ) + , ( "invisible hidden", item.tags == [] || fieldHidden Data.Fields.Tag ) ] ] (List.map @@ -247,7 +260,13 @@ viewItem current settings item = , div [ class "content" ] [ div [ class "ui horizontal list" ] [ div - [ class "item" + [ classList + [ ( "item", True ) + , ( "invisible hidden" + , fieldHidden Data.Fields.CorrOrg + && fieldHidden Data.Fields.CorrPerson + ) + ] , title "Correspondent" ] [ Icons.correspondentIcon "" @@ -255,7 +274,13 @@ viewItem current settings item = , Util.String.withDefault "-" corr |> text ] , div - [ class "item" + [ classList + [ ( "item", True ) + , ( "invisible hidden" + , fieldHidden Data.Fields.ConcPerson + && fieldHidden Data.Fields.ConcEquip + ) + ] , title "Concerning" ] [ Icons.concernedIcon @@ -263,7 +288,10 @@ viewItem current settings item = , Util.String.withDefault "-" conc |> text ] , div - [ class "item" + [ classList + [ ( "item", True ) + , ( "invisible hidden", fieldHidden Data.Fields.Folder ) + ] , title "Folder" ] [ Icons.folderIcon "" @@ -282,7 +310,11 @@ viewItem current settings item = , div [ classList [ ( "item", True ) - , ( "invisible hidden", item.dueDate == Nothing ) + , ( "invisible hidden" + , item.dueDate + == Nothing + || fieldHidden Data.Fields.DueDate + ) ] , title ("Due on " ++ dueDate) ] From ed1d13e71252ee9d2bd2823f090a44fed08a70fd Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 21 Sep 2020 14:10:31 +0200 Subject: [PATCH 3/4] Hide folder menu entry if folder field is not active --- modules/webapp/src/main/elm/Page/ManageData/View.elm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/webapp/src/main/elm/Page/ManageData/View.elm b/modules/webapp/src/main/elm/Page/ManageData/View.elm index b7d853fb..d927fd48 100644 --- a/modules/webapp/src/main/elm/Page/ManageData/View.elm +++ b/modules/webapp/src/main/elm/Page/ManageData/View.elm @@ -5,6 +5,7 @@ import Comp.FolderManage import Comp.OrgManage import Comp.PersonManage import Comp.TagManage +import Data.Fields import Data.Flags exposing (Flags) import Data.Icons as Icons import Data.UiSettings exposing (UiSettings) @@ -54,6 +55,11 @@ view flags settings model = ] , div [ classActive (model.currentTab == Just FolderTab) "link icon item" + , classList + [ ( "invisible hidden" + , Data.UiSettings.fieldHidden settings Data.Fields.Folder + ) + ] , onClick (SetTab FolderTab) ] [ Icons.folderIcon "" From a5bc6b53a92f46eef4b935b11bb87b699ccdd21a Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 21 Sep 2020 14:38:40 +0200 Subject: [PATCH 4/4] 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 )