Add selection to search menu

This commit is contained in:
eikek
2022-02-27 19:47:16 +01:00
parent 63e0258db7
commit adcfe10460
9 changed files with 280 additions and 99 deletions

View File

@@ -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)
]

View File

@@ -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
)
]

View File

@@ -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 =

View File

@@ -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 )
]
]
}

View File

@@ -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

View File

@@ -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 ->