mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Add selection to search menu
This commit is contained in:
@ -19,6 +19,7 @@ module Comp.SearchMenu exposing
|
|||||||
, linkTargetMsg
|
, linkTargetMsg
|
||||||
, refreshBookmarks
|
, refreshBookmarks
|
||||||
, setFromStats
|
, setFromStats
|
||||||
|
, setIncludeSelection
|
||||||
, textSearchString
|
, textSearchString
|
||||||
, update
|
, update
|
||||||
, updateDrop
|
, updateDrop
|
||||||
@ -52,6 +53,7 @@ import Data.EquipmentOrder
|
|||||||
import Data.EquipmentUse
|
import Data.EquipmentUse
|
||||||
import Data.Fields
|
import Data.Fields
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange, ItemIds)
|
||||||
import Data.ItemQuery as Q exposing (ItemQuery)
|
import Data.ItemQuery as Q exposing (ItemQuery)
|
||||||
import Data.PersonOrder
|
import Data.PersonOrder
|
||||||
import Data.PersonUse
|
import Data.PersonUse
|
||||||
@ -102,6 +104,7 @@ type alias Model =
|
|||||||
, sourceModel : Maybe String
|
, sourceModel : Maybe String
|
||||||
, allBookmarks : Comp.BookmarkChooser.Model
|
, allBookmarks : Comp.BookmarkChooser.Model
|
||||||
, selectedBookmarks : Comp.BookmarkChooser.Selection
|
, selectedBookmarks : Comp.BookmarkChooser.Selection
|
||||||
|
, includeSelection : Bool
|
||||||
, openTabs : Set String
|
, openTabs : Set String
|
||||||
, searchMode : SearchMode
|
, searchMode : SearchMode
|
||||||
}
|
}
|
||||||
@ -149,6 +152,7 @@ init flags =
|
|||||||
, sourceModel = Nothing
|
, sourceModel = Nothing
|
||||||
, allBookmarks = Comp.BookmarkChooser.init Data.Bookmarks.empty
|
, allBookmarks = Comp.BookmarkChooser.init Data.Bookmarks.empty
|
||||||
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
||||||
|
, includeSelection = False
|
||||||
, openTabs = Set.fromList [ "Tags", "Inbox" ]
|
, openTabs = Set.fromList [ "Tags", "Inbox" ]
|
||||||
, searchMode = Data.SearchMode.Normal
|
, searchMode = Data.SearchMode.Normal
|
||||||
}
|
}
|
||||||
@ -222,8 +226,8 @@ isNamesSearch model =
|
|||||||
True
|
True
|
||||||
|
|
||||||
|
|
||||||
getItemQuery : Model -> Maybe ItemQuery
|
getItemQuery : ItemIds -> Model -> Maybe ItemQuery
|
||||||
getItemQuery model =
|
getItemQuery selectedItems model =
|
||||||
let
|
let
|
||||||
when flag body =
|
when flag body =
|
||||||
if flag then
|
if flag then
|
||||||
@ -258,6 +262,11 @@ getItemQuery model =
|
|||||||
in
|
in
|
||||||
Q.and
|
Q.and
|
||||||
[ when model.inboxCheckbox (Q.Inbox True)
|
[ when model.inboxCheckbox (Q.Inbox True)
|
||||||
|
, if model.includeSelection then
|
||||||
|
Data.ItemIds.toQuery selectedItems
|
||||||
|
|
||||||
|
else
|
||||||
|
Nothing
|
||||||
, whenNotEmpty (model.tagSelection.includeTags |> Set.toList)
|
, whenNotEmpty (model.tagSelection.includeTags |> Set.toList)
|
||||||
(Q.TagIds Q.AllMatch)
|
(Q.TagIds Q.AllMatch)
|
||||||
, whenNotEmpty (model.tagSelection.excludeTags |> Set.toList)
|
, whenNotEmpty (model.tagSelection.excludeTags |> Set.toList)
|
||||||
@ -347,6 +356,7 @@ resetModel model =
|
|||||||
, customValues = Data.CustomFieldChange.emptyCollect
|
, customValues = Data.CustomFieldChange.emptyCollect
|
||||||
, sourceModel = Nothing
|
, sourceModel = Nothing
|
||||||
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
||||||
|
, includeSelection = False
|
||||||
, searchMode = Data.SearchMode.Normal
|
, searchMode = Data.SearchMode.Normal
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,6 +407,8 @@ type Msg
|
|||||||
| ToggleOpenAllAkkordionTabs
|
| ToggleOpenAllAkkordionTabs
|
||||||
| AllBookmarksResp (Result Http.Error AllBookmarks)
|
| AllBookmarksResp (Result Http.Error AllBookmarks)
|
||||||
| SelectBookmarkMsg Comp.BookmarkChooser.Msg
|
| SelectBookmarkMsg Comp.BookmarkChooser.Msg
|
||||||
|
| SetIncludeSelection Bool
|
||||||
|
| ClearSelection
|
||||||
|
|
||||||
|
|
||||||
setFromStats : SearchStats -> Msg
|
setFromStats : SearchStats -> Msg
|
||||||
@ -409,6 +421,11 @@ initFromStats stats =
|
|||||||
GetAllTagsResp (Ok stats)
|
GetAllTagsResp (Ok stats)
|
||||||
|
|
||||||
|
|
||||||
|
setIncludeSelection : Bool -> Msg
|
||||||
|
setIncludeSelection flag =
|
||||||
|
SetIncludeSelection flag
|
||||||
|
|
||||||
|
|
||||||
linkTargetMsg : LinkTarget -> Maybe Msg
|
linkTargetMsg : LinkTarget -> Maybe Msg
|
||||||
linkTargetMsg linkTarget =
|
linkTargetMsg linkTarget =
|
||||||
case linkTarget of
|
case linkTarget of
|
||||||
@ -449,6 +466,7 @@ type alias NextState =
|
|||||||
, sub : Sub Msg
|
, sub : Sub Msg
|
||||||
, stateChange : Bool
|
, stateChange : Bool
|
||||||
, dragDrop : DD.DragDropData
|
, dragDrop : DD.DragDropData
|
||||||
|
, selectionChange : ItemIdChange
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -483,6 +501,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = set.dragDrop
|
, dragDrop = set.dragDrop
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
case msg of
|
case msg of
|
||||||
@ -525,6 +544,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetForm ->
|
ResetForm ->
|
||||||
@ -533,6 +553,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCorrOrg id ->
|
SetCorrOrg id ->
|
||||||
@ -555,6 +576,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetConcEquip id ->
|
SetConcEquip id ->
|
||||||
@ -586,6 +608,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = sel /= model.selectedBookmarks
|
, stateChange = sel /= model.selectedBookmarks
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetAllTagsResp (Ok stats) ->
|
GetAllTagsResp (Ok stats) ->
|
||||||
@ -600,6 +623,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetAllTagsResp (Err _) ->
|
GetAllTagsResp (Err _) ->
|
||||||
@ -608,6 +632,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetStatsResp (Ok stats) ->
|
GetStatsResp (Ok stats) ->
|
||||||
@ -676,6 +701,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetStatsResp (Err _) ->
|
GetStatsResp (Err _) ->
|
||||||
@ -684,6 +710,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetEquipResp (Ok equips) ->
|
GetEquipResp (Ok equips) ->
|
||||||
@ -699,6 +726,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetOrgResp (Ok orgs) ->
|
GetOrgResp (Ok orgs) ->
|
||||||
@ -714,6 +742,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetPersonResp (Ok ps) ->
|
GetPersonResp (Ok ps) ->
|
||||||
@ -749,6 +778,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
TagSelectMsg m ->
|
TagSelectMsg m ->
|
||||||
@ -765,6 +795,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = sel /= model.tagSelection
|
, stateChange = sel /= model.tagSelection
|
||||||
, dragDrop = ddd
|
, dragDrop = ddd
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectionMsg m ->
|
DirectionMsg m ->
|
||||||
@ -777,6 +808,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
OrgMsg m ->
|
OrgMsg m ->
|
||||||
@ -789,6 +821,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
CorrPersonMsg m ->
|
CorrPersonMsg m ->
|
||||||
@ -801,6 +834,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ConcPersonMsg m ->
|
ConcPersonMsg m ->
|
||||||
@ -813,6 +847,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ConcEquipmentMsg m ->
|
ConcEquipmentMsg m ->
|
||||||
@ -825,6 +860,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleInbox ->
|
ToggleInbox ->
|
||||||
@ -837,6 +873,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleSearchMode ->
|
ToggleSearchMode ->
|
||||||
@ -856,6 +893,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
FromDateMsg m ->
|
FromDateMsg m ->
|
||||||
@ -876,6 +914,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.fromDate /= nextDate
|
, stateChange = model.fromDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
UntilDateMsg m ->
|
UntilDateMsg m ->
|
||||||
@ -896,6 +935,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.untilDate /= nextDate
|
, stateChange = model.untilDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
FromDueDateMsg m ->
|
FromDueDateMsg m ->
|
||||||
@ -916,6 +956,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.fromDueDate /= nextDate
|
, stateChange = model.fromDueDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
UntilDueDateMsg m ->
|
UntilDueDateMsg m ->
|
||||||
@ -936,6 +977,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.untilDueDate /= nextDate
|
, stateChange = model.untilDueDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetName str ->
|
SetName str ->
|
||||||
@ -948,6 +990,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetTextSearch str ->
|
SetTextSearch str ->
|
||||||
@ -956,6 +999,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SwapTextSearch ->
|
SwapTextSearch ->
|
||||||
@ -965,6 +1009,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -973,6 +1018,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetFulltextSearch ->
|
SetFulltextSearch ->
|
||||||
@ -983,6 +1029,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
Names s ->
|
Names s ->
|
||||||
@ -991,6 +1038,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetNamesSearch ->
|
SetNamesSearch ->
|
||||||
@ -1001,6 +1049,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
Names _ ->
|
Names _ ->
|
||||||
@ -1009,6 +1058,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyUpMsg (Just Enter) ->
|
KeyUpMsg (Just Enter) ->
|
||||||
@ -1017,6 +1067,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyUpMsg _ ->
|
KeyUpMsg _ ->
|
||||||
@ -1025,6 +1076,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
FolderSelectMsg lm ->
|
FolderSelectMsg lm ->
|
||||||
@ -1041,6 +1093,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.selectedFolder /= sel
|
, stateChange = model.selectedFolder /= sel
|
||||||
, dragDrop = ddd
|
, dragDrop = ddd
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomFieldMsg lm ->
|
CustomFieldMsg lm ->
|
||||||
@ -1058,6 +1111,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, stateChange =
|
, stateChange =
|
||||||
Data.CustomFieldChange.isValueChange res.result
|
Data.CustomFieldChange.isValueChange res.result
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCustomField cv ->
|
SetCustomField cv ->
|
||||||
@ -1086,6 +1140,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetToSource str ->
|
ResetToSource str ->
|
||||||
@ -1105,6 +1160,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleOpenAllAkkordionTabs ->
|
ToggleOpenAllAkkordionTabs ->
|
||||||
@ -1125,6 +1181,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
AllBookmarksResp (Ok bm) ->
|
AllBookmarksResp (Ok bm) ->
|
||||||
@ -1133,6 +1190,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.allBookmarks /= Comp.BookmarkChooser.init bm
|
, stateChange = model.allBookmarks /= Comp.BookmarkChooser.init bm
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
AllBookmarksResp (Err _) ->
|
AllBookmarksResp (Err _) ->
|
||||||
@ -1141,6 +1199,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectBookmarkMsg lm ->
|
SelectBookmarkMsg lm ->
|
||||||
@ -1153,6 +1212,26 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = sel /= model.selectedBookmarks || model.allBookmarks /= next
|
, stateChange = sel /= model.selectedBookmarks || model.allBookmarks /= next
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
|
}
|
||||||
|
|
||||||
|
SetIncludeSelection flag ->
|
||||||
|
{ model =
|
||||||
|
{ model | includeSelection = flag }
|
||||||
|
, cmd = Cmd.none
|
||||||
|
, sub = Sub.none
|
||||||
|
, stateChange = True
|
||||||
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
|
}
|
||||||
|
|
||||||
|
ClearSelection ->
|
||||||
|
{ model = { model | includeSelection = False }
|
||||||
|
, cmd = Cmd.none
|
||||||
|
, sub = Sub.none
|
||||||
|
, stateChange = True
|
||||||
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.clearAll
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1162,6 +1241,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
|
|
||||||
type alias ViewConfig =
|
type alias ViewConfig =
|
||||||
{ overrideTabLook : SearchTab -> Comp.Tabs.Look -> Comp.Tabs.Look
|
{ overrideTabLook : SearchTab -> Comp.Tabs.Look -> Comp.Tabs.Look
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1174,7 +1254,7 @@ viewDrop2 texts ddd flags cfg settings model =
|
|||||||
Comp.Tabs.akkordion
|
Comp.Tabs.akkordion
|
||||||
akkordionStyle
|
akkordionStyle
|
||||||
(searchTabState settings cfg model)
|
(searchTabState settings cfg model)
|
||||||
(searchTabs texts ddd flags settings model)
|
(searchTabs texts ddd flags settings cfg.selectedItems model)
|
||||||
|
|
||||||
|
|
||||||
type SearchTab
|
type SearchTab
|
||||||
@ -1191,6 +1271,7 @@ type SearchTab
|
|||||||
| TabSource
|
| TabSource
|
||||||
| TabDirection
|
| TabDirection
|
||||||
| TabTrashed
|
| TabTrashed
|
||||||
|
| TabSelection
|
||||||
|
|
||||||
|
|
||||||
allTabs : List SearchTab
|
allTabs : List SearchTab
|
||||||
@ -1208,6 +1289,7 @@ allTabs =
|
|||||||
, TabSource
|
, TabSource
|
||||||
, TabDirection
|
, TabDirection
|
||||||
, TabTrashed
|
, TabTrashed
|
||||||
|
, TabSelection
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -1253,6 +1335,9 @@ tabName tab =
|
|||||||
TabTrashed ->
|
TabTrashed ->
|
||||||
"trashed"
|
"trashed"
|
||||||
|
|
||||||
|
TabSelection ->
|
||||||
|
"selection"
|
||||||
|
|
||||||
|
|
||||||
findTab : Comp.Tabs.Tab msg -> Maybe SearchTab
|
findTab : Comp.Tabs.Tab msg -> Maybe SearchTab
|
||||||
findTab tab =
|
findTab tab =
|
||||||
@ -1296,12 +1381,15 @@ findTab tab =
|
|||||||
"trashed" ->
|
"trashed" ->
|
||||||
Just TabTrashed
|
Just TabTrashed
|
||||||
|
|
||||||
|
"selection" ->
|
||||||
|
Just TabSelection
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
|
|
||||||
tabLook : UiSettings -> Model -> SearchTab -> Comp.Tabs.Look
|
tabLook : UiSettings -> ItemIds -> Model -> SearchTab -> Comp.Tabs.Look
|
||||||
tabLook settings model tab =
|
tabLook settings selectedItems model tab =
|
||||||
let
|
let
|
||||||
isHidden f =
|
isHidden f =
|
||||||
Data.UiSettings.fieldHidden settings f
|
Data.UiSettings.fieldHidden settings f
|
||||||
@ -1396,6 +1484,16 @@ tabLook settings model tab =
|
|||||||
TabTrashed ->
|
TabTrashed ->
|
||||||
activeWhen (model.searchMode == Data.SearchMode.Trashed)
|
activeWhen (model.searchMode == Data.SearchMode.Trashed)
|
||||||
|
|
||||||
|
TabSelection ->
|
||||||
|
if Data.ItemIds.isEmpty selectedItems then
|
||||||
|
Comp.Tabs.Hidden
|
||||||
|
|
||||||
|
else if model.includeSelection then
|
||||||
|
Comp.Tabs.Active
|
||||||
|
|
||||||
|
else
|
||||||
|
Comp.Tabs.Normal
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Comp.Tabs.Normal
|
Comp.Tabs.Normal
|
||||||
|
|
||||||
@ -1416,15 +1514,15 @@ searchTabState settings cfg model tab =
|
|||||||
state =
|
state =
|
||||||
{ folded = folded
|
{ folded = folded
|
||||||
, look =
|
, look =
|
||||||
Maybe.map (\t -> tabLook settings model t |> cfg.overrideTabLook t) searchTab
|
Maybe.map (\t -> tabLook settings cfg.selectedItems model t |> cfg.overrideTabLook t) searchTab
|
||||||
|> Maybe.withDefault Comp.Tabs.Normal
|
|> Maybe.withDefault Comp.Tabs.Normal
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
( state, ToggleAkkordionTab tab.name )
|
( state, ToggleAkkordionTab tab.name )
|
||||||
|
|
||||||
|
|
||||||
searchTabs : Texts -> DD.DragDropData -> Flags -> UiSettings -> Model -> List (Comp.Tabs.Tab Msg)
|
searchTabs : Texts -> DD.DragDropData -> Flags -> UiSettings -> ItemIds -> Model -> List (Comp.Tabs.Tab Msg)
|
||||||
searchTabs texts ddd flags settings model =
|
searchTabs texts ddd flags settings selectedItems model =
|
||||||
let
|
let
|
||||||
isHidden f =
|
isHidden f =
|
||||||
Data.UiSettings.fieldHidden settings f
|
Data.UiSettings.fieldHidden settings f
|
||||||
@ -1477,6 +1575,40 @@ searchTabs texts ddd flags settings model =
|
|||||||
(Comp.BookmarkChooser.view texts.bookmarkChooser model.allBookmarks model.selectedBookmarks)
|
(Comp.BookmarkChooser.view texts.bookmarkChooser model.allBookmarks model.selectedBookmarks)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
, { name = tabName TabSelection
|
||||||
|
, title = texts.selection
|
||||||
|
, titleRight =
|
||||||
|
[ span [ class "flex items-center rounded-full bg-blue-100 dark:bg-sky-600 text-xs px-2 py-0.5 " ]
|
||||||
|
[ text (String.fromInt (Data.ItemIds.size selectedItems)) ]
|
||||||
|
]
|
||||||
|
, info = Nothing
|
||||||
|
, body =
|
||||||
|
[ div [ class "flex flex-col ml-1" ]
|
||||||
|
[ a
|
||||||
|
[ class "flex flex-row items-center"
|
||||||
|
, class "rounded px-1 py-1 hover:bg-blue-100 dark:hover:bg-slate-600"
|
||||||
|
, href "#"
|
||||||
|
, Html.Events.onClick (SetIncludeSelection (not model.includeSelection))
|
||||||
|
]
|
||||||
|
[ if model.includeSelection then
|
||||||
|
i [ class "fa fa-check mr-2" ] []
|
||||||
|
|
||||||
|
else
|
||||||
|
i [ class "fa fa-list mr-2" ] []
|
||||||
|
, text "Show selection"
|
||||||
|
]
|
||||||
|
, a
|
||||||
|
[ class "flex flex-row items-center"
|
||||||
|
, class "rounded px-1 py-1 hover:bg-blue-100 dark:hover:bg-slate-600"
|
||||||
|
, href "#"
|
||||||
|
, Html.Events.onClick ClearSelection
|
||||||
|
]
|
||||||
|
[ i [ class "fa fa-times mr-2" ] []
|
||||||
|
, text "Clear selection"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
, { name = tabName TabTags
|
, { name = tabName TabTags
|
||||||
, title = texts.basics.tags
|
, title = texts.basics.tags
|
||||||
, titleRight = []
|
, titleRight = []
|
||||||
|
@ -9,6 +9,7 @@ module Data.ItemIds exposing
|
|||||||
( ItemIdChange
|
( ItemIdChange
|
||||||
, ItemIds
|
, ItemIds
|
||||||
, apply
|
, apply
|
||||||
|
, clearAll
|
||||||
, combine
|
, combine
|
||||||
, combineAll
|
, combineAll
|
||||||
, deselect
|
, deselect
|
||||||
@ -17,6 +18,7 @@ module Data.ItemIds exposing
|
|||||||
, isEmpty
|
, isEmpty
|
||||||
, isMember
|
, isMember
|
||||||
, noChange
|
, noChange
|
||||||
|
, nonEmpty
|
||||||
, select
|
, select
|
||||||
, selectAll
|
, selectAll
|
||||||
, size
|
, size
|
||||||
@ -44,6 +46,11 @@ isEmpty (ItemIds ids) =
|
|||||||
Set.isEmpty ids
|
Set.isEmpty ids
|
||||||
|
|
||||||
|
|
||||||
|
nonEmpty : ItemIds -> Bool
|
||||||
|
nonEmpty ids =
|
||||||
|
not (isEmpty ids)
|
||||||
|
|
||||||
|
|
||||||
isMember : ItemIds -> String -> Bool
|
isMember : ItemIds -> String -> Bool
|
||||||
isMember (ItemIds ids) id =
|
isMember (ItemIds ids) id =
|
||||||
Set.member id ids
|
Set.member id ids
|
||||||
@ -69,9 +76,13 @@ toList (ItemIds ids) =
|
|||||||
Set.toList ids
|
Set.toList ids
|
||||||
|
|
||||||
|
|
||||||
toQuery : ItemIds -> ItemQuery
|
toQuery : ItemIds -> Maybe ItemQuery
|
||||||
toQuery (ItemIds ids) =
|
toQuery (ItemIds ids) =
|
||||||
Data.ItemQuery.ItemIdIn (Set.toList ids)
|
if Set.isEmpty ids then
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
else
|
||||||
|
Just <| Data.ItemQuery.ItemIdIn (Set.toList ids)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -82,17 +93,22 @@ type ItemIdChange
|
|||||||
= ItemIdChange
|
= ItemIdChange
|
||||||
{ remove : Set String
|
{ remove : Set String
|
||||||
, add : Set String
|
, add : Set String
|
||||||
|
, clear : Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
apply : ItemIds -> ItemIdChange -> ItemIds
|
apply : ItemIds -> ItemIdChange -> ItemIds
|
||||||
apply (ItemIds ids) (ItemIdChange { remove, add }) =
|
apply (ItemIds ids) (ItemIdChange { remove, add, clear }) =
|
||||||
|
if clear then
|
||||||
|
empty
|
||||||
|
|
||||||
|
else
|
||||||
ItemIds (Set.diff ids remove |> Set.union add)
|
ItemIds (Set.diff ids remove |> Set.union add)
|
||||||
|
|
||||||
|
|
||||||
noChange : ItemIdChange
|
noChange : ItemIdChange
|
||||||
noChange =
|
noChange =
|
||||||
ItemIdChange { remove = Set.empty, add = Set.empty }
|
ItemIdChange { remove = Set.empty, add = Set.empty, clear = False }
|
||||||
|
|
||||||
|
|
||||||
combine : ItemIdChange -> ItemIdChange -> ItemIdChange
|
combine : ItemIdChange -> ItemIdChange -> ItemIdChange
|
||||||
@ -100,6 +116,7 @@ combine (ItemIdChange c1) (ItemIdChange c2) =
|
|||||||
ItemIdChange
|
ItemIdChange
|
||||||
{ remove = Set.union c1.remove c2.remove
|
{ remove = Set.union c1.remove c2.remove
|
||||||
, add = Set.union c1.add c2.add
|
, add = Set.union c1.add c2.add
|
||||||
|
, clear = False
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -110,17 +127,22 @@ combineAll all =
|
|||||||
|
|
||||||
select : String -> ItemIdChange
|
select : String -> ItemIdChange
|
||||||
select id =
|
select id =
|
||||||
ItemIdChange { add = Set.singleton id, remove = Set.empty }
|
ItemIdChange { add = Set.singleton id, remove = Set.empty, clear = False }
|
||||||
|
|
||||||
|
|
||||||
selectAll : Set String -> ItemIdChange
|
selectAll : Set String -> ItemIdChange
|
||||||
selectAll ids =
|
selectAll ids =
|
||||||
ItemIdChange { add = ids, remove = Set.empty }
|
ItemIdChange { add = ids, remove = Set.empty, clear = False }
|
||||||
|
|
||||||
|
|
||||||
deselect : String -> ItemIdChange
|
deselect : String -> ItemIdChange
|
||||||
deselect id =
|
deselect id =
|
||||||
ItemIdChange { add = Set.empty, remove = Set.singleton id }
|
ItemIdChange { add = Set.empty, remove = Set.singleton id, clear = False }
|
||||||
|
|
||||||
|
|
||||||
|
clearAll : ItemIdChange
|
||||||
|
clearAll =
|
||||||
|
ItemIdChange { add = Set.empty, remove = Set.empty, clear = True }
|
||||||
|
|
||||||
|
|
||||||
toggle : ItemIds -> String -> ItemIdChange
|
toggle : ItemIds -> String -> ItemIdChange
|
||||||
|
@ -50,6 +50,7 @@ type alias Texts =
|
|||||||
, direction : Direction -> String
|
, direction : Direction -> String
|
||||||
, trashcan : String
|
, trashcan : String
|
||||||
, bookmarks : String
|
, bookmarks : String
|
||||||
|
, selection : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -84,6 +85,7 @@ gb =
|
|||||||
, direction = Messages.Data.Direction.gb
|
, direction = Messages.Data.Direction.gb
|
||||||
, trashcan = "Trash"
|
, trashcan = "Trash"
|
||||||
, bookmarks = "Bookmarks"
|
, bookmarks = "Bookmarks"
|
||||||
|
, selection = "Selection"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -118,4 +120,5 @@ de =
|
|||||||
, direction = Messages.Data.Direction.de
|
, direction = Messages.Data.Direction.de
|
||||||
, trashcan = "Papierkorb"
|
, trashcan = "Papierkorb"
|
||||||
, bookmarks = "Bookmarks"
|
, bookmarks = "Bookmarks"
|
||||||
|
, selection = "Auswahl"
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ import Comp.PublishItems
|
|||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemArrange exposing (ItemArrange)
|
import Data.ItemArrange exposing (ItemArrange)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.ItemQuery as Q
|
import Data.ItemQuery as Q
|
||||||
import Data.Items
|
import Data.Items
|
||||||
@ -256,6 +257,7 @@ type alias SearchParam =
|
|||||||
, pageSize : Int
|
, pageSize : Int
|
||||||
, offset : Int
|
, offset : Int
|
||||||
, scroll : Bool
|
, scroll : Bool
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -274,7 +276,7 @@ doSearchDefaultCmd param model =
|
|||||||
let
|
let
|
||||||
smask =
|
smask =
|
||||||
Q.request model.searchMenuModel.searchMode <|
|
Q.request model.searchMenuModel.searchMode <|
|
||||||
createQuery model
|
createQuery param.selectedItems model
|
||||||
|
|
||||||
mask =
|
mask =
|
||||||
{ smask
|
{ smask
|
||||||
@ -292,10 +294,10 @@ doSearchDefaultCmd param model =
|
|||||||
Api.itemSearch param.flags mask ItemSearchAddResp
|
Api.itemSearch param.flags mask ItemSearchAddResp
|
||||||
|
|
||||||
|
|
||||||
createQuery : Model -> Maybe Q.ItemQuery
|
createQuery : ItemIds -> Model -> Maybe Q.ItemQuery
|
||||||
createQuery model =
|
createQuery selectedItems model =
|
||||||
Q.and
|
Q.and
|
||||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
[ Comp.SearchMenu.getItemQuery selectedItems model.searchMenuModel
|
||||||
, Maybe.map Q.Fragment (Comp.PowerSearchInput.getSearchString model.powerSearchInput)
|
, Maybe.map Q.Fragment (Comp.PowerSearchInput.getSearchString model.powerSearchInput)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import Comp.Basic as B
|
|||||||
import Comp.ItemDetail.MultiEditMenu
|
import Comp.ItemDetail.MultiEditMenu
|
||||||
import Comp.MenuBar as MB
|
import Comp.MenuBar as MB
|
||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
@ -22,8 +23,8 @@ import Set
|
|||||||
import Styles as S
|
import Styles as S
|
||||||
|
|
||||||
|
|
||||||
view : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
view : Texts -> Env.View -> Model -> Html Msg
|
||||||
view texts flags settings model =
|
view texts env model =
|
||||||
div
|
div
|
||||||
[ class "flex flex-col"
|
[ class "flex flex-col"
|
||||||
]
|
]
|
||||||
@ -56,19 +57,19 @@ view texts flags settings model =
|
|||||||
SelectView svm ->
|
SelectView svm ->
|
||||||
case svm.action of
|
case svm.action of
|
||||||
EditSelected ->
|
EditSelected ->
|
||||||
viewEditMenu texts flags svm settings
|
viewEditMenu texts env.flags svm env.settings
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
viewSearch texts flags settings model
|
viewSearch texts env model
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
viewSearch texts flags settings model
|
viewSearch texts env model
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewSearch : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
viewSearch : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
viewSearch texts flags settings model =
|
viewSearch texts env model =
|
||||||
[ MB.viewSide
|
[ MB.viewSide
|
||||||
{ start =
|
{ start =
|
||||||
[ MB.CustomElement <|
|
[ MB.CustomElement <|
|
||||||
@ -87,14 +88,15 @@ viewSearch texts flags settings model =
|
|||||||
, let
|
, let
|
||||||
searchMenuCfg =
|
searchMenuCfg =
|
||||||
{ overrideTabLook = \_ -> identity
|
{ overrideTabLook = \_ -> identity
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Html.map SearchMenuMsg
|
Html.map SearchMenuMsg
|
||||||
(Comp.SearchMenu.viewDrop2 texts.searchMenu
|
(Comp.SearchMenu.viewDrop2 texts.searchMenu
|
||||||
model.dragDropData
|
model.dragDropData
|
||||||
flags
|
env.flags
|
||||||
searchMenuCfg
|
searchMenuCfg
|
||||||
settings
|
env.settings
|
||||||
model.searchMenuModel
|
model.searchMenuModel
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -29,7 +29,6 @@ import Data.ItemIds exposing (ItemIds)
|
|||||||
import Data.ItemQuery as Q
|
import Data.ItemQuery as Q
|
||||||
import Data.Items
|
import Data.Items
|
||||||
import Data.SearchMode exposing (SearchMode)
|
import Data.SearchMode exposing (SearchMode)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
|
||||||
import Messages.Page.Search exposing (Texts)
|
import Messages.Page.Search exposing (Texts)
|
||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Page.Search.Data exposing (..)
|
import Page.Search.Data exposing (..)
|
||||||
@ -62,6 +61,7 @@ update texts env msg model =
|
|||||||
, pageSize = env.settings.itemSearchPageSize
|
, pageSize = env.settings.itemSearchPageSize
|
||||||
, offset = 0
|
, offset = 0
|
||||||
, scroll = True
|
, scroll = True
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
|
|
||||||
setBookmark =
|
setBookmark =
|
||||||
@ -111,9 +111,21 @@ update texts env msg model =
|
|||||||
BasicSearch
|
BasicSearch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newSelection =
|
||||||
|
Data.ItemIds.apply env.selectedItems nextState.selectionChange
|
||||||
|
|
||||||
|
searchParam =
|
||||||
|
{ flags = env.flags
|
||||||
|
, searchType = BasicSearch
|
||||||
|
, pageSize = env.settings.itemSearchPageSize
|
||||||
|
, offset = 0
|
||||||
|
, scroll = False
|
||||||
|
, selectedItems = newSelection
|
||||||
|
}
|
||||||
|
|
||||||
result =
|
result =
|
||||||
if nextState.stateChange && not model.searchInProgress then
|
if nextState.stateChange && not model.searchInProgress then
|
||||||
doSearch env (SearchParam env.flags BasicSearch env.settings.itemSearchPageSize 0 False) newModel
|
doSearch env searchParam newModel
|
||||||
|
|
||||||
else
|
else
|
||||||
resultModelCmd env ( newModel, Cmd.none )
|
resultModelCmd env ( newModel, Cmd.none )
|
||||||
@ -126,6 +138,7 @@ update texts env msg model =
|
|||||||
, dropCmd
|
, dropCmd
|
||||||
]
|
]
|
||||||
, sub = Sub.map SearchMenuMsg nextState.sub
|
, sub = Sub.map SearchMenuMsg nextState.sub
|
||||||
|
, selectedItems = newSelection
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLinkTarget lt ->
|
SetLinkTarget lt ->
|
||||||
@ -251,6 +264,7 @@ update texts env msg model =
|
|||||||
, pageSize = env.settings.itemSearchPageSize
|
, pageSize = env.settings.itemSearchPageSize
|
||||||
, offset = 0
|
, offset = 0
|
||||||
, scroll = False
|
, scroll = False
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
if model.searchInProgress then
|
if model.searchInProgress then
|
||||||
@ -267,6 +281,7 @@ update texts env msg model =
|
|||||||
, pageSize = env.settings.itemSearchPageSize
|
, pageSize = env.settings.itemSearchPageSize
|
||||||
, offset = model.searchOffset
|
, offset = model.searchOffset
|
||||||
, scroll = False
|
, scroll = False
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
if model.searchInProgress then
|
if model.searchInProgress then
|
||||||
@ -292,7 +307,7 @@ update texts env msg model =
|
|||||||
|
|
||||||
LoadMore ->
|
LoadMore ->
|
||||||
if model.moreAvailable then
|
if model.moreAvailable then
|
||||||
doSearchMore env.flags env.settings model |> resultModelCmd env
|
doSearchMore env model |> resultModelCmd env
|
||||||
|
|
||||||
else
|
else
|
||||||
resultModelCmd env ( model, Cmd.none )
|
resultModelCmd env ( model, Cmd.none )
|
||||||
@ -344,7 +359,7 @@ update texts env msg model =
|
|||||||
SelectNoItems ->
|
SelectNoItems ->
|
||||||
let
|
let
|
||||||
result =
|
result =
|
||||||
resultModelCmd env ( model, Cmd.none )
|
update texts env (SearchMenuMsg <| Comp.SearchMenu.setIncludeSelection False) model
|
||||||
in
|
in
|
||||||
{ result | selectedItems = Data.ItemIds.empty }
|
{ result | selectedItems = Data.ItemIds.empty }
|
||||||
|
|
||||||
@ -404,6 +419,7 @@ update texts env msg model =
|
|||||||
, pageSize = env.settings.itemSearchPageSize
|
, pageSize = env.settings.itemSearchPageSize
|
||||||
, offset = 0
|
, offset = 0
|
||||||
, scroll = False
|
, scroll = False
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
doSearch env param nm
|
doSearch env param nm
|
||||||
@ -559,16 +575,12 @@ update texts env msg model =
|
|||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
else if Data.ItemIds.isEmpty env.selectedItems then
|
|
||||||
resultModelCmd env ( model, Cmd.none )
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
case Data.ItemIds.toQuery env.selectedItems of
|
||||||
|
Just q ->
|
||||||
let
|
let
|
||||||
( mm, mc ) =
|
( mm, mc ) =
|
||||||
Comp.ItemMerge.initQuery
|
Comp.ItemMerge.initQuery env.flags model.searchMenuModel.searchMode q
|
||||||
env.flags
|
|
||||||
model.searchMenuModel.searchMode
|
|
||||||
(Data.ItemIds.toQuery env.selectedItems)
|
|
||||||
in
|
in
|
||||||
resultModelCmd env
|
resultModelCmd env
|
||||||
( { model
|
( { model
|
||||||
@ -582,6 +594,9 @@ update texts env msg model =
|
|||||||
, Cmd.map MergeItemsMsg mc
|
, Cmd.map MergeItemsMsg mc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
resultModelCmd env ( model, Cmd.none )
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
resultModelCmd env ( model, Cmd.none )
|
resultModelCmd env ( model, Cmd.none )
|
||||||
|
|
||||||
@ -641,14 +656,12 @@ update texts env msg model =
|
|||||||
, Cmd.map PublishItemsMsg mc
|
, Cmd.map PublishItemsMsg mc
|
||||||
)
|
)
|
||||||
|
|
||||||
else if Data.ItemIds.isEmpty env.selectedItems then
|
|
||||||
resultModelCmd env ( model, Cmd.none )
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
case Data.ItemIds.toQuery env.selectedItems of
|
||||||
|
Just q ->
|
||||||
let
|
let
|
||||||
( mm, mc ) =
|
( mm, mc ) =
|
||||||
Comp.PublishItems.initQuery env.flags
|
Comp.PublishItems.initQuery env.flags q
|
||||||
(Data.ItemIds.toQuery env.selectedItems)
|
|
||||||
in
|
in
|
||||||
resultModelCmd env
|
resultModelCmd env
|
||||||
( { model
|
( { model
|
||||||
@ -662,6 +675,9 @@ update texts env msg model =
|
|||||||
, Cmd.map PublishItemsMsg mc
|
, Cmd.map PublishItemsMsg mc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
resultModelCmd env ( model, Cmd.none )
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
resultModelCmd env ( model, Cmd.none )
|
resultModelCmd env ( model, Cmd.none )
|
||||||
|
|
||||||
@ -854,7 +870,7 @@ update texts env msg model =
|
|||||||
update texts env (ItemCardListMsg (Comp.ItemCardList.RemoveItem id)) model
|
update texts env (ItemCardListMsg (Comp.ItemCardList.RemoveItem id)) model
|
||||||
|
|
||||||
TogglePublishCurrentQueryView ->
|
TogglePublishCurrentQueryView ->
|
||||||
case createQuery model of
|
case createQuery env.selectedItems model of
|
||||||
Just q ->
|
Just q ->
|
||||||
let
|
let
|
||||||
( pm, pc ) =
|
( pm, pc ) =
|
||||||
@ -866,7 +882,7 @@ update texts env msg model =
|
|||||||
resultModelCmd env ( model, Cmd.none )
|
resultModelCmd env ( model, Cmd.none )
|
||||||
|
|
||||||
ToggleBookmarkCurrentQueryView ->
|
ToggleBookmarkCurrentQueryView ->
|
||||||
case createQuery model of
|
case createQuery env.selectedItems model of
|
||||||
Just q ->
|
Just q ->
|
||||||
case model.topWidgetModel of
|
case model.topWidgetModel of
|
||||||
BookmarkQuery _ ->
|
BookmarkQuery _ ->
|
||||||
@ -1099,15 +1115,16 @@ linkTargetMsg linkTarget =
|
|||||||
Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget)
|
Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget)
|
||||||
|
|
||||||
|
|
||||||
doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
|
doSearchMore : Env.Update -> Model -> ( Model, Cmd Msg )
|
||||||
doSearchMore flags settings model =
|
doSearchMore env model =
|
||||||
let
|
let
|
||||||
param =
|
param =
|
||||||
{ flags = flags
|
{ flags = env.flags
|
||||||
, searchType = model.lastSearchType
|
, searchType = model.lastSearchType
|
||||||
, pageSize = settings.itemSearchPageSize
|
, pageSize = env.settings.itemSearchPageSize
|
||||||
, offset = model.searchOffset
|
, offset = model.searchOffset
|
||||||
, scroll = False
|
, scroll = False
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd =
|
cmd =
|
||||||
|
@ -46,7 +46,7 @@ viewSidebar texts env model =
|
|||||||
, class S.sidebarBg
|
, class S.sidebarBg
|
||||||
, classList [ ( "hidden", not env.sidebarVisible ) ]
|
, classList [ ( "hidden", not env.sidebarVisible ) ]
|
||||||
]
|
]
|
||||||
[ Page.Search.SideMenu.view texts.sideMenu env.flags env.settings model
|
[ Page.Search.SideMenu.view texts.sideMenu env model
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -188,17 +188,17 @@ itemsBar : Texts -> Env.View -> Model -> List (Html Msg)
|
|||||||
itemsBar texts env model =
|
itemsBar texts env model =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
SearchView ->
|
SearchView ->
|
||||||
[ defaultMenuBar texts env.flags env.settings model ]
|
[ defaultMenuBar texts env model ]
|
||||||
|
|
||||||
SelectView svm ->
|
SelectView svm ->
|
||||||
[ editMenuBar texts model env.selectedItems svm ]
|
[ editMenuBar texts model env.selectedItems svm ]
|
||||||
|
|
||||||
PublishView _ ->
|
PublishView _ ->
|
||||||
[ defaultMenuBar texts env.flags env.settings model ]
|
[ defaultMenuBar texts env model ]
|
||||||
|
|
||||||
|
|
||||||
defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
defaultMenuBar : Texts -> Env.View -> Model -> Html Msg
|
||||||
defaultMenuBar texts flags settings model =
|
defaultMenuBar texts env model =
|
||||||
let
|
let
|
||||||
btnStyle =
|
btnStyle =
|
||||||
S.secondaryBasicButton ++ " text-sm"
|
S.secondaryBasicButton ++ " text-sm"
|
||||||
@ -226,7 +226,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
|> Maybe.withDefault (value "")
|
|> Maybe.withDefault (value "")
|
||||||
, class (String.replace "rounded" "" S.textInput)
|
, class (String.replace "rounded" "" S.textInput)
|
||||||
, class "py-2 text-sm"
|
, class "py-2 text-sm"
|
||||||
, if flags.config.fullTextSearchEnabled then
|
, if env.flags.config.fullTextSearchEnabled then
|
||||||
class " border-r-0 rounded-l"
|
class " border-r-0 rounded-l"
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -237,7 +237,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
[ class S.secondaryBasicButtonPlain
|
[ class S.secondaryBasicButtonPlain
|
||||||
, class "text-sm px-4 py-2 border rounded-r"
|
, class "text-sm px-4 py-2 border rounded-r"
|
||||||
, classList
|
, classList
|
||||||
[ ( "hidden", not flags.config.fullTextSearchEnabled )
|
[ ( "hidden", not env.flags.config.fullTextSearchEnabled )
|
||||||
]
|
]
|
||||||
, href "#"
|
, href "#"
|
||||||
, onClick ToggleSearchType
|
, onClick ToggleSearchType
|
||||||
@ -260,10 +260,10 @@ defaultMenuBar texts flags settings model =
|
|||||||
]
|
]
|
||||||
|
|
||||||
isCardView =
|
isCardView =
|
||||||
settings.itemSearchArrange == Data.ItemArrange.Cards
|
env.settings.itemSearchArrange == Data.ItemArrange.Cards
|
||||||
|
|
||||||
isListView =
|
isListView =
|
||||||
settings.itemSearchArrange == Data.ItemArrange.List
|
env.settings.itemSearchArrange == Data.ItemArrange.List
|
||||||
|
|
||||||
menuSep =
|
menuSep =
|
||||||
{ icon = i [] []
|
{ icon = i [] []
|
||||||
@ -276,7 +276,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
MB.view
|
MB.view
|
||||||
{ start =
|
{ start =
|
||||||
[ MB.CustomElement <|
|
[ MB.CustomElement <|
|
||||||
if settings.powerSearchEnabled then
|
if env.settings.powerSearchEnabled then
|
||||||
powerSearchBar
|
powerSearchBar
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -316,7 +316,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
, menuOpen = model.viewMenuOpen
|
, menuOpen = model.viewMenuOpen
|
||||||
, items =
|
, items =
|
||||||
[ { icon =
|
[ { icon =
|
||||||
if settings.itemSearchShowGroups then
|
if env.settings.itemSearchShowGroups then
|
||||||
i [ class "fa fa-check-square font-thin" ] []
|
i [ class "fa fa-check-square font-thin" ] []
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -370,16 +370,16 @@ defaultMenuBar texts flags settings model =
|
|||||||
, menuSep
|
, menuSep
|
||||||
, { label = texts.shareResults
|
, { label = texts.shareResults
|
||||||
, icon = Icons.shareIcon ""
|
, icon = Icons.shareIcon ""
|
||||||
, disabled = createQuery model == Nothing
|
, disabled = createQuery env.selectedItems model == Nothing
|
||||||
, attrs =
|
, attrs =
|
||||||
[ title <|
|
[ title <|
|
||||||
if createQuery model == Nothing then
|
if createQuery env.selectedItems model == Nothing then
|
||||||
texts.nothingSelectedToShare
|
texts.nothingSelectedToShare
|
||||||
|
|
||||||
else
|
else
|
||||||
texts.publishCurrentQueryTitle
|
texts.publishCurrentQueryTitle
|
||||||
, href "#"
|
, href "#"
|
||||||
, if createQuery model == Nothing then
|
, if createQuery env.selectedItems model == Nothing then
|
||||||
class ""
|
class ""
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -388,16 +388,16 @@ defaultMenuBar texts flags settings model =
|
|||||||
}
|
}
|
||||||
, { label = texts.bookmarkQuery
|
, { label = texts.bookmarkQuery
|
||||||
, icon = i [ class "fa fa-bookmark" ] []
|
, icon = i [ class "fa fa-bookmark" ] []
|
||||||
, disabled = createQuery model == Nothing
|
, disabled = createQuery env.selectedItems model == Nothing
|
||||||
, attrs =
|
, attrs =
|
||||||
[ title <|
|
[ title <|
|
||||||
if createQuery model == Nothing then
|
if createQuery env.selectedItems model == Nothing then
|
||||||
texts.nothingToBookmark
|
texts.nothingToBookmark
|
||||||
|
|
||||||
else
|
else
|
||||||
texts.bookmarkQuery
|
texts.bookmarkQuery
|
||||||
, href "#"
|
, href "#"
|
||||||
, if createQuery model == Nothing then
|
, if createQuery env.selectedItems model == Nothing then
|
||||||
class ""
|
class ""
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -405,7 +405,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
, { label =
|
, { label =
|
||||||
if settings.cardPreviewFullWidth then
|
if env.settings.cardPreviewFullWidth then
|
||||||
texts.fullHeightPreviewTitle
|
texts.fullHeightPreviewTitle
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -417,7 +417,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
, onClick TogglePreviewFullWidth
|
, onClick TogglePreviewFullWidth
|
||||||
, classList
|
, classList
|
||||||
[ ( "hidden sm:inline-block", False )
|
[ ( "hidden sm:inline-block", False )
|
||||||
, ( "bg-gray-200 dark:bg-slate-600", settings.cardPreviewFullWidth )
|
, ( "bg-gray-200 dark:bg-slate-600", env.settings.cardPreviewFullWidth )
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ module Page.Share.Sidebar exposing (..)
|
|||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.Tabs
|
import Comp.Tabs
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Messages.Page.Share exposing (Texts)
|
import Messages.Page.Share exposing (Texts)
|
||||||
@ -30,6 +31,7 @@ view texts flags model =
|
|||||||
|
|
||||||
searchMenuCfg =
|
searchMenuCfg =
|
||||||
{ overrideTabLook = hideTrashTab
|
{ overrideTabLook = hideTrashTab
|
||||||
|
, selectedItems = Data.ItemIds.empty
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
div
|
div
|
||||||
|
@ -14,6 +14,7 @@ import Comp.PowerSearchInput
|
|||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.SharePasswordForm
|
import Comp.SharePasswordForm
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds
|
||||||
import Data.ItemQuery as Q
|
import Data.ItemQuery as Q
|
||||||
import Data.SearchMode
|
import Data.SearchMode
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -262,7 +263,7 @@ makeSearchCmd flags doInit model =
|
|||||||
let
|
let
|
||||||
xq =
|
xq =
|
||||||
Q.and
|
Q.and
|
||||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
[ Comp.SearchMenu.getItemQuery Data.ItemIds.empty model.searchMenuModel
|
||||||
, Maybe.map Q.Fragment <|
|
, Maybe.map Q.Fragment <|
|
||||||
case model.searchMode of
|
case model.searchMode of
|
||||||
SearchBarNormal ->
|
SearchBarNormal ->
|
||||||
|
Reference in New Issue
Block a user