diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index b5323195..226b3740 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -141,6 +141,8 @@ module Api exposing , setTags , setTagsMultiple , setUnconfirmed + , shareAttachmentPreviewURL + , shareItemBasePreviewURL , startClassifier , startEmptyTrash , startOnceNotifyDueItems @@ -2288,6 +2290,16 @@ searchShare flags token search receive = } +shareAttachmentPreviewURL : String -> String +shareAttachmentPreviewURL id = + "/api/v1/share/attachment/" ++ id ++ "/preview?withFallback=true" + + +shareItemBasePreviewURL : String -> String +shareItemBasePreviewURL itemId = + "/api/v1/share/item/" ++ itemId ++ "/preview?withFallback=true" + + --- Helper diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index 9fd19ff3..b4ce9786 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -56,6 +56,8 @@ type Msg type alias ViewConfig = { selection : ItemSelection , extraClasses : String + , previewUrl : AttachmentLight -> String + , previewUrlFallback : ItemLight -> String } @@ -160,7 +162,7 @@ view2 texts cfg settings model item = "text-blue-500 dark:text-lightblue-500" else if isDeleted then - "text-red-600 dark:text-orange-600" + "text-red-600 dark:text-orange-600" else "" @@ -210,7 +212,7 @@ view2 texts cfg settings model item = [] else - [ previewImage2 settings cardAction model item + [ previewImage2 cfg settings cardAction model item ] ) ++ [ mainContent2 texts cardAction cardColor isCreated isDeleted settings cfg item @@ -443,16 +445,15 @@ mainTagsAndFields2 settings item = (renderFields ++ renderTags) -previewImage2 : UiSettings -> List (Attribute Msg) -> Model -> ItemLight -> Html Msg -previewImage2 settings cardAction model item = +previewImage2 : ViewConfig -> UiSettings -> List (Attribute Msg) -> Model -> ItemLight -> Html Msg +previewImage2 cfg settings cardAction model item = let mainAttach = currentAttachment model item previewUrl = - Maybe.map .id mainAttach - |> Maybe.map Api.attachmentPreviewURL - |> Maybe.withDefault (Api.itemBasePreviewURL item.id) + Maybe.map cfg.previewUrl mainAttach + |> Maybe.withDefault (cfg.previewUrlFallback item) in a ([ class "overflow-hidden block bg-gray-50 dark:bg-bluegray-700 dark:bg-opacity-40 border-gray-400 dark:hover:border-bluegray-500 rounded-t-lg" diff --git a/modules/webapp/src/main/elm/Comp/ItemCardList.elm b/modules/webapp/src/main/elm/Comp/ItemCardList.elm index 0d0c97e0..6c66004d 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCardList.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCardList.elm @@ -17,6 +17,7 @@ module Comp.ItemCardList exposing , view2 ) +import Api.Model.AttachmentLight exposing (AttachmentLight) import Api.Model.ItemLight exposing (ItemLight) import Api.Model.ItemLightGroup exposing (ItemLightGroup) import Api.Model.ItemLightList exposing (ItemLightList) @@ -72,13 +73,13 @@ prevItem model id = --- Update -update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update : Flags -> Msg -> Model -> ( Model, Cmd Msg, LinkTarget ) update flags msg model = let res = updateDrag DD.init flags msg model in - ( res.model, res.cmd ) + ( res.model, res.cmd, res.linkTarget ) type alias UpdateResult = @@ -161,6 +162,8 @@ updateDrag dm _ msg model = type alias ViewConfig = { current : Maybe String , selection : ItemSelection + , previewUrl : AttachmentLight -> String + , previewUrlFallback : ItemLight -> String } @@ -216,7 +219,7 @@ viewItem2 texts model cfg settings item = "" vvcfg = - Comp.ItemCard.ViewConfig cfg.selection currentClass + Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback cardModel = Dict.get item.id model.itemCards diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index e29d52aa..5a2aa5f7 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -14,6 +14,7 @@ module Comp.SearchMenu exposing , init , isFulltextSearch , isNamesSearch + , linkTargetMsg , textSearchString , update , updateDrop @@ -34,6 +35,7 @@ import Comp.CustomFieldMultiInput import Comp.DatePicker import Comp.Dropdown exposing (isDropdownChangeMsg) import Comp.FolderSelect +import Comp.LinkTarget exposing (LinkTarget) import Comp.MenuBar as MB import Comp.Tabs import Comp.TagSelect @@ -377,6 +379,37 @@ type Msg | ToggleOpenAllAkkordionTabs +linkTargetMsg : LinkTarget -> Maybe Msg +linkTargetMsg linkTarget = + case linkTarget of + Comp.LinkTarget.LinkNone -> + Nothing + + Comp.LinkTarget.LinkCorrOrg id -> + Just <| SetCorrOrg id + + Comp.LinkTarget.LinkCorrPerson id -> + Just <| SetCorrPerson id + + Comp.LinkTarget.LinkConcPerson id -> + Just <| SetConcPerson id + + Comp.LinkTarget.LinkConcEquip id -> + Just <| SetConcEquip id + + Comp.LinkTarget.LinkFolder id -> + Just <| SetFolder id + + Comp.LinkTarget.LinkTag id -> + Just <| SetTag id.id + + Comp.LinkTarget.LinkCustomField id -> + Just <| SetCustomField id + + Comp.LinkTarget.LinkSource str -> + Just <| ResetToSource str + + type alias NextState = { model : Model , cmd : Cmd Msg diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index 00ebfe9a..edebe2f0 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -1035,33 +1035,7 @@ doSearch param model = linkTargetMsg : LinkTarget -> Maybe Msg linkTargetMsg linkTarget = - case linkTarget of - Comp.LinkTarget.LinkNone -> - Nothing - - Comp.LinkTarget.LinkCorrOrg id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetCorrOrg id) - - Comp.LinkTarget.LinkCorrPerson id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetCorrPerson id) - - Comp.LinkTarget.LinkConcPerson id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetConcPerson id) - - Comp.LinkTarget.LinkConcEquip id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetConcEquip id) - - Comp.LinkTarget.LinkFolder id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetFolder id) - - Comp.LinkTarget.LinkTag id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetTag id.id) - - Comp.LinkTarget.LinkCustomField id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetCustomField id) - - Comp.LinkTarget.LinkSource str -> - Just <| SearchMenuMsg (Comp.SearchMenu.ResetToSource str) + Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget) doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg ) diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index 63f39957..b0ca349e 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -7,6 +7,7 @@ module Page.Home.View2 exposing (viewContent, viewSidebar) +import Api import Comp.Basic as B import Comp.ConfirmModal import Comp.ItemCardList @@ -461,17 +462,27 @@ searchStats texts _ settings model = itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg) itemCardList texts _ settings model = let + previewUrl attach = + Api.attachmentPreviewURL attach.id + + previewUrlFallback item = + Api.itemBasePreviewURL item.id + itemViewCfg = case model.viewMode of SelectView svm -> Comp.ItemCardList.ViewConfig model.scrollToCard (Data.ItemSelection.Active svm.ids) + previewUrl + previewUrlFallback _ -> Comp.ItemCardList.ViewConfig model.scrollToCard Data.ItemSelection.Inactive + previewUrl + previewUrlFallback in [ Html.map ItemCardListMsg (Comp.ItemCardList.view2 texts.itemCardList diff --git a/modules/webapp/src/main/elm/Page/Share/Menubar.elm b/modules/webapp/src/main/elm/Page/Share/Menubar.elm index 10751839..eb490c37 100644 --- a/modules/webapp/src/main/elm/Page/Share/Menubar.elm +++ b/modules/webapp/src/main/elm/Page/Share/Menubar.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.Share.Menubar exposing (view) import Comp.Basic as B diff --git a/modules/webapp/src/main/elm/Page/Share/Results.elm b/modules/webapp/src/main/elm/Page/Share/Results.elm index b513e936..c50af9e8 100644 --- a/modules/webapp/src/main/elm/Page/Share/Results.elm +++ b/modules/webapp/src/main/elm/Page/Share/Results.elm @@ -1,5 +1,13 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.Share.Results exposing (view) +import Api import Comp.ItemCardList import Data.ItemSelection import Data.UiSettings exposing (UiSettings) @@ -15,6 +23,8 @@ view texts settings model = viewCfg = { current = Nothing , selection = Data.ItemSelection.Inactive + , previewUrl = \attach -> Api.shareAttachmentPreviewURL attach.id + , previewUrlFallback = \item -> Api.shareItemBasePreviewURL item.id } in div [] diff --git a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm index abd0d8f4..31a8ee1b 100644 --- a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm +++ b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.Share.Sidebar exposing (..) import Comp.SearchMenu diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm index f7be7d99..56070017 100644 --- a/modules/webapp/src/main/elm/Page/Share/Update.elm +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -10,6 +10,7 @@ module Page.Share.Update exposing (UpdateResult, update) import Api import Api.Model.ItemQuery import Comp.ItemCardList +import Comp.LinkTarget exposing (LinkTarget) import Comp.PowerSearchInput import Comp.SearchMenu import Data.Flags exposing (Flags) @@ -17,6 +18,7 @@ import Data.ItemQuery as Q import Data.SearchMode import Data.UiSettings exposing (UiSettings) import Page.Share.Data exposing (..) +import Util.Update type alias UpdateResult = @@ -155,10 +157,17 @@ update flags settings shareId msg model = ItemListMsg lm -> let - ( im, ic ) = + ( im, ic, linkTarget ) = Comp.ItemCardList.update flags lm model.itemListModel + + searchMsg = + Maybe.map Util.Update.cmdUnit (linkTargetMsg linkTarget) + |> Maybe.withDefault Cmd.none in - noSub ( { model | itemListModel = im }, Cmd.map ItemListMsg ic ) + noSub + ( { model | itemListModel = im } + , Cmd.batch [ Cmd.map ItemListMsg ic, searchMsg ] + ) noSub : ( Model, Cmd Msg ) -> UpdateResult @@ -184,3 +193,8 @@ makeSearchCmd flags model = } in Api.searchShare flags model.verifyResult.token (request xq) SearchResp + + +linkTargetMsg : LinkTarget -> Maybe Msg +linkTargetMsg linkTarget = + Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget)