mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-09-30 00:28:23 +00:00
Create shares from search and select view
This commit is contained in:
@@ -14,6 +14,7 @@ module Page.Home.Data exposing
|
||||
, SelectActionMode(..)
|
||||
, SelectViewModel
|
||||
, ViewMode(..)
|
||||
, createQuery
|
||||
, doSearchCmd
|
||||
, editActive
|
||||
, init
|
||||
@@ -36,6 +37,7 @@ import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
|
||||
import Comp.ItemMerge
|
||||
import Comp.LinkTarget exposing (LinkTarget)
|
||||
import Comp.PowerSearchInput
|
||||
import Comp.PublishItems
|
||||
import Comp.SearchMenu
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.ItemNav exposing (ItemNav)
|
||||
@@ -79,6 +81,7 @@ type alias SelectViewModel =
|
||||
, confirmModal : Maybe ConfirmModalValue
|
||||
, editModel : Comp.ItemDetail.MultiEditMenu.Model
|
||||
, mergeModel : Comp.ItemMerge.Model
|
||||
, publishModel : Comp.PublishItems.Model
|
||||
, saveNameState : SaveNameState
|
||||
, saveCustomFieldState : Set String
|
||||
}
|
||||
@@ -91,6 +94,7 @@ initSelectViewModel =
|
||||
, confirmModal = Nothing
|
||||
, editModel = Comp.ItemDetail.MultiEditMenu.init
|
||||
, mergeModel = Comp.ItemMerge.init []
|
||||
, publishModel = Tuple.first Comp.PublishItems.init
|
||||
, saveNameState = SaveSuccess
|
||||
, saveCustomFieldState = Set.empty
|
||||
}
|
||||
@@ -100,6 +104,7 @@ type ViewMode
|
||||
= SimpleView
|
||||
| SearchView
|
||||
| SelectView SelectViewModel
|
||||
| PublishView Comp.PublishItems.Model
|
||||
|
||||
|
||||
init : Flags -> ViewMode -> Model
|
||||
@@ -143,6 +148,9 @@ menuCollapsed model =
|
||||
SelectView _ ->
|
||||
False
|
||||
|
||||
PublishView _ ->
|
||||
False
|
||||
|
||||
|
||||
selectActive : Model -> Bool
|
||||
selectActive model =
|
||||
@@ -153,6 +161,9 @@ selectActive model =
|
||||
SearchView ->
|
||||
False
|
||||
|
||||
PublishView _ ->
|
||||
False
|
||||
|
||||
SelectView _ ->
|
||||
True
|
||||
|
||||
@@ -166,6 +177,9 @@ editActive model =
|
||||
SearchView ->
|
||||
False
|
||||
|
||||
PublishView _ ->
|
||||
False
|
||||
|
||||
SelectView svm ->
|
||||
svm.action == EditSelected
|
||||
|
||||
@@ -211,6 +225,10 @@ type Msg
|
||||
| RemoveItem String
|
||||
| MergeSelectedItems
|
||||
| MergeItemsMsg Comp.ItemMerge.Msg
|
||||
| PublishSelectedItems
|
||||
| PublishItemsMsg Comp.PublishItems.Msg
|
||||
| TogglePublishCurrentQueryView
|
||||
| PublishViewMsg Comp.PublishItems.Msg
|
||||
|
||||
|
||||
type SearchType
|
||||
@@ -225,6 +243,7 @@ type SelectActionMode
|
||||
| ReprocessSelected
|
||||
| RestoreSelected
|
||||
| MergeSelected
|
||||
| PublishSelected
|
||||
|
||||
|
||||
type alias SearchParam =
|
||||
@@ -251,10 +270,7 @@ doSearchDefaultCmd param model =
|
||||
let
|
||||
smask =
|
||||
Q.request model.searchMenuModel.searchMode <|
|
||||
Q.and
|
||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
||||
, Maybe.map Q.Fragment model.powerSearchInput.input
|
||||
]
|
||||
createQuery model
|
||||
|
||||
mask =
|
||||
{ smask
|
||||
@@ -272,6 +288,14 @@ doSearchDefaultCmd param model =
|
||||
Api.itemSearch param.flags mask ItemSearchAddResp
|
||||
|
||||
|
||||
createQuery : Model -> Maybe Q.ItemQuery
|
||||
createQuery model =
|
||||
Q.and
|
||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
||||
, Maybe.map Q.Fragment model.powerSearchInput.input
|
||||
]
|
||||
|
||||
|
||||
resultsBelowLimit : UiSettings -> Model -> Bool
|
||||
resultsBelowLimit settings model =
|
||||
let
|
||||
|
@@ -19,6 +19,7 @@ import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
|
||||
import Comp.ItemMerge
|
||||
import Comp.LinkTarget exposing (LinkTarget)
|
||||
import Comp.PowerSearchInput
|
||||
import Comp.PublishItems
|
||||
import Comp.SearchMenu
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.ItemQuery as Q
|
||||
@@ -237,6 +238,9 @@ update mId key flags settings msg model =
|
||||
|
||||
SelectView _ ->
|
||||
SimpleView
|
||||
|
||||
PublishView q ->
|
||||
PublishView q
|
||||
in
|
||||
withSub
|
||||
( { model | viewMode = nextView }
|
||||
@@ -255,6 +259,9 @@ update mId key flags settings msg model =
|
||||
|
||||
SelectView _ ->
|
||||
( SearchView, Cmd.none )
|
||||
|
||||
PublishView q ->
|
||||
( PublishView q, Cmd.none )
|
||||
in
|
||||
withSub
|
||||
( { model
|
||||
@@ -620,6 +627,85 @@ update mId key flags settings msg model =
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
PublishSelectedItems ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
if svm.action == PublishSelected then
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.PublishItems.init
|
||||
in
|
||||
noSub
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = NoneAction
|
||||
, publishModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map PublishItemsMsg mc
|
||||
)
|
||||
|
||||
else if svm.ids == Set.empty then
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
else
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.PublishItems.initQuery
|
||||
(Q.ItemIdIn (Set.toList svm.ids))
|
||||
in
|
||||
noSub
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = PublishSelected
|
||||
, publishModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map PublishItemsMsg mc
|
||||
)
|
||||
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
PublishItemsMsg lmsg ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
let
|
||||
result =
|
||||
Comp.PublishItems.update flags lmsg svm.publishModel
|
||||
|
||||
nextView =
|
||||
case result.outcome of
|
||||
Comp.PublishItems.OutcomeDone ->
|
||||
SelectView { svm | action = NoneAction }
|
||||
|
||||
Comp.PublishItems.OutcomeInProgress ->
|
||||
SelectView { svm | publishModel = result.model }
|
||||
|
||||
model_ =
|
||||
{ model | viewMode = nextView }
|
||||
in
|
||||
if result.outcome == Comp.PublishItems.OutcomeDone then
|
||||
update mId
|
||||
key
|
||||
flags
|
||||
settings
|
||||
(DoSearch model.searchTypeDropdownValue)
|
||||
model_
|
||||
|
||||
else
|
||||
noSub
|
||||
( model_
|
||||
, Cmd.map PublishItemsMsg result.cmd
|
||||
)
|
||||
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
EditMenuMsg lmsg ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
@@ -786,6 +872,38 @@ update mId key flags settings msg model =
|
||||
RemoveItem id ->
|
||||
update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.RemoveItem id)) model
|
||||
|
||||
TogglePublishCurrentQueryView ->
|
||||
case createQuery model of
|
||||
Just q ->
|
||||
let
|
||||
( pm, pc ) =
|
||||
Comp.PublishItems.initQuery q
|
||||
in
|
||||
noSub ( { model | viewMode = PublishView pm }, Cmd.map PublishViewMsg pc )
|
||||
|
||||
Nothing ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
PublishViewMsg lmsg ->
|
||||
case model.viewMode of
|
||||
PublishView inPM ->
|
||||
let
|
||||
result =
|
||||
Comp.PublishItems.update flags lmsg inPM
|
||||
in
|
||||
case result.outcome of
|
||||
Comp.PublishItems.OutcomeInProgress ->
|
||||
noSub
|
||||
( { model | viewMode = PublishView result.model }
|
||||
, Cmd.map PublishViewMsg result.cmd
|
||||
)
|
||||
|
||||
Comp.PublishItems.OutcomeDone ->
|
||||
noSub ( { model | viewMode = SearchView }, Cmd.none )
|
||||
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
|
||||
|
||||
--- Helpers
|
||||
|
@@ -13,9 +13,12 @@ import Comp.ItemCardList
|
||||
import Comp.ItemMerge
|
||||
import Comp.MenuBar as MB
|
||||
import Comp.PowerSearchInput
|
||||
import Comp.PublishItems
|
||||
import Comp.SearchMenu
|
||||
import Comp.SearchStatsView
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.Icons as Icons
|
||||
import Data.ItemQuery as Q
|
||||
import Data.ItemSelection
|
||||
import Data.SearchMode
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
@@ -63,29 +66,52 @@ viewContent texts flags settings model =
|
||||
mainView : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
||||
mainView texts flags settings model =
|
||||
let
|
||||
mergeView =
|
||||
otherView =
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
case svm.action of
|
||||
MergeSelected ->
|
||||
Just svm
|
||||
Just
|
||||
[ div [ class "sm:relative mb-2" ]
|
||||
(itemMergeView texts settings svm)
|
||||
]
|
||||
|
||||
PublishSelected ->
|
||||
Just
|
||||
[ div [ class "sm:relative mb-2" ]
|
||||
(itemPublishView texts flags svm)
|
||||
]
|
||||
|
||||
_ ->
|
||||
Nothing
|
||||
|
||||
_ ->
|
||||
PublishView pm ->
|
||||
Just
|
||||
[ div [ class "sm:relative mb-2" ]
|
||||
(publishResults texts flags model pm)
|
||||
]
|
||||
|
||||
SimpleView ->
|
||||
Nothing
|
||||
|
||||
SearchView ->
|
||||
Nothing
|
||||
in
|
||||
case mergeView of
|
||||
Just svm ->
|
||||
[ div [ class "sm:relative mb-2" ]
|
||||
(itemMergeView texts settings svm)
|
||||
]
|
||||
case otherView of
|
||||
Just body ->
|
||||
body
|
||||
|
||||
Nothing ->
|
||||
itemCardList texts flags settings model
|
||||
|
||||
|
||||
itemPublishView : Texts -> Flags -> SelectViewModel -> List (Html Msg)
|
||||
itemPublishView texts flags svm =
|
||||
[ Html.map PublishItemsMsg
|
||||
(Comp.PublishItems.view texts.publishItems flags svm.publishModel)
|
||||
]
|
||||
|
||||
|
||||
itemMergeView : Texts -> UiSettings -> SelectViewModel -> List (Html Msg)
|
||||
itemMergeView texts settings svm =
|
||||
[ Html.map MergeItemsMsg
|
||||
@@ -93,6 +119,13 @@ itemMergeView texts settings svm =
|
||||
]
|
||||
|
||||
|
||||
publishResults : Texts -> Flags -> Model -> Comp.PublishItems.Model -> List (Html Msg)
|
||||
publishResults texts flags model pm =
|
||||
[ Html.map PublishViewMsg
|
||||
(Comp.PublishItems.view texts.publishItems flags pm)
|
||||
]
|
||||
|
||||
|
||||
confirmModal : Texts -> Model -> List (Html Msg)
|
||||
confirmModal texts model =
|
||||
let
|
||||
@@ -148,6 +181,9 @@ itemsBar texts flags settings model =
|
||||
SelectView svm ->
|
||||
[ editMenuBar texts model svm ]
|
||||
|
||||
PublishView query ->
|
||||
[ defaultMenuBar texts flags settings model ]
|
||||
|
||||
|
||||
defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
||||
defaultMenuBar texts flags settings model =
|
||||
@@ -215,6 +251,25 @@ defaultMenuBar texts flags settings model =
|
||||
MB.view
|
||||
{ end =
|
||||
[ MB.CustomElement <|
|
||||
B.secondaryBasicButton
|
||||
{ label = ""
|
||||
, icon = Icons.share
|
||||
, disabled = createQuery model == Nothing
|
||||
, handler = onClick TogglePublishCurrentQueryView
|
||||
, attrs =
|
||||
[ title <|
|
||||
if createQuery model == Nothing then
|
||||
texts.nothingSelectedToShare
|
||||
|
||||
else
|
||||
texts.publishCurrentQueryTitle
|
||||
, classList
|
||||
[ ( btnStyle, True )
|
||||
]
|
||||
, href "#"
|
||||
]
|
||||
}
|
||||
, MB.CustomElement <|
|
||||
B.secondaryBasicButton
|
||||
{ label = ""
|
||||
, icon =
|
||||
@@ -332,6 +387,17 @@ editMenuBar texts model svm =
|
||||
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
|
||||
]
|
||||
}
|
||||
, MB.CustomButton
|
||||
{ tagger = PublishSelectedItems
|
||||
, label = ""
|
||||
, icon = Just Icons.share
|
||||
, title = texts.publishItemsTitle selectCount
|
||||
, inputClass =
|
||||
[ ( btnStyle, True )
|
||||
, ( "bg-gray-200 dark:bg-bluegray-600", svm.action == PublishSelected )
|
||||
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
|
||||
]
|
||||
}
|
||||
]
|
||||
, end =
|
||||
[ MB.CustomButton
|
||||
@@ -413,12 +479,12 @@ itemCardList texts _ settings model =
|
||||
settings
|
||||
model.itemListModel
|
||||
)
|
||||
, loadMore settings model
|
||||
, loadMore texts settings model
|
||||
]
|
||||
|
||||
|
||||
loadMore : UiSettings -> Model -> Html Msg
|
||||
loadMore settings model =
|
||||
loadMore : Texts -> UiSettings -> Model -> Html Msg
|
||||
loadMore texts settings model =
|
||||
let
|
||||
inactive =
|
||||
not model.moreAvailable || model.moreInProgress || model.searchInProgress
|
||||
@@ -430,10 +496,10 @@ loadMore settings model =
|
||||
[ B.secondaryBasicButton
|
||||
{ label =
|
||||
if model.moreAvailable then
|
||||
"Load more…"
|
||||
texts.loadMore
|
||||
|
||||
else
|
||||
"That's all"
|
||||
texts.thatsAll
|
||||
, icon =
|
||||
if model.moreInProgress then
|
||||
"fa fa-circle-notch animate-spin"
|
||||
|
Reference in New Issue
Block a user