Integrate item merge dialog into home page

This commit is contained in:
eikek
2021-08-15 14:18:33 +02:00
parent 5782166273
commit 22d331f082
9 changed files with 777 additions and 3 deletions

View File

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

View File

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

View File

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