mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-06 15:15:58 +00:00
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:
parent
83dd675e4f
commit
7b0f378558
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -160,7 +162,7 @@ view2 texts cfg settings model item =
|
|||||||
"text-blue-500 dark:text-lightblue-500"
|
"text-blue-500 dark:text-lightblue-500"
|
||||||
|
|
||||||
else if isDeleted then
|
else if isDeleted then
|
||||||
"text-red-600 dark:text-orange-600"
|
"text-red-600 dark:text-orange-600"
|
||||||
|
|
||||||
else
|
else
|
||||||
""
|
""
|
||||||
@ -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"
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 )
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 []
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user