Bookmark queries scoped to user or collective

This commit is contained in:
eikek
2022-01-08 19:31:26 +01:00
parent f914aa723e
commit a50a0a9a1a
14 changed files with 767 additions and 7 deletions

View File

@@ -13,6 +13,7 @@ module Page.Home.Data exposing
, SearchType(..)
, SelectActionMode(..)
, SelectViewModel
, TopWidgetModel(..)
, ViewMode(..)
, createQuery
, doSearchCmd
@@ -30,6 +31,7 @@ import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.SearchStats exposing (SearchStats)
import Browser.Dom as Dom
import Comp.BookmarkQueryManage
import Comp.ItemCardList
import Comp.ItemDetail.FormChange exposing (FormChange)
import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
@@ -68,9 +70,15 @@ type alias Model =
, powerSearchInput : Comp.PowerSearchInput.Model
, viewMenuOpen : Bool
, itemRowsOpen : Set String
, topWidgetModel : TopWidgetModel
}
type TopWidgetModel
= TopWidgetHidden
| BookmarkQuery Comp.BookmarkQueryManage.Model
type ConfirmModalValue
= ConfirmReprocessItems
| ConfirmDelete
@@ -137,6 +145,7 @@ init flags viewMode =
, powerSearchInput = Comp.PowerSearchInput.init
, viewMenuOpen = False
, itemRowsOpen = Set.empty
, topWidgetModel = TopWidgetHidden
}
@@ -238,6 +247,8 @@ type Msg
| ToggleShowGroups
| ToggleArrange ItemArrange
| ToggleExpandCollapseRows
| ToggleBookmarkCurrentQueryView
| BookmarkQueryMsg Comp.BookmarkQueryManage.Msg
type SearchType

View File

@@ -13,6 +13,7 @@ module Page.Home.Update exposing
import Api
import Api.Model.ItemLightList exposing (ItemLightList)
import Browser.Navigation as Nav
import Comp.BookmarkQueryManage
import Comp.ItemCardList
import Comp.ItemDetail.FormChange exposing (FormChange(..))
import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
@@ -927,6 +928,54 @@ update mId key flags texts settings msg model =
Nothing ->
noSub ( model, Cmd.none )
ToggleBookmarkCurrentQueryView ->
case createQuery model of
Just q ->
case model.topWidgetModel of
BookmarkQuery _ ->
noSub ( { model | topWidgetModel = TopWidgetHidden, viewMenuOpen = False }, Cmd.none )
TopWidgetHidden ->
let
( qm, qc ) =
Comp.BookmarkQueryManage.init (Q.render q)
in
noSub
( { model | topWidgetModel = BookmarkQuery qm, viewMenuOpen = False }
, Cmd.map BookmarkQueryMsg qc
)
Nothing ->
noSub ( model, Cmd.none )
BookmarkQueryMsg lm ->
case model.topWidgetModel of
BookmarkQuery bm ->
let
res =
Comp.BookmarkQueryManage.update flags lm bm
nextModel =
if
res.outcome
== Comp.BookmarkQueryManage.Cancelled
|| res.outcome
== Comp.BookmarkQueryManage.Done
then
TopWidgetHidden
else
BookmarkQuery res.model
in
makeResult
( { model | topWidgetModel = nextModel }
, Cmd.map BookmarkQueryMsg res.cmd
, Sub.map BookmarkQueryMsg res.sub
)
TopWidgetHidden ->
noSub ( model, Cmd.none )
PublishViewMsg lmsg ->
case model.viewMode of
PublishView inPM ->

View File

@@ -9,6 +9,7 @@ module Page.Home.View2 exposing (viewContent, viewSidebar)
import Api
import Comp.Basic as B
import Comp.BookmarkQueryManage
import Comp.ConfirmModal
import Comp.ItemCardList
import Comp.ItemMerge
@@ -103,7 +104,21 @@ mainView texts flags settings model =
body
Nothing ->
itemCardList texts flags settings model
bookmarkQueryWidget texts settings flags model
++ itemCardList texts flags settings model
bookmarkQueryWidget : Texts -> UiSettings -> Flags -> Model -> List (Html Msg)
bookmarkQueryWidget texts settings flags model =
case model.topWidgetModel of
BookmarkQuery m ->
[ div [ class "px-2 mb-4 border-l border-r border-b dark:border-slate-600" ]
[ Html.map BookmarkQueryMsg (Comp.BookmarkQueryManage.view texts.bookmarkManage m)
]
]
TopWidgetHidden ->
[]
itemPublishView : Texts -> UiSettings -> Flags -> SelectViewModel -> List (Html Msg)
@@ -354,7 +369,7 @@ defaultMenuBar texts flags settings model =
]
}
, menuSep
, { label = "Share Results"
, { label = texts.shareResults
, icon = Icons.shareIcon ""
, disabled = createQuery model == Nothing
, attrs =
@@ -372,6 +387,24 @@ defaultMenuBar texts flags settings model =
onClick TogglePublishCurrentQueryView
]
}
, { label = texts.bookmarkQuery
, icon = i [ class "fa fa-bookmark" ] []
, disabled = createQuery model == Nothing
, attrs =
[ title <|
if createQuery model == Nothing then
texts.nothingToBookmark
else
texts.bookmarkQuery
, href "#"
, if createQuery model == Nothing then
class ""
else
onClick ToggleBookmarkCurrentQueryView
]
}
, { label =
if settings.cardPreviewFullWidth then
texts.fullHeightPreviewTitle