mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Select linked items from search page
- Quickly select related items from the search view - Include related items with item details to spare another request
This commit is contained in:
@ -34,7 +34,6 @@ import Html.Events exposing (onClick)
|
||||
import Markdown
|
||||
import Messages.Comp.ItemCard exposing (Texts)
|
||||
import Page exposing (Page(..))
|
||||
import Set exposing (Set)
|
||||
import Styles as S
|
||||
import Util.CustomField
|
||||
import Util.ItemDragDrop as DD
|
||||
@ -336,7 +335,7 @@ viewRow texts cfg settings flags model item =
|
||||
, IT.render subtitleTemplate (templateCtx texts) item |> text
|
||||
]
|
||||
, div [ class "opacity-90" ]
|
||||
[ mainTagsAndFields2 settings "flex truncate overflow-hidden flex-nowrap text-xs justify-start hidden md:flex" item
|
||||
[ mainTagsAndFields2 texts settings "flex truncate overflow-hidden flex-nowrap text-xs justify-start hidden md:flex" item
|
||||
]
|
||||
]
|
||||
]
|
||||
@ -449,7 +448,7 @@ viewRow texts cfg settings flags model item =
|
||||
(IT.render IT.source (templateCtx texts) item)
|
||||
]
|
||||
]
|
||||
, mainTagsAndFields2 settings "justify-start text-sm" item
|
||||
, mainTagsAndFields2 texts settings "justify-start text-sm" item
|
||||
, notesContent2 settings item
|
||||
]
|
||||
]
|
||||
@ -718,13 +717,13 @@ mainContent2 texts _ cardColor isCreated isDeleted settings _ item =
|
||||
, IT.render subtitlePattern (templateCtx texts) item |> text
|
||||
]
|
||||
, div [ class "" ]
|
||||
[ mainTagsAndFields2 settings "justify-end text-xs" item
|
||||
[ mainTagsAndFields2 texts settings "justify-end text-xs" item
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
mainTagsAndFields2 : UiSettings -> String -> ItemLight -> Html Msg
|
||||
mainTagsAndFields2 settings extraCss item =
|
||||
mainTagsAndFields2 : Texts -> UiSettings -> String -> ItemLight -> Html Msg
|
||||
mainTagsAndFields2 texts settings extraCss item =
|
||||
let
|
||||
fieldHidden f =
|
||||
Data.UiSettings.fieldHidden settings f
|
||||
@ -765,6 +764,22 @@ mainTagsAndFields2 settings extraCss item =
|
||||
|
||||
else
|
||||
List.map showTag item.tags
|
||||
|
||||
renderRelated =
|
||||
if List.isEmpty item.relatedItems then
|
||||
[]
|
||||
|
||||
else
|
||||
[ a
|
||||
[ class "label ml-1 mt-1 font-semibold hover:opacity-75 py-1"
|
||||
, class "border-gray-500 dark:border-slate-300"
|
||||
, href "#"
|
||||
, onClick (SetLinkTarget <| Comp.LinkTarget.LinkRelatedItems (item.id :: item.relatedItems))
|
||||
, title texts.showRelatedItems
|
||||
]
|
||||
[ i [ class "fa fa-link" ] []
|
||||
]
|
||||
]
|
||||
in
|
||||
div
|
||||
[ classList
|
||||
@ -773,7 +788,7 @@ mainTagsAndFields2 settings extraCss item =
|
||||
]
|
||||
, class extraCss
|
||||
]
|
||||
(renderFields ++ renderTags)
|
||||
(renderFields ++ renderTags ++ renderRelated)
|
||||
|
||||
|
||||
previewImage2 : Texts -> ViewConfig -> UiSettings -> Model -> ItemLight -> Html Msg
|
||||
|
@ -97,12 +97,12 @@ update inav env msg model =
|
||||
( cm, cc ) =
|
||||
Comp.CustomFieldMultiInput.init env.flags
|
||||
|
||||
( ilm, ilc ) =
|
||||
ilm =
|
||||
if model.item.id == "" then
|
||||
( model.itemLinkModel, Cmd.none )
|
||||
model.itemLinkModel
|
||||
|
||||
else
|
||||
Comp.ItemLinkForm.init env.flags model.item.id
|
||||
Comp.ItemLinkForm.initWith model.item.id model.item.relatedItems
|
||||
in
|
||||
resultModelCmd
|
||||
( { model
|
||||
@ -120,7 +120,6 @@ update inav env msg model =
|
||||
, Cmd.map DueDatePickerMsg dpc
|
||||
, Cmd.map ItemMailMsg ic
|
||||
, Cmd.map CustomFieldMsg cc
|
||||
, Cmd.map ItemLinkFormMsg ilc
|
||||
, Api.getSentMails env.flags model.item.id SentMailsResp
|
||||
]
|
||||
)
|
||||
|
@ -5,7 +5,7 @@
|
||||
-}
|
||||
|
||||
|
||||
module Comp.ItemLinkForm exposing (Model, Msg, emptyModel, init, update, view)
|
||||
module Comp.ItemLinkForm exposing (Model, Msg, emptyModel, init, initWith, update, view)
|
||||
|
||||
import Api
|
||||
import Api.Model.BasicResult exposing (BasicResult)
|
||||
@ -67,6 +67,20 @@ type Msg
|
||||
| ToggleEditMode
|
||||
|
||||
|
||||
initWith : String -> List ItemLight -> Model
|
||||
initWith target related =
|
||||
let
|
||||
cfg =
|
||||
Comp.ItemSearchInput.defaultConfig
|
||||
in
|
||||
{ itemSearchModel = Comp.ItemSearchInput.init cfg
|
||||
, relatedItems = related
|
||||
, targetItemId = target
|
||||
, editMode = AddRelated
|
||||
, formState = FormOk
|
||||
}
|
||||
|
||||
|
||||
init : Flags -> String -> ( Model, Cmd Msg )
|
||||
init flags itemId =
|
||||
let
|
||||
|
@ -36,6 +36,7 @@ type LinkTarget
|
||||
| LinkCustomField ItemFieldValue
|
||||
| LinkSource String
|
||||
| LinkBookmark String
|
||||
| LinkRelatedItems (List String)
|
||||
| LinkNone
|
||||
|
||||
|
||||
|
@ -104,6 +104,7 @@ type alias Model =
|
||||
, sourceModel : Maybe String
|
||||
, allBookmarks : Comp.BookmarkChooser.Model
|
||||
, selectedBookmarks : Comp.BookmarkChooser.Selection
|
||||
, selectedItems : List String
|
||||
, includeSelection : Bool
|
||||
, openTabs : Set String
|
||||
, searchMode : SearchMode
|
||||
@ -152,6 +153,7 @@ init flags =
|
||||
, sourceModel = Nothing
|
||||
, allBookmarks = Comp.BookmarkChooser.init Data.Bookmarks.empty
|
||||
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
||||
, selectedItems = []
|
||||
, includeSelection = False
|
||||
, openTabs = Set.fromList [ "Tags", "Inbox" ]
|
||||
, searchMode = Data.SearchMode.Normal
|
||||
@ -311,6 +313,7 @@ getItemQuery selectedItems model =
|
||||
, textSearch.fullText
|
||||
|> Maybe.map Q.Contents
|
||||
, whenNotEmpty bookmarks Q.And
|
||||
, whenNotEmpty model.selectedItems Q.ItemIdIn
|
||||
]
|
||||
|
||||
|
||||
@ -356,6 +359,7 @@ resetModel model =
|
||||
, customValues = Data.CustomFieldChange.emptyCollect
|
||||
, sourceModel = Nothing
|
||||
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
||||
, selectedItems = []
|
||||
, includeSelection = False
|
||||
, searchMode = Data.SearchMode.Normal
|
||||
}
|
||||
@ -397,6 +401,7 @@ type Msg
|
||||
| SetFolder IdName
|
||||
| SetTag String
|
||||
| SetBookmark String
|
||||
| SetSelectedItems (List String)
|
||||
| SetCustomField ItemFieldValue
|
||||
| CustomFieldMsg Comp.CustomFieldMultiInput.Msg
|
||||
| SetSource String
|
||||
@ -459,6 +464,9 @@ linkTargetMsg linkTarget =
|
||||
Comp.LinkTarget.LinkBookmark id ->
|
||||
Just <| SetBookmark id
|
||||
|
||||
Comp.LinkTarget.LinkRelatedItems ids ->
|
||||
Just <| SetSelectedItems ids
|
||||
|
||||
|
||||
type alias NextState =
|
||||
{ model : Model
|
||||
@ -611,6 +619,19 @@ updateDrop ddm flags settings msg model =
|
||||
, selectionChange = Data.ItemIds.noChange
|
||||
}
|
||||
|
||||
SetSelectedItems ids ->
|
||||
let
|
||||
nextModel =
|
||||
resetModel model
|
||||
in
|
||||
{ model = { nextModel | selectedItems = ids }
|
||||
, cmd = Cmd.none
|
||||
, sub = Sub.none
|
||||
, stateChange = ids /= model.selectedItems
|
||||
, dragDrop = DD.DragDropData ddm Nothing
|
||||
, selectionChange = Data.ItemIds.noChange
|
||||
}
|
||||
|
||||
GetAllTagsResp (Ok stats) ->
|
||||
let
|
||||
tagSel =
|
||||
|
@ -30,6 +30,7 @@ type alias Texts =
|
||||
, formatDateLong : Int -> String
|
||||
, formatDateShort : Int -> String
|
||||
, directionLabel : Direction -> String
|
||||
, showRelatedItems : String
|
||||
}
|
||||
|
||||
|
||||
@ -44,6 +45,7 @@ gb tz =
|
||||
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English tz
|
||||
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English tz
|
||||
, directionLabel = Messages.Data.Direction.gb
|
||||
, showRelatedItems = "Show linked items"
|
||||
}
|
||||
|
||||
|
||||
@ -58,6 +60,7 @@ de tz =
|
||||
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German tz
|
||||
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German tz
|
||||
, directionLabel = Messages.Data.Direction.de
|
||||
, showRelatedItems = "Verknüpfte Dokumente anzeigen"
|
||||
}
|
||||
|
||||
|
||||
@ -72,4 +75,5 @@ fr tz =
|
||||
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.French tz
|
||||
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.French tz
|
||||
, directionLabel = Messages.Data.Direction.fr
|
||||
, showRelatedItems = "Afficher les documents liés"
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ toItemLight detail =
|
||||
, tags = detail.tags
|
||||
, customfields = detail.customfields
|
||||
, notes = detail.notes
|
||||
, relatedItems = List.map .id detail.relatedItems
|
||||
, highlighting = []
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user