Refactor to allow internal card links into search menu

Also allows to exchange the preview-url in the item card
This commit is contained in:
eikek 2021-10-05 01:44:50 +02:00
parent 83dd675e4f
commit 7b0f378558
10 changed files with 111 additions and 39 deletions

View File

@ -141,6 +141,8 @@ module Api exposing
, setTags , setTags
, setTagsMultiple , setTagsMultiple
, setUnconfirmed , setUnconfirmed
, shareAttachmentPreviewURL
, shareItemBasePreviewURL
, startClassifier , startClassifier
, startEmptyTrash , startEmptyTrash
, startOnceNotifyDueItems , 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 --- Helper

View File

@ -56,6 +56,8 @@ type Msg
type alias ViewConfig = type alias ViewConfig =
{ selection : ItemSelection { selection : ItemSelection
, extraClasses : String , extraClasses : String
, previewUrl : AttachmentLight -> String
, previewUrlFallback : ItemLight -> String
} }
@ -210,7 +212,7 @@ view2 texts cfg settings model item =
[] []
else else
[ previewImage2 settings cardAction model item [ previewImage2 cfg settings cardAction model item
] ]
) )
++ [ mainContent2 texts cardAction cardColor isCreated isDeleted settings cfg item ++ [ mainContent2 texts cardAction cardColor isCreated isDeleted settings cfg item
@ -443,16 +445,15 @@ mainTagsAndFields2 settings item =
(renderFields ++ renderTags) (renderFields ++ renderTags)
previewImage2 : UiSettings -> List (Attribute Msg) -> Model -> ItemLight -> Html Msg previewImage2 : ViewConfig -> UiSettings -> List (Attribute Msg) -> Model -> ItemLight -> Html Msg
previewImage2 settings cardAction model item = previewImage2 cfg settings cardAction model item =
let let
mainAttach = mainAttach =
currentAttachment model item currentAttachment model item
previewUrl = previewUrl =
Maybe.map .id mainAttach Maybe.map cfg.previewUrl mainAttach
|> Maybe.map Api.attachmentPreviewURL |> Maybe.withDefault (cfg.previewUrlFallback item)
|> Maybe.withDefault (Api.itemBasePreviewURL item.id)
in in
a 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" ([ 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"

View File

@ -17,6 +17,7 @@ module Comp.ItemCardList exposing
, view2 , view2
) )
import Api.Model.AttachmentLight exposing (AttachmentLight)
import Api.Model.ItemLight exposing (ItemLight) import Api.Model.ItemLight exposing (ItemLight)
import Api.Model.ItemLightGroup exposing (ItemLightGroup) import Api.Model.ItemLightGroup exposing (ItemLightGroup)
import Api.Model.ItemLightList exposing (ItemLightList) import Api.Model.ItemLightList exposing (ItemLightList)
@ -72,13 +73,13 @@ prevItem model id =
--- Update --- Update
update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) update : Flags -> Msg -> Model -> ( Model, Cmd Msg, LinkTarget )
update flags msg model = update flags msg model =
let let
res = res =
updateDrag DD.init flags msg model updateDrag DD.init flags msg model
in in
( res.model, res.cmd ) ( res.model, res.cmd, res.linkTarget )
type alias UpdateResult = type alias UpdateResult =
@ -161,6 +162,8 @@ updateDrag dm _ msg model =
type alias ViewConfig = type alias ViewConfig =
{ current : Maybe String { current : Maybe String
, selection : ItemSelection , selection : ItemSelection
, previewUrl : AttachmentLight -> String
, previewUrlFallback : ItemLight -> String
} }
@ -216,7 +219,7 @@ viewItem2 texts model cfg settings item =
"" ""
vvcfg = vvcfg =
Comp.ItemCard.ViewConfig cfg.selection currentClass Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback
cardModel = cardModel =
Dict.get item.id model.itemCards Dict.get item.id model.itemCards

View File

@ -14,6 +14,7 @@ module Comp.SearchMenu exposing
, init , init
, isFulltextSearch , isFulltextSearch
, isNamesSearch , isNamesSearch
, linkTargetMsg
, textSearchString , textSearchString
, update , update
, updateDrop , updateDrop
@ -34,6 +35,7 @@ import Comp.CustomFieldMultiInput
import Comp.DatePicker import Comp.DatePicker
import Comp.Dropdown exposing (isDropdownChangeMsg) import Comp.Dropdown exposing (isDropdownChangeMsg)
import Comp.FolderSelect import Comp.FolderSelect
import Comp.LinkTarget exposing (LinkTarget)
import Comp.MenuBar as MB import Comp.MenuBar as MB
import Comp.Tabs import Comp.Tabs
import Comp.TagSelect import Comp.TagSelect
@ -377,6 +379,37 @@ type Msg
| ToggleOpenAllAkkordionTabs | 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 = type alias NextState =
{ model : Model { model : Model
, cmd : Cmd Msg , cmd : Cmd Msg

View File

@ -1035,33 +1035,7 @@ doSearch param model =
linkTargetMsg : LinkTarget -> Maybe Msg linkTargetMsg : LinkTarget -> Maybe Msg
linkTargetMsg linkTarget = linkTargetMsg linkTarget =
case linkTarget of Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget)
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)
doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg ) doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )

View File

@ -7,6 +7,7 @@
module Page.Home.View2 exposing (viewContent, viewSidebar) module Page.Home.View2 exposing (viewContent, viewSidebar)
import Api
import Comp.Basic as B import Comp.Basic as B
import Comp.ConfirmModal import Comp.ConfirmModal
import Comp.ItemCardList import Comp.ItemCardList
@ -461,17 +462,27 @@ searchStats texts _ settings model =
itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg) itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
itemCardList texts _ settings model = itemCardList texts _ settings model =
let let
previewUrl attach =
Api.attachmentPreviewURL attach.id
previewUrlFallback item =
Api.itemBasePreviewURL item.id
itemViewCfg = itemViewCfg =
case model.viewMode of case model.viewMode of
SelectView svm -> SelectView svm ->
Comp.ItemCardList.ViewConfig Comp.ItemCardList.ViewConfig
model.scrollToCard model.scrollToCard
(Data.ItemSelection.Active svm.ids) (Data.ItemSelection.Active svm.ids)
previewUrl
previewUrlFallback
_ -> _ ->
Comp.ItemCardList.ViewConfig Comp.ItemCardList.ViewConfig
model.scrollToCard model.scrollToCard
Data.ItemSelection.Inactive Data.ItemSelection.Inactive
previewUrl
previewUrlFallback
in in
[ Html.map ItemCardListMsg [ Html.map ItemCardListMsg
(Comp.ItemCardList.view2 texts.itemCardList (Comp.ItemCardList.view2 texts.itemCardList

View File

@ -1,3 +1,10 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.Share.Menubar exposing (view) module Page.Share.Menubar exposing (view)
import Comp.Basic as B import Comp.Basic as B

View File

@ -1,5 +1,13 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.Share.Results exposing (view) module Page.Share.Results exposing (view)
import Api
import Comp.ItemCardList import Comp.ItemCardList
import Data.ItemSelection import Data.ItemSelection
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
@ -15,6 +23,8 @@ view texts settings model =
viewCfg = viewCfg =
{ current = Nothing { current = Nothing
, selection = Data.ItemSelection.Inactive , selection = Data.ItemSelection.Inactive
, previewUrl = \attach -> Api.shareAttachmentPreviewURL attach.id
, previewUrlFallback = \item -> Api.shareItemBasePreviewURL item.id
} }
in in
div [] div []

View File

@ -1,3 +1,10 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.Share.Sidebar exposing (..) module Page.Share.Sidebar exposing (..)
import Comp.SearchMenu import Comp.SearchMenu

View File

@ -10,6 +10,7 @@ module Page.Share.Update exposing (UpdateResult, update)
import Api import Api
import Api.Model.ItemQuery import Api.Model.ItemQuery
import Comp.ItemCardList import Comp.ItemCardList
import Comp.LinkTarget exposing (LinkTarget)
import Comp.PowerSearchInput import Comp.PowerSearchInput
import Comp.SearchMenu import Comp.SearchMenu
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
@ -17,6 +18,7 @@ import Data.ItemQuery as Q
import Data.SearchMode import Data.SearchMode
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Page.Share.Data exposing (..) import Page.Share.Data exposing (..)
import Util.Update
type alias UpdateResult = type alias UpdateResult =
@ -155,10 +157,17 @@ update flags settings shareId msg model =
ItemListMsg lm -> ItemListMsg lm ->
let let
( im, ic ) = ( im, ic, linkTarget ) =
Comp.ItemCardList.update flags lm model.itemListModel Comp.ItemCardList.update flags lm model.itemListModel
searchMsg =
Maybe.map Util.Update.cmdUnit (linkTargetMsg linkTarget)
|> Maybe.withDefault Cmd.none
in 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 noSub : ( Model, Cmd Msg ) -> UpdateResult
@ -184,3 +193,8 @@ makeSearchCmd flags model =
} }
in in
Api.searchShare flags model.verifyResult.token (request xq) SearchResp Api.searchShare flags model.verifyResult.token (request xq) SearchResp
linkTargetMsg : LinkTarget -> Maybe Msg
linkTargetMsg linkTarget =
Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget)