mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-09-30 00:28:23 +00:00
Add selection to search menu
This commit is contained in:
@@ -42,6 +42,7 @@ import Comp.PublishItems
|
||||
import Comp.SearchMenu
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.ItemArrange exposing (ItemArrange)
|
||||
import Data.ItemIds exposing (ItemIds)
|
||||
import Data.ItemNav exposing (ItemNav)
|
||||
import Data.ItemQuery as Q
|
||||
import Data.Items
|
||||
@@ -256,6 +257,7 @@ type alias SearchParam =
|
||||
, pageSize : Int
|
||||
, offset : Int
|
||||
, scroll : Bool
|
||||
, selectedItems : ItemIds
|
||||
}
|
||||
|
||||
|
||||
@@ -274,7 +276,7 @@ doSearchDefaultCmd param model =
|
||||
let
|
||||
smask =
|
||||
Q.request model.searchMenuModel.searchMode <|
|
||||
createQuery model
|
||||
createQuery param.selectedItems model
|
||||
|
||||
mask =
|
||||
{ smask
|
||||
@@ -292,10 +294,10 @@ doSearchDefaultCmd param model =
|
||||
Api.itemSearch param.flags mask ItemSearchAddResp
|
||||
|
||||
|
||||
createQuery : Model -> Maybe Q.ItemQuery
|
||||
createQuery model =
|
||||
createQuery : ItemIds -> Model -> Maybe Q.ItemQuery
|
||||
createQuery selectedItems model =
|
||||
Q.and
|
||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
||||
[ Comp.SearchMenu.getItemQuery selectedItems model.searchMenuModel
|
||||
, Maybe.map Q.Fragment (Comp.PowerSearchInput.getSearchString model.powerSearchInput)
|
||||
]
|
||||
|
||||
|
@@ -11,6 +11,7 @@ import Comp.Basic as B
|
||||
import Comp.ItemDetail.MultiEditMenu
|
||||
import Comp.MenuBar as MB
|
||||
import Comp.SearchMenu
|
||||
import Data.Environment as Env
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
import Html exposing (..)
|
||||
@@ -22,8 +23,8 @@ import Set
|
||||
import Styles as S
|
||||
|
||||
|
||||
view : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
||||
view texts flags settings model =
|
||||
view : Texts -> Env.View -> Model -> Html Msg
|
||||
view texts env model =
|
||||
div
|
||||
[ class "flex flex-col"
|
||||
]
|
||||
@@ -56,19 +57,19 @@ view texts flags settings model =
|
||||
SelectView svm ->
|
||||
case svm.action of
|
||||
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 flags settings model =
|
||||
viewSearch : Texts -> Env.View -> Model -> List (Html Msg)
|
||||
viewSearch texts env model =
|
||||
[ MB.viewSide
|
||||
{ start =
|
||||
[ MB.CustomElement <|
|
||||
@@ -87,14 +88,15 @@ viewSearch texts flags settings model =
|
||||
, let
|
||||
searchMenuCfg =
|
||||
{ overrideTabLook = \_ -> identity
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
in
|
||||
Html.map SearchMenuMsg
|
||||
(Comp.SearchMenu.viewDrop2 texts.searchMenu
|
||||
model.dragDropData
|
||||
flags
|
||||
env.flags
|
||||
searchMenuCfg
|
||||
settings
|
||||
env.settings
|
||||
model.searchMenuModel
|
||||
)
|
||||
]
|
||||
|
@@ -29,7 +29,6 @@ import Data.ItemIds exposing (ItemIds)
|
||||
import Data.ItemQuery as Q
|
||||
import Data.Items
|
||||
import Data.SearchMode exposing (SearchMode)
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
import Messages.Page.Search exposing (Texts)
|
||||
import Page exposing (Page(..))
|
||||
import Page.Search.Data exposing (..)
|
||||
@@ -62,6 +61,7 @@ update texts env msg model =
|
||||
, pageSize = env.settings.itemSearchPageSize
|
||||
, offset = 0
|
||||
, scroll = True
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
|
||||
setBookmark =
|
||||
@@ -111,9 +111,21 @@ update texts env msg model =
|
||||
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 =
|
||||
if nextState.stateChange && not model.searchInProgress then
|
||||
doSearch env (SearchParam env.flags BasicSearch env.settings.itemSearchPageSize 0 False) newModel
|
||||
doSearch env searchParam newModel
|
||||
|
||||
else
|
||||
resultModelCmd env ( newModel, Cmd.none )
|
||||
@@ -126,6 +138,7 @@ update texts env msg model =
|
||||
, dropCmd
|
||||
]
|
||||
, sub = Sub.map SearchMenuMsg nextState.sub
|
||||
, selectedItems = newSelection
|
||||
}
|
||||
|
||||
SetLinkTarget lt ->
|
||||
@@ -251,6 +264,7 @@ update texts env msg model =
|
||||
, pageSize = env.settings.itemSearchPageSize
|
||||
, offset = 0
|
||||
, scroll = False
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
in
|
||||
if model.searchInProgress then
|
||||
@@ -267,6 +281,7 @@ update texts env msg model =
|
||||
, pageSize = env.settings.itemSearchPageSize
|
||||
, offset = model.searchOffset
|
||||
, scroll = False
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
in
|
||||
if model.searchInProgress then
|
||||
@@ -292,7 +307,7 @@ update texts env msg model =
|
||||
|
||||
LoadMore ->
|
||||
if model.moreAvailable then
|
||||
doSearchMore env.flags env.settings model |> resultModelCmd env
|
||||
doSearchMore env model |> resultModelCmd env
|
||||
|
||||
else
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
@@ -344,7 +359,7 @@ update texts env msg model =
|
||||
SelectNoItems ->
|
||||
let
|
||||
result =
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
update texts env (SearchMenuMsg <| Comp.SearchMenu.setIncludeSelection False) model
|
||||
in
|
||||
{ result | selectedItems = Data.ItemIds.empty }
|
||||
|
||||
@@ -404,6 +419,7 @@ update texts env msg model =
|
||||
, pageSize = env.settings.itemSearchPageSize
|
||||
, offset = 0
|
||||
, scroll = False
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
in
|
||||
doSearch env param nm
|
||||
@@ -559,28 +575,27 @@ update texts env msg model =
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
else if Data.ItemIds.isEmpty env.selectedItems then
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
|
||||
else
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.ItemMerge.initQuery
|
||||
env.flags
|
||||
model.searchMenuModel.searchMode
|
||||
(Data.ItemIds.toQuery env.selectedItems)
|
||||
in
|
||||
resultModelCmd env
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = MergeSelected
|
||||
, mergeModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map MergeItemsMsg mc
|
||||
)
|
||||
case Data.ItemIds.toQuery env.selectedItems of
|
||||
Just q ->
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.ItemMerge.initQuery env.flags model.searchMenuModel.searchMode q
|
||||
in
|
||||
resultModelCmd env
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = MergeSelected
|
||||
, mergeModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map MergeItemsMsg mc
|
||||
)
|
||||
|
||||
Nothing ->
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
|
||||
_ ->
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
@@ -641,26 +656,27 @@ update texts env msg model =
|
||||
, Cmd.map PublishItemsMsg mc
|
||||
)
|
||||
|
||||
else if Data.ItemIds.isEmpty env.selectedItems then
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
|
||||
else
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.PublishItems.initQuery env.flags
|
||||
(Data.ItemIds.toQuery env.selectedItems)
|
||||
in
|
||||
resultModelCmd env
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = PublishSelected
|
||||
, publishModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map PublishItemsMsg mc
|
||||
)
|
||||
case Data.ItemIds.toQuery env.selectedItems of
|
||||
Just q ->
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.PublishItems.initQuery env.flags q
|
||||
in
|
||||
resultModelCmd env
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = PublishSelected
|
||||
, publishModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map PublishItemsMsg mc
|
||||
)
|
||||
|
||||
Nothing ->
|
||||
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
|
||||
|
||||
TogglePublishCurrentQueryView ->
|
||||
case createQuery model of
|
||||
case createQuery env.selectedItems model of
|
||||
Just q ->
|
||||
let
|
||||
( pm, pc ) =
|
||||
@@ -866,7 +882,7 @@ update texts env msg model =
|
||||
resultModelCmd env ( model, Cmd.none )
|
||||
|
||||
ToggleBookmarkCurrentQueryView ->
|
||||
case createQuery model of
|
||||
case createQuery env.selectedItems model of
|
||||
Just q ->
|
||||
case model.topWidgetModel of
|
||||
BookmarkQuery _ ->
|
||||
@@ -1099,15 +1115,16 @@ linkTargetMsg linkTarget =
|
||||
Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget)
|
||||
|
||||
|
||||
doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
|
||||
doSearchMore flags settings model =
|
||||
doSearchMore : Env.Update -> Model -> ( Model, Cmd Msg )
|
||||
doSearchMore env model =
|
||||
let
|
||||
param =
|
||||
{ flags = flags
|
||||
{ flags = env.flags
|
||||
, searchType = model.lastSearchType
|
||||
, pageSize = settings.itemSearchPageSize
|
||||
, pageSize = env.settings.itemSearchPageSize
|
||||
, offset = model.searchOffset
|
||||
, scroll = False
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
|
||||
cmd =
|
||||
|
@@ -46,7 +46,7 @@ viewSidebar texts env model =
|
||||
, class S.sidebarBg
|
||||
, 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 =
|
||||
case model.viewMode of
|
||||
SearchView ->
|
||||
[ defaultMenuBar texts env.flags env.settings model ]
|
||||
[ defaultMenuBar texts env model ]
|
||||
|
||||
SelectView svm ->
|
||||
[ editMenuBar texts model env.selectedItems svm ]
|
||||
|
||||
PublishView _ ->
|
||||
[ defaultMenuBar texts env.flags env.settings model ]
|
||||
[ defaultMenuBar texts env model ]
|
||||
|
||||
|
||||
defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
||||
defaultMenuBar texts flags settings model =
|
||||
defaultMenuBar : Texts -> Env.View -> Model -> Html Msg
|
||||
defaultMenuBar texts env model =
|
||||
let
|
||||
btnStyle =
|
||||
S.secondaryBasicButton ++ " text-sm"
|
||||
@@ -226,7 +226,7 @@ defaultMenuBar texts flags settings model =
|
||||
|> Maybe.withDefault (value "")
|
||||
, class (String.replace "rounded" "" S.textInput)
|
||||
, class "py-2 text-sm"
|
||||
, if flags.config.fullTextSearchEnabled then
|
||||
, if env.flags.config.fullTextSearchEnabled then
|
||||
class " border-r-0 rounded-l"
|
||||
|
||||
else
|
||||
@@ -237,7 +237,7 @@ defaultMenuBar texts flags settings model =
|
||||
[ class S.secondaryBasicButtonPlain
|
||||
, class "text-sm px-4 py-2 border rounded-r"
|
||||
, classList
|
||||
[ ( "hidden", not flags.config.fullTextSearchEnabled )
|
||||
[ ( "hidden", not env.flags.config.fullTextSearchEnabled )
|
||||
]
|
||||
, href "#"
|
||||
, onClick ToggleSearchType
|
||||
@@ -260,10 +260,10 @@ defaultMenuBar texts flags settings model =
|
||||
]
|
||||
|
||||
isCardView =
|
||||
settings.itemSearchArrange == Data.ItemArrange.Cards
|
||||
env.settings.itemSearchArrange == Data.ItemArrange.Cards
|
||||
|
||||
isListView =
|
||||
settings.itemSearchArrange == Data.ItemArrange.List
|
||||
env.settings.itemSearchArrange == Data.ItemArrange.List
|
||||
|
||||
menuSep =
|
||||
{ icon = i [] []
|
||||
@@ -276,7 +276,7 @@ defaultMenuBar texts flags settings model =
|
||||
MB.view
|
||||
{ start =
|
||||
[ MB.CustomElement <|
|
||||
if settings.powerSearchEnabled then
|
||||
if env.settings.powerSearchEnabled then
|
||||
powerSearchBar
|
||||
|
||||
else
|
||||
@@ -316,7 +316,7 @@ defaultMenuBar texts flags settings model =
|
||||
, menuOpen = model.viewMenuOpen
|
||||
, items =
|
||||
[ { icon =
|
||||
if settings.itemSearchShowGroups then
|
||||
if env.settings.itemSearchShowGroups then
|
||||
i [ class "fa fa-check-square font-thin" ] []
|
||||
|
||||
else
|
||||
@@ -370,16 +370,16 @@ defaultMenuBar texts flags settings model =
|
||||
, menuSep
|
||||
, { label = texts.shareResults
|
||||
, icon = Icons.shareIcon ""
|
||||
, disabled = createQuery model == Nothing
|
||||
, disabled = createQuery env.selectedItems model == Nothing
|
||||
, attrs =
|
||||
[ title <|
|
||||
if createQuery model == Nothing then
|
||||
if createQuery env.selectedItems model == Nothing then
|
||||
texts.nothingSelectedToShare
|
||||
|
||||
else
|
||||
texts.publishCurrentQueryTitle
|
||||
, href "#"
|
||||
, if createQuery model == Nothing then
|
||||
, if createQuery env.selectedItems model == Nothing then
|
||||
class ""
|
||||
|
||||
else
|
||||
@@ -388,16 +388,16 @@ defaultMenuBar texts flags settings model =
|
||||
}
|
||||
, { label = texts.bookmarkQuery
|
||||
, icon = i [ class "fa fa-bookmark" ] []
|
||||
, disabled = createQuery model == Nothing
|
||||
, disabled = createQuery env.selectedItems model == Nothing
|
||||
, attrs =
|
||||
[ title <|
|
||||
if createQuery model == Nothing then
|
||||
if createQuery env.selectedItems model == Nothing then
|
||||
texts.nothingToBookmark
|
||||
|
||||
else
|
||||
texts.bookmarkQuery
|
||||
, href "#"
|
||||
, if createQuery model == Nothing then
|
||||
, if createQuery env.selectedItems model == Nothing then
|
||||
class ""
|
||||
|
||||
else
|
||||
@@ -405,7 +405,7 @@ defaultMenuBar texts flags settings model =
|
||||
]
|
||||
}
|
||||
, { label =
|
||||
if settings.cardPreviewFullWidth then
|
||||
if env.settings.cardPreviewFullWidth then
|
||||
texts.fullHeightPreviewTitle
|
||||
|
||||
else
|
||||
@@ -417,7 +417,7 @@ defaultMenuBar texts flags settings model =
|
||||
, onClick TogglePreviewFullWidth
|
||||
, classList
|
||||
[ ( "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.Tabs
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.ItemIds
|
||||
import Html exposing (..)
|
||||
import Html.Attributes exposing (..)
|
||||
import Messages.Page.Share exposing (Texts)
|
||||
@@ -30,6 +31,7 @@ view texts flags model =
|
||||
|
||||
searchMenuCfg =
|
||||
{ overrideTabLook = hideTrashTab
|
||||
, selectedItems = Data.ItemIds.empty
|
||||
}
|
||||
in
|
||||
div
|
||||
|
@@ -14,6 +14,7 @@ import Comp.PowerSearchInput
|
||||
import Comp.SearchMenu
|
||||
import Comp.SharePasswordForm
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.ItemIds
|
||||
import Data.ItemQuery as Q
|
||||
import Data.SearchMode
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
@@ -262,7 +263,7 @@ makeSearchCmd flags doInit model =
|
||||
let
|
||||
xq =
|
||||
Q.and
|
||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
||||
[ Comp.SearchMenu.getItemQuery Data.ItemIds.empty model.searchMenuModel
|
||||
, Maybe.map Q.Fragment <|
|
||||
case model.searchMode of
|
||||
SearchBarNormal ->
|
||||
|
Reference in New Issue
Block a user