mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-24 11:28:25 +00:00
Integrate item merge dialog into home page
This commit is contained in:
@ -26,12 +26,14 @@ module Page.Home.Data exposing
|
||||
|
||||
import Api
|
||||
import Api.Model.BasicResult exposing (BasicResult)
|
||||
import Api.Model.ItemLight exposing (ItemLight)
|
||||
import Api.Model.ItemLightList exposing (ItemLightList)
|
||||
import Api.Model.SearchStats exposing (SearchStats)
|
||||
import Browser.Dom as Dom
|
||||
import Comp.ItemCardList
|
||||
import Comp.ItemDetail.FormChange exposing (FormChange)
|
||||
import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
|
||||
import Comp.ItemMerge
|
||||
import Comp.LinkTarget exposing (LinkTarget)
|
||||
import Comp.PowerSearchInput
|
||||
import Comp.SearchMenu
|
||||
@ -76,6 +78,7 @@ type alias SelectViewModel =
|
||||
, action : SelectActionMode
|
||||
, confirmModal : Maybe ConfirmModalValue
|
||||
, editModel : Comp.ItemDetail.MultiEditMenu.Model
|
||||
, mergeModel : Comp.ItemMerge.Model
|
||||
, saveNameState : SaveNameState
|
||||
, saveCustomFieldState : Set String
|
||||
}
|
||||
@ -87,6 +90,7 @@ initSelectViewModel =
|
||||
, action = NoneAction
|
||||
, confirmModal = Nothing
|
||||
, editModel = Comp.ItemDetail.MultiEditMenu.init
|
||||
, mergeModel = Comp.ItemMerge.init []
|
||||
, saveNameState = SaveSuccess
|
||||
, saveCustomFieldState = Set.empty
|
||||
}
|
||||
@ -205,6 +209,8 @@ type Msg
|
||||
| ReprocessSelectedConfirmed
|
||||
| ClientSettingsSaveResp UiSettings (Result Http.Error BasicResult)
|
||||
| RemoveItem String
|
||||
| MergeSelectedItems
|
||||
| MergeItemsMsg Comp.ItemMerge.Msg
|
||||
|
||||
|
||||
type SearchType
|
||||
@ -218,6 +224,7 @@ type SelectActionMode
|
||||
| EditSelected
|
||||
| ReprocessSelected
|
||||
| RestoreSelected
|
||||
| MergeSelected
|
||||
|
||||
|
||||
type alias SearchParam =
|
||||
|
@ -16,6 +16,7 @@ import Browser.Navigation as Nav
|
||||
import Comp.ItemCardList
|
||||
import Comp.ItemDetail.FormChange exposing (FormChange(..))
|
||||
import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
|
||||
import Comp.ItemMerge
|
||||
import Comp.LinkTarget exposing (LinkTarget)
|
||||
import Comp.PowerSearchInput
|
||||
import Comp.SearchMenu
|
||||
@ -361,6 +362,7 @@ update mId key flags settings msg model =
|
||||
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
RestoreSelectedConfirmed ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
@ -383,7 +385,6 @@ update mId key flags settings msg model =
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
|
||||
DeleteAllResp (Ok res) ->
|
||||
if res.success then
|
||||
let
|
||||
@ -535,6 +536,70 @@ update mId key flags settings msg model =
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
MergeSelectedItems ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
if svm.action == MergeSelected then
|
||||
noSub
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = NoneAction
|
||||
, mergeModel = Comp.ItemMerge.init []
|
||||
}
|
||||
}
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
else if svm.ids == Set.empty then
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
else
|
||||
let
|
||||
( mm, mc ) =
|
||||
Comp.ItemMerge.initQuery
|
||||
flags
|
||||
model.searchMenuModel.searchMode
|
||||
(Q.ItemIdIn (Set.toList svm.ids))
|
||||
in
|
||||
noSub
|
||||
( { model
|
||||
| viewMode =
|
||||
SelectView
|
||||
{ svm
|
||||
| action = MergeSelected
|
||||
, mergeModel = mm
|
||||
}
|
||||
}
|
||||
, Cmd.map MergeItemsMsg mc
|
||||
)
|
||||
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
MergeItemsMsg lmsg ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
let
|
||||
result =
|
||||
Comp.ItemMerge.update lmsg svm.mergeModel
|
||||
|
||||
nextView =
|
||||
if result.done then
|
||||
SelectView { svm | action = NoneAction }
|
||||
|
||||
else
|
||||
SelectView { svm | mergeModel = result.model }
|
||||
in
|
||||
noSub
|
||||
( { model | viewMode = nextView }
|
||||
, Cmd.map MergeItemsMsg result.cmd
|
||||
)
|
||||
|
||||
_ ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
EditMenuMsg lmsg ->
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
|
@ -10,6 +10,7 @@ module Page.Home.View2 exposing (viewContent, viewSidebar)
|
||||
import Comp.Basic as B
|
||||
import Comp.ConfirmModal
|
||||
import Comp.ItemCardList
|
||||
import Comp.ItemMerge
|
||||
import Comp.MenuBar as MB
|
||||
import Comp.PowerSearchInput
|
||||
import Comp.SearchMenu
|
||||
@ -50,7 +51,11 @@ viewContent texts flags settings model =
|
||||
]
|
||||
(searchStats texts flags settings model
|
||||
++ itemsBar texts flags settings model
|
||||
++ itemCardList texts flags settings model
|
||||
++ [ div [ class "relative" ]
|
||||
(itemMergeView texts settings model
|
||||
++ itemCardList texts flags settings model
|
||||
)
|
||||
]
|
||||
++ confirmModal texts model
|
||||
)
|
||||
|
||||
@ -59,6 +64,27 @@ viewContent texts flags settings model =
|
||||
--- Helpers
|
||||
|
||||
|
||||
itemMergeView : Texts -> UiSettings -> Model -> List (Html Msg)
|
||||
itemMergeView texts settings model =
|
||||
case model.viewMode of
|
||||
SelectView svm ->
|
||||
case svm.action of
|
||||
MergeSelected ->
|
||||
[ div
|
||||
[ class S.dimmerMerge
|
||||
]
|
||||
[ Html.map MergeItemsMsg
|
||||
(Comp.ItemMerge.view texts.itemMerge settings svm.mergeModel)
|
||||
]
|
||||
]
|
||||
|
||||
_ ->
|
||||
[]
|
||||
|
||||
_ ->
|
||||
[]
|
||||
|
||||
|
||||
confirmModal : Texts -> Model -> List (Html Msg)
|
||||
confirmModal texts model =
|
||||
let
|
||||
@ -251,6 +277,7 @@ editMenuBar texts model svm =
|
||||
, inputClass =
|
||||
[ ( btnStyle, True )
|
||||
, ( "bg-gray-200 dark:bg-bluegray-600", svm.action == EditSelected )
|
||||
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
|
||||
]
|
||||
}
|
||||
, MB.CustomButton
|
||||
@ -261,6 +288,7 @@ editMenuBar texts model svm =
|
||||
, inputClass =
|
||||
[ ( btnStyle, True )
|
||||
, ( "bg-gray-200 dark:bg-bluegray-600", svm.action == ReprocessSelected )
|
||||
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
|
||||
]
|
||||
}
|
||||
, MB.CustomButton
|
||||
@ -285,6 +313,17 @@ editMenuBar texts model svm =
|
||||
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Normal )
|
||||
]
|
||||
}
|
||||
, MB.CustomButton
|
||||
{ tagger = MergeSelectedItems
|
||||
, label = ""
|
||||
, icon = Just "fa fa-less-than"
|
||||
, title = texts.mergeItemsTitle selectCount
|
||||
, inputClass =
|
||||
[ ( btnStyle, True )
|
||||
, ( "bg-gray-200 dark:bg-bluegray-600", svm.action == MergeSelected )
|
||||
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
|
||||
]
|
||||
}
|
||||
]
|
||||
, end =
|
||||
[ MB.CustomButton
|
||||
|
Reference in New Issue
Block a user